diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 99ecebd9bf..7d30ce8063 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,83 +1,47 @@ name: ci on: + pull_request: push: branches: - master - pull_request: - types: - - opened - - reopened - - synchronize jobs: - linux-tests: - name: linux tests - runs-on: ubuntu-18.04 + tests: + name: tests + strategy: + matrix: + os: [ubuntu-18.04, macos-latest, windows-2019] + channel: [beta, nightly] + fail-fast: false + runs-on: ${{ matrix.os }} env: - DISPLAY: ":99" ATOM_GITHUB_BABEL_ENV: coverage MOCHA_TIMEOUT: 60000 UNTIL_TIMEOUT: 30000 steps: - uses: actions/checkout@v1 - name: install Atom - shell: bash - run: | - curl -s -L https://atom.io/download/deb?channel=nightly \ - -H 'Accept: application/octet-stream' \ - -o /tmp/atom-amd64.deb - /sbin/start-stop-daemon --start --quiet \ - --pidfile /tmp/custom_xvfb_99.pid \ - --make-pidfile --background \ - --exec /usr/bin/Xvfb \ - -- :99 -ac -screen 0 1280x1024x16 - sudo apt-get update - sudo apt-get install -yyq libgconf-2-4 build-essential git libsecret-1-dev gvfs-bin - dpkg-deb -x /tmp/atom-amd64.deb /tmp/atom - - name: install dependencies - shell: bash - run: /tmp/atom/usr/share/atom-nightly/resources/app/apm/bin/apm ci - - name: run tests - shell: bash - run: /tmp/atom/usr/bin/atom-nightly --test test/ - - name: report code coverage - shell: bash - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - SYSTEM_PULLREQUEST_PULLREQUESTNUMBER: ${{ github.event.number }} - SYSTEM_PULLREQUEST_SOURCEBRANCH: ${{ github.head_ref }} - BUILD_SOURCEBRANCH: ${{ github.event.ref }} - run: | - npm run report:coverage - bash <(curl -s https://codecov.io/bash) \ - -n "Linux" \ - -P "${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER:-}" \ - -B "${SYSTEM_PULLREQUEST_SOURCEBRANCH:-${BUILD_SOURCEBRANCH}}" - if: success() || failure() + uses: UziTech/action-setup-atom@v1 + with: + channel: ${{ matrix.channel }} - macos-tests: - name: macos tests - runs-on: macos-10.14 - env: - ATOM_GITHUB_BABEL_ENV: coverage - MOCHA_TIMEOUT: 60000 - UNTIL_TIMEOUT: 30000 - steps: - - uses: actions/checkout@v1 - - name: install Atom - shell: bash - run: | - curl -s -L https://atom.io/download/mac?channel=nightly \ - -H 'Accept: application/octet-stream' \ - -o /tmp/atom.zip - sudo unzip -q /tmp/atom.zip -d /tmp/atom - name: install dependencies + run: apm ci + + - name: configure git shell: bash run: | - '/tmp/atom/Atom Nightly.app/Contents/Resources/app/apm/bin/apm' ci - - name: run tests - shell: bash - run: | - '/tmp/atom/Atom Nightly.app/Contents/Resources/app/atom.sh' --test test/ + git config --global user.name Hubot + git config --global user.email hubot@github.com + + - name: Run the tests + if: ${{ !contains(matrix.os, 'windows') }} + run: atom --test test + + - name: Run the tests on Windows + if: ${{ contains(matrix.os, 'windows') }} + continue-on-error: true # due to https://github.com/atom/github/pull/2459#issuecomment-624725972 + run: atom --test test + - name: report code coverage shell: bash env: @@ -85,68 +49,44 @@ jobs: SYSTEM_PULLREQUEST_PULLREQUESTNUMBER: ${{ github.event.number }} SYSTEM_PULLREQUEST_SOURCEBRANCH: ${{ github.head_ref }} BUILD_SOURCEBRANCH: ${{ github.event.ref }} + OS_NAME: ${{ matrix.os }} run: | npm run report:coverage + COVERAGE_NAME=$([[ "${OS_NAME}" == macos* ]] && echo "macOS" || echo "Linux") bash <(curl -s https://codecov.io/bash) \ - -n "macOS" \ + -n "${COVERAGE_NAME}" \ -P "${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER:-}" \ -B "${SYSTEM_PULLREQUEST_SOURCEBRANCH:-${BUILD_SOURCEBRANCH}}" - if: success() || failure() - + if: | + !contains(matrix.os, 'windows') && + (success() || failure()) lint: name: lint runs-on: ubuntu-18.04 - env: - DISPLAY: ":99" steps: - uses: actions/checkout@v1 - name: install Atom - shell: bash - run: | - curl -s -L https://atom.io/download/deb?channel=nightly \ - -H 'Accept: application/octet-stream' \ - -o /tmp/atom-amd64.deb - /sbin/start-stop-daemon --start --quiet \ - --pidfile /tmp/custom_xvfb_99.pid \ - --make-pidfile --background \ - --exec /usr/bin/Xvfb \ - -- :99 -ac -screen 0 1280x1024x16 - sudo apt-get update - sudo apt-get install -yyq libgconf-2-4 build-essential git libsecret-1-dev gvfs-bin - dpkg-deb -x /tmp/atom-amd64.deb /tmp/atom + uses: UziTech/action-setup-atom@v1 + with: + channel: nightly - name: install dependencies - shell: bash - run: /tmp/atom/usr/share/atom-nightly/resources/app/apm/bin/apm ci + run: apm ci - name: lint - shell: bash run: npm run lint snapshot-tests: name: snapshot tests runs-on: ubuntu-18.04 env: - DISPLAY: ":99" ATOM_GITHUB_BABEL_ENV: coverage ATOM_GITHUB_TEST_SUITE: snapshot steps: - uses: actions/checkout@v1 - name: install Atom - shell: bash - run: | - curl -s -L https://atom.io/download/deb?channel=nightly \ - -H 'Accept: application/octet-stream' \ - -o /tmp/atom-amd64.deb - /sbin/start-stop-daemon --start --quiet \ - --pidfile /tmp/custom_xvfb_99.pid \ - --make-pidfile --background \ - --exec /usr/bin/Xvfb \ - -- :99 -ac -screen 0 1280x1024x16 - sudo apt-get update - sudo apt-get install -yyq libgconf-2-4 build-essential git libsecret-1-dev gvfs-bin - dpkg-deb -x /tmp/atom-amd64.deb /tmp/atom + uses: UziTech/action-setup-atom@v1 + with: + channel: nightly - name: install dependencies - shell: bash - run: /tmp/atom/usr/share/atom-nightly/resources/app/apm/bin/apm ci + run: apm ci - name: run snapshot tests - shell: bash - run: /tmp/atom/usr/bin/atom-nightly --test test/ + run: atom --test test/ diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 2bc88e7f31..42d963a11d 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -20,29 +20,31 @@ Do you want to ask a question? Are you looking for support? The Atom message boa ### Description -[Description of the issue] + ### Steps to Reproduce -1. [First Step] -2. [Second Step] -3. [and so on...] +1. +2. +3. **Expected behavior:** -[What did you expect to happen?] + **Actual behavior:** -[What actually happened instead?] + **Reproduces how often:** -[What percentage of the time does this happen?] + -### Versions +### Platform and Versions -You can get this information from copy and pasting the output of `atom --version` and `apm --version` from the command line. Also, please include the OS and what version of the OS you're running. +What OS and version of OS are you running? + +What version of Atom are you using? You can get this information from copy and pasting the output of `atom --version` and `apm --version` from the command line. ### Additional Information diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 7e2f5af7de..1be3b35bc2 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -3,7 +3,6 @@ ### Requirements * Filling out the template is required. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion. -* Suggestion: You can use checklists to keep track of progress for the sections on metrics, tests, documentation, and user research. ### Description of the Change @@ -13,70 +12,10 @@ We must be able to understand the design of your change from this description. I --> -### Screenshot/Gif +### Screenshot or Gif -### Alternate Designs - - - -### Benefits - - - -### Possible Drawbacks - - - ### Applicable Issues - - -### Metrics - - - -### Tests - - - -### Documentation - - - -### Release Notes - - - -### User Experience Research (Optional) - - - + diff --git a/README.md b/README.md index e43d03aff3..d7d7d2b5ce 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# Atom GitHub Package +##### Atom and all repositories under Atom will be archived on December 15, 2022. Learn more in our [official announcement](https://github.blog/2022-06-08-sunsetting-atom/) + # Atom GitHub Package | Build | Code Coverage | |-------|---------------| diff --git a/actions/auto-sprint/package-lock.json b/actions/auto-sprint/package-lock.json index 49fe765296..1c2ecb1028 100644 --- a/actions/auto-sprint/package-lock.json +++ b/actions/auto-sprint/package-lock.json @@ -491,9 +491,9 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "npm-run-path": { "version": "2.0.2", diff --git a/actions/schema-up/package-lock.json b/actions/schema-up/package-lock.json index bf5f715749..7b29ad2527 100644 --- a/actions/schema-up/package-lock.json +++ b/actions/schema-up/package-lock.json @@ -1794,9 +1794,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.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash.get": { "version": "4.4.2", @@ -1962,9 +1962,9 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-int64": { "version": "0.4.0", diff --git a/actions/schema-up/package.json b/actions/schema-up/package.json index 6e9dc98944..1fed2b084b 100644 --- a/actions/schema-up/package.json +++ b/actions/schema-up/package.json @@ -8,7 +8,7 @@ "dependencies": { "actions-toolkit": "2.2.0", "graphql": "14.5.8", - "node-fetch": "2.6.0", + "node-fetch": "2.6.1", "relay-compiler": "7.1.0" } } diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000000..714e565367 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,46 @@ +# Installation + +The GitHub package is bundled as a core package within Atom. This means that you don't have to install it separately - download Atom from [the website](https://atom.io) and it's included automatically. This carries a number of benefits. For example, because it's included in the [v8 snapshot](https://flight-manual.atom.io/behind-atom/sections/how-atom-uses-chromium-snapshots/) produced during each Atom build, it boots extremely quickly and pays very little penalty for things like requiring and bootstrapping React. + +However! The downside of this is that it can take a while for new work in this repository to make its way into your editor. Here's the full lifecycle of a change: + +1. First, the change is done via a pull request to this repository. When it's ready and has full, passing test coverage, it's merged into the default branch. +2. Periodically, we tag and publish batches of changes as new versions to [apm](https://atom.io/packages/github). Typically, this is done after a major bugfix or new feature is merged, or after merging a security-related dependency update. +3. Next, we send a pull request to [the core atom repository](https://github.com/atom/atom) to bump the versions of the GitHub package dependency in its `package.json` and `package-lock.json` files. When that pull request has a green build, we merge it. +4. The next night that the [Atom core nightly build](https://github.visualstudio.com/Atom/_build?definitionId=1) is successful, the new package version is released to the [Atom nightly channel](https://atom.io/nightly). +5. The core Atom team regularly "rolls the railcars" to tag new release. The first time that this happens after the GitHub package dependency bump is merged, it will be included on the next release of the [Atom beta channel](https://atom.io/beta). +6. The next time that the core Atom team "rolls the railcars" after that, the new GitHub package version is shipped to [Atom stable](https://atom.io/). :rocket: :tada: + +Depending on the timing, all of this can take a month and a half to two months, so when you see a pull request get merged and your issue closed, you might think you're out of luck and you'll just have to wait... but, you have a few other options here. + +## Use a non-stable Atom channel + +Instead of living at the end of the line way out on stable, you could switch to the beta or nightly channels of Atom releases. + +* The [beta channel](https://atom.io/beta) updates a little more frequently than the stable channel, but it's about a month ahead. This means that you'll have access to GitHub package work as soon as the next time the railcars are rolled (step 5 up above) - about a month sooner than you would if you stayed on stable. +* The [nightly channel](https://atom.io/nightly) is updated about daily with the latest and greatest Atom build, including everything that was merged into Atom core up to that point. If you use the nightly channel, you'll have access to GitHub package work as soon as it's published in a release and merged into Atom core (step 4 up above). + +### Benefits + +By using a "fresher" Atom channel, you'll have access to features and bug-fixes much sooner than you will if you use a stable build. Despite the names, our beta and nightly channels are pretty stable... I've (@smashwilson) personally been using a nightly build for my day to day editing for years now. + +What's more, if you _do_ experience a serious regression - with the GitHub package or any other core behavior - you can: + +* File an issue to let us know, then: +* Switch to the next channel (from nightly to beta, or beta to stable). + +That gives us a chance to respond to the issue, determine if it's serious enough to warrant delaying a release for if we can't fix it in time, and could prevent an order of magnitude more users from encountering the same problem... _and_ gives you a route to _immediately_ revert to an Atom version that unblocks you! + +## Live on the edge + +If you're using nightly builds, you can have access to fixes and improvements (often) within a few weeks to a month. But, it can take me some time to tag releases and get them into Atom core sometimes. If you're really can't wait, and you want to live on the very, very edge, you can run the absolute latest code as soon as it's merged. + +1. First, install Atom's build requirements. You don't have to clone, bootstrap and build all of Atom to do this - just install the packages and dependencies listed in the "Building" section on [the flight manual documentation](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/) for your operating system. +2. Second, run the following command at your terminal or command line prompt: + ``` + apm install atom/github + ``` + +Now you'll be running everything as soon as it's merged... and `apm` will automatically keep it that way, as we merge more work! + +:warning: Be aware! Using this method _will_ have noticeably degrade Atom's startup time. It's especially impactful the first time you launch Atom after each update, because Atom will be transpiling all of the package source. After that, you'll essentially be missing out on the benefits of having it included in the v8 snapshot. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000000..ea3ce1e004 --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,27 @@ +# Troubleshooting guide + +So, you're having a problem with this package, and you're not sure what's going on. Here are a few tools that you can use to collect more information on your problem to help us help you faster. + +The more debugging information you can provide, the easier it will be for us to figure out what's going on, even if your problem is triggered by some configuration or local state on your machine... and the more likely it will be that we'll be able to help you out. + +## Atom debugging guide + +Be sure to look over the [Atom debugging guide](https://flight-manual.atom.io/hacking-atom/sections/debugging/), as everything written there also applies here. + +Take special note of the [section on the developer tools](https://flight-manual.atom.io/hacking-atom/sections/debugging/#check-for-errors-in-the-developer-tools). Any time that the package "crashes" (git and GitHub status bar buttons vanish, tabs go blank, commands are no longer present in the command palette) there's almost certainly a stack trace waiting for you in the developer tools. Copy and paste that into your issue within a triple-backtick code block and it will give us worlds more information about what's going on. For many problems, having a stack trace to work with almost single-handedly makes the difference between us not being able to do anything and us being able to land a fix. + +## Git diagnostics + +If your problem is related to specific git operations or interactions - like problems committing, pushing, or fetching - then it can be very helpful to collect git command diagnostics. + +To enable git diagnostic collection: + +* Open your [Settings tab](https://flight-manual.atom.io/getting-started/sections/atom-basics/#settings-and-preferences). +* Navigate to the "Packages" section on the lefthand side. +* Search for "github" in the search box. +* Click "settings" on the "github" package result. +* Check the checkbox labelled "Git diagnostics". + +Now, reproduce your problem. Every git command that's executed by this package will be logged to the developer console, including input, stdout and stderr, and exit codes, with full verbose tracing. Expand the collapsed sections corresponding to the relevant commands and copy-and-paste the results in your issue. + +:warning: While the git logging will elide things like passphrases for you, you may wish to manually remove references to usernames, paths, or repository URLs if you wish, for privacy reasons. diff --git a/graphql/schema.graphql b/graphql/schema.graphql index 5c0e3e29f9..b91ce825c2 100644 --- a/graphql/schema.graphql +++ b/graphql/schema.graphql @@ -42,21 +42,6 @@ type AcceptTopicSuggestionPayload { topic: Topic } -"""The possible capabilities for action executions setting.""" -enum ActionExecutionCapabilitySetting { - """All action executions are disabled.""" - DISABLED - - """All action executions are enabled.""" - ALL_ACTIONS - - """Only actions defined within the repo are allowed.""" - LOCAL_ACTIONS_ONLY - - """Organization administrators action execution capabilities.""" - NO_POLICY -} - """ Represents an object which can take actions on GitHub. Typically a User or Bot. """ @@ -313,8 +298,11 @@ input AddPullRequestReviewThreadInput { """Body of the thread's first comment.""" body: String! + """The node ID of the pull request reviewing""" + pullRequestId: ID + """The Node ID of the review to modify.""" - pullRequestReviewId: ID! + pullRequestReviewId: ID """ The line of the blob to which the thread refers. The end of the line range for multi-line comments. @@ -540,6 +528,48 @@ enum AuditLogOrderField { CREATED_AT } +""" +Represents a 'automatic_base_change_failed' event on a given pull request. +""" +type AutomaticBaseChangeFailedEvent implements Node { + """Identifies the actor who performed the event.""" + actor: Actor + + """Identifies the date and time when the object was created.""" + createdAt: DateTime! + id: ID! + + """The new base for this PR""" + newBase: String! + + """The old base for this PR""" + oldBase: String! + + """PullRequest referenced by event.""" + pullRequest: PullRequest! +} + +""" +Represents a 'automatic_base_change_succeeded' event on a given pull request. +""" +type AutomaticBaseChangeSucceededEvent implements Node { + """Identifies the actor who performed the event.""" + actor: Actor + + """Identifies the date and time when the object was created.""" + createdAt: DateTime! + id: ID! + + """The new base for this PR""" + newBase: String! + + """The old base for this PR""" + oldBase: String! + + """PullRequest referenced by event.""" + pullRequest: PullRequest! +} + """ Represents a 'base_ref_changed' event on a given issue or pull request. """ @@ -550,9 +580,40 @@ type BaseRefChangedEvent implements Node { """Identifies the date and time when the object was created.""" createdAt: DateTime! + """ + Identifies the name of the base ref for the pull request after it was changed. + """ + currentRefName: String! + """Identifies the primary key from the database.""" databaseId: Int id: ID! + + """ + Identifies the name of the base ref for the pull request before it was changed. + """ + previousRefName: String! + + """PullRequest referenced by event.""" + pullRequest: PullRequest! +} + +"""Represents a 'base_ref_deleted' event on a given pull request.""" +type BaseRefDeletedEvent implements Node { + """Identifies the actor who performed the event.""" + actor: Actor + + """ + Identifies the name of the Ref associated with the `base_ref_deleted` event. + """ + baseRefName: String + + """Identifies the date and time when the object was created.""" + createdAt: DateTime! + id: ID! + + """PullRequest referenced by event.""" + pullRequest: PullRequest } """Represents a 'base_ref_force_pushed' event on a given pull request.""" @@ -622,8 +683,10 @@ type Blob implements Node & GitObject { commitUrl: URI! id: ID! - """Indicates whether the Blob is binary or text""" - isBinary: Boolean! + """ + Indicates whether the Blob is binary or text. Returns null if unable to determine the encoding. + """ + isBinary: Boolean """Indicates whether the contents is truncated""" isTruncated: Boolean! @@ -668,6 +731,12 @@ type Bot implements Node & Actor & UniformResourceLocatable { """A branch protection rule.""" type BranchProtectionRule implements Node { + """Can this branch be deleted.""" + allowsDeletions: Boolean! + + """Are force pushes allowed on this branch.""" + allowsForcePushes: Boolean! + """ A list of conflicts matching branches protection rule and other branch protection rules """ @@ -762,6 +831,9 @@ type BranchProtectionRule implements Node { """Are commits required to be signed.""" requiresCommitSignatures: Boolean! + """Are merge commits prohibited from being pushed to this branch.""" + requiresLinearHistory: Boolean! + """Are status checks required to update matching branches.""" requiresStatusChecks: Boolean! @@ -1052,6 +1124,9 @@ enum CheckConclusionState { """The check suite or run was skipped.""" SKIPPED + """The check suite or run has failed at startup.""" + STARTUP_FAILURE + """ The check suite or run was marked stale by GitHub. Only GitHub can use this conclusion. """ @@ -1445,6 +1520,12 @@ input CloneTemplateRepositoryInput { """Indicates the repository's visibility level.""" visibility: RepositoryVisibility! + """ + Whether to copy all branches from the template to the new repository. Defaults + to copying only the default branch of the template. + """ + includeAllBranches: Boolean = false + """A unique identifier for the client performing the mutation.""" clientMutationId: String } @@ -1633,6 +1714,9 @@ enum CommentAuthorAssociation { """Author is the owner of the repository.""" OWNER + """Author is a placeholder for an unclaimed user.""" + MANNEQUIN + """Author has been invited to collaborate on the repository.""" COLLABORATOR @@ -1685,6 +1769,9 @@ type CommentDeletedEvent implements Node { """Identifies the primary key from the database.""" databaseId: Int + + """The user who authored the deleted comment.""" + deletedCommentAuthor: Actor id: ID! } @@ -1725,6 +1812,27 @@ type Commit implements Node & GitObject & Subscribable & UniformResourceLocatabl """The datetime when this commit was authored.""" authoredDate: DateTime! + """ + The list of authors for this commit based on the git author and the Co-authored-by + message trailer. The git author will always be first. + + """ + authors( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): GitActorConnection! + """Fetches `git blame` information.""" blame( """The file whose Git blame information you want.""" @@ -1812,6 +1920,12 @@ type Commit implements Node & GitObject & Subscribable & UniformResourceLocatabl last: Int ): DeploymentConnection + """The tree entry representing the file located at the given path.""" + file( + """The path for the file""" + path: String! + ): TreeEntry + """ The linear commit history starting from (and including) this commit, in the same order as `git log`. """ @@ -2370,26 +2484,10 @@ type ContributionCalendarWeek { """Ordering options for contribution connections.""" input ContributionOrder { - """ - The field by which to order contributions. - - **Upcoming Change on 2019-10-01 UTC** - **Description:** `field` will be removed. Only one order field is supported. - **Reason:** `field` will be removed. - - """ - field: ContributionOrderField - """The ordering direction.""" direction: OrderDirection! } -"""Properties by which contribution connections can be ordered.""" -enum ContributionOrderField { - """Order contributions by when they were made.""" - OCCURRED_AT -} - """ A contributions collection aggregates contributions such as opened issues and commits created by a user. """ @@ -2488,7 +2586,7 @@ type ContributionsCollection { excludePopular: Boolean = false """Ordering options for contributions returned from the connection.""" - orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + orderBy: ContributionOrder = {direction: DESC} ): CreatedIssueContributionConnection! """Issue contributions made by the user, grouped by repository.""" @@ -2568,7 +2666,7 @@ type ContributionsCollection { excludePopular: Boolean = false """Ordering options for contributions returned from the connection.""" - orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + orderBy: ContributionOrder = {direction: DESC} ): CreatedPullRequestContributionConnection! """Pull request contributions made by the user, grouped by repository.""" @@ -2602,7 +2700,7 @@ type ContributionsCollection { last: Int """Ordering options for contributions returned from the connection.""" - orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + orderBy: ContributionOrder = {direction: DESC} ): CreatedPullRequestReviewContributionConnection! """ @@ -2635,7 +2733,7 @@ type ContributionsCollection { excludeFirst: Boolean = false """Ordering options for contributions returned from the connection.""" - orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + orderBy: ContributionOrder = {direction: DESC} ): CreatedRepositoryContributionConnection! """ @@ -2791,6 +2889,15 @@ input CreateBranchProtectionRuleInput { """Are commits required to be signed.""" requiresCommitSignatures: Boolean + """Are merge commits prohibited from being pushed to this branch.""" + requiresLinearHistory: Boolean + + """Are force pushes allowed on this branch.""" + allowsForcePushes: Boolean + + """Can this branch be deleted.""" + allowsDeletions: Boolean + """Can admins overwrite branch protection.""" isAdminEnforced: Boolean @@ -3296,6 +3403,11 @@ input CreateIssueInput { """An array of Node IDs for projects associated with this issue.""" projectIds: [ID!] + """ + The name of an issue template in the repository, assigns labels and assignees from the template to the issue + """ + issueTemplate: String + """A unique identifier for the client performing the mutation.""" clientMutationId: String } @@ -4057,6 +4169,9 @@ enum DeploymentState { """The deployment is in progress.""" IN_PROGRESS + + """The deployment is waiting.""" + WAITING } """Describes the status of a given deployment attempt.""" @@ -4632,9 +4747,6 @@ type EnterpriseMemberEdge { """A cursor for use in pagination.""" cursor: String! - """Whether the user does not have a license for the enterprise.""" - isUnlicensed: Boolean! - """The item at the end of the edge.""" node: EnterpriseMember } @@ -4737,11 +4849,6 @@ type EnterpriseOutsideCollaboratorEdge { """A cursor for use in pagination.""" cursor: String! - """ - Whether the outside collaborator does not have a license for the enterprise. - """ - isUnlicensed: Boolean! - """The item at the end of the edge.""" node: User @@ -4768,28 +4875,6 @@ type EnterpriseOutsideCollaboratorEdge { """Enterprise information only visible to enterprise owners.""" type EnterpriseOwnerInfo { - """ - A list of enterprise organizations configured with the provided action execution capabilities setting value. - """ - actionExecutionCapabilitySettingOrganizations( - """Returns the elements in the list that come after the specified cursor.""" - after: String - - """ - Returns the elements in the list that come before the specified cursor. - """ - before: String - - """Returns the first _n_ elements from the list.""" - first: Int - - """Returns the last _n_ elements from the list.""" - last: Int - - """Ordering options for organizations with this setting.""" - orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} - ): OrganizationConnection! - """A list of all of the administrators for this enterprise.""" admins( """The search string to look for.""" @@ -5285,16 +5370,16 @@ type EnterpriseOwnerInfo { ): EnterpriseAdministratorInvitationConnection! """ - A list of pending collaborators across the repositories in the enterprise. + A list of pending collaborator invitations across the repositories in the enterprise. """ - pendingCollaborators( + pendingCollaboratorInvitations( """The search string to look for.""" query: String """ Ordering options for pending repository collaborator invitations returned from the connection. """ - orderBy: RepositoryInvitationOrder = {field: INVITEE_LOGIN, direction: ASC} + orderBy: RepositoryInvitationOrder = {field: CREATED_AT, direction: DESC} """Returns the elements in the list that come after the specified cursor.""" after: String @@ -5309,7 +5394,7 @@ type EnterpriseOwnerInfo { """Returns the last _n_ elements from the list.""" last: Int - ): EnterprisePendingCollaboratorConnection! + ): RepositoryInvitationConnection! """ A list of pending member invitations for organizations in the enterprise. @@ -5474,11 +5559,6 @@ type EnterprisePendingCollaboratorEdge { """A cursor for use in pagination.""" cursor: String! - """ - Whether the invited collaborator does not have a license for the enterprise. - """ - isUnlicensed: Boolean! - """The item at the end of the edge.""" node: User @@ -5526,9 +5606,6 @@ type EnterprisePendingMemberInvitationEdge { """A cursor for use in pagination.""" cursor: String! - """Whether the invitation has a license for the enterprise.""" - isUnlicensed: Boolean! - """The item at the end of the edge.""" node: OrganizationInvitation } @@ -6081,16 +6158,55 @@ type ExternalIdentityEdge { """SAML attributes for the External Identity""" type ExternalIdentitySamlAttributes { + """The emails associated with the SAML identity""" + emails: [UserEmailMetadata!] + + """Family name of the SAML identity""" + familyName: String + + """Given name of the SAML identity""" + givenName: String + + """The groups linked to this identity in IDP""" + groups: [String!] + """The NameID of the SAML identity""" nameId: String + + """The userName of the SAML identity""" + username: String } """SCIM attributes for the External Identity""" type ExternalIdentityScimAttributes { + """The emails associated with the SCIM identity""" + emails: [UserEmailMetadata!] + + """Family name of the SCIM identity""" + familyName: String + + """Given name of the SCIM identity""" + givenName: String + + """The groups linked to this identity in IDP""" + groups: [String!] + """The userName of the SCIM identity""" username: String } +"""The possible viewed states of a file .""" +enum FileViewedState { + """The file has new changes since last viewed.""" + DISMISSED + + """The file has been marked as viewed.""" + VIEWED + + """The file has not been marked as viewed.""" + UNVIEWED +} + """The connection type for User.""" type FollowerConnection { """A list of edges.""" @@ -6263,6 +6379,12 @@ type Gist implements Node & Starrable & UniformResourceLocatable { """The HTML path to this resource.""" resourcePath: URI! + """ + Returns a count of how many stargazers there are on this object + + """ + stargazerCount: Int! + """A list of users who have starred this starrable.""" stargazers( """Returns the elements in the list that come after the specified cursor.""" @@ -6520,6 +6642,30 @@ type GitActor { user: User } +"""The connection type for GitActor.""" +type GitActorConnection { + """A list of edges.""" + edges: [GitActorEdge] + + """A list of nodes.""" + nodes: [GitActor] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type GitActorEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: GitActor +} + """Represents information about the GitHub instance.""" type GitHubMetadata { """Returns a String that's a SHA of `github-services`""" @@ -6923,9 +7069,15 @@ type Issue implements Node & Assignable & Closable & Comment & Updatable & Updat """The body rendered to HTML.""" bodyHTML: HTML! + """The http path for this issue body""" + bodyResourcePath: URI! + """Identifies the body of the issue rendered to text.""" bodyText: String! + """The http URL for this issue body""" + bodyUrl: URI! + """ `true` if the object is closed (definition of closed may depend on type) """ @@ -6936,6 +7088,9 @@ type Issue implements Node & Assignable & Closable & Comment & Updatable & Updat """A list of comments associated with the Issue.""" comments( + """Ordering options for issue comments returned from the connection.""" + orderBy: IssueCommentOrder + """Returns the elements in the list that come after the specified cursor.""" after: String @@ -6975,6 +7130,9 @@ type Issue implements Node & Assignable & Closable & Comment & Updatable & Updat """ includesCreatedEdit: Boolean! + """Is this issue read by the viewer""" + isReadByViewer: Boolean + """A list of labels associated with the object.""" labels( """Ordering options for labels returned from the connection.""" @@ -7312,6 +7470,21 @@ type IssueCommentEdge { node: IssueComment } +"""Ways in which lists of issue comments can be ordered upon return.""" +input IssueCommentOrder { + """The field in which to order issue comments by.""" + field: IssueCommentOrderField! + + """The direction in which to order issue comments by the specified field.""" + direction: OrderDirection! +} + +"""Properties by which issue comment connections can be ordered.""" +enum IssueCommentOrderField { + """Order issue comments by update time""" + UPDATED_AT +} + """The connection type for Issue.""" type IssueConnection { """A list of edges.""" @@ -7346,7 +7519,7 @@ type IssueContributionsByRepository { last: Int """Ordering options for contributions returned from the connection.""" - orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + orderBy: ContributionOrder = {direction: DESC} ): CreatedIssueContributionConnection! """The repository in which the issues were opened.""" @@ -7429,6 +7602,21 @@ enum IssueState { CLOSED } +"""A repository issue template.""" +type IssueTemplate { + """The template purpose.""" + about: String + + """The suggested issue body.""" + body: String + + """The template name.""" + name: String! + + """The suggested issue title.""" + title: String +} + """The connection type for IssueTimelineItem.""" type IssueTimelineConnection { """A list of edges.""" @@ -7963,10 +8151,10 @@ type LockedEvent implements Node { """Autogenerated input type of LockLockable""" input LockLockableInput { - """ID of the issue or pull request to be locked.""" + """ID of the item to be locked.""" lockableId: ID! - """A reason for why the issue or pull request will be locked.""" + """A reason for why the item will be locked.""" lockReason: LockReason """A unique identifier for the client performing the mutation.""" @@ -8046,9 +8234,22 @@ type MarkedAsDuplicateEvent implements Node { """Identifies the actor who performed the event.""" actor: Actor + """ + The authoritative issue or pull request which has been duplicated by another. + """ + canonical: IssueOrPullRequest + """Identifies the date and time when the object was created.""" createdAt: DateTime! + + """ + The issue or pull request which has been marked as a duplicate of another. + """ + duplicate: IssueOrPullRequest id: ID! + + """Canonical and duplicate belong to different repositories.""" + isCrossRepository: Boolean! } """A public description of a Marketplace category.""" @@ -8120,6 +8321,9 @@ type MarketplaceListing implements Node { """Does this listing have a terms of service link?""" hasTermsOfService: Boolean! + """Whether the creator of the app is a verified org""" + hasVerifiedOwner: Boolean! + """A technical description of how this app works with GitHub.""" howItWorks: String @@ -8328,6 +8532,27 @@ type MarketplaceListingEdge { node: MarketplaceListing } +"""Autogenerated input type of MarkFileAsViewed""" +input MarkFileAsViewedInput { + """The Node ID of the pull request.""" + pullRequestId: ID! + + """The path of the file to mark as viewed""" + path: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of MarkFileAsViewed""" +type MarkFileAsViewedPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """The updated pull request.""" + pullRequest: PullRequest +} + """Autogenerated input type of MarkPullRequestReadyForReview""" input MarkPullRequestReadyForReviewInput { """ID of the pull request to be marked as ready for review.""" @@ -8616,6 +8841,9 @@ input MergeBranchInput { """ commitMessage: String + """The email address to associate with this commit.""" + authorEmail: String + """A unique identifier for the client performing the mutation.""" clientMutationId: String } @@ -8680,6 +8908,9 @@ input MergePullRequestInput { """The merge method to use. If omitted, defaults to 'MERGE'""" mergeMethod: PullRequestMergeMethod = MERGE + """The email address to associate with this merge.""" + authorEmail: String + """A unique identifier for the client performing the mutation.""" clientMutationId: String } @@ -8719,9 +8950,6 @@ type Milestone implements Node & Closable & UniformResourceLocatable { dueOn: DateTime id: ID! - """Just for debugging on review-lab""" - issuePrioritiesDebug: String! - """A list of issues associated with the milestone.""" issues( """Ordering options for issues returned from the connection.""" @@ -8754,6 +8982,9 @@ type Milestone implements Node & Closable & UniformResourceLocatable { """Identifies the number of the milestone.""" number: Int! + """Indentifies the percentage complete for the milestone""" + progressPercentage: Float! + """A list of pull requests associated with the milestone.""" pullRequests( """A list of states to filter the pull requests by.""" @@ -9148,6 +9379,9 @@ type Mutation { """Lock a lockable object""" lockLockable(input: LockLockableInput!): LockLockablePayload + """Mark a pull request file as viewed""" + markFileAsViewed(input: MarkFileAsViewedInput!): MarkFileAsViewedPayload + """Marks a pull request ready for review.""" markPullRequestReadyForReview(input: MarkPullRequestReadyForReviewInput!): MarkPullRequestReadyForReviewPayload @@ -9211,6 +9445,17 @@ type Mutation { """Creates or updates the identity provider for an enterprise.""" setEnterpriseIdentityProvider(input: SetEnterpriseIdentityProviderInput!): SetEnterpriseIdentityProviderPayload + """ + Set an organization level interaction limit for an organization's public repositories. + """ + setOrganizationInteractionLimit(input: SetOrganizationInteractionLimitInput!): SetOrganizationInteractionLimitPayload + + """Sets an interaction limit setting for a repository.""" + setRepositoryInteractionLimit(input: SetRepositoryInteractionLimitInput!): SetRepositoryInteractionLimitPayload + + """Set a user level interaction limit for an user's public repositories.""" + setUserInteractionLimit(input: SetUserInteractionLimitInput!): SetUserInteractionLimitPayload + """Submits a pending pull request review.""" submitPullRequestReview(input: SubmitPullRequestReviewInput!): SubmitPullRequestReviewPayload @@ -9229,6 +9474,9 @@ type Mutation { """Unlock a lockable object""" unlockLockable(input: UnlockLockableInput!): UnlockLockablePayload + """Unmark a pull request file as viewed""" + unmarkFileAsViewed(input: UnmarkFileAsViewedInput!): UnmarkFileAsViewedPayload + """Unmark an issue as a duplicate of another issue.""" unmarkIssueAsDuplicate(input: UnmarkIssueAsDuplicateInput!): UnmarkIssueAsDuplicatePayload @@ -9247,9 +9495,6 @@ type Mutation { """Modifies the settings of an existing check suite""" updateCheckSuitePreferences(input: UpdateCheckSuitePreferencesInput!): UpdateCheckSuitePreferencesPayload - """Sets the action execution capability setting for an enterprise.""" - updateEnterpriseActionExecutionCapabilitySetting(input: UpdateEnterpriseActionExecutionCapabilitySettingInput!): UpdateEnterpriseActionExecutionCapabilitySettingPayload - """Updates the role of an enterprise administrator.""" updateEnterpriseAdministratorRole(input: UpdateEnterpriseAdministratorRoleInput!): UpdateEnterpriseAdministratorRolePayload @@ -9636,7 +9881,7 @@ enum OrgAddMemberAuditEntryPermission { """ An account on GitHub, with one or more owners, that has repositories, members and teams. """ -type Organization implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch & ProjectOwner & RepositoryOwner & UniformResourceLocatable & MemberStatusable & ProfileOwner & Sponsorable { +type Organization implements Node & Actor & PackageOwner & ProjectOwner & RepositoryOwner & UniformResourceLocatable & MemberStatusable & ProfileOwner & Sponsorable { """ Determine if this repository owner has any items that can be pinned to their profile. """ @@ -9688,27 +9933,23 @@ type Organization implements Node & Actor & RegistryPackageOwner & RegistryPacka """The organization's public email.""" email: String + + """True if this user/organization has a GitHub Sponsors listing.""" + hasSponsorsListing: Boolean! id: ID! - """Whether the organization has verified its profile email and website.""" - isVerified: Boolean! + """The interaction ability settings for this organization.""" + interactionAbility: RepositoryInteractionAbility """ - Showcases a selection of repositories and gists that the profile owner has - either curated or that have been selected automatically based on popularity. + The setting value for whether the organization has an IP allow list enabled. """ - itemShowcase: ProfileItemShowcase! - - """The organization's public profile location.""" - location: String - - """The organization's login name.""" - login: String! + ipAllowListEnabledSetting: IpAllowListEnabledSettingValue! """ - Get the status messages members of this entity have set that are either public or visible only to the organization. + The IP addresses that are allowed to access resources owned by the organization. """ - memberStatuses( + ipAllowListEntries( """Returns the elements in the list that come after the specified cursor.""" after: String @@ -9723,12 +9964,54 @@ type Organization implements Node & Actor & RegistryPackageOwner & RegistryPacka """Returns the last _n_ elements from the list.""" last: Int - """Ordering options for user statuses returned from the connection.""" - orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} - ): UserStatusConnection! + """Ordering options for IP allow list entries returned.""" + orderBy: IpAllowListEntryOrder = {field: ALLOW_LIST_VALUE, direction: ASC} + ): IpAllowListEntryConnection! - """A list of users who are members of this organization.""" - membersWithRole( + """True if the viewer is sponsored by this user/organization.""" + isSponsoringViewer: Boolean! + + """ + Whether the organization has verified its profile email and website, always false on Enterprise. + """ + isVerified: Boolean! + + """ + Showcases a selection of repositories and gists that the profile owner has + either curated or that have been selected automatically based on popularity. + """ + itemShowcase: ProfileItemShowcase! + + """The organization's public profile location.""" + location: String + + """The organization's login name.""" + login: String! + + """ + Get the status messages members of this entity have set that are either public or visible only to the organization. + """ + memberStatuses( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """Ordering options for user statuses returned from the connection.""" + orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} + ): UserStatusConnection! + + """A list of users who are members of this organization.""" + membersWithRole( """Returns the elements in the list that come after the specified cursor.""" after: String @@ -9756,6 +10039,35 @@ type Organization implements Node & Actor & RegistryPackageOwner & RegistryPacka """The billing email for the organization.""" organizationBillingEmail: String + """A list of packages under the owner.""" + packages( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """Find packages by their names.""" + names: [String] + + """Find packages in a repository by ID.""" + repositoryId: ID + + """Filter registry package by type.""" + packageType: PackageType + + """Ordering of the returned packages.""" + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + ): PackageConnection! + """A list of users who have been invited to join this organization.""" pendingMembers( """Returns the elements in the list that come after the specified cursor.""" @@ -9925,7 +10237,7 @@ type Organization implements Node & Actor & RegistryPackageOwner & RegistryPacka """The Organization's SAML identity providers""" samlIdentityProvider: OrganizationIdentityProvider - """The GitHub Sponsors listing for this user.""" + """The GitHub Sponsors listing for this user or organization.""" sponsorsListing: SponsorsListing """This object's sponsorships as the maintainer.""" @@ -10031,6 +10343,9 @@ type Organization implements Node & Actor & RegistryPackageOwner & RegistryPacka """The HTTP URL listing organization's teams""" teamsUrl: URI! + """The organization's Twitter username.""" + twitterUsername: String + """Identifies the date and time when the object was last updated.""" updatedAt: DateTime! @@ -10052,9 +10367,15 @@ type Organization implements Node & Actor & RegistryPackageOwner & RegistryPacka """Viewer can create teams on this organization.""" viewerCanCreateTeams: Boolean! + """Whether or not the viewer is able to sponsor this user/organization.""" + viewerCanSponsor: Boolean! + """Viewer is an active member of this organization.""" viewerIsAMember: Boolean! + """True if the viewer is sponsoring this user/organization.""" + viewerIsSponsoring: Boolean! + """The organization's public profile URL.""" websiteUrl: URI } @@ -11520,6 +11841,9 @@ enum OrgRemoveMemberAuditEntryReason { """User account has been deleted""" USER_ACCOUNT_DELETED + + """User was removed from organization during account recovery""" + TWO_FACTOR_ACCOUNT_RECOVERY } """Audit log entry for a org.remove_outside_collaborator event.""" @@ -12044,6 +12368,34 @@ enum OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility { All organization members are restricted from creating public repositories. """ PUBLIC + + """All organization members are allowed to create any repositories.""" + NONE + + """ + All organization members are restricted from creating private repositories. + """ + PRIVATE + + """ + All organization members are restricted from creating internal repositories. + """ + INTERNAL + + """ + All organization members are restricted from creating public or internal repositories. + """ + PUBLIC_INTERNAL + + """ + All organization members are restricted from creating private or internal repositories. + """ + PRIVATE_INTERNAL + + """ + All organization members are restricted from creating public or private repositories. + """ + PUBLIC_PRIVATE } """ @@ -12110,6 +12462,333 @@ type OrgUpdateMemberRepositoryInvitationPermissionAuditEntry implements Node & A userUrl: URI } +"""Information for an uploaded package.""" +type Package implements Node { + id: ID! + + """Find the latest version for the package.""" + latestVersion: PackageVersion + + """Identifies the name of the package.""" + name: String! + + """Identifies the type of the package.""" + packageType: PackageType! + + """The repository this package belongs to.""" + repository: Repository + + """Statistics about package activity.""" + statistics: PackageStatistics + + """Find package version by version string.""" + version( + """The package version.""" + version: String! + ): PackageVersion + + """list of versions for this package""" + versions( + """Ordering of the returned packages.""" + orderBy: PackageVersionOrder = {field: CREATED_AT, direction: DESC} + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageVersionConnection! +} + +"""The connection type for Package.""" +type PackageConnection { + """A list of edges.""" + edges: [PackageEdge] + + """A list of nodes.""" + nodes: [Package] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type PackageEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: Package +} + +"""A file in a package version.""" +type PackageFile implements Node { + id: ID! + + """MD5 hash of the file.""" + md5: String + + """Name of the file.""" + name: String! + + """The package version this file belongs to.""" + packageVersion: PackageVersion + + """SHA1 hash of the file.""" + sha1: String + + """SHA256 hash of the file.""" + sha256: String + + """Size of the file in bytes.""" + size: Int + + """Identifies the date and time when the object was last updated.""" + updatedAt: DateTime! + + """URL to download the asset.""" + url: URI +} + +"""The connection type for PackageFile.""" +type PackageFileConnection { + """A list of edges.""" + edges: [PackageFileEdge] + + """A list of nodes.""" + nodes: [PackageFile] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type PackageFileEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PackageFile +} + +"""Ways in which lists of package files can be ordered upon return.""" +input PackageFileOrder { + """The field in which to order package files by.""" + field: PackageFileOrderField + + """The direction in which to order package files by the specified field.""" + direction: OrderDirection +} + +"""Properties by which package file connections can be ordered.""" +enum PackageFileOrderField { + """Order package files by creation time""" + CREATED_AT +} + +"""Ways in which lists of packages can be ordered upon return.""" +input PackageOrder { + """The field in which to order packages by.""" + field: PackageOrderField + + """The direction in which to order packages by the specified field.""" + direction: OrderDirection +} + +"""Properties by which package connections can be ordered.""" +enum PackageOrderField { + """Order packages by creation time""" + CREATED_AT +} + +"""Represents an owner of a package.""" +interface PackageOwner { + id: ID! + + """A list of packages under the owner.""" + packages( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """Find packages by their names.""" + names: [String] + + """Find packages in a repository by ID.""" + repositoryId: ID + + """Filter registry package by type.""" + packageType: PackageType + + """Ordering of the returned packages.""" + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + ): PackageConnection! +} + +""" +Represents a object that contains package activity statistics such as downloads. +""" +type PackageStatistics { + """Number of times the package was downloaded since it was created.""" + downloadsTotalCount: Int! +} + +"""A version tag contains the mapping between a tag name and a version.""" +type PackageTag implements Node { + id: ID! + + """Identifies the tag name of the version.""" + name: String! + + """Version that the tag is associated with.""" + version: PackageVersion +} + +"""The possible types of a package.""" +enum PackageType { + """An npm package.""" + NPM + + """A rubygems package.""" + RUBYGEMS + + """A maven package.""" + MAVEN + + """A docker image.""" + DOCKER + + """A debian package.""" + DEBIAN + + """A nuget package.""" + NUGET + + """A python package.""" + PYPI +} + +"""Information about a specific package version.""" +type PackageVersion implements Node { + """List of files associated with this package version""" + files( + """Ordering of the returned package files.""" + orderBy: PackageFileOrder = {field: CREATED_AT, direction: ASC} + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): PackageFileConnection! + id: ID! + + """The package associated with this version.""" + package: Package + + """The platform this version was built for.""" + platform: String + + """Whether or not this version is a pre-release.""" + preRelease: Boolean! + + """The README of this package version.""" + readme: String + + """The release associated with this package version.""" + release: Release + + """Statistics about package activity.""" + statistics: PackageVersionStatistics + + """The package version summary.""" + summary: String + + """The version string.""" + version: String! +} + +"""The connection type for PackageVersion.""" +type PackageVersionConnection { + """A list of edges.""" + edges: [PackageVersionEdge] + + """A list of nodes.""" + nodes: [PackageVersion] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type PackageVersionEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: PackageVersion +} + +"""Ways in which lists of package versions can be ordered upon return.""" +input PackageVersionOrder { + """The field in which to order package versions by.""" + field: PackageVersionOrderField + + """ + The direction in which to order package versions by the specified field. + """ + direction: OrderDirection +} + +"""Properties by which package version connections can be ordered.""" +enum PackageVersionOrderField { + """Order package versions by creation time""" + CREATED_AT +} + +""" +Represents a object that contains package version activity statistics such as downloads. +""" +type PackageVersionStatistics { + """Number of times the package was downloaded since it was created.""" + downloadsTotalCount: Int! +} + """Information about pagination in a connection.""" type PageInfo { """When paginating forwards, the cursor to continue.""" @@ -12557,6 +13236,9 @@ type Project implements Node & Closable & Updatable { archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] ): ProjectCardConnection! + """Project progress details.""" + progress: ProjectProgress! + """The HTTP path for this project""" resourcePath: URI! @@ -12842,6 +13524,32 @@ interface ProjectOwner { viewerCanCreateProjects: Boolean! } +"""Project progress stats.""" +type ProjectProgress { + """The number of done cards.""" + doneCount: Int! + + """The percentage of done cards.""" + donePercentage: Float! + + """ + Whether progress tracking is enabled and cards with purpose exist for this project + """ + enabled: Boolean! + + """The number of in-progress cards.""" + inProgressCount: Int! + + """The percentage of in-progress cards.""" + inProgressPercentage: Float! + + """The number of to do cards.""" + todoCount: Int! + + """The percentage of to do cards.""" + todoPercentage: Float! +} + """State of the project; either 'open' or 'closed'""" enum ProjectState { """The project is open.""" @@ -13002,6 +13710,9 @@ type PullRequest implements Node & Assignable & Closable & Comment & Updatable & """A list of comments associated with the pull request.""" comments( + """Ordering options for issue comments returned from the connection.""" + orderBy: IssueCommentOrder + """Returns the elements in the list that come after the specified cursor.""" after: String @@ -13101,17 +13812,62 @@ type PullRequest implements Node & Assignable & Closable & Comment & Updatable & """ includesCreatedEdit: Boolean! - """The head and base repositories are different.""" - isCrossRepository: Boolean! + """The head and base repositories are different.""" + isCrossRepository: Boolean! + + """Identifies if the pull request is a draft.""" + isDraft: Boolean! + + """Is this pull request read by the viewer""" + isReadByViewer: Boolean + + """A list of labels associated with the object.""" + labels( + """Ordering options for labels returned from the connection.""" + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): LabelConnection + + """The moment the editor made the last edit""" + lastEditedAt: DateTime + + """A list of latest reviews per user associated with the pull request.""" + latestOpinionatedReviews( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int - """Identifies if the pull request is a draft.""" - isDraft: Boolean! + """Returns the last _n_ elements from the list.""" + last: Int - """A list of labels associated with the object.""" - labels( - """Ordering options for labels returned from the connection.""" - orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + """Only return reviews from user who have write access to the repository""" + writersOnly: Boolean = false + ): PullRequestReviewConnection + """ + A list of latest reviews per user associated with the pull request that are not also pending review. + """ + latestReviews( """Returns the elements in the list that come after the specified cursor.""" after: String @@ -13125,10 +13881,7 @@ type PullRequest implements Node & Assignable & Closable & Comment & Updatable & """Returns the last _n_ elements from the list.""" last: Int - ): LabelConnection - - """The moment the editor made the last edit""" - lastEditedAt: DateTime + ): PullRequestReviewConnection """`true` if the pull request is locked""" locked: Boolean! @@ -13375,6 +14128,9 @@ type PullRequest implements Node & Assignable & Closable & Comment & Updatable & """Whether or not the viewer can apply suggestion.""" viewerCanApplySuggestion: Boolean! + """Check if the viewer can restore the deleted head ref.""" + viewerCanDeleteHeadRef: Boolean! + """Can user react to this subject""" viewerCanReact: Boolean! @@ -13392,6 +14148,18 @@ type PullRequest implements Node & Assignable & Closable & Comment & Updatable & """Did the viewer author this comment.""" viewerDidAuthor: Boolean! + """The merge body text for the viewer and method.""" + viewerMergeBodyText( + """The merge method for the message.""" + mergeType: PullRequestMergeMethod + ): String! + + """The merge headline text for the viewer and method.""" + viewerMergeHeadlineText( + """The merge method for the message.""" + mergeType: PullRequestMergeMethod + ): String! + """ Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. """ @@ -13408,6 +14176,9 @@ type PullRequestChangedFile { """The path of the file.""" path: String! + + """The state of the file for the viewer.""" + viewerViewedState: FileViewedState! } """The connection type for PullRequestChangedFile.""" @@ -13544,7 +14315,7 @@ type PullRequestContributionsByRepository { last: Int """Ordering options for contributions returned from the connection.""" - orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + orderBy: ContributionOrder = {direction: DESC} ): CreatedPullRequestContributionConnection! """The repository in which the pull requests were opened.""" @@ -13606,6 +14377,11 @@ type PullRequestReview implements Node & Comment & Deletable & Updatable & Updat """Author's association with the subject of the comment.""" authorAssociation: CommentAuthorAssociation! + """ + Indicates whether the author of this review has push access to the repository. + """ + authorCanPushToRepository: Boolean! + """Identifies the pull request review body.""" body: String! @@ -13982,7 +14758,7 @@ type PullRequestReviewContributionsByRepository { last: Int """Ordering options for contributions returned from the connection.""" - orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + orderBy: ContributionOrder = {direction: DESC} ): CreatedPullRequestReviewContributionConnection! """The repository in which the pull request reviews were made.""" @@ -14069,6 +14845,12 @@ type PullRequestReviewThread implements Node { diffSide: DiffSide! id: ID! + """Whether or not the thread has been collapsed (outdated or resolved)""" + isCollapsed: Boolean! + + """Indicates whether this thread was outdated by newer changes.""" + isOutdated: Boolean! + """Whether this thread has been resolved""" isResolved: Boolean! @@ -14083,6 +14865,9 @@ type PullRequestReviewThread implements Node { """ originalStartLine: Int + """Identifies the file path of this thread.""" + path: String! + """Identifies the pull request associated with this thread.""" pullRequest: PullRequest! @@ -14102,6 +14887,9 @@ type PullRequestReviewThread implements Node { """ startLine: Int + """Indicates whether the current viewer can reply to this thread.""" + viewerCanReply: Boolean! + """Whether or not the viewer can resolve this thread""" viewerCanResolve: Boolean! @@ -14175,7 +14963,7 @@ type PullRequestTimelineConnection { } """An item in an pull request timeline""" -union PullRequestTimelineItem = AssignedEvent | BaseRefForcePushedEvent | ClosedEvent | Commit | CommitCommentThread | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MergedEvent | MilestonedEvent | PullRequestReview | PullRequestReviewComment | PullRequestReviewThread | ReferencedEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnsubscribedEvent | UserBlockedEvent +union PullRequestTimelineItem = AssignedEvent | BaseRefDeletedEvent | BaseRefForcePushedEvent | ClosedEvent | Commit | CommitCommentThread | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MergedEvent | MilestonedEvent | PullRequestReview | PullRequestReviewComment | PullRequestReviewThread | ReferencedEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnsubscribedEvent | UserBlockedEvent """An edge in a connection.""" type PullRequestTimelineItemEdge { @@ -14187,7 +14975,7 @@ type PullRequestTimelineItemEdge { } """An item in a pull request timeline""" -union PullRequestTimelineItems = AddedToProjectEvent | AssignedEvent | BaseRefChangedEvent | BaseRefForcePushedEvent | ClosedEvent | CommentDeletedEvent | ConnectedEvent | ConvertToDraftEvent | ConvertedNoteToIssueEvent | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | DisconnectedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MarkedAsDuplicateEvent | MentionedEvent | MergedEvent | MilestonedEvent | MovedColumnsInProjectEvent | PinnedEvent | PullRequestCommit | PullRequestCommitCommentThread | PullRequestReview | PullRequestReviewThread | PullRequestRevisionMarker | ReadyForReviewEvent | ReferencedEvent | RemovedFromProjectEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnmarkedAsDuplicateEvent | UnpinnedEvent | UnsubscribedEvent | UserBlockedEvent +union PullRequestTimelineItems = AddedToProjectEvent | AssignedEvent | AutomaticBaseChangeFailedEvent | AutomaticBaseChangeSucceededEvent | BaseRefChangedEvent | BaseRefDeletedEvent | BaseRefForcePushedEvent | ClosedEvent | CommentDeletedEvent | ConnectedEvent | ConvertToDraftEvent | ConvertedNoteToIssueEvent | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | DisconnectedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MarkedAsDuplicateEvent | MentionedEvent | MergedEvent | MilestonedEvent | MovedColumnsInProjectEvent | PinnedEvent | PullRequestCommit | PullRequestCommitCommentThread | PullRequestReview | PullRequestReviewThread | PullRequestRevisionMarker | ReadyForReviewEvent | ReferencedEvent | RemovedFromProjectEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnmarkedAsDuplicateEvent | UnpinnedEvent | UnsubscribedEvent | UserBlockedEvent """The connection type for PullRequestTimelineItems.""" type PullRequestTimelineItemsConnection { @@ -14245,6 +15033,16 @@ enum PullRequestTimelineItemsItemType { """ PULL_REQUEST_REVISION_MARKER + """ + Represents a 'automatic_base_change_failed' event on a given pull request. + """ + AUTOMATIC_BASE_CHANGE_FAILED_EVENT + + """ + Represents a 'automatic_base_change_succeeded' event on a given pull request. + """ + AUTOMATIC_BASE_CHANGE_SUCCEEDED_EVENT + """ Represents a 'base_ref_changed' event on a given issue or pull request. """ @@ -14253,6 +15051,9 @@ enum PullRequestTimelineItemsItemType { """Represents a 'base_ref_force_pushed' event on a given pull request.""" BASE_REF_FORCE_PUSHED_EVENT + """Represents a 'base_ref_deleted' event on a given pull request.""" + BASE_REF_DELETED_EVENT + """Represents a 'deployed' event on a given pull request.""" DEPLOYED_EVENT @@ -14775,6 +15576,9 @@ type RateLimit { The time at which the current rate limit window resets in UTC epoch seconds. """ resetAt: DateTime! + + """The number of points used in the current rate limit window.""" + used: Int! } """Represents a subject that can be reacted on.""" @@ -15016,6 +15820,9 @@ type Ref implements Node { """Returns the last _n_ elements from the list.""" last: Int ): PullRequestConnection! + + """Branch protection rules for this ref""" + branchProtectionRule: BranchProtectionRule id: ID! """The ref name.""" @@ -15024,11 +15831,14 @@ type Ref implements Node { """The ref's prefix, such as `refs/heads/` or `refs/tags/`.""" prefix: String! + """Branch protection rules that are viewable by non-admins""" + refUpdateRule: RefUpdateRule + """The repository the ref belongs to.""" repository: Repository! - """The object the ref points to.""" - target: GitObject! + """The object the ref points to. Returns null when object does not exist.""" + target: GitObject } """The connection type for Ref.""" @@ -15103,6 +15913,35 @@ enum RefOrderField { ALPHABETICAL } +"""A ref update rules for a viewer.""" +type RefUpdateRule { + """Can this branch be deleted.""" + allowsDeletions: Boolean! + + """Are force pushes allowed on this branch.""" + allowsForcePushes: Boolean! + + """Identifies the protection rule pattern.""" + pattern: String! + + """Number of approving reviews required to update matching branches.""" + requiredApprovingReviewCount: Int + + """ + List of required status check contexts that must pass for commits to be accepted to matching branches. + """ + requiredStatusCheckContexts: [String] + + """Are merge commits prohibited from being pushed to this branch.""" + requiresLinearHistory: Boolean! + + """Are commits required to be signed.""" + requiresSignatures: Boolean! + + """Can the viewer push to the branch""" + viewerCanPush: Boolean! +} + """ Autogenerated input type of RegenerateEnterpriseIdentityProviderRecoveryCodes """ @@ -15125,235 +15964,6 @@ type RegenerateEnterpriseIdentityProviderRecoveryCodesPayload { identityProvider: EnterpriseIdentityProvider } -"""A registry package contains the content for an uploaded package.""" -type RegistryPackage implements Node { - id: ID! -} - -"""The connection type for RegistryPackage.""" -type RegistryPackageConnection { - """A list of edges.""" - edges: [RegistryPackageEdge] - - """A list of nodes.""" - nodes: [RegistryPackage] - - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """Identifies the total count of items in the connection.""" - totalCount: Int! -} - -""" -A package dependency contains the information needed to satisfy a dependency. -""" -type RegistryPackageDependency implements Node { - id: ID! -} - -"""The connection type for RegistryPackageDependency.""" -type RegistryPackageDependencyConnection { - """A list of edges.""" - edges: [RegistryPackageDependencyEdge] - - """A list of nodes.""" - nodes: [RegistryPackageDependency] - - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """Identifies the total count of items in the connection.""" - totalCount: Int! -} - -"""An edge in a connection.""" -type RegistryPackageDependencyEdge { - """A cursor for use in pagination.""" - cursor: String! - - """The item at the end of the edge.""" - node: RegistryPackageDependency -} - -"""The possible types of a registry package dependency.""" -enum RegistryPackageDependencyType { - """A default registry package dependency type.""" - DEFAULT - - """A dev registry package dependency type.""" - DEV - - """A test registry package dependency type.""" - TEST - - """A peer registry package dependency type.""" - PEER - - """An optional registry package dependency type.""" - OPTIONAL - - """An optional registry package dependency type.""" - BUNDLED -} - -"""An edge in a connection.""" -type RegistryPackageEdge { - """A cursor for use in pagination.""" - cursor: String! - - """The item at the end of the edge.""" - node: RegistryPackage -} - -"""A file in a specific registry package version.""" -type RegistryPackageFile implements Node { - id: ID! - - """Identifies the date and time when the object was last updated.""" - updatedAt: DateTime! -} - -"""The connection type for RegistryPackageFile.""" -type RegistryPackageFileConnection { - """A list of edges.""" - edges: [RegistryPackageFileEdge] - - """A list of nodes.""" - nodes: [RegistryPackageFile] - - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """Identifies the total count of items in the connection.""" - totalCount: Int! -} - -"""An edge in a connection.""" -type RegistryPackageFileEdge { - """A cursor for use in pagination.""" - cursor: String! - - """The item at the end of the edge.""" - node: RegistryPackageFile -} - -"""Represents a single registry metadatum""" -input RegistryPackageMetadatum { - """Name of the metadatum.""" - name: String! - - """Value of the metadatum.""" - value: String! - - """True, if the metadatum can be updated if it already exists""" - update: Boolean -} - -"""Represents an owner of a registry package.""" -interface RegistryPackageOwner { - id: ID! -} - -"""Represents an interface to search packages on an object.""" -interface RegistryPackageSearch { - id: ID! -} - -""" -Represents a object that contains package activity statistics such as downloads. -""" -type RegistryPackageStatistics - -"""A version tag contains the mapping between a tag name and a version.""" -type RegistryPackageTag implements Node { - id: ID! -} - -"""The connection type for RegistryPackageTag.""" -type RegistryPackageTagConnection { - """A list of edges.""" - edges: [RegistryPackageTagEdge] - - """A list of nodes.""" - nodes: [RegistryPackageTag] - - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """Identifies the total count of items in the connection.""" - totalCount: Int! -} - -"""An edge in a connection.""" -type RegistryPackageTagEdge { - """A cursor for use in pagination.""" - cursor: String! - - """The item at the end of the edge.""" - node: RegistryPackageTag -} - -"""The possible types of a registry package.""" -enum RegistryPackageType { - """An npm registry package.""" - NPM - - """A rubygems registry package.""" - RUBYGEMS - - """A maven registry package.""" - MAVEN - - """A docker image.""" - DOCKER - - """A debian package.""" - DEBIAN - - """A nuget package.""" - NUGET - - """A python package.""" - PYTHON -} - -""" -A package version contains the information about a specific package version. -""" -type RegistryPackageVersion implements Node { - id: ID! -} - -"""The connection type for RegistryPackageVersion.""" -type RegistryPackageVersionConnection { - """A list of edges.""" - edges: [RegistryPackageVersionEdge] - - """A list of nodes.""" - nodes: [RegistryPackageVersion] - - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """Identifies the total count of items in the connection.""" - totalCount: Int! -} - -"""An edge in a connection.""" -type RegistryPackageVersionEdge { - """A cursor for use in pagination.""" - cursor: String! - - """The item at the end of the edge.""" - node: RegistryPackageVersion -} - -""" -Represents a object that contains package version activity statistics such as downloads. -""" -type RegistryPackageVersionStatistics - """A release contains the content for a release.""" type Release implements Node & UniformResourceLocatable { """The author of the release""" @@ -17260,7 +17870,7 @@ enum ReportedContentClassifiers { } """A repository contains the content for a project.""" -type Repository implements Node & ProjectOwner & RegistryPackageOwner & RegistryPackageSearch & Subscribable & Starrable & UniformResourceLocatable & RepositoryInfo { +type Repository implements Node & ProjectOwner & PackageOwner & Subscribable & Starrable & UniformResourceLocatable & RepositoryInfo { """A list of users that can be assigned to issues in this repository.""" assignableUsers( """Filters users with query on user name and login""" @@ -17341,6 +17951,9 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry last: Int ): CommitCommentConnection! + """Returns a list of contact links associated to the repository""" + contactLinks: [RepositoryContactLink!] + """Identifies the date and time when the object was created.""" createdAt: DateTime! @@ -17467,15 +18080,29 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry homepageUrl: URI id: ID! + """The interaction ability settings for this repository.""" + interactionAbility: RepositoryInteractionAbility + """Indicates if the repository is unmaintained.""" isArchived: Boolean! + """Returns true if blank issue creation is allowed""" + isBlankIssuesEnabled: Boolean! + """Returns whether or not this repository disabled.""" isDisabled: Boolean! + """Returns whether or not this repository is empty.""" + isEmpty: Boolean! + """Identifies if the repository is a fork.""" isFork: Boolean! + """ + Indicates if a repository is either owned by an organization, or is a private fork of an organization repository. + """ + isInOrganization: Boolean! + """Indicates if the repository has been locked or not.""" isLocked: Boolean! @@ -17485,11 +18112,17 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry """Identifies if the repository is private.""" isPrivate: Boolean! + """Returns true if this repository has a security policy""" + isSecurityPolicyEnabled: Boolean + """ Identifies if the repository is a template that can be used to generate new repositories. """ isTemplate: Boolean! + """Is this repository a user configuration repository?""" + isUserConfigurationRepository: Boolean! + """Returns a single issue from the current repository by number.""" issue( """The number for the issue to be returned.""" @@ -17504,6 +18137,9 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry number: Int! ): IssueOrPullRequest + """Returns a list of issue templates associated to the repository""" + issueTemplates: [IssueTemplate!] + """A list of issues that have been opened in the repository.""" issues( """Ordering options for issues returned from the connection.""" @@ -17642,6 +18278,9 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry """Ordering options for milestones.""" orderBy: MilestoneOrder + + """Filters milestones with a query on the title""" + query: String ): MilestoneConnection """The repository's original mirror URL.""" @@ -17668,6 +18307,35 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry """The User owner of the repository.""" owner: RepositoryOwner! + """A list of packages under the owner.""" + packages( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """Find packages by their names.""" + names: [String] + + """Find packages in a repository by ID.""" + repositoryId: ID + + """Filter registry package by type.""" + packageType: PackageType + + """Ordering of the returned packages.""" + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + ): PackageConnection! + """The repository parent, if this is a fork.""" parent: Repository @@ -17840,6 +18508,9 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry """The HTTP path for this repository""" resourcePath: URI! + """The security policy URL.""" + securityPolicyUrl: URI + """ A description of the repository, rendered to HTML without any links in it. """ @@ -17854,6 +18525,12 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry """The SSH URL to clone this repository""" sshUrl: GitSSHRemote! + """ + Returns a count of how many stargazers there are on this object + + """ + stargazerCount: Int! + """A list of users who have starred this starrable.""" stargazers( """Returns the elements in the list that come after the specified cursor.""" @@ -17925,6 +18602,14 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry """Indicates whether the viewer can update the topics of this repository.""" viewerCanUpdateTopics: Boolean! + """The last commit email for the viewer.""" + viewerDefaultCommitEmail: String + + """ + The last used merge method by the viewer or the default for the repository. + """ + viewerDefaultMergeMethod: PullRequestMergeMethod! + """ Returns a boolean indicating whether the viewing user has starred this starrable. """ @@ -17935,6 +18620,9 @@ type Repository implements Node & ProjectOwner & RegistryPackageOwner & Registry """ viewerPermission: RepositoryPermission + """A list of emails this viewer can commit with.""" + viewerPossibleCommitEmails: [String!] + """ Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. """ @@ -18051,6 +18739,18 @@ type RepositoryConnection { totalDiskUsage: Int! } +"""A repository contact link.""" +type RepositoryContactLink { + """The contact link purpose.""" + about: String! + + """The contact link name.""" + name: String! + + """The contact link URL.""" + url: URI! +} + """The reason a repository is listed as 'contributed'.""" enum RepositoryContributionType { """Created a commit""" @@ -18112,6 +18812,11 @@ interface RepositoryInfo { """Identifies if the repository is a fork.""" isFork: Boolean! + """ + Indicates if a repository is either owned by an organization, or is a private fork of an organization repository. + """ + isInOrganization: Boolean! + """Indicates if the repository has been locked or not.""" isLocked: Boolean! @@ -18173,16 +18878,84 @@ interface RepositoryInfo { usesCustomOpenGraphImage: Boolean! } +"""Repository interaction limit that applies to this object.""" +type RepositoryInteractionAbility { + """The time the currently active limit expires.""" + expiresAt: DateTime + + """The current limit that is enabled on this object.""" + limit: RepositoryInteractionLimit! + + """The origin of the currently active interaction limit.""" + origin: RepositoryInteractionLimitOrigin! +} + +"""A repository interaction limit.""" +enum RepositoryInteractionLimit { + """ + Users that have recently created their account will be unable to interact with the repository. + """ + EXISTING_USERS + + """ + Users that have not previously committed to a repository’s default branch will be unable to interact with the repository. + """ + CONTRIBUTORS_ONLY + + """ + Users that are not collaborators will not be able to interact with the repository. + """ + COLLABORATORS_ONLY + + """No interaction limits are enabled.""" + NO_LIMIT +} + +"""The length for a repository interaction limit to be enabled for.""" +enum RepositoryInteractionLimitExpiry { + """The interaction limit will expire after 1 day.""" + ONE_DAY + + """The interaction limit will expire after 3 days.""" + THREE_DAYS + + """The interaction limit will expire after 1 week.""" + ONE_WEEK + + """The interaction limit will expire after 1 month.""" + ONE_MONTH + + """The interaction limit will expire after 6 months.""" + SIX_MONTHS +} + +"""Indicates where an interaction limit is configured.""" +enum RepositoryInteractionLimitOrigin { + """A limit that is configured at the repository level.""" + REPOSITORY + + """A limit that is configured at the organization level.""" + ORGANIZATION + + """A limit that is configured at the user-wide level.""" + USER +} + """An invitation for a user to be added to a repository.""" type RepositoryInvitation implements Node { + """The email address that received the invitation.""" + email: String id: ID! """The user who received the invitation.""" - invitee: User! + invitee: User """The user who created the invitation.""" inviter: User! + """The permalink for this repository invitation.""" + permalink: URI! + """The permission granted on this repository by this invitation.""" permission: RepositoryPermission! @@ -18190,6 +18963,30 @@ type RepositoryInvitation implements Node { repository: RepositoryInfo } +"""The connection type for RepositoryInvitation.""" +type RepositoryInvitationConnection { + """A list of edges.""" + edges: [RepositoryInvitationEdge] + + """A list of nodes.""" + nodes: [RepositoryInvitation] + + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type RepositoryInvitationEdge { + """A cursor for use in pagination.""" + cursor: String! + + """The item at the end of the edge.""" + node: RepositoryInvitation +} + """Ordering options for repository invitation connections.""" input RepositoryInvitationOrder { """The field to order repository invitations by.""" @@ -18203,9 +19000,6 @@ input RepositoryInvitationOrder { enum RepositoryInvitationOrderField { """Order repository invitations by creation time""" CREATED_AT - - """Order repository invitations by invitee login""" - INVITEE_LOGIN } """The possible reasons a given repository could be in a locked state.""" @@ -18807,6 +19601,9 @@ type ReviewDismissedEvent implements Node & UniformResourceLocatable { """A request for a user to review a pull request.""" type ReviewRequest implements Node { + """Whether this request was created for a code owner""" + asCodeOwner: Boolean! + """Identifies the primary key from the database.""" databaseId: Int id: ID! @@ -19339,6 +20136,78 @@ type SetEnterpriseIdentityProviderPayload { identityProvider: EnterpriseIdentityProvider } +"""Autogenerated input type of SetOrganizationInteractionLimit""" +input SetOrganizationInteractionLimitInput { + """The ID of the organization to set a limit for.""" + organizationId: ID! + + """The limit to set.""" + limit: RepositoryInteractionLimit! + + """When this limit should expire.""" + expiry: RepositoryInteractionLimitExpiry + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of SetOrganizationInteractionLimit""" +type SetOrganizationInteractionLimitPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """The organization that the interaction limit was set for.""" + organization: Organization +} + +"""Autogenerated input type of SetRepositoryInteractionLimit""" +input SetRepositoryInteractionLimitInput { + """The ID of the repository to set a limit for.""" + repositoryId: ID! + + """The limit to set.""" + limit: RepositoryInteractionLimit! + + """When this limit should expire.""" + expiry: RepositoryInteractionLimitExpiry + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of SetRepositoryInteractionLimit""" +type SetRepositoryInteractionLimitPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """The repository that the interaction limit was set for.""" + repository: Repository +} + +"""Autogenerated input type of SetUserInteractionLimit""" +input SetUserInteractionLimitInput { + """The ID of the user to set a limit for.""" + userId: ID! + + """The limit to set.""" + limit: RepositoryInteractionLimit! + + """When this limit should expire.""" + expiry: RepositoryInteractionLimitExpiry + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of SetUserInteractionLimit""" +type SetUserInteractionLimitPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """The user that the interaction limit was set for.""" + user: User +} + """Represents an S/MIME signature on a Commit or Tag.""" type SmimeSignature implements GitSignature { """Email used to sign this object.""" @@ -19368,9 +20237,18 @@ type SmimeSignature implements GitSignature { wasSignedByGitHub: Boolean! } +"""Entites that can sponsor others via GitHub Sponsors""" +union Sponsor = Organization | User + """Entities that can be sponsored through GitHub Sponsors""" interface Sponsorable { - """The GitHub Sponsors listing for this user.""" + """True if this user/organization has a GitHub Sponsors listing.""" + hasSponsorsListing: Boolean! + + """True if the viewer is sponsored by this user/organization.""" + isSponsoringViewer: Boolean! + + """The GitHub Sponsors listing for this user or organization.""" sponsorsListing: SponsorsListing """This object's sponsorships as the maintainer.""" @@ -19421,6 +20299,12 @@ interface Sponsorable { """ orderBy: SponsorshipOrder ): SponsorshipConnection! + + """Whether or not the viewer is able to sponsor this user/organization.""" + viewerCanSponsor: Boolean! + + """True if the viewer is sponsoring this user/organization.""" + viewerIsSponsoring: Boolean! } """A sponsorship relationship between a sponsor and a maintainer""" @@ -19433,9 +20317,9 @@ type Sponsorship implements Node { privacyLevel: SponsorshipPrivacy! """ - The entity that is sponsoring. Returns null if the sponsorship is private + The user or organization that is sponsoring, if you have permission to view them. """ - sponsor: User + sponsorEntity: Sponsor """The entity that is being sponsored""" sponsorable: Sponsorable! @@ -19684,6 +20568,12 @@ enum StarOrderField { interface Starrable { id: ID! + """ + Returns a count of how many stargazers there are on this object + + """ + stargazerCount: Int! + """A list of users who have starred this starrable.""" stargazers( """Returns the elements in the list that come after the specified cursor.""" @@ -19742,6 +20632,23 @@ type StarredRepositoryEdge { """Represents a commit status.""" type Status implements Node { + """A list of status contexts and check runs for this commit.""" + combinedContexts( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + ): StatusCheckRollupContextConnection! + """The commit this status is attached to.""" commit: Commit @@ -20079,6 +20986,9 @@ type Team implements Node & Subscribable & MemberStatusable { """Identifies the date and time when the object was created.""" createdAt: DateTime! + """Identifies the primary key from the database.""" + databaseId: Int + """The description of the team.""" description: String @@ -21302,6 +22212,12 @@ type Topic implements Node & Starrable { first: Int = 3 ): [Topic!]! + """ + Returns a count of how many stargazers there are on this object + + """ + stargazerCount: Int! + """A list of users who have starred this starrable.""" stargazers( """Returns the elements in the list that come after the specified cursor.""" @@ -21337,30 +22253,6 @@ interface TopicAuditEntryData { topicName: String } -"""The connection type for Topic.""" -type TopicConnection { - """A list of edges.""" - edges: [TopicEdge] - - """A list of nodes.""" - nodes: [Topic] - - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """Identifies the total count of items in the connection.""" - totalCount: Int! -} - -"""An edge in a connection.""" -type TopicEdge { - """A cursor for use in pagination.""" - cursor: String! - - """The item at the end of the edge.""" - node: Topic -} - """Reason that the suggested topic is declined.""" enum TopicSuggestionDeclineReason { """The suggested topic is not relevant to the repository.""" @@ -21439,6 +22331,12 @@ type Tree implements Node & GitObject { """Represents a Git tree entry.""" type TreeEntry { + """The extension of the file""" + extension: String + + """Whether or not this tree entry is generated""" + isGenerated: Boolean! + """Entry file mode.""" mode: Int! @@ -21451,6 +22349,9 @@ type TreeEntry { """Entry file Git object ID.""" oid: GitObjectID! + """The full path of the file.""" + path: String + """The Repository the tree entry belongs to""" repository: Repository! @@ -21608,7 +22509,7 @@ type UnlockedEvent implements Node { """Autogenerated input type of UnlockLockable""" input UnlockLockableInput { - """ID of the issue or pull request to be unlocked.""" + """ID of the item to be unlocked.""" lockableId: ID! """A unique identifier for the client performing the mutation.""" @@ -21634,9 +22535,43 @@ type UnmarkedAsDuplicateEvent implements Node { """Identifies the actor who performed the event.""" actor: Actor + """ + The authoritative issue or pull request which has been duplicated by another. + """ + canonical: IssueOrPullRequest + """Identifies the date and time when the object was created.""" createdAt: DateTime! + + """ + The issue or pull request which has been marked as a duplicate of another. + """ + duplicate: IssueOrPullRequest id: ID! + + """Canonical and duplicate belong to different repositories.""" + isCrossRepository: Boolean! +} + +"""Autogenerated input type of UnmarkFileAsViewed""" +input UnmarkFileAsViewedInput { + """The Node ID of the pull request.""" + pullRequestId: ID! + + """The path of the file to mark as unviewed""" + path: String! + + """A unique identifier for the client performing the mutation.""" + clientMutationId: String +} + +"""Autogenerated return type of UnmarkFileAsViewed""" +type UnmarkFileAsViewedPayload { + """A unique identifier for the client performing the mutation.""" + clientMutationId: String + + """The updated pull request.""" + pullRequest: PullRequest } """Autogenerated input type of UnmarkIssueAsDuplicate""" @@ -21753,6 +22688,15 @@ input UpdateBranchProtectionRuleInput { """Are commits required to be signed.""" requiresCommitSignatures: Boolean + """Are merge commits prohibited from being pushed to this branch.""" + requiresLinearHistory: Boolean + + """Are force pushes allowed on this branch.""" + allowsForcePushes: Boolean + + """Can this branch be deleted.""" + allowsDeletions: Boolean + """Can admins overwrite branch protection.""" isAdminEnforced: Boolean @@ -21875,40 +22819,6 @@ type UpdateCheckSuitePreferencesPayload { repository: Repository } -""" -Autogenerated input type of UpdateEnterpriseActionExecutionCapabilitySetting -""" -input UpdateEnterpriseActionExecutionCapabilitySettingInput { - """ - The ID of the enterprise on which to set the members can create repositories setting. - """ - enterpriseId: ID! - - """ - The value for the action execution capability setting on the enterprise. - """ - capability: ActionExecutionCapabilitySetting! - - """A unique identifier for the client performing the mutation.""" - clientMutationId: String -} - -""" -Autogenerated return type of UpdateEnterpriseActionExecutionCapabilitySetting -""" -type UpdateEnterpriseActionExecutionCapabilitySettingPayload { - """A unique identifier for the client performing the mutation.""" - clientMutationId: String - - """The enterprise with the updated action execution capability setting.""" - enterprise: Enterprise - - """ - A message confirming the result of updating the action execution capability setting. - """ - message: String -} - """Autogenerated input type of UpdateEnterpriseAdministratorRole""" input UpdateEnterpriseAdministratorRoleInput { """The ID of the Enterprise which the admin belongs to.""" @@ -22920,7 +23830,7 @@ scalar URI """ A user is an individual's account on GitHub that owns repositories and can make new content. """ -type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch & ProjectOwner & RepositoryOwner & UniformResourceLocatable & ProfileOwner & Sponsorable { +type User implements Node & Actor & PackageOwner & ProjectOwner & RepositoryOwner & UniformResourceLocatable & ProfileOwner & Sponsorable { """ Determine if this repository owner has any items that can be pinned to their profile. """ @@ -23072,6 +23982,9 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch last: Int ): GistConnection! + """True if this user/organization has a GitHub Sponsors listing.""" + hasSponsorsListing: Boolean! + """The hovercard information for this user in a given context""" hovercard( """The ID of the subject to get the hovercard in the context of""" @@ -23079,6 +23992,9 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch ): Hovercard! id: ID! + """The interaction ability settings for this user.""" + interactionAbility: RepositoryInteractionAbility + """ Whether or not this user is a participant in the GitHub Security Bug Bounty. """ @@ -23101,11 +24017,17 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch """Whether or not this user is a site administrator.""" isSiteAdmin: Boolean! + """True if the viewer is sponsored by this user/organization.""" + isSponsoringViewer: Boolean! + """Whether or not this user is the viewing user.""" isViewer: Boolean! """A list of issue comments made by this user.""" issueComments( + """Ordering options for issue comments returned from the connection.""" + orderBy: IssueCommentOrder + """Returns the elements in the list that come after the specified cursor.""" after: String @@ -23171,6 +24093,14 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch login: String! ): Organization + """ + Verified email addresses that match verified domains for a specified organization the user is a member of. + """ + organizationVerifiedDomainEmails( + """The login of the organization to match verified domains from.""" + login: String! + ): [String!]! + """A list of organizations the user belongs to.""" organizations( """Returns the elements in the list that come after the specified cursor.""" @@ -23188,6 +24118,35 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch last: Int ): OrganizationConnection! + """A list of packages under the owner.""" + packages( + """Returns the elements in the list that come after the specified cursor.""" + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """Returns the first _n_ elements from the list.""" + first: Int + + """Returns the last _n_ elements from the list.""" + last: Int + + """Find packages by their names.""" + names: [String] + + """Find packages in a repository by ID.""" + repositoryId: ID + + """Filter registry package by type.""" + packageType: PackageType + + """Ordering of the returned packages.""" + orderBy: PackageOrder = {field: CREATED_AT, direction: DESC} + ): PackageConnection! + """ A list of repositories and gists this profile owner can pin to their profile. """ @@ -23437,7 +24396,7 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch orderBy: SavedReplyOrder = {field: UPDATED_AT, direction: DESC} ): SavedReplyConnection - """The GitHub Sponsors listing for this user.""" + """The GitHub Sponsors listing for this user or organization.""" sponsorsListing: SponsorsListing """This object's sponsorships as the maintainer.""" @@ -23543,6 +24502,9 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch since: DateTime ): RepositoryConnection! + """The user's Twitter username.""" + twitterUsername: String + """Identifies the date and time when the object was last updated.""" updatedAt: DateTime! @@ -23558,9 +24520,15 @@ type User implements Node & Actor & RegistryPackageOwner & RegistryPackageSearch """Whether or not the viewer is able to follow the user.""" viewerCanFollow: Boolean! + """Whether or not the viewer is able to sponsor this user/organization.""" + viewerCanSponsor: Boolean! + """Whether or not this user is followed by the viewer.""" viewerIsFollowing: Boolean! + """True if the viewer is sponsoring this user/organization.""" + viewerIsSponsoring: Boolean! + """A list of repositories the given user is watching.""" watching( """If non-null, filters repositories according to privacy""" @@ -23714,6 +24682,18 @@ type UserEdge { node: User } +"""Email attributes from External Identity""" +type UserEmailMetadata { + """Boolean to identify primary emails""" + primary: Boolean + + """Type of email""" + type: String + + """Email id""" + value: String! +} + """The user's description of what they're currently doing.""" type UserStatus implements Node { """Identifies the date and time when the object was created.""" diff --git a/lib/containers/accumulators/__generated__/checkRunsAccumulator_checkSuite.graphql.js b/lib/containers/accumulators/__generated__/checkRunsAccumulator_checkSuite.graphql.js index 053184e4f4..ceec76c168 100644 --- a/lib/containers/accumulators/__generated__/checkRunsAccumulator_checkSuite.graphql.js +++ b/lib/containers/accumulators/__generated__/checkRunsAccumulator_checkSuite.graphql.js @@ -9,7 +9,7 @@ /*:: import type { ReaderFragment } from 'relay-runtime'; type checkRunView_checkRun$ref = any; -export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; +export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "STARTUP_FAILURE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; export type CheckStatusState = "COMPLETED" | "IN_PROGRESS" | "QUEUED" | "REQUESTED" | "%future added value"; import type { FragmentReference } from "relay-runtime"; declare export opaque type checkRunsAccumulator_checkSuite$ref: FragmentReference; diff --git a/lib/containers/accumulators/__generated__/checkSuitesAccumulator_commit.graphql.js b/lib/containers/accumulators/__generated__/checkSuitesAccumulator_commit.graphql.js index b4e70184ee..784202f2ea 100644 --- a/lib/containers/accumulators/__generated__/checkSuitesAccumulator_commit.graphql.js +++ b/lib/containers/accumulators/__generated__/checkSuitesAccumulator_commit.graphql.js @@ -10,7 +10,7 @@ import type { ReaderFragment } from 'relay-runtime'; type checkRunsAccumulator_checkSuite$ref = any; type checkSuiteView_checkSuite$ref = any; -export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; +export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "STARTUP_FAILURE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; export type CheckStatusState = "COMPLETED" | "IN_PROGRESS" | "QUEUED" | "REQUESTED" | "%future added value"; import type { FragmentReference } from "relay-runtime"; declare export opaque type checkSuitesAccumulator_commit$ref: FragmentReference; diff --git a/lib/containers/accumulators/__generated__/reviewCommentsAccumulator_reviewThread.graphql.js b/lib/containers/accumulators/__generated__/reviewCommentsAccumulator_reviewThread.graphql.js index ce9d2f7370..0d12e1b7c6 100644 --- a/lib/containers/accumulators/__generated__/reviewCommentsAccumulator_reviewThread.graphql.js +++ b/lib/containers/accumulators/__generated__/reviewCommentsAccumulator_reviewThread.graphql.js @@ -9,7 +9,7 @@ /*:: import type { ReaderFragment } from 'relay-runtime'; type emojiReactionsController_reactable$ref = any; -export type CommentAuthorAssociation = "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIMER" | "FIRST_TIME_CONTRIBUTOR" | "MEMBER" | "NONE" | "OWNER" | "%future added value"; +export type CommentAuthorAssociation = "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIMER" | "FIRST_TIME_CONTRIBUTOR" | "MANNEQUIN" | "MEMBER" | "NONE" | "OWNER" | "%future added value"; export type PullRequestReviewCommentState = "PENDING" | "SUBMITTED" | "%future added value"; import type { FragmentReference } from "relay-runtime"; declare export opaque type reviewCommentsAccumulator_reviewThread$ref: FragmentReference; diff --git a/lib/containers/accumulators/__generated__/reviewSummariesAccumulator_pullRequest.graphql.js b/lib/containers/accumulators/__generated__/reviewSummariesAccumulator_pullRequest.graphql.js index 7f058e4f2d..1e201b739b 100644 --- a/lib/containers/accumulators/__generated__/reviewSummariesAccumulator_pullRequest.graphql.js +++ b/lib/containers/accumulators/__generated__/reviewSummariesAccumulator_pullRequest.graphql.js @@ -9,7 +9,7 @@ /*:: import type { ReaderFragment } from 'relay-runtime'; type emojiReactionsController_reactable$ref = any; -export type CommentAuthorAssociation = "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIMER" | "FIRST_TIME_CONTRIBUTOR" | "MEMBER" | "NONE" | "OWNER" | "%future added value"; +export type CommentAuthorAssociation = "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIMER" | "FIRST_TIME_CONTRIBUTOR" | "MANNEQUIN" | "MEMBER" | "NONE" | "OWNER" | "%future added value"; export type PullRequestReviewState = "APPROVED" | "CHANGES_REQUESTED" | "COMMENTED" | "DISMISSED" | "PENDING" | "%future added value"; import type { FragmentReference } from "relay-runtime"; declare export opaque type reviewSummariesAccumulator_pullRequest$ref: FragmentReference; diff --git a/lib/containers/github-tab-container.js b/lib/containers/github-tab-container.js index 839314c84c..0477e205d5 100644 --- a/lib/containers/github-tab-container.js +++ b/lib/containers/github-tab-container.js @@ -9,7 +9,10 @@ import Refresher from '../models/refresher'; import GitHubTabController from '../controllers/github-tab-controller'; import ObserveModel from '../views/observe-model'; import RemoteSet from '../models/remote-set'; +import {nullRemote} from '../models/remote'; import BranchSet from '../models/branch-set'; +import {nullBranch} from '../models/branch'; +import {DOTCOM} from '../models/endpoint'; export default class GitHubTabContainer extends React.Component { static propTypes = { @@ -77,6 +80,8 @@ export default class GitHubTabContainer extends React.Component { }); } + fetchToken = (loginModel, endpoint) => loginModel.getToken(endpoint.getLoginAccount()); + render() { return ( @@ -85,18 +90,47 @@ export default class GitHubTabContainer extends React.Component { ); } - renderRepositoryData = data => { - if (!data || this.props.repository.isLoading()) { + renderRepositoryData = repoData => { + let endpoint = DOTCOM; + + if (repoData) { + repoData.githubRemotes = repoData.allRemotes.filter(remote => remote.isGithubRepo()); + repoData.currentBranch = repoData.branches.getHeadBranch(); + + repoData.currentRemote = repoData.githubRemotes.withName(repoData.selectedRemoteName); + repoData.manyRemotesAvailable = false; + if (!repoData.currentRemote.isPresent() && repoData.githubRemotes.size() === 1) { + repoData.currentRemote = Array.from(repoData.githubRemotes)[0]; + } else if (!repoData.currentRemote.isPresent() && repoData.githubRemotes.size() > 1) { + repoData.manyRemotesAvailable = true; + } + repoData.endpoint = endpoint = repoData.currentRemote.getEndpointOrDotcom(); + } + + return ( + + {token => this.renderToken(token, repoData)} + + ); + } + + renderToken(token, repoData) { + if (!repoData || this.props.repository.isLoading()) { return ( ); } @@ -108,20 +142,26 @@ export default class GitHubTabContainer extends React.Component { refresher={this.state.refresher} allRemotes={new RemoteSet()} + githubRemotes={new RemoteSet()} + currentRemote={nullRemote} branches={new BranchSet()} + currentBranch={nullBranch} aheadCount={0} + manyRemotesAvailable={false} pushInProgress={false} isLoading={false} + token={token} /> ); } return ( ); } diff --git a/lib/containers/github-tab-header-container.js b/lib/containers/github-tab-header-container.js index 8bab9d4e8f..17224df13f 100644 --- a/lib/containers/github-tab-header-container.js +++ b/lib/containers/github-tab-header-container.js @@ -2,18 +2,17 @@ import React from 'react'; import PropTypes from 'prop-types'; import {QueryRenderer, graphql} from 'react-relay'; -import {EndpointPropType} from '../prop-types'; +import {EndpointPropType, TokenPropType} from '../prop-types'; import RelayNetworkLayerManager from '../relay-network-layer-manager'; import {UNAUTHENTICATED, INSUFFICIENT} from '../shared/keytar-strategy'; -import ObserveModel from '../views/observe-model'; import Author, {nullAuthor} from '../models/author'; import GithubTabHeaderController from '../controllers/github-tab-header-controller'; export default class GithubTabHeaderContainer extends React.Component { static propTypes = { // Connection - loginModel: PropTypes.object.isRequired, endpoint: EndpointPropType.isRequired, + token: TokenPropType, // Workspace currentWorkDir: PropTypes.string, @@ -27,24 +26,16 @@ export default class GithubTabHeaderContainer extends React.Component { } render() { - return ( - - {this.renderWithToken} - - ); - } - - renderWithToken = token => { if ( - token == null - || token instanceof Error - || token === UNAUTHENTICATED - || token === INSUFFICIENT + this.props.token == null + || this.props.token instanceof Error + || this.props.token === UNAUTHENTICATED + || this.props.token === INSUFFICIENT ) { return this.renderNoResult(); } - const environment = RelayNetworkLayerManager.getEnvironmentForHost(this.props.endpoint, token); + const environment = RelayNetworkLayerManager.getEnvironmentForHost(this.props.endpoint, this.props.token); const query = graphql` query githubTabHeaderContainerQuery { viewer { @@ -61,12 +52,12 @@ export default class GithubTabHeaderContainer extends React.Component { environment={environment} variables={{}} query={query} - render={result => this.renderWithResult(result)} + render={this.renderWithResult} /> ); } - renderWithResult({error, props}) { + renderWithResult = ({error, props}) => { if (error || props === null) { return this.renderNoResult(); } @@ -108,8 +99,4 @@ export default class GithubTabHeaderContainer extends React.Component { /> ); } - - fetchToken = loginModel => { - return loginModel.getToken(this.props.endpoint.getLoginAccount()); - } } diff --git a/lib/containers/remote-container.js b/lib/containers/remote-container.js index 94d1fe3321..ad18753b9d 100644 --- a/lib/containers/remote-container.js +++ b/lib/containers/remote-container.js @@ -2,21 +2,20 @@ import React from 'react'; import PropTypes from 'prop-types'; import {QueryRenderer, graphql} from 'react-relay'; -import {incrementCounter} from '../reporter-proxy'; -import {RemotePropType, RemoteSetPropType, BranchSetPropType, RefresherPropType, EndpointPropType} from '../prop-types'; +import { + RemotePropType, RemoteSetPropType, BranchSetPropType, RefresherPropType, + EndpointPropType, TokenPropType, +} from '../prop-types'; import RelayNetworkLayerManager from '../relay-network-layer-manager'; -import {UNAUTHENTICATED, INSUFFICIENT} from '../shared/keytar-strategy'; import RemoteController from '../controllers/remote-controller'; -import ObserveModel from '../views/observe-model'; import LoadingView from '../views/loading-view'; import QueryErrorView from '../views/query-error-view'; -import GithubLoginView from '../views/github-login-view'; export default class RemoteContainer extends React.Component { static propTypes = { // Connection - loginModel: PropTypes.object.isRequired, endpoint: EndpointPropType.isRequired, + token: TokenPropType.isRequired, // Repository attributes refresher: RefresherPropType.isRequired, @@ -29,52 +28,13 @@ export default class RemoteContainer extends React.Component { aheadCount: PropTypes.number, // Action methods + handleLogin: PropTypes.func.isRequired, + handleLogout: PropTypes.func.isRequired, onPushBranch: PropTypes.func.isRequired, } - fetchToken = loginModel => { - return loginModel.getToken(this.props.endpoint.getLoginAccount()); - } - render() { - return ( - - {this.renderWithToken} - - ); - } - - renderWithToken = token => { - if (token === null) { - return ; - } - - if (token instanceof Error) { - return ( - - ); - } - - if (token === UNAUTHENTICATED) { - return ; - } - - if (token === INSUFFICIENT) { - return ( - -

- Your token no longer has sufficient authorizations. Please re-authenticate and generate a new one. -

-
- ); - } - - const environment = RelayNetworkLayerManager.getEnvironmentForHost(this.props.endpoint, token); + const environment = RelayNetworkLayerManager.getEnvironmentForHost(this.props.endpoint, this.props.token); const query = graphql` query remoteContainerQuery($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { @@ -96,21 +56,21 @@ export default class RemoteContainer extends React.Component { environment={environment} variables={variables} query={query} - render={result => this.renderWithResult(result, token)} + render={this.renderWithResult} /> ); } - renderWithResult({error, props, retry}, token) { + renderWithResult = ({error, props, retry}) => { this.props.refresher.setRetryCallback(this, retry); if (error) { return ( ); } @@ -122,7 +82,7 @@ export default class RemoteContainer extends React.Component { return ( ); } - - handleLogin = token => { - incrementCounter('github-login'); - this.props.loginModel.setToken(this.props.endpoint.getLoginAccount(), token); - } - - handleLogout = () => { - incrementCounter('github-logout'); - this.props.loginModel.removeToken(this.props.endpoint.getLoginAccount()); - } - - handleTokenRetry = () => this.props.loginModel.didUpdate(); } diff --git a/lib/controllers/editor-conflict-controller.js b/lib/controllers/editor-conflict-controller.js index ad4c3c2848..174f84f724 100644 --- a/lib/controllers/editor-conflict-controller.js +++ b/lib/controllers/editor-conflict-controller.js @@ -48,6 +48,8 @@ export default class EditorConflictController extends React.Component { this.props.editor.onDidDestroy(() => this.props.refreshResolutionProgress(this.props.editor.getPath())), buffer.onDidReload(() => this.reparseConflicts()), ); + + this.scrollToFirstConflict(); } render() { @@ -219,6 +221,19 @@ export default class EditorConflictController extends React.Component { this.updateMarkerCount(); } + scrollToFirstConflict() { + let firstConflict = null; + for (const conflict of this.state.conflicts) { + if (firstConflict == null || firstConflict.getRange().compare(conflict.getRange()) > 0) { + firstConflict = conflict; + } + } + + if (firstConflict) { + this.props.editor.scrollToBufferPosition(firstConflict.getRange().start, {center: true}); + } + } + reparseConflicts() { const newConflicts = new Set(Conflict.allFromEditor(this.props.editor, this.layer, this.props.isRebase)); this.setState({conflicts: newConflicts}); diff --git a/lib/controllers/git-tab-controller.js b/lib/controllers/git-tab-controller.js index 60cf360cd3..d34d42723f 100644 --- a/lib/controllers/git-tab-controller.js +++ b/lib/controllers/git-tab-controller.js @@ -3,7 +3,6 @@ import path from 'path'; import React from 'react'; import PropTypes from 'prop-types'; import {TextBuffer} from 'atom'; -import {CompositeDisposable} from 'event-kit'; import GitTabView from '../views/git-tab-view'; import UserStore from '../models/user-store'; @@ -87,11 +86,6 @@ export default class GitTabController extends React.Component { login: this.props.loginModel, config: this.props.config, }); - - this.subs = new CompositeDisposable( - this.usernameBuffer.onDidStopChanging(this.setUsername), - this.emailBuffer.onDidStopChanging(this.setEmail), - ); } static getDerivedStateFromProps(props, state) { @@ -142,6 +136,8 @@ export default class GitTabController extends React.Component { toggleIdentityEditor={this.toggleIdentityEditor} closeIdentityEditor={this.closeIdentityEditor} + setLocalIdentity={this.setLocalIdentity} + setGlobalIdentity={this.setGlobalIdentity} openInitializeDialog={this.props.openInitializeDialog} openFiles={this.props.openFiles} discardWorkDirChangesForPaths={this.props.discardWorkDirChangesForPaths} @@ -371,9 +367,27 @@ export default class GitTabController extends React.Component { closeIdentityEditor = () => this.setState({editingIdentity: false}) - setUsername = () => this.props.repository.setConfig('user.name', this.usernameBuffer.getText(), {global: true}) + setLocalIdentity = () => this.setIdentity({}); + + setGlobalIdentity = () => this.setIdentity({global: true}); + + async setIdentity(options) { + const newUsername = this.usernameBuffer.getText(); + const newEmail = this.emailBuffer.getText(); + + if (newUsername.length > 0 || options.global) { + await this.props.repository.setConfig('user.name', newUsername, options); + } else { + await this.props.repository.unsetConfig('user.name'); + } - setEmail = () => this.props.repository.setConfig('user.email', this.emailBuffer.getText(), {global: true}) + if (newEmail.length > 0 || options.global) { + await this.props.repository.setConfig('user.email', newEmail, options); + } else { + await this.props.repository.unsetConfig('user.email'); + } + this.closeIdentityEditor(); + } restoreFocus() { this.refView.map(view => view.setFocus(this.lastFocus)); diff --git a/lib/controllers/github-tab-controller.js b/lib/controllers/github-tab-controller.js index ea63951897..5d7a33010e 100644 --- a/lib/controllers/github-tab-controller.js +++ b/lib/controllers/github-tab-controller.js @@ -2,23 +2,30 @@ import React from 'react'; import PropTypes from 'prop-types'; import { - GithubLoginModelPropType, RefHolderPropType, RemoteSetPropType, BranchSetPropType, RefresherPropType, + GithubLoginModelPropType, TokenPropType, RefHolderPropType, + RemoteSetPropType, RemotePropType, BranchSetPropType, BranchPropType, + RefresherPropType, } from '../prop-types'; import GitHubTabView from '../views/github-tab-view'; +import {incrementCounter} from '../reporter-proxy'; export default class GitHubTabController extends React.Component { static propTypes = { workspace: PropTypes.object.isRequired, refresher: RefresherPropType.isRequired, loginModel: GithubLoginModelPropType.isRequired, + token: TokenPropType, rootHolder: RefHolderPropType.isRequired, workingDirectory: PropTypes.string, repository: PropTypes.object.isRequired, allRemotes: RemoteSetPropType.isRequired, + githubRemotes: RemoteSetPropType.isRequired, + currentRemote: RemotePropType.isRequired, branches: BranchSetPropType.isRequired, - selectedRemoteName: PropTypes.string, - aheadCount: PropTypes.number, + currentBranch: BranchPropType.isRequired, + aheadCount: PropTypes.number.isRequired, + manyRemotesAvailable: PropTypes.bool.isRequired, pushInProgress: PropTypes.bool.isRequired, isLoading: PropTypes.bool.isRequired, currentWorkDir: PropTypes.string, @@ -35,21 +42,11 @@ export default class GitHubTabController extends React.Component { } render() { - const gitHubRemotes = this.props.allRemotes.filter(remote => remote.isGithubRepo()); - const currentBranch = this.props.branches.getHeadBranch(); - - let currentRemote = gitHubRemotes.withName(this.props.selectedRemoteName); - let manyRemotesAvailable = false; - if (!currentRemote.isPresent() && gitHubRemotes.size() === 1) { - currentRemote = Array.from(gitHubRemotes)[0]; - } else if (!currentRemote.isPresent() && gitHubRemotes.size() > 1) { - manyRemotesAvailable = true; - } - return ( this.props.openPublishDialog(this.props.repository); + + handleLogin = token => { + incrementCounter('github-login'); + this.props.loginModel.setToken(this.currentEndpoint().getLoginAccount(), token); + } + + handleLogout = () => { + incrementCounter('github-logout'); + this.props.loginModel.removeToken(this.currentEndpoint().getLoginAccount()); + } + + handleTokenRetry = () => this.props.loginModel.didUpdate(); + + currentEndpoint() { + return this.props.currentRemote.getEndpointOrDotcom(); + } } diff --git a/lib/controllers/issueish-list-controller.js b/lib/controllers/issueish-list-controller.js index 94635a6cc6..93ebfa9b61 100644 --- a/lib/controllers/issueish-list-controller.js +++ b/lib/controllers/issueish-list-controller.js @@ -90,15 +90,9 @@ export class BareIssueishListController extends React.Component { return null; } - openOnGitHub = url => { - return new Promise((resolve, reject) => { - shell.openExternal(url, {}, err => { - if (err) { reject(err); } else { - resolve(); - addEvent('open-issueish-in-browser', {package: 'github', component: this.constructor.name}); - } - }); - }); + openOnGitHub = async url => { + await shell.openExternal(url); + addEvent('open-issueish-in-browser', {package: 'github', component: this.constructor.name}); } showActionsMenu = /* istanbul ignore next */ issueish => { diff --git a/lib/controllers/issueish-searches-controller.js b/lib/controllers/issueish-searches-controller.js index 1a9281db88..4d1d79b069 100644 --- a/lib/controllers/issueish-searches-controller.js +++ b/lib/controllers/issueish-searches-controller.js @@ -113,13 +113,8 @@ export default class IssueishSearchesController extends React.Component { }); } - onOpenSearch = search => { + onOpenSearch = async search => { const searchURL = search.getWebURL(this.props.remote); - - return new Promise((resolve, reject) => { - shell.openExternal(searchURL, {}, err => { - if (err) { reject(err); } else { resolve(); } - }); - }); + await shell.openExternal(searchURL); } } diff --git a/lib/controllers/remote-controller.js b/lib/controllers/remote-controller.js index c7121b9f20..f0a38cc497 100644 --- a/lib/controllers/remote-controller.js +++ b/lib/controllers/remote-controller.js @@ -2,9 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import {shell} from 'electron'; -import {autobind} from '../helpers'; import {incrementCounter} from '../reporter-proxy'; -import {RemotePropType, RemoteSetPropType, BranchSetPropType, EndpointPropType} from '../prop-types'; +import {RemotePropType, RemoteSetPropType, BranchSetPropType, EndpointPropType, TokenPropType} from '../prop-types'; import IssueishSearchesController from './issueish-searches-controller'; export default class RemoteController extends React.Component { @@ -20,7 +19,7 @@ export default class RemoteController extends React.Component { // Connection endpoint: EndpointPropType.isRequired, - token: PropTypes.string.isRequired, + token: TokenPropType.isRequired, // Repository derived attributes workingDirectory: PropTypes.string, @@ -35,11 +34,6 @@ export default class RemoteController extends React.Component { onPushBranch: PropTypes.func.isRequired, } - constructor(props) { - super(props); - autobind(this, 'onCreatePr'); - } - render() { return ( { const currentBranch = this.props.branches.getHeadBranch(); const upstream = currentBranch.getUpstream(); if (!upstream.isPresent() || this.props.aheadCount > 0) { @@ -73,15 +67,7 @@ export default class RemoteController extends React.Component { createPrUrl += '/compare/' + encodeURIComponent(currentBranch.getName()); createPrUrl += '?expand=1'; - return new Promise((resolve, reject) => { - shell.openExternal(createPrUrl, {}, err => { - if (err) { - reject(err); - } else { - incrementCounter('create-pull-request'); - resolve(); - } - }); - }); + await shell.openExternal(createPrUrl); + incrementCounter('create-pull-request'); } } diff --git a/lib/git-shell-out-strategy.js b/lib/git-shell-out-strategy.js index 53c88b8919..b56cdcd641 100644 --- a/lib/git-shell-out-strategy.js +++ b/lib/git-shell-out-strategy.js @@ -1007,12 +1007,12 @@ export default class GitShellOutStrategy { let output; try { let args = ['config']; - if (local || atom.inSpecMode()) { args.push('--local'); } + if (local) { args.push('--local'); } args = args.concat(option); output = await this.exec(args); } catch (err) { - if (err.code === 1) { - // No matching config found + if (err.code === 1 || err.code === 128) { + // No matching config found OR --local can only be used inside a git repository return null; } else { throw err; @@ -1025,7 +1025,7 @@ export default class GitShellOutStrategy { setConfig(option, value, {replaceAll, global} = {}) { let args = ['config']; if (replaceAll) { args.push('--replace-all'); } - if (global && !atom.inSpecMode()) { args.push('--global'); } + if (global) { args.push('--global'); } args = args.concat(option, value); return this.exec(args, {writeOperation: true}); } diff --git a/lib/models/discard-history.js b/lib/models/discard-history.js index 3521ae3b81..01a211212e 100644 --- a/lib/models/discard-history.js +++ b/lib/models/discard-history.js @@ -127,7 +127,7 @@ export default class DiscardHistory { await this.expandBlobToFile(path.join(tempFolderPath, `${filePath}-before-discard`), beforeSha); const commonBasePath = !afterSha ? null : await this.expandBlobToFile(path.join(tempFolderPath, `${filePath}-after-discard`), afterSha); - const resultPath = path.join(tempFolderPath, `~${path.basename(filePath)}-merge-result`); + const resultPath = path.join(dir, `~${path.basename(filePath)}-merge-result`); return {filePath, commonBasePath, theirsPath, resultPath, theirsSha: beforeSha, commonBaseSha: afterSha}; }); return await Promise.all(pathPromises); diff --git a/lib/models/endpoint.js b/lib/models/endpoint.js index 3fc5fd2fef..6dbe54b4bc 100644 --- a/lib/models/endpoint.js +++ b/lib/models/endpoint.js @@ -30,11 +30,11 @@ class Endpoint { } // API endpoint for GitHub.com -const dotcomEndpoint = new Endpoint('github.com', 'api.github.com', []); +export const DOTCOM = new Endpoint('github.com', 'api.github.com', []); export function getEndpoint(host) { if (host === 'github.com') { - return dotcomEndpoint; + return DOTCOM; } else { return new Endpoint(host, host, ['api', 'v3']); } diff --git a/lib/models/remote.js b/lib/models/remote.js index f9c5dd06ee..895d27f5b1 100644 --- a/lib/models/remote.js +++ b/lib/models/remote.js @@ -1,4 +1,4 @@ -import {getEndpoint} from './endpoint'; +import {getEndpoint, DOTCOM} from './endpoint'; export default class Remote { constructor(name, url) { @@ -57,6 +57,10 @@ export default class Remote { return this.domain === null ? null : getEndpoint(this.domain); } + getEndpointOrDotcom() { + return this.getEndpoint() || DOTCOM; + } + isPresent() { return true; } @@ -135,6 +139,10 @@ export const nullRemote = { return null; }, + getEndpointOrDotcom() { + return DOTCOM; + }, + isPresent() { return false; }, diff --git a/lib/models/repository-states/cache/keys.js b/lib/models/repository-states/cache/keys.js new file mode 100644 index 0000000000..1a58bfbdd0 --- /dev/null +++ b/lib/models/repository-states/cache/keys.js @@ -0,0 +1,164 @@ +class CacheKey { + constructor(primary, groups = []) { + this.primary = primary; + this.groups = groups; + } + + getPrimary() { + return this.primary; + } + + getGroups() { + return this.groups; + } + + removeFromCache(cache, withoutGroup = null) { + cache.removePrimary(this.getPrimary()); + + const groups = this.getGroups(); + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + if (group === withoutGroup) { + continue; + } + + cache.removeFromGroup(group, this); + } + } + + /* istanbul ignore next */ + toString() { + return `CacheKey(${this.primary})`; + } +} + +class GroupKey { + constructor(group) { + this.group = group; + } + + removeFromCache(cache) { + for (const matchingKey of cache.keysInGroup(this.group)) { + matchingKey.removeFromCache(cache, this.group); + } + } + + /* istanbul ignore next */ + toString() { + return `GroupKey(${this.group})`; + } +} + +export const Keys = { + statusBundle: new CacheKey('status-bundle'), + + stagedChanges: new CacheKey('staged-changes'), + + filePatch: { + _optKey: ({staged}) => (staged ? 's' : 'u'), + + oneWith: (fileName, options) => { // <-- Keys.filePatch + const optKey = Keys.filePatch._optKey(options); + const baseCommit = options.baseCommit || 'head'; + + const extraGroups = []; + if (options.baseCommit) { + extraGroups.push(`file-patch:base-nonhead:path-${fileName}`); + extraGroups.push('file-patch:base-nonhead'); + } else { + extraGroups.push('file-patch:base-head'); + } + + return new CacheKey(`file-patch:${optKey}:${baseCommit}:${fileName}`, [ + 'file-patch', + `file-patch:opt-${optKey}`, + `file-patch:opt-${optKey}:path-${fileName}`, + ...extraGroups, + ]); + }, + + eachWithFileOpts: (fileNames, opts) => { + const keys = []; + for (let i = 0; i < fileNames.length; i++) { + for (let j = 0; j < opts.length; j++) { + keys.push(new GroupKey(`file-patch:opt-${Keys.filePatch._optKey(opts[j])}:path-${fileNames[i]}`)); + } + } + return keys; + }, + + eachNonHeadWithFiles: fileNames => { + return fileNames.map(fileName => new GroupKey(`file-patch:base-nonhead:path-${fileName}`)); + }, + + allAgainstNonHead: new GroupKey('file-patch:base-nonhead'), + + eachWithOpts: (...opts) => opts.map(opt => new GroupKey(`file-patch:opt-${Keys.filePatch._optKey(opt)}`)), + + all: new GroupKey('file-patch'), + }, + + index: { + oneWith: fileName => new CacheKey(`index:${fileName}`, ['index']), + + all: new GroupKey('index'), + }, + + lastCommit: new CacheKey('last-commit'), + + recentCommits: new CacheKey('recent-commits'), + + authors: new CacheKey('authors'), + + branches: new CacheKey('branches'), + + headDescription: new CacheKey('head-description'), + + remotes: new CacheKey('remotes'), + + config: { + _optKey: options => (options.local ? 'l' : ''), + + oneWith: (setting, options) => { + const optKey = Keys.config._optKey(options); + return new CacheKey(`config:${optKey}:${setting}`, ['config', `config:${optKey}`]); + }, + + eachWithSetting: setting => [ + Keys.config.oneWith(setting, {local: true}), + Keys.config.oneWith(setting, {local: false}), + ], + + all: new GroupKey('config'), + }, + + blob: { + oneWith: sha => new CacheKey(`blob:${sha}`, ['blob']), + }, + + // Common collections of keys and patterns for use with invalidate(). + + workdirOperationKeys: fileNames => [ + Keys.statusBundle, + ...Keys.filePatch.eachWithFileOpts(fileNames, [{staged: false}]), + ], + + cacheOperationKeys: fileNames => [ + ...Keys.workdirOperationKeys(fileNames), + ...Keys.filePatch.eachWithFileOpts(fileNames, [{staged: true}]), + ...fileNames.map(Keys.index.oneWith), + Keys.stagedChanges, + ], + + headOperationKeys: () => [ + Keys.headDescription, + Keys.branches, + ...Keys.filePatch.eachWithOpts({staged: true}), + Keys.filePatch.allAgainstNonHead, + Keys.stagedChanges, + Keys.lastCommit, + Keys.recentCommits, + Keys.authors, + Keys.statusBundle, + ], +}; diff --git a/lib/models/repository-states/present.js b/lib/models/repository-states/present.js index 4f8414ee6c..0c0a9d7a09 100644 --- a/lib/models/repository-states/present.js +++ b/lib/models/repository-states/present.js @@ -3,6 +3,7 @@ import {Emitter} from 'event-kit'; import fs from 'fs-extra'; import State from './state'; +import {Keys} from './cache/keys'; import {LargeRepoError} from '../../git-shell-out-strategy'; import {FOCUS} from '../workspace-change-observer'; @@ -102,9 +103,12 @@ export default class Present extends State { return true; } - acceptInvalidation(spec) { + acceptInvalidation(spec, {globally} = {}) { this.cache.invalidate(spec()); this.didUpdate(); + if (globally) { + this.didGloballyInvalidate(spec); + } } invalidateCacheAfterFilesystemChange(events) { @@ -519,10 +523,11 @@ export default class Present extends State { // Configuration - setConfig(setting, value, options) { + setConfig(setting, value, options = {}) { return this.invalidate( () => Keys.config.eachWithSetting(setting), () => this.git().setConfig(setting, value, options), + {globally: options.global}, ); } @@ -930,14 +935,14 @@ export default class Present extends State { return this.cache; } - invalidate(spec, body) { + invalidate(spec, body, options = {}) { return body().then( result => { - this.acceptInvalidation(spec); + this.acceptInvalidation(spec, options); return result; }, err => { - this.acceptInvalidation(spec); + this.acceptInvalidation(spec, options); return Promise.reject(err); }, ); @@ -1048,168 +1053,3 @@ class Cache { this.emitter.dispose(); } } - -class CacheKey { - constructor(primary, groups = []) { - this.primary = primary; - this.groups = groups; - } - - getPrimary() { - return this.primary; - } - - getGroups() { - return this.groups; - } - - removeFromCache(cache, withoutGroup = null) { - cache.removePrimary(this.getPrimary()); - - const groups = this.getGroups(); - for (let i = 0; i < groups.length; i++) { - const group = groups[i]; - if (group === withoutGroup) { - continue; - } - - cache.removeFromGroup(group, this); - } - } - - /* istanbul ignore next */ - toString() { - return `CacheKey(${this.primary})`; - } -} - -class GroupKey { - constructor(group) { - this.group = group; - } - - removeFromCache(cache) { - for (const matchingKey of cache.keysInGroup(this.group)) { - matchingKey.removeFromCache(cache, this.group); - } - } - - /* istanbul ignore next */ - toString() { - return `GroupKey(${this.group})`; - } -} - -const Keys = { - statusBundle: new CacheKey('status-bundle'), - - stagedChanges: new CacheKey('staged-changes'), - - filePatch: { - _optKey: ({staged}) => (staged ? 's' : 'u'), - - oneWith: (fileName, options) => { // <-- Keys.filePatch - const optKey = Keys.filePatch._optKey(options); - const baseCommit = options.baseCommit || 'head'; - - const extraGroups = []; - if (options.baseCommit) { - extraGroups.push(`file-patch:base-nonhead:path-${fileName}`); - extraGroups.push('file-patch:base-nonhead'); - } else { - extraGroups.push('file-patch:base-head'); - } - - return new CacheKey(`file-patch:${optKey}:${baseCommit}:${fileName}`, [ - 'file-patch', - `file-patch:opt-${optKey}`, - `file-patch:opt-${optKey}:path-${fileName}`, - ...extraGroups, - ]); - }, - - eachWithFileOpts: (fileNames, opts) => { - const keys = []; - for (let i = 0; i < fileNames.length; i++) { - for (let j = 0; j < opts.length; j++) { - keys.push(new GroupKey(`file-patch:opt-${Keys.filePatch._optKey(opts[j])}:path-${fileNames[i]}`)); - } - } - return keys; - }, - - eachNonHeadWithFiles: fileNames => { - return fileNames.map(fileName => new GroupKey(`file-patch:base-nonhead:path-${fileName}`)); - }, - - allAgainstNonHead: new GroupKey('file-patch:base-nonhead'), - - eachWithOpts: (...opts) => opts.map(opt => new GroupKey(`file-patch:opt-${Keys.filePatch._optKey(opt)}`)), - - all: new GroupKey('file-patch'), - }, - - index: { - oneWith: fileName => new CacheKey(`index:${fileName}`, ['index']), - - all: new GroupKey('index'), - }, - - lastCommit: new CacheKey('last-commit'), - - recentCommits: new CacheKey('recent-commits'), - - authors: new CacheKey('authors'), - - branches: new CacheKey('branches'), - - headDescription: new CacheKey('head-description'), - - remotes: new CacheKey('remotes'), - - config: { - _optKey: options => (options.local ? 'l' : ''), - - oneWith: (setting, options) => { - const optKey = Keys.config._optKey(options); - return new CacheKey(`config:${optKey}:${setting}`, ['config', `config:${optKey}`]); - }, - - eachWithSetting: setting => [ - Keys.config.oneWith(setting, {local: true}), - Keys.config.oneWith(setting, {local: false}), - ], - - all: new GroupKey('config'), - }, - - blob: { - oneWith: sha => new CacheKey(`blob:${sha}`, ['blob']), - }, - - // Common collections of keys and patterns for use with invalidate(). - - workdirOperationKeys: fileNames => [ - Keys.statusBundle, - ...Keys.filePatch.eachWithFileOpts(fileNames, [{staged: false}]), - ], - - cacheOperationKeys: fileNames => [ - ...Keys.workdirOperationKeys(fileNames), - ...Keys.filePatch.eachWithFileOpts(fileNames, [{staged: true}]), - ...fileNames.map(Keys.index.oneWith), - Keys.stagedChanges, - ], - - headOperationKeys: () => [ - Keys.headDescription, - Keys.branches, - ...Keys.filePatch.eachWithOpts({staged: true}), - Keys.filePatch.allAgainstNonHead, - Keys.stagedChanges, - Keys.lastCommit, - Keys.recentCommits, - Keys.authors, - Keys.statusBundle, - ], -}; diff --git a/lib/models/repository-states/state.js b/lib/models/repository-states/state.js index 9152b98e55..38346acb42 100644 --- a/lib/models/repository-states/state.js +++ b/lib/models/repository-states/state.js @@ -1,8 +1,11 @@ +import path from 'path'; import {nullCommit} from '../commit'; import BranchSet from '../branch-set'; import RemoteSet from '../remote-set'; import {nullOperationStates} from '../operation-states'; import MultiFilePatch from '../patch/multi-file-patch'; +import CompositeGitStrategy from '../../composite-git-strategy'; +import {Keys} from './cache/keys'; /** * Map of registered subclasses to allow states to transition to one another without circular dependencies. @@ -210,8 +213,12 @@ export default class State { // Configuration - setConfig(option, value, {replaceAll} = {}) { - return unsupportedOperationPromise(this, 'setConfig'); + async setConfig(optionName, value, options = {}) { + await this.workdirlessGit().setConfig(optionName, value, options); + this.didUpdate(); + if (options.global) { + this.didGloballyInvalidate(() => Keys.config.eachWithSetting(optionName)); + } } unsetConfig(option) { @@ -357,15 +364,15 @@ export default class State { } getAheadCount(branchName) { - return Promise.resolve(null); + return Promise.resolve(0); } getBehindCount(branchName) { - return Promise.resolve(null); + return Promise.resolve(0); } - getConfig(option, {local} = {}) { - return Promise.resolve(null); + getConfig(optionName, options) { + return this.workdirlessGit().getConfig(optionName, options); } // Direct blob access @@ -412,6 +419,10 @@ export default class State { return null; } + acceptInvalidation() { + return null; + } + // Internal ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Non-delegated methods that provide subclasses with convenient access to Repository properties. @@ -467,9 +478,21 @@ export default class State { return this.repository.emitter.emit('did-update'); } + didGloballyInvalidate(spec) { + return this.repository.emitter.emit('did-globally-invalidate', spec); + } + // Direct git access // Non-delegated git operations for internal use within states. + workdirlessGit() { + // We want to report config values from the global or system level, but never local ones (unless we're in the + // present state, which overrides this). + // The filesystem root is the most likely and convenient place for this to be true. + const {root} = path.parse(process.cwd()); + return CompositeGitStrategy.create(root); + } + /* istanbul ignore next */ directResolveDotGitDir() { return Promise.resolve(null); diff --git a/lib/models/repository.js b/lib/models/repository.js index e46a7d238c..a34ab6a7c3 100644 --- a/lib/models/repository.js +++ b/lib/models/repository.js @@ -108,6 +108,10 @@ export default class Repository { return this.emitter.on('did-update', callback); } + onDidGloballyInvalidate(callback) { + return this.emitter.on('did-globally-invalidate', callback); + } + onPullError(callback) { return this.emitter.on('pull-error', callback); } @@ -372,6 +376,7 @@ const delegates = [ 'getCommitMessage', 'fetchCommitMessageTemplate', 'getCache', + 'acceptInvalidation', ]; for (let i = 0; i < delegates.length; i++) { diff --git a/lib/models/workdir-cache.js b/lib/models/workdir-cache.js index 8a1f229040..a6fbc41c3a 100644 --- a/lib/models/workdir-cache.js +++ b/lib/models/workdir-cache.js @@ -38,10 +38,15 @@ export default class WorkdirCache { const startDir = (await fs.stat(startPath)).isDirectory() ? startPath : path.dirname(startPath); // Within a git worktree, return a non-empty string containing the path to the worktree root. - // Within a gitdir or outside of a worktree, return an empty string. - // Throw if startDir does not exist. - const topLevel = await CompositeGitStrategy.create(startDir).exec(['rev-parse', '--show-toplevel']); - if (/\S/.test(topLevel)) { + // Throw if a gitdir, outside of a worktree, or startDir does not exist. + const topLevel = await CompositeGitStrategy.create(startDir).exec(['rev-parse', '--show-toplevel']) + .catch(e => { + if (/this operation must be run in a work tree/.test(e.stdErr)) { + return null; + } + throw e; + }); + if (topLevel !== null) { return toNativePathSep(topLevel.trim()); } diff --git a/lib/models/workdir-context-pool.js b/lib/models/workdir-context-pool.js index 9bb2f1d891..0ee6e88e4e 100644 --- a/lib/models/workdir-context-pool.js +++ b/lib/models/workdir-context-pool.js @@ -67,6 +67,15 @@ export default class WorkdirContextPool { forwardEvent('onDidUpdateRepository', 'did-update-repository'); forwardEvent('onDidDestroyRepository', 'did-destroy-repository'); + // Propagate global cache invalidations across all resident contexts + disposable.add(context.getRepository().onDidGloballyInvalidate(spec => { + this.withResidentContexts((_workdir, eachContext) => { + if (eachContext !== context) { + eachContext.getRepository().acceptInvalidation(spec); + } + }); + })); + if (!silenceEmitter) { this.emitter.emit('did-change-contexts', {added: new Set([directory])}); } diff --git a/lib/mutations/__generated__/addPrReviewCommentMutation.graphql.js b/lib/mutations/__generated__/addPrReviewCommentMutation.graphql.js index f96bf7ceee..ff1010e51a 100644 --- a/lib/mutations/__generated__/addPrReviewCommentMutation.graphql.js +++ b/lib/mutations/__generated__/addPrReviewCommentMutation.graphql.js @@ -1,6 +1,6 @@ /** * @flow - * @relayHash 5a30b39c1ee67b733c8fac4b35989e13 + * @relayHash 538bae86191b750e560b6ad8e2979c29 */ /* eslint-disable */ @@ -10,7 +10,7 @@ /*:: import type { ConcreteRequest } from 'relay-runtime'; type emojiReactionsController_reactable$ref = any; -export type CommentAuthorAssociation = "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIMER" | "FIRST_TIME_CONTRIBUTOR" | "MEMBER" | "NONE" | "OWNER" | "%future added value"; +export type CommentAuthorAssociation = "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIMER" | "FIRST_TIME_CONTRIBUTOR" | "MANNEQUIN" | "MEMBER" | "NONE" | "OWNER" | "%future added value"; export type AddPullRequestReviewCommentInput = {| pullRequestId?: ?string, pullRequestReviewId?: ?string, diff --git a/lib/prop-types.js b/lib/prop-types.js index 29fc33f8e1..243d1ad22b 100644 --- a/lib/prop-types.js +++ b/lib/prop-types.js @@ -1,5 +1,7 @@ import PropTypes from 'prop-types'; +export const TokenPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.symbol, PropTypes.instanceOf(Error)]); + export const DOMNodePropType = (props, propName, componentName) => { if (props[propName] instanceof HTMLElement) { return null; diff --git a/lib/relay-network-layer-manager.js b/lib/relay-network-layer-manager.js index 0d359936b1..db77e0a56d 100644 --- a/lib/relay-network-layer-manager.js +++ b/lib/relay-network-layer-manager.js @@ -18,7 +18,7 @@ function logRatelimitApi(headers) { const resetsIn = moment.unix(parseInt(resets, 10)).from(); // eslint-disable-next-line no-console - console.debug(`GitHub API Rate Limit: ${remaining}/${total} — resets ${resetsIn}`); + console.debug(`GitHub API Rate Limiting Info: ${remaining}/${total} requests left — resets ${resetsIn}`); } export function expectRelayQuery(operationPattern, response) { diff --git a/lib/views/__generated__/checkRunView_checkRun.graphql.js b/lib/views/__generated__/checkRunView_checkRun.graphql.js index fb65d3e962..0f2b649dfd 100644 --- a/lib/views/__generated__/checkRunView_checkRun.graphql.js +++ b/lib/views/__generated__/checkRunView_checkRun.graphql.js @@ -8,7 +8,7 @@ /*:: import type { ReaderFragment } from 'relay-runtime'; -export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; +export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "STARTUP_FAILURE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; export type CheckStatusState = "COMPLETED" | "IN_PROGRESS" | "QUEUED" | "REQUESTED" | "%future added value"; import type { FragmentReference } from "relay-runtime"; declare export opaque type checkRunView_checkRun$ref: FragmentReference; diff --git a/lib/views/__generated__/checkSuiteView_checkSuite.graphql.js b/lib/views/__generated__/checkSuiteView_checkSuite.graphql.js index c827d6f7c5..b93e032a3b 100644 --- a/lib/views/__generated__/checkSuiteView_checkSuite.graphql.js +++ b/lib/views/__generated__/checkSuiteView_checkSuite.graphql.js @@ -8,7 +8,7 @@ /*:: import type { ReaderFragment } from 'relay-runtime'; -export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; +export type CheckConclusionState = "ACTION_REQUIRED" | "CANCELLED" | "FAILURE" | "NEUTRAL" | "SKIPPED" | "STALE" | "STARTUP_FAILURE" | "SUCCESS" | "TIMED_OUT" | "%future added value"; export type CheckStatusState = "COMPLETED" | "IN_PROGRESS" | "QUEUED" | "REQUESTED" | "%future added value"; import type { FragmentReference } from "relay-runtime"; declare export opaque type checkSuiteView_checkSuite$ref: FragmentReference; diff --git a/lib/views/actionable-review-view.js b/lib/views/actionable-review-view.js index aa92696ed1..888837db67 100644 --- a/lib/views/actionable-review-view.js +++ b/lib/views/actionable-review-view.js @@ -124,28 +124,17 @@ export default class ActionableReviewView extends React.Component { } } - reportAbuse = (commentUrl, author) => { - return new Promise((resolve, reject) => { - const url = 'https://github.com/contact/report-content?report=' + - `${encodeURIComponent(author)}&content_url=${encodeURIComponent(commentUrl)}`; - shell.openExternal(url, {}, err => { - if (err) { reject(err); } else { - resolve(); - addEvent('report-abuse', {package: 'github', component: this.constructor.name}); - } - }); - }); + reportAbuse = async (commentUrl, author) => { + const url = 'https://github.com/contact/report-content?report=' + + `${encodeURIComponent(author)}&content_url=${encodeURIComponent(commentUrl)}`; + + await shell.openExternal(url); + addEvent('report-abuse', {package: 'github', component: this.constructor.name}); } - openOnGitHub = url => { - return new Promise((resolve, reject) => { - shell.openExternal(url, {}, err => { - if (err) { reject(err); } else { - resolve(); - addEvent('open-comment-in-browser', {package: 'github', component: this.constructor.name}); - } - }); - }); + openOnGitHub = async url => { + await shell.openExternal(url); + addEvent('open-comment-in-browser', {package: 'github', component: this.constructor.name}); } showActionsMenu = (event, content, author) => { diff --git a/lib/views/directory-select.js b/lib/views/directory-select.js index e22137771f..0f62c24a67 100644 --- a/lib/views/directory-select.js +++ b/lib/views/directory-select.js @@ -45,15 +45,13 @@ export default class DirectorySelect extends React.Component { ); } - chooseDirectory = () => new Promise(resolve => { - this.props.showOpenDialog(this.props.currentWindow, { + chooseDirectory = async () => { + const {filePaths} = await this.props.showOpenDialog(this.props.currentWindow, { defaultPath: this.props.buffer.getText(), properties: ['openDirectory', 'createDirectory', 'promptToCreate'], - }, filePaths => { - if (filePaths !== undefined) { - this.props.buffer.setText(filePaths[0]); - } - resolve(); }); - }); + if (filePaths.length) { + this.props.buffer.setText(filePaths[0]); + } + } } diff --git a/lib/views/git-identity-view.js b/lib/views/git-identity-view.js index 83e648e78f..0d8cfd46d5 100644 --- a/lib/views/git-identity-view.js +++ b/lib/views/git-identity-view.js @@ -7,8 +7,11 @@ export default class GitIdentityView extends React.Component { // Model usernameBuffer: PropTypes.object.isRequired, emailBuffer: PropTypes.object.isRequired, + canWriteLocal: PropTypes.bool.isRequired, // Action methods + setLocal: PropTypes.func.isRequired, + setGlobal: PropTypes.func.isRequired, close: PropTypes.func.isRequired, }; @@ -19,19 +22,29 @@ export default class GitIdentityView extends React.Component { Git Identity

- Please set the username and email address that you wish to use to - author git commits. + Please set the username and email address that you wish to use to author git commits. This will write to the + user.name and user.email values in your git configuration at the chosen scope.

+ +
diff --git a/lib/views/git-tab-view.js b/lib/views/git-tab-view.js index 0d20431c53..e149010a1f 100644 --- a/lib/views/git-tab-view.js +++ b/lib/views/git-tab-view.js @@ -54,6 +54,8 @@ export default class GitTabView extends React.Component { tooltips: PropTypes.object.isRequired, toggleIdentityEditor: PropTypes.func.isRequired, + setLocalIdentity: PropTypes.func.isRequired, + setGlobalIdentity: PropTypes.func.isRequired, closeIdentityEditor: PropTypes.func.isRequired, openInitializeDialog: PropTypes.func.isRequired, abortMerge: PropTypes.func.isRequired, @@ -267,6 +269,9 @@ export default class GitTabView extends React.Component { ); diff --git a/lib/views/git-timings-view.js b/lib/views/git-timings-view.js index 6f1b6b88ce..f689917673 100644 --- a/lib/views/git-timings-view.js +++ b/lib/views/git-timings-view.js @@ -322,16 +322,17 @@ class WaterfallWidget extends React.Component { this.setState(s => ({collapsed: !s.collapsed})); } - handleExportClick(e) { + async handleExportClick(e) { e.preventDefault(); const json = JSON.stringify(this.props.markers.map(m => m.serialize()), null, ' '); const buffer = new TextBuffer({text: json}); - dialog.showSaveDialog({ + const {filePath} = await dialog.showSaveDialog({ defaultPath: 'git-timings.json', - }, filename => { - if (!filename) { return; } - buffer.saveAs(filename); }); + if (!filePath) { + return; + } + buffer.saveAs(filePath); } } @@ -419,22 +420,23 @@ export default class GitTimingsView extends React.Component { ); } - handleImportClick(e) { + async handleImportClick(e) { e.preventDefault(); - dialog.showOpenDialog({ + const {filePaths} = await dialog.showOpenDialog({ properties: ['openFile'], - }, async filenames => { - if (!filenames) { return; } - const filename = filenames[0]; - try { - const contents = await fs.readFile(filename, {encoding: 'utf8'}); - const data = JSON.parse(contents); - const restoredMarkers = data.map(item => Marker.deserialize(item)); - GitTimingsView.restoreGroup(restoredMarkers); - } catch (_err) { - atom.notifications.addError(`Could not import timings from ${filename}`); - } }); + if (!filePaths.length) { + return; + } + const filename = filePaths[0]; + try { + const contents = await fs.readFile(filename, {encoding: 'utf8'}); + const data = JSON.parse(contents); + const restoredMarkers = data.map(item => Marker.deserialize(item)); + GitTimingsView.restoreGroup(restoredMarkers); + } catch (_err) { + atom.notifications.addError(`Could not import timings from ${filename}`); + } } serialize() { diff --git a/lib/views/github-tab-view.js b/lib/views/github-tab-view.js index 266bf4c93a..904defddb9 100644 --- a/lib/views/github-tab-view.js +++ b/lib/views/github-tab-view.js @@ -2,18 +2,20 @@ import React from 'react'; import PropTypes from 'prop-types'; import { - GithubLoginModelPropType, RefHolderPropType, RemoteSetPropType, RemotePropType, BranchSetPropType, BranchPropType, + TokenPropType, EndpointPropType, RefHolderPropType, + RemoteSetPropType, RemotePropType, BranchSetPropType, BranchPropType, RefresherPropType, } from '../prop-types'; import LoadingView from './loading-view'; +import QueryErrorView from '../views/query-error-view'; +import GithubLoginView from '../views/github-login-view'; import RemoteSelectorView from './remote-selector-view'; import GithubTabHeaderContainer from '../containers/github-tab-header-container'; -import GithubTabHeaderController from '../controllers/github-tab-header-controller'; import GitHubBlankNoLocal from './github-blank-nolocal'; import GitHubBlankUninitialized from './github-blank-uninitialized'; import GitHubBlankNoRemote from './github-blank-noremote'; import RemoteContainer from '../containers/remote-container'; -import {nullAuthor} from '../models/author'; +import {UNAUTHENTICATED, INSUFFICIENT} from '../shared/keytar-strategy'; export default class GitHubTabView extends React.Component { static propTypes = { @@ -21,7 +23,8 @@ export default class GitHubTabView extends React.Component { rootHolder: RefHolderPropType.isRequired, // Connection - loginModel: GithubLoginModelPropType.isRequired, + endpoint: EndpointPropType.isRequired, + token: TokenPropType, // Workspace workspace: PropTypes.object.isRequired, @@ -43,6 +46,9 @@ export default class GitHubTabView extends React.Component { pushInProgress: PropTypes.bool.isRequired, // Event Handlers + handleLogin: PropTypes.func.isRequired, + handleLogout: PropTypes.func.isRequired, + handleTokenRetry: PropTypes.func.isRequired, handleWorkDirSelect: PropTypes.func, handlePushBranch: PropTypes.func.isRequired, handleRemoteSelect: PropTypes.func.isRequired, @@ -65,6 +71,35 @@ export default class GitHubTabView extends React.Component { } renderRemote() { + if (this.props.token === null) { + return ; + } + + if (this.props.token === UNAUTHENTICATED) { + return ; + } + + if (this.props.token === INSUFFICIENT) { + return ( + +

+ Your token no longer has sufficient authorizations. Please re-authenticate and generate a new one. +

+
+ ); + } + + if (this.props.token instanceof Error) { + return ( + + ); + } + if (this.props.isLoading) { return ; } @@ -92,22 +127,22 @@ export default class GitHubTabView extends React.Component { return ( this.props.handlePushBranch(this.props.currentBranch, this.props.currentRemote)} /> ); @@ -130,29 +165,11 @@ export default class GitHubTabView extends React.Component { } renderHeader() { - if (this.props.currentRemote.isPresent()) { - return ( - this.props.changeWorkingDirectory(e.target.value)} - onDidChangeWorkDirs={this.props.onDidChangeWorkDirs} - /> - ); - } return ( - { - shell.openExternal(uri, {}, err => { - if (err) { - reject(err); - } else { - addEvent('open-issueish-in-browser', {package: 'github', from: 'issueish-link'}); - resolve(); - } - }); - }); +export async function openLinkInBrowser(uri) { + await shell.openExternal(uri); + addEvent('open-issueish-in-browser', {package: 'github', from: 'issueish-link'}); } function getAtomUriForGithubUrl(githubUrl) { diff --git a/lib/worker-manager.js b/lib/worker-manager.js index 409a1085e6..17b9588191 100644 --- a/lib/worker-manager.js +++ b/lib/worker-manager.js @@ -268,7 +268,7 @@ export class RendererProcess { this.onExecStarted = onExecStarted; this.win = new BrowserWindow({show: !!process.env.ATOM_GITHUB_SHOW_RENDERER_WINDOW, - webPreferences: {nodeIntegration: true}}); + webPreferences: {nodeIntegration: true, enableRemoteModule: true}}); this.webContents = this.win.webContents; // this.webContents.openDevTools(); diff --git a/package-lock.json b/package-lock.json index bc4350d171..cafe6d2056 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,9 @@ { "name": "github", - "version": "0.35.0", + "version": "0.36.10", "lockfileVersion": 1, "requires": true, "dependencies": { - "7zip": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/7zip/-/7zip-0.0.6.tgz", - "integrity": "sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA=", - "dev": true - }, "@atom/babel-plugin-chai-assert-async": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@atom/babel-plugin-chai-assert-async/-/babel-plugin-chai-assert-async-1.0.0.tgz", @@ -128,21 +122,9 @@ } }, "@babel/compat-data": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz", - "integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==", - "requires": { - "browserslist": "^4.8.2", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.5.tgz", + "integrity": "sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg==" }, "@babel/core": { "version": "7.3.4", @@ -218,21 +200,21 @@ } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.0.tgz", - "integrity": "sha512-KbBloNiBHM3ZyHg1ViDRs4QcnAunwMJ+rLpAEA8l3cWb3Z1xof7ag1iHvX16EwhUfaTG3+YSvTRPv4xHIrseUQ==", + "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==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -370,14 +352,13 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.1.tgz", - "integrity": "sha512-Fsrljg8DHSdnKSzC0YFopX7lseRpVfWMYuC1Dnvf7tw972E2KDjZ4XEaqjO9aJL0sLcG4KNRXxowDxHYIcZ+Cw==", - "requires": { - "@babel/compat-data": "^7.8.1", - "browserslist": "^4.8.2", - "invariant": "^2.2.4", - "levenary": "^1.1.0", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "requires": { + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", "semver": "^5.5.0" }, "dependencies": { @@ -521,12 +502,33 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.0.tgz", - "integrity": "sha512-vJj2hPbxxLUWJEV86iZiac5curAnC3ZVc+rFmFeWZigUOcuCPpbF+KxoEmxrkmuCGylHFF9t4lkpcDUcxnhQ5g==", + "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==", "requires": { - "@babel/helper-regex": "^7.8.0", - "regexpu-core": "^4.6.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.1" + }, + "dependencies": { + "@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==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-define-map": { @@ -591,96 +593,20 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.0.tgz", - "integrity": "sha512-w4mRQqKAh4M7BSLwvDMm8jYFroEzpqMCtXDhFHP+kNjMIQWpbC6b0Q/RUQsJNSf54rIx6XMdci1Stf60DWw+og==", + "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==", "requires": { - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/types": "^7.12.1" }, "dependencies": { - "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", - "requires": { - "@babel/highlight": "^7.8.0" - } - }, - "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", - "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", - "requires": { - "@babel/types": "^7.8.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", - "requires": { - "@babel/types": "^7.8.0" - } - }, - "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" - }, - "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", - "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" - } - }, - "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", - "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -843,119 +769,41 @@ "@babel/helper-plugin-utils": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, "@babel/helper-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.0.tgz", - "integrity": "sha512-haD8fRsPtyFZkbtxBIaGBBHRtbn0YsyecdYrxNgO0Bl6SlGokJPQX9M2tDuVbeQBYHZVLUPMSwGQn4obHevsMQ==", + "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.13" + "lodash": "^4.17.19" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.0.tgz", - "integrity": "sha512-+aKyBd4oHAaIZgOLq/uLjkUz7ExZ0ppdNBc8Qr72BmtKNAy3A6EJa/ifjj0//CIzQtUDPs3E6HjKM2cV6bnXsQ==", + "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==", "requires": { - "@babel/helper-annotate-as-pure": "^7.8.0", - "@babel/helper-wrap-function": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" }, "dependencies": { - "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", - "requires": { - "@babel/highlight": "^7.8.0" - } - }, "@babel/helper-annotate-as-pure": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.0.tgz", - "integrity": "sha512-WWj+1amBdowU2g18p3/KUc1Y5kWnaNm1paohq2tT4/RreeMNssYkv6ul9wkE2iIqjwLBwNMZGH4pTGlMSUqMMg==", - "requires": { - "@babel/types": "^7.8.0" - } - }, - "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", - "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", - "requires": { - "@babel/types": "^7.8.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", - "requires": { - "@babel/types": "^7.8.0" - } - }, - "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "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==", "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" - }, - "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", - "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" - } - }, - "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", - "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -1110,6 +958,26 @@ } } }, + "@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==", + "requires": { + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, "@babel/helper-split-export-declaration": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", @@ -1118,99 +986,119 @@ "@babel/types": "^7.0.0" } }, + "@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==" + }, + "@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==" + }, "@babel/helper-wrap-function": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.0.tgz", - "integrity": "sha512-2j6idN2jt8Y+8nJ4UPN/6AZa53DAkcETMVmroJQh50qZc59PuQKVjgOIIqmrLoQf6Ia9bs90MHRcID1OW5tfag==", + "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==", "requires": { - "@babel/helper-function-name": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "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==", "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.11.0" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", - "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "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", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -1242,19 +1130,19 @@ "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.0.tgz", - "integrity": "sha512-8vIQf8JYced7gCeKDsGETNGKE+zdD/JmP1LBlRn+w3UXc1aSpZv2Y330bB/fnOEbUgPbuFv+IEi+gopg+Fu0kQ==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-remap-async-to-generator": "^7.8.0", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -1275,50 +1163,98 @@ } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.0.tgz", - "integrity": "sha512-YzMq0AqeTR4Mh2pz3GrCWqhcEV38HgUMMR/56/YR5GPc4Y2p1KJ4Le6j92vMnW8TJqVj+qJz/KDNglpMeww9Yg==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "dependencies": { + "@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/plugin-proposal-json-strings": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.0.tgz", - "integrity": "sha512-pSpuhwn926vtNeUH2FHx1OzIXaUMgklG0MzlFZJVEg37fB904gOxN572NgBae+KDwFyZDpkLMyEkVA011lBJrQ==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "dependencies": { + "@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/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.0.tgz", - "integrity": "sha512-cQMI+RQdcK2IyMm13NKKFCYfOSBUtFxEeRBOdFCi2Pubv/CpkrCubc/ikdeKMT6Lu+uQ+lNSDEJvDCOQZkUy0g==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "dependencies": { + "@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==" } } }, @@ -1347,65 +1283,216 @@ } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.0.tgz", - "integrity": "sha512-tHP3eez6TrpPJYttBZ/6uItRbIuXUIDpQ9xwvzKwR+RboWGMJ7WzFC5dDJ3vjLuCx0/DG1tM0MVkmgcBybth9w==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/plugin-proposal-optional-chaining": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.0.tgz", - "integrity": "sha512-PNBHxPHE91m+LLOdGwlvyGicWfrMgiVwng5WdB3CMjd61+vn3vPw0GbgECIAUCZnyi7Jqs5htUIZRztGuV8/5g==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/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==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@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==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@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==", + "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-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==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@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-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==", + "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-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==", + "requires": { + "@babel/types": "^7.11.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==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "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", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } } } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.0.tgz", - "integrity": "sha512-3oK0Qt5w4arb+es3rWBribDbtc0TYJP7dFZ1dXcYul3cXderqfIOoSx9YUC1oD208nJwJO/++fvrgLmkYSbe8A==", + "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==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/plugin-syntax-async-generators": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.0.tgz", - "integrity": "sha512-a8w8k7pK8nYhem07rXdAq03T+DlTX8LFojUptrh9JEx80AgLqGiuoFIyQOGTWif39kFnDOQqbzl1s6KQqrfV+A==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -1419,17 +1506,32 @@ } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.0.tgz", - "integrity": "sha512-Mx2RzpCHJaBfmFdA2abXDKRHVJdzJ6R0Wqwb6TxCgM7NRR5wcC4cyiAsRL7Ga+lwG8GG1cKvb+4ENjic8y15jA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/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", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@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==" } } }, @@ -1443,17 +1545,17 @@ } }, "@babel/plugin-syntax-json-strings": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.0.tgz", - "integrity": "sha512-LPykaAbH86L5NnDfCRSpNxtEHZk+6GaFzXfWEFU/6R4v69EXQr6GOp7hwH+Uw0QlYVN++s6TukTJ3flFcspahA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -1466,18 +1568,48 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@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/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.0.tgz", - "integrity": "sha512-Rv2hnBToN6rbA9hO2a4vtwXZLzNa+TWkoSIMMvUezFz5+D9NPeX7SFrArwtFzzbwndmWiqboTr5rNpzAz0MPpA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@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==" } } }, @@ -1491,47 +1623,47 @@ } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.0.tgz", - "integrity": "sha512-EIgJVy+u1RvR2gJfX4ReLwAupO/twllUue1wPrRxhu18+eC3bGTEcOSXLQdaE9ya9NG1rE0eQs0GSiloUGFEwg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/plugin-syntax-optional-chaining": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.0.tgz", - "integrity": "sha512-LV1c+TTAO8Vawe3t+WXBHYWbS7endP8MSlqKPKEZOyWPEJX2akl3jfvFG828/OE7RpyoC3JXfLJDFj/jN7A8hg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/plugin-syntax-top-level-await": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.0.tgz", - "integrity": "sha512-iXR/Cw32fMfWlD1sK2zD/nXtuLStkalRv+xee6VrX84CFrn2LKwb/EOs/4UaDNUpUsws8YZYKeQjPagacFquug==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -1545,35 +1677,35 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.0.tgz", - "integrity": "sha512-9dvBvJnEdsDWYMrykoMyLNVRPGoub6SFlARtsYgSQ1riTjnyBjhctihSME4XsSku86F59PDeFpC9PCU+9I154w==", + "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==", "requires": { - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-remap-async-to-generator": "^7.8.0" + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "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.8.0" + "@babel/types": "^7.12.5" } }, "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -1692,49 +1824,49 @@ } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.0.tgz", - "integrity": "sha512-pq/XLkDB4MPvTe9ktHJInfWksalXogrIGRZJUG7RiDXhEfdNrlducoMPbACZQuCFtelVgVpD0VyreiY0l38G7g==", + "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==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/plugin-transform-duplicate-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.0.tgz", - "integrity": "sha512-REtYWvpP4TDw4oVeP01vQJcAeewjgk8/i7tPFP11vUjvarUGGyxJLeq79WEnIdnKPQJirZaoDRT4kEWEdSWkDw==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/plugin-transform-exponentiation-operator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.0.tgz", - "integrity": "sha512-vaDgF3gPLzVcoe3UZqnra6FA7O797sZc+UCHPd9eQTI34cPtpCA270LzopIXS3Fhc3UmFrijLmre9mHTmUKVgg==", + "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==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -1836,100 +1968,181 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.0.tgz", - "integrity": "sha512-mFr1O3TaDL4XozM3AzNPz9AsxzzjTxwn4aOShYP5TlO+4rufvjagV2KKDTPMZTQm1ZA/C/PxJDsDekEnnUGz5A==", + "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==", "requires": { - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@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==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.1" } }, "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "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.8.0" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz", - "integrity": "sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==", + "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==", "requires": { - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-simple-access": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0", - "lodash": "^4.17.13" + "@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-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==", + "requires": { + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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-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==", + "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-simple-access": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz", - "integrity": "sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "requires": { - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.11.0" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "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", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "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", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } } } }, @@ -1946,229 +2159,384 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.0.tgz", - "integrity": "sha512-tKF9KLiIsiKyWTVU0yo+NcNAylGn7euggYwXw63/tMxGtDTPsB9Y7Ecqv4EoXEwtoJOJ0Lewf17oaWQtindxIA==", + "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==", "requires": { - "@babel/helper-hoist-variables": "^7.8.0", - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@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-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@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==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.0.tgz", - "integrity": "sha512-jDl66KvuklTXUADcoXDMur1jDtAZUZZkzLIaQ54+z38ih8C0V0hC56hMaoVoyoxN60MwQmmrHctBwcLqP0c/Lw==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.1" } }, "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "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.8.0" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz", - "integrity": "sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==", + "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==", "requires": { - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-simple-access": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0", - "lodash": "^4.17.13" + "@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-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==", + "requires": { + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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-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==", + "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-simple-access": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz", - "integrity": "sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "requires": { - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.11.0" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "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", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "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", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } } } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.0.tgz", - "integrity": "sha512-lAwNfXwmfTy7fl2XOyoVpMXnLkJANgH0vdSYNFcS4RuJPBtHfunGA+Y0L7wsHmfPzyVYt8sUglLjaWtdZMNJNg==", + "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==", "requires": { - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@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==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.1" } }, "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "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.8.0" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz", - "integrity": "sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==", + "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==", "requires": { - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-simple-access": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0", - "lodash": "^4.17.13" + "@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-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==", + "requires": { + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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-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==", + "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-simple-access": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz", - "integrity": "sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "requires": { - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.11.0" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "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", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.0.tgz", - "integrity": "sha512-kq1rxQ1HviCP13SMGZ4WjBBpdogTGK7yn/g/+p+g1AQledgHOWKVeMY1DwKYGlGJ/grDGTOqpJLF1v3Sb7ghKA==", + "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==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.12.1" } }, "@babel/plugin-transform-new-target": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.0.tgz", - "integrity": "sha512-hH1Afz9Xy/wkcxhoI0vYw48kTBJqYUhMmhp3SLI1p817iByM6ItH4LS8tZatDAIKmAQAXj8d3Ups1BgVJECDrA==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -2304,25 +2672,25 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.0.tgz", - "integrity": "sha512-n88GT8PZuOHWxqxCJORW3g1QaYzQhHu5sEslxYeQkHVoewfnfuWN37t7YGaRLaNUdaZUlRPXhDcLGT7zBa/u0g==", + "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==", "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.0.tgz", - "integrity": "sha512-DnshRyDTXZhmAgO2c1QKZI4CfZjoP2t3fSwRsnbCP9P/FSBpf9I7ovnAELswklw5OeY+/D/JIiaGLoUt2II3LA==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -2345,18 +2713,18 @@ } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.0.tgz", - "integrity": "sha512-uksok0Bqox8YeIRFhr6RRtlBXeGpN1ogiEVjEd7A7rVLPZBXKGbL7kODpE7MQ+avjDLv5EEKtDCeYuWZK7FF7g==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-regex": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -2371,33 +2739,48 @@ } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.0.tgz", - "integrity": "sha512-rEUBEFzsA9mCS2r7EtXFlM/6GqtzgLdC4WVYM9fIgJX+HcSJ8oMmj8LinfKhbo0ipRauvUM2teE2iNDNqDwO1g==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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/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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@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/plugin-transform-unicode-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.0.tgz", - "integrity": "sha512-qDg8wsnE47B/Sj8ZtOndPHrGBxJMssZJ71SzXrItum9n++iVFN7kYuJO+OHhjom7+/or0zzYqvJNzCkUjyNKqg==", + "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==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } }, @@ -2412,412 +2795,459 @@ } }, "@babel/preset-env": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.2.tgz", - "integrity": "sha512-AF2YUl2bGsLWTtFL68upTTB7nDo05aEcKjHmXJE+aXRvsx5K+9yRsHQP3MjnTrLOWe/eFyUr93dfILROsKC4eg==", - "requires": { - "@babel/compat-data": "^7.8.0", - "@babel/helper-compilation-targets": "^7.8.0", - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/plugin-proposal-async-generator-functions": "^7.8.0", - "@babel/plugin-proposal-dynamic-import": "^7.8.0", - "@babel/plugin-proposal-json-strings": "^7.8.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-proposal-object-rest-spread": "^7.8.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.0", - "@babel/plugin-proposal-optional-chaining": "^7.8.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.0", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^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-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.0", - "@babel/plugin-transform-arrow-functions": "^7.8.0", - "@babel/plugin-transform-async-to-generator": "^7.8.0", - "@babel/plugin-transform-block-scoped-functions": "^7.8.0", - "@babel/plugin-transform-block-scoping": "^7.8.0", - "@babel/plugin-transform-classes": "^7.8.0", - "@babel/plugin-transform-computed-properties": "^7.8.0", - "@babel/plugin-transform-destructuring": "^7.8.0", - "@babel/plugin-transform-dotall-regex": "^7.8.0", - "@babel/plugin-transform-duplicate-keys": "^7.8.0", - "@babel/plugin-transform-exponentiation-operator": "^7.8.0", - "@babel/plugin-transform-for-of": "^7.8.0", - "@babel/plugin-transform-function-name": "^7.8.0", - "@babel/plugin-transform-literals": "^7.8.0", - "@babel/plugin-transform-member-expression-literals": "^7.8.0", - "@babel/plugin-transform-modules-amd": "^7.8.0", - "@babel/plugin-transform-modules-commonjs": "^7.8.0", - "@babel/plugin-transform-modules-systemjs": "^7.8.0", - "@babel/plugin-transform-modules-umd": "^7.8.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.0", - "@babel/plugin-transform-new-target": "^7.8.0", - "@babel/plugin-transform-object-super": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.8.0", - "@babel/plugin-transform-property-literals": "^7.8.0", - "@babel/plugin-transform-regenerator": "^7.8.0", - "@babel/plugin-transform-reserved-words": "^7.8.0", - "@babel/plugin-transform-shorthand-properties": "^7.8.0", - "@babel/plugin-transform-spread": "^7.8.0", - "@babel/plugin-transform-sticky-regex": "^7.8.0", - "@babel/plugin-transform-template-literals": "^7.8.0", - "@babel/plugin-transform-typeof-symbol": "^7.8.0", - "@babel/plugin-transform-unicode-regex": "^7.8.0", - "@babel/types": "^7.8.0", - "browserslist": "^4.8.2", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.0", "semver": "^5.5.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.0.tgz", - "integrity": "sha512-WWj+1amBdowU2g18p3/KUc1Y5kWnaNm1paohq2tT4/RreeMNssYkv6ul9wkE2iIqjwLBwNMZGH4pTGlMSUqMMg==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.10.4" } }, - "@babel/helper-call-delegate": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.0.tgz", - "integrity": "sha512-Vi8K1LScr8ZgLicfuCNSE7JWUPG/H/9Bw9zn+3vQyy4vA54FEGTCuUTOXCFwmBM93OD6jHfjrQ6ZnivM5U+bHg==", + "@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==", "requires": { - "@babel/helper-hoist-variables": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@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-define-map": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.0.tgz", - "integrity": "sha512-Go06lUlZ4YImNEmdyAH5iO38yh5mbpOPSwA2PtV1vyczFhTZfX0OtzkiIL2pACo6AOYf89pLh42nhhDrqgzC3A==", + "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.8.0", - "@babel/types": "^7.8.0", - "lodash": "^4.17.13" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "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==", "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", - "requires": { - "@babel/types": "^7.8.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.0.tgz", - "integrity": "sha512-jDl66KvuklTXUADcoXDMur1jDtAZUZZkzLIaQ54+z38ih8C0V0hC56hMaoVoyoxN60MwQmmrHctBwcLqP0c/Lw==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.0.tgz", - "integrity": "sha512-0m1QabGrdXuoxX/g+KOAGndoHwskC70WweqHRQyCsaO67KOEELYh4ECcGw6ZGKjDKa5Y7SW4Qbhw6ly4Fah/jQ==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.12.1" } }, "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "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.8.0" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz", - "integrity": "sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==", + "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==", "requires": { - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-simple-access": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0", - "lodash": "^4.17.13" + "@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-optimise-call-expression": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.0.tgz", - "integrity": "sha512-aiJt1m+K57y0n10fTw+QXcCXzmpkG+o+NoQmAZqlZPstkTE0PZT+Z27QSd/6Gf00nuXJQO4NiJ0/YagSW5kC2A==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==" + "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-replace-supers": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.0.tgz", - "integrity": "sha512-R2CyorW4tcO3YzdkClLpt6MS84G+tPkOi0MmiCn1bvYVnmDpdl9R15XOi3NQW2mhOAEeBnuQ4g1Bh7pT2sX8fg==", + "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==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.0", - "@babel/helper-optimise-call-expression": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@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-simple-access": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz", - "integrity": "sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "requires": { - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "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==", "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.11.0" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" + }, + "@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-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==", + "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/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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.0.tgz", - "integrity": "sha512-dt89fDlkfkTrQcy5KavMQPyF2A6tR0kYp8HAnIoQv5hO34iAUffHghP/hMGd7Gf/+uYTmLQO0ar7peX1SUWyIA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.0.tgz", - "integrity": "sha512-9KfteDp9d8cF388dxFMOh3Dum41qpOVUPVjQhXGd1kPyQBE05FJgYndiAriML2yhMIbZ2bjgweh2nnvBXDH2MQ==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.0.tgz", - "integrity": "sha512-bim6gUfHq2kPN+aQst33ZEMeglpaUXAo6PWTZvOA8BOnWpNKgZcUzBvpZhh2ofL6YhZgzGoRwVVfzwynDEf47g==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.0.tgz", - "integrity": "sha512-FKTK4hzg7W950Yu9iqMl12WBixCmusMc5HBt3/ErvpFLnvr3/6mu/EBTZoCEJ0mw/lQUDfU01vTcZY9oEahlMg==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", - "lodash": "^4.17.13" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.0.tgz", - "integrity": "sha512-18RLDwKtGXCLLbf5V03GojebPH7dKYCmIBqQGhgfZDoYsyEzR9kMZ6IxlJP72K5ROC9ADa4KPI6ywuh7NfQOgQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.0", - "@babel/helper-define-map": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-optimise-call-expression": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-replace-supers": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", + "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==", + "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", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.0.tgz", - "integrity": "sha512-FaODHuQRdnWFVwxLPlTN85Lk/aitfvQBHTXahf58FnatCynfhkeNUO8ID+AqAxY4IJsZjeH6OnKDzcGfgKJcVw==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.0.tgz", - "integrity": "sha512-D+69HT//cE86aBTLULzSBFLC5A7HcPQzJPiny6P4SLHkDF750MylRKO3iWvdgvb+OSp5dOrOxwXajvaxk1ZfYA==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.0.tgz", - "integrity": "sha512-9j9g0qViCAo8E5qCBSaQdghymn7A9bRXSfS9jU7oLpYccYFZg9A+1KO8X+HV7fhJYH6mZ+e7MRg4p3sLo+RG6Q==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.0.tgz", - "integrity": "sha512-YL8Ol54UKeIyY1uUGfry+B9ppXAB3aVBB1gG9gxqhg/OBCPpV2QUNswmjvfmyXEdaWv8qODssBgX7on792h44w==", + "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==", "requires": { - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.0.tgz", - "integrity": "sha512-7UDPKG+uVltsZt98Hw+rMbLg772r8fQC6YJ2fNDckcpAXgIWqQbMCmCpfYo0hBNhdhqocM73auk4P/zziQshQw==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.0.tgz", - "integrity": "sha512-lJSdaWR56wmrosCiyqKFRVnLrFYoVAk2mtZAyegt7akeJky/gguv0Rukx9GV3XwHGuM1ZPE06cZMjNlcLp8LrQ==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.0.tgz", - "integrity": "sha512-w2g8tmL7NgBYt6alc8YawMcmPiYqnVvvI0kLB++VOUOssqdJMAkfQOMGV+2M8H5uhJYDaAghAVMUYps3s+jMrw==", + "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==", "requires": { - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-simple-access": "^7.8.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-object-super": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.0.tgz", - "integrity": "sha512-2DYqQ811nRlFVlni6iqfxBVVGqkBgfvEv/lcvmdNu2CaG+EA7zSP1hqYUsqamR+uCdDbsrV7uY6/0rkXbJo5YQ==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-replace-supers": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" } }, "@babel/plugin-transform-parameters": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.0.tgz", - "integrity": "sha512-9R2yykk7H92rntETO0fq52vJ4OFaTcDA49K9s8bQPyoD4o3/SkWEklukArCsQC6fowEuraPkH/umopr9uO539g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", "requires": { - "@babel/helper-call-delegate": "^7.8.0", - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.0.tgz", - "integrity": "sha512-vjZaQlojnZIahu5ofEW+hPJfDI5A6r2Sbi5C0RuCaAOFj7viDIR5kOR7ul3Fz5US8V1sVk5Zd2yuPaz7iBeysg==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.0.tgz", - "integrity": "sha512-sExhzq63Gl2PMbl7ETpN7Z1A38rLD6GeCT6EEEIIKjTVt9u6dRqJ6nHhaquL7QgR3egj/8fcvq23UvzfPqGAYA==", + "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==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.0.tgz", - "integrity": "sha512-6Zjl0pv6x10YmFVRI0VhwJ/rE++geVHNJ9xwd+UIt3ON2VMRO7qI2lPsyLnzidR5HYNd/JXj47kdU9Rrn4YcnQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-template-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.0.tgz", - "integrity": "sha512-EF7Q7LEgeMpogHcvmHMNXBWdLWG1tpA1ErXH3i8zTu3+UEKo6aBn+FldPAJ16UbbbOwSCUCiDP6oZxvVRPhwnQ==", + "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==", "requires": { - "@babel/helper-annotate-as-pure": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", - "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "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", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, + "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", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -2825,6 +3255,30 @@ } } }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, "@babel/preset-react": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.0.tgz", @@ -2933,6 +3387,42 @@ "to-fast-properties": "^2.0.0" } }, + "@electron/get": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz", + "integrity": "sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "global-agent": "^2.0.2", + "global-tunnel-ng": "^2.7.1", + "got": "^9.6.0", + "progress": "^2.0.3", + "sanitize-filename": "^1.6.2", + "sumchecker": "^3.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.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==", + "dev": true + } + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -2983,41 +3473,42 @@ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, "@sinonjs/commons": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.6.0.tgz", - "integrity": "sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", + "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", "dev": true, "requires": { "type-detect": "4.0.8" } }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "@sinonjs/formatio": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz", - "integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-5.0.1.tgz", + "integrity": "sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ==", "dev": true, "requires": { "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" + "@sinonjs/samsam": "^5.0.2" } }, "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.1.0.tgz", + "integrity": "sha512-42nyaQOVunX5Pm6GRJobmzbS7iLI+fhERITnETXzzwDZh+TtDr/Au3yAvXVjFmZ4wEUaE4Y3NFZfKv0bV0cbtg==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, "@sinonjs/text-encoding": { @@ -3034,6 +3525,12 @@ "defer-to-connect": "^1.0.1" } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -3068,25 +3565,39 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "abstract-leveldown": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", - "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", "dev": true, "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", "xtend": "~4.0.0" } }, "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true }, "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "ajv": { @@ -3094,6 +3605,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz", "integrity": "sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==", "dev": true, + "optional": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -3108,12 +3620,20 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", - "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } } }, "ansi-regex": { @@ -3195,22 +3715,10 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, - "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=", - "dev": true - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", "dev": true }, "array-includes": { @@ -3266,6 +3774,7 @@ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, + "optional": true, "requires": { "safer-buffer": "~2.1.0" } @@ -3274,7 +3783,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "dev": true, + "optional": true }, "assertion-error": { "version": "1.1.0", @@ -3289,9 +3799,9 @@ "dev": true }, "ast-types": { - "version": "0.6.16", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.6.16.tgz", - "integrity": "sha1-BCBbcu3dGVqP6qCB8R0ClKJN7ZM=", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==", "dev": true }, "ast-types-flow": { @@ -3300,14 +3810,14 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, - "ast-util": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/ast-util/-/ast-util-0.6.0.tgz", - "integrity": "sha1-DZE9BPDpgx5T+ZkdyZAJ4tp3SBA=", + "ast-util-plus": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ast-util-plus/-/ast-util-plus-0.6.2.tgz", + "integrity": "sha512-k7sWJ1B1PT/Mm5xTszBK9kxQYD15H1iSMqIkM/88qeGjNLgCEiZT5Has7L+dNtcMi3ed2iYiKy05jzQ/ZkB9DQ==", "dev": true, "requires": { - "ast-types": "~0.6.7", - "private": "~0.1.6" + "ast-types": "0.13.3", + "private": "0.1.8" } }, "astral-regex": { @@ -3320,7 +3830,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "dev": true, + "optional": true }, "atob": { "version": "2.1.2", @@ -3332,13 +3843,15 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "dev": true, + "optional": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true + "dev": true, + "optional": true }, "axobject-query": { "version": "2.0.2", @@ -3418,6 +3931,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, "requires": { "object.assign": "^4.1.0" } @@ -3655,11 +4169,18 @@ } } }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, + "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -3670,9 +4191,9 @@ "integrity": "sha1-SfiW1uhYpKSZ34XDj7OZua/4QPg=" }, "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -3684,6 +4205,13 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "boolean": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz", + "integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==", + "dev": true, + "optional": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3729,13 +4257,14 @@ "dev": true }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.14.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.6.tgz", + "integrity": "sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A==", "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001154", + "electron-to-chromium": "^1.3.585", + "escalade": "^3.1.1", + "node-releases": "^1.1.65" } }, "bser": { @@ -3747,6 +4276,16 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -3761,17 +4300,17 @@ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -3856,34 +4395,17 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, "caniuse-lite": { - "version": "1.0.30001020", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz", - "integrity": "sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==" + "version": "1.0.30001156", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001156.tgz", + "integrity": "sha512-z7qztybA2eFZTB6Z3yvaQBIoJpQtsewRD74adw2UbRWwsRq3jIPvgrQGawBMbfafekQaD21FWuXNcywtTDGGCw==" }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "dev": true, + "optional": true }, "chai": { "version": "4.2.0", @@ -4001,9 +4523,9 @@ } }, "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { @@ -4097,6 +4619,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -4129,16 +4652,15 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "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==", "dev": true, + "optional": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, "console-control-strings": { @@ -4166,11 +4688,11 @@ "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "core-js-compat": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.3.tgz", - "integrity": "sha512-Y3YNGU3bU1yrnzVodop23ghArbKv4IqkZg9MMOWv/h7KT6NRk1/SzHhWDDlubg2+tlcUzAqgj1/GyeJ9fUKMeg==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "requires": { - "browserslist": "^4.8.3", + "browserslist": "^4.8.5", "semver": "7.0.0" }, "dependencies": { @@ -4288,15 +4810,6 @@ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, "damerau-levenshtein": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", @@ -4308,6 +4821,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0" } @@ -4387,13 +4901,28 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, "deferred-leveldown": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz", - "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", "dev": true, "requires": { - "abstract-leveldown": "~5.0.0", + "abstract-leveldown": "~6.2.1", "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } } }, "define-properties": { @@ -4449,7 +4978,8 @@ "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 }, "delegates": { "version": "1.0.0", @@ -4461,6 +4991,13 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true, + "optional": true + }, "diff": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", @@ -4525,9 +5062,9 @@ } }, "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==" }, "domutils": { "version": "1.5.1", @@ -4540,9 +5077,9 @@ } }, "dugite": { - "version": "1.88.5", - "resolved": "https://registry.npmjs.org/dugite/-/dugite-1.88.5.tgz", - "integrity": "sha512-wYlguOXlT2bEGsi9QkBojObtDKZ54vC9yVG+KC+QwasxGzyyWK65XS8g6ODolwobetbtZPk49Ci+d0EwbpNNIg==", + "version": "1.92.0", + "resolved": "https://registry.npmjs.org/dugite/-/dugite-1.92.0.tgz", + "integrity": "sha512-Xra5E2ISwy+sCUrlcBkBsOpP85u5lsbaMnRpnvMJpO+KSoCGccMUimekGS+Ry8ZRni80gHw83MKSrdycaH2bZg==", "requires": { "checksum": "^0.1.1", "got": "^9.6.0", @@ -4562,96 +5099,82 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, + "optional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "electron-devtools-installer": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.4.tgz", - "integrity": "sha512-b5kcM3hmUqn64+RUcHjjr8ZMpHS2WJ5YO0pnG9+P/RTdx46of/JrEjuciHWux6pE+On6ynWhHJF53j/EDJN0PA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.1.1.tgz", + "integrity": "sha512-g2D4J6APbpsiIcnLkFMyKZ6bOpEJ0Ltcc2m66F7oKUymyGAt628OWeU9nRZoh1cNmUs/a6Cls2UfOmsZtE496Q==", "dev": true, "requires": { - "7zip": "0.0.6", - "cross-unzip": "0.0.2", - "rimraf": "^2.5.2", - "semver": "^5.3.0" + "rimraf": "^3.0.2", + "semver": "^7.2.1", + "unzip-crx-3": "^0.2.0" }, "dependencies": { - "cross-unzip": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/cross-unzip/-/cross-unzip-0.0.2.tgz", - "integrity": "sha1-UYO8R6CVWb78+YzEZXlkmZNZNy8=", - "dev": true + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true } } }, - "electron-download": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", - "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", + "electron-link": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/electron-link/-/electron-link-0.4.3.tgz", + "integrity": "sha512-rfJSTwJOZkU15mtNvAOaDNafS7I1Jse31rgbGQJ/mJ7ZGtxZJy7FdxiDkMfT/NmbS3qluK3tO5DIU6VrZnfQLw==", "dev": true, "requires": { - "debug": "^3.0.0", - "env-paths": "^1.0.0", - "fs-extra": "^4.0.1", - "minimist": "^1.2.0", - "nugget": "^2.0.1", - "path-exists": "^3.0.0", - "rc": "^1.2.1", - "semver": "^5.4.1", - "sumchecker": "^2.0.2" + "acorn": "^7.3.1", + "ast-util-plus": "^0.6.2", + "encoding-down": "^6.3.0", + "indent-string": "^4.0.0", + "leveldown": "^5.6.0", + "levelup": "^4.4.0", + "recast": "^0.19.1", + "resolve": "^1.17.0", + "source-map": "^0.7.3" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { - "ms": "^2.1.1" + "path-parse": "^1.0.6" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, - "electron-link": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/electron-link/-/electron-link-0.4.1.tgz", - "integrity": "sha512-f0pcajkAedjwWmRxuXBn0nJvRO7jPX2qoxObvBl+OL0uK9O3lNr6LThRzJGhqnklJ1g3BuNonKTwQqGh9T0WTg==", - "dev": true, - "requires": { - "acorn": "^6.1.1", - "ast-util": "^0.6.0", - "encoding-down": "~5.0.0", - "indent-string": "^3.2.0", - "leveldown": "^5.4.1", - "levelup": "~3.0.0", - "recast": "^0.17.5", - "resolve": "^1.5.0", - "source-map": "^0.5.6" - } - }, "electron-mksnapshot": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-4.2.0.tgz", - "integrity": "sha512-QfzQuzyjwJX+jVVlSejElW9oEvG46s1eMxBRVCVGIw2Q1HLi6fQWKVdrLixeExkPZM7mDMfd/ncd4+rGlKKchA==", + "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==", "dev": true, "requires": { - "electron-download": "^4.1.0", - "extract-zip": "^1.6.5", + "@electron/get": "^1.12.2", + "extract-zip": "^2.0.0", "fs-extra": "^7.0.1", "temp": "^0.8.3" }, @@ -4679,9 +5202,9 @@ } }, "electron-to-chromium": { - "version": "1.3.332", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.332.tgz", - "integrity": "sha512-AP2HkLhfSOIxP7gDjlyZ4ywGWIcxRMZoU9+JriuVkQe2pSLDdWBsE6+eI6BQOqun1dohLrUTOPHsQLLhhFA7Eg==" + "version": "1.3.589", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.589.tgz", + "integrity": "sha512-rQItBTFnol20HaaLm26UgSUduX7iGerwW7pEYX17MB1tI6LzFajiLV7iZ7LVcUcsN/7HrZUoCLrBauChy/IqEg==" }, "emoji-regex": { "version": "7.0.3", @@ -4689,6 +5212,13 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "optional": true + }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", @@ -4698,16 +5228,15 @@ } }, "encoding-down": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-5.0.4.tgz", - "integrity": "sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", "dev": true, "requires": { - "abstract-leveldown": "^5.0.0", + "abstract-leveldown": "^6.2.1", "inherits": "^2.0.3", "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" + "level-errors": "^2.0.0" } }, "end-of-stream": { @@ -4725,9 +5254,9 @@ "dev": true }, "env-paths": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", - "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", "dev": true }, "enzyme": { @@ -4843,15 +5372,20 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "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=" }, "eslint": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", - "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -4894,12 +5428,12 @@ }, "dependencies": { "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -4911,19 +5445,25 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "globals": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", - "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "requires": { "type-fest": "^0.8.1" @@ -4939,9 +5479,9 @@ } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true } } @@ -5043,12 +5583,12 @@ } }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -5062,28 +5602,20 @@ } }, "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "espree": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", - "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "acorn": "^7.1.0", - "acorn-jsx": "^5.1.0", + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "dev": true - } } }, "esprima": { @@ -5093,21 +5625,37 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -5206,7 +5754,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "optional": true }, "extend-shallow": { "version": "3.0.2", @@ -5306,31 +5855,35 @@ } }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { - "ms": "2.0.0" + "pump": "^3.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } } } }, @@ -5338,13 +5891,15 @@ "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-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true + "dev": true, + "optional": true }, "fast-glob": { "version": "2.2.7", @@ -5417,18 +5972,18 @@ "dev": true }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { "pend": "~1.2.0" } }, "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -5515,9 +6070,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "for-in": { @@ -5552,13 +6107,15 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "dev": true, + "optional": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -5651,12 +6208,6 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5687,6 +6238,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0" } @@ -5736,11 +6288,66 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, + "global-agent": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz", + "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==", + "dev": true, + "optional": true, + "requires": { + "boolean": "^3.0.1", + "core-js": "^3.6.5", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true, + "optional": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "optional": true + } + } + }, + "global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "requires": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + } + }, "globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" }, + "globalthis": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", + "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", + "dev": true, + "optional": true, + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", @@ -5932,13 +6539,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "dev": true, + "optional": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, + "optional": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -6025,9 +6634,9 @@ "dev": true }, "hock": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/hock/-/hock-1.3.3.tgz", - "integrity": "sha512-bEX7KH/KSv2Q5zA+o1EdyeH52+gD2cfpYyAsHMEwjb9txXWttityKVf7cG0y3UVA4D8bxKDzH8LVXCQIr9rClg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/hock/-/hock-1.4.1.tgz", + "integrity": "sha512-RTJ9m62KGU4WbBN3zjBewxLsNwzWfJlcKkoWoY9RoYJkoSZ1zwKUe6VMpLgSMxPBqkOohB1c45weLBe5SJzqTA==", "dev": true, "requires": { "deep-equal": "0.2.1", @@ -6086,6 +6695,7 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -6100,6 +6710,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -6113,6 +6729,12 @@ "dev": true, "optional": true }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, "immutable": { "version": "3.7.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", @@ -6135,9 +6757,9 @@ "dev": true }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "inflight": { @@ -6155,28 +6777,28 @@ "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": "7.0.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", - "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", + "chalk": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" }, "dependencies": { @@ -6186,24 +6808,59 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -6213,34 +6870,24 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } @@ -6249,6 +6896,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, "requires": { "loose-envify": "^1.0.0" } @@ -6359,15 +7007,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "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", @@ -6420,12 +7059,6 @@ "isobject": "^3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -6465,13 +7098,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "dev": true, + "optional": true }, "is-windows": { "version": "1.0.2", @@ -6520,7 +7148,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "dev": true, + "optional": true }, "istanbul-lib-coverage": { "version": "2.0.5", @@ -6720,7 +7349,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "dev": true, + "optional": true }, "jsesc": { "version": "2.5.2", @@ -6741,7 +7371,8 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "dev": true, + "optional": true }, "json-schema-traverse": { "version": "0.4.1", @@ -6759,7 +7390,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "dev": true, + "optional": true }, "json5": { "version": "2.1.0", @@ -6782,6 +7414,7 @@ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -6795,10 +7428,22 @@ "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", "dev": true }, + "jszip": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz", + "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==", "dev": true }, "keytar": { @@ -6876,10 +7521,13 @@ } }, "level-codec": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.1.tgz", - "integrity": "sha512-ajFP0kJ+nyq4i6kptSM+mAvJKLOg1X5FiFPtLG9M5gCEZyBmgDi3FkDrvlMkEzrUn1cWxtvVmrvoS4ASyO/q+Q==", - "dev": true + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } }, "level-concat-iterator": { "version": "2.0.1", @@ -6897,14 +7545,39 @@ } }, "level-iterator-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz", - "integrity": "sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } } }, "level-supports": { @@ -6925,9 +7598,9 @@ } }, "leveldown": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.4.1.tgz", - "integrity": "sha512-3lMPc7eU3yj5g+qF1qlALInzIYnkySIosR1AsUKFjL9D8fYbTLuENBAeDRZXIG4qeWOAyqRItOoLu2v2avWiMA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", "dev": true, "requires": { "abstract-leveldown": "~6.2.1", @@ -6936,11 +7609,13 @@ }, "dependencies": { "abstract-leveldown": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.2.tgz", - "integrity": "sha512-/a+Iwj0rn//CX0EJOasNyZJd2o8xur8Ce9C57Sznti/Ilt/cb6Qd8/k98A4ZOklXgTG+iAYYUs1OTG0s1eH+zQ==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", "dev": true, "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", "level-concat-iterator": "~2.0.0", "level-supports": "~1.0.0", "xtend": "~4.0.0" @@ -6949,30 +7624,18 @@ } }, "levelup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-3.0.1.tgz", - "integrity": "sha512-TrrLDPC/BfP35ei2uK+L6Cc7kpI1NxIChwp+BUB6jrHG3A8gtrr9jx1UZ9bi2w1O6VN7jYO4LUoq1iKRP5AREg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", "dev": true, "requires": { - "deferred-leveldown": "~4.0.0", + "deferred-leveldown": "~5.3.0", "level-errors": "~2.0.0", - "level-iterator-stream": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", "xtend": "~4.0.0" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levenary": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz", - "integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==", - "requires": { - "leven": "^3.1.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -6983,6 +7646,23 @@ "type-check": "~0.3.2" } }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "requires": { + "immediate": "~3.0.5" + }, + "dependencies": { + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + } + } + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -7011,9 +7691,9 @@ } }, "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash.escape": { "version": "4.0.1", @@ -7027,6 +7707,12 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -7058,12 +7744,6 @@ "chalk": "^2.0.1" } }, - "lolex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", - "dev": true - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7072,16 +7752,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -7144,12 +7814,6 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -7164,6 +7828,25 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.0.tgz", "integrity": "sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ==" }, + "matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "requires": { + "escape-string-regexp": "^4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "optional": true + } + } + }, "md5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", @@ -7194,114 +7877,6 @@ } } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "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=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "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=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -7357,13 +7932,15 @@ "version": "1.38.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.22", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "dev": true, + "optional": true, "requires": { "mime-db": "~1.38.0" } @@ -7520,12 +8097,6 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -7686,9 +8257,9 @@ "dev": true }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz", + "integrity": "sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw==" }, "moo": { "version": "0.4.3", @@ -7707,6 +8278,11 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -7783,15 +8359,15 @@ "dev": true }, "nise": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.2.tgz", - "integrity": "sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/nise/-/nise-4.0.4.tgz", + "integrity": "sha512-bTTRUNlemx6deJa+ZyoCUTRvH3liK5+N6VQZ4NIw90AgDXY6iPnsqplNFf6STcj+ePk0H/xqxnP75Lr0J0Fq3A==", "dev": true, "requires": { - "@sinonjs/formatio": "^3.2.1", + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^4.1.0", "path-to-regexp": "^1.7.0" } }, @@ -7837,9 +8413,9 @@ } }, "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "dev": true }, "node-gyp-build": { @@ -7855,12 +8431,9 @@ "dev": true }, "node-releases": { - "version": "1.1.45", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", - "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", - "requires": { - "semver": "^6.3.0" - } + "version": "1.1.65", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.65.tgz", + "integrity": "sha512-YpzJOe2WFIW0V4ZkJQd/DGR/zdVwc/pI4Nl1CZrBO19FdRcSTmsuhdttw9rsTzzJLrNcSloLiBbEYx1C4f6gpA==" }, "noop-logger": { "version": "0.1.1", @@ -7892,6 +8465,17 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -7905,52 +8489,20 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "nugget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", - "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "dev": true, - "requires": { - "debug": "^2.1.3", - "minimist": "^1.1.0", - "pretty-bytes": "^1.0.2", - "progress-stream": "^1.1.0", - "request": "^2.45.0", - "single-line-log": "^1.1.2", - "throttleit": "0.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" } }, "nullthrows": { @@ -8190,7 +8742,8 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -8329,9 +8882,9 @@ } }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" @@ -8448,6 +9001,12 @@ "release-zalgo": "^1.0.0" } }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8517,9 +9076,9 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { "isarray": "0.0.1" @@ -8572,21 +9131,6 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -8636,20 +9180,11 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.1.0" - } - }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=" + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", + "dev": true }, "process-nextick-args": { "version": "2.0.0", @@ -8661,16 +9196,6 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, - "progress-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", - "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "dev": true, - "requires": { - "speedometer": "~0.1.2", - "through2": "~0.2.3" - } - }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -8689,6 +9214,13 @@ "react-is": "^16.8.1" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true, + "optional": true + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -8705,7 +9237,8 @@ "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true + "dev": true, + "optional": true }, "pump": { "version": "2.0.1", @@ -8726,7 +9259,8 @@ "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "dev": true, + "optional": true }, "raf": { "version": "3.4.1", @@ -8887,23 +9421,17 @@ } }, "recast": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.17.6.tgz", - "integrity": "sha512-yoQRMRrK1lszNtbkGyM4kN45AwylV5hMiuEveUBlxytUViWevjvX6w+tzJt1LH4cfUhWt4NZvy3ThIhu6+m5wQ==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.19.1.tgz", + "integrity": "sha512-8FCjrBxjeEU2O6I+2hyHyBFH1siJbMBLwIRvVr1T3FD2cL754sOaJDsJ/8h3xYltasbJ8jqWRIhMuDGBSiSbjw==", "dev": true, "requires": { - "ast-types": "0.12.4", + "ast-types": "0.13.3", "esprima": "~4.0.0", "private": "^0.1.8", "source-map": "~0.6.1" }, "dependencies": { - "ast-types": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.12.4.tgz", - "integrity": "sha512-ky/YVYCbtVAS8TdMIaTiPFHwEpRB5z1hctepJplTr3UW5q8TDrpIMCILyk8pmLxGtn2KCtC/lSn7zOsaI7nzDw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8912,36 +9440,15 @@ } } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "dependencies": { - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - } - } - }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "requires": { "regenerate": "^1.4.0" } @@ -8952,11 +9459,26 @@ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" }, "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" + }, + "dependencies": { + "@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==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "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==" + } } }, "regex-not": { @@ -8976,27 +9498,27 @@ "dev": true }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, "regjsparser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", - "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "requires": { "jsesc": "~0.5.0" }, @@ -9331,20 +9853,12 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, + "optional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -9437,6 +9951,30 @@ "glob": "^7.1.3" } }, + "roarr": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz", + "integrity": "sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA==", + "dev": true, + "optional": true, + "requires": { + "boolean": "^3.0.0", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + } + } + }, "rst-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", @@ -9448,13 +9986,10 @@ } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true }, "run-parallel": { "version": "1.1.9", @@ -9463,9 +9998,9 @@ "dev": true }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -9490,6 +10025,15 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, "scheduler": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", @@ -9503,13 +10047,46 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true, + "optional": true + }, + "serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "requires": { + "type-fest": "^0.13.1" + }, + "dependencies": { + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true + } + } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -9579,35 +10156,41 @@ "simple-concat": "^1.0.0" } }, - "single-line-log": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", - "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "dev": true, - "requires": { - "string-width": "^1.0.1" - } - }, "sinon": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", - "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.3.tgz", + "integrity": "sha512-IKo9MIM111+smz9JGwLmw5U1075n1YXeAq8YeSFlndCLhAL5KGn6bLgu7b/4AYHTV/LcEMcRm2wU2YiL55/6Pg==", "dev": true, "requires": { - "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.3", - "diff": "^3.5.0", - "lolex": "^4.2.0", - "nise": "^1.5.2", - "supports-color": "^5.5.0" + "@sinonjs/commons": "^1.7.2", + "@sinonjs/fake-timers": "^6.0.1", + "@sinonjs/formatio": "^5.0.1", + "@sinonjs/samsam": "^5.1.0", + "diff": "^4.0.2", + "nise": "^4.0.4", + "supports-color": "^7.1.0" }, "dependencies": { "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -9828,12 +10411,6 @@ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true - }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -9862,6 +10439,7 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, + "optional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -9944,59 +10522,26 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "sumchecker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", - "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "debug": "^4.1.0" } }, "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" - }, - "dependencies": { - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - } + "nan": "^2.14.2" } }, "supports-color": { @@ -10020,12 +10565,12 @@ }, "dependencies": { "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -10037,6 +10582,12 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -10155,68 +10706,11 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "through2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9", - "xtend": "~2.1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": 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", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, "tinycolor2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", @@ -10293,6 +10787,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, + "optional": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -10302,7 +10797,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "dev": true, + "optional": true } } }, @@ -10311,24 +10807,34 @@ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dev": true, + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -10341,7 +10847,8 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "dev": true, + "optional": true }, "type-check": { "version": "0.3.2", @@ -10364,12 +10871,6 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "ua-parser-js": { "version": "0.7.20", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", @@ -10430,14 +10931,14 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" }, "union-value": { "version": "1.0.1", @@ -10496,6 +10997,17 @@ } } }, + "unzip-crx-3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz", + "integrity": "sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==", + "dev": true, + "requires": { + "jszip": "^3.1.0", + "mkdirp": "^0.5.1", + "yaku": "^0.16.6" + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -10542,6 +11054,12 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -10554,9 +11072,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, "validate-npm-package-license": { @@ -10574,6 +11092,7 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -10594,12 +11113,12 @@ } }, "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" } }, @@ -10699,6 +11218,12 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "yaku": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/yaku/-/yaku-0.16.7.tgz", + "integrity": "sha1-HRlceKqbW/hHnIlblQT9TwhHmE4=", + "dev": true + }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -10872,12 +11397,13 @@ } }, "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "fd-slicer": "~1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "yubikiri": { diff --git a/package.json b/package.json index 1f7e69e649..c008cf5d55 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "github", "main": "./lib/index", - "version": "0.35.0", + "version": "0.36.10", "description": "GitHub integration", "repository": "https://github.com/atom/github", "license": "MIT", @@ -15,7 +15,8 @@ "report:coverage": "nyc report --reporter=cobertura --reporter=html --reporter=lcovonly", "lint": "eslint --max-warnings 0 test lib", "fetch-schema": "node script/fetch-schema", - "relay": "relay-compiler --src ./lib --schema graphql/schema.graphql" + "relay": "relay-compiler --src ./lib --schema graphql/schema.graphql", + "postinstall": "node script/redownload-electron-bins.js" }, "engines": { "atom": ">=1.37.0" @@ -40,25 +41,26 @@ "dependencies": { "@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", - "@babel/preset-env": "7.8.2", + "@babel/preset-env": "7.12.1", "@babel/preset-react": "7.8.0", "babel-plugin-relay": "5.0.0", "bintrees": "1.0.2", "bytes": "3.1.0", "classnames": "2.2.6", "compare-sets": "1.0.1", - "dompurify": "2.0.7", - "dugite": "1.88.5", + "dompurify": "2.0.17", + "dugite": "1.92.0", "event-kit": "2.5.3", "fs-extra": "4.0.3", "graphql": "14.5.8", "keytar": "4.13.0", "lodash.memoize": "4.1.2", "marked": "0.8.0", - "moment": "2.24.0", + "moment": "2.28.0", "node-emoji": "1.10.0", "prop-types": "15.7.2", "react": "16.12.0", @@ -73,7 +75,7 @@ "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" }, "devDependencies": { @@ -83,16 +85,16 @@ "chai-as-promised": "7.1.1", "cross-unzip": "0.2.1", "dedent-js": "1.0.1", - "electron-devtools-installer": "2.2.4", - "electron-link": "0.4.1", - "electron-mksnapshot": "^4.2.0", + "electron-devtools-installer": "3.1.1", + "electron-link": "0.4.3", + "electron-mksnapshot": "^9.0.2", "enzyme": "3.10.0", "enzyme-adapter-react-16": "1.7.1", - "eslint": "6.7.2", + "eslint": "6.8.0", "eslint-config-fbjs-opensource": "1.0.0", "eslint-plugin-jsx-a11y": "6.2.3", "globby": "10.0.1", - "hock": "1.3.3", + "hock": "1.4.1", "lodash.isequal": "4.5.0", "lodash.isequalwith": "4.4.0", "mkdirp": "0.5.1", @@ -100,11 +102,11 @@ "mocha-junit-reporter": "1.23.1", "mocha-multi-reporters": "1.1.7", "mocha-stress": "1.0.0", - "node-fetch": "2.6.0", + "node-fetch": "2.6.1", "nyc": "14.1.1", "relay-compiler": "5.0.0", "semver": "6.3.0", - "sinon": "7.5.0", + "sinon": "9.0.3", "test-until": "1.1.1" }, "consumedServices": { diff --git a/script/redownload-electron-bins.js b/script/redownload-electron-bins.js new file mode 100644 index 0000000000..68418883ae --- /dev/null +++ b/script/redownload-electron-bins.js @@ -0,0 +1,48 @@ +// Based on: https://github.com/atom/atom/blob/v1.51.0/script/redownload-electron-bins.js + +let downloadMksnapshotPath + +try { + downloadMksnapshotPath = require.resolve('electron-mksnapshot/download-mksnapshot.js'); +} catch { } + +if (typeof(downloadMksnapshotPath) !== 'undefined') { + + const { spawn } = require('child_process'); + const path = require('path'); + const fs = require('fs'); + + const atomRepoPath = path.join(__dirname, '..', '..', '..', '..', 'atom', 'package.json'); + const electronVersion = fs.existsSync(atomRepoPath) ? require(atomRepoPath).electronVersion : '6.1.12' + // TODO: Keep the above "electronVersion" in sync with "electronVersion" from Atom's package.json + + if (process.env.ELECTRON_CUSTOM_VERSION !== electronVersion) { + const electronEnv = process.env.ELECTRON_CUSTOM_VERSION; + console.info( + `env var ELECTRON_CUSTOM_VERSION is not set,\n` + + `or doesn't match electronVersion in atom/package.json.\n` + + `(is: "${electronEnv}", wanted: "${electronVersion}").\n` + + `Setting, and re-downloading mksnapshot.\n` + ); + + process.env.ELECTRON_CUSTOM_VERSION = electronVersion; + const downloadMksnapshot = spawn('node', [downloadMksnapshotPath]); + var exitStatus; + + downloadMksnapshot.on('close', code => { + if (code === 0) { + exitStatus = 'success'; + } else { + exitStatus = 'error'; + } + + console.info(`info: Done re-downloading mksnapshot. Status: ${exitStatus}`); + }); + } else { + console.info( + 'info: env var "ELECTRON_CUSTOM_VERSION" is already set correctly.\n(No need to re-download mksnapshot). Skipping.\n' + ); + } +} else { + console.log('devDependency "electron-mksnapshot/download-mksnapshot.js" not found.\nSkipping "redownload electron bins" script.\n') +} diff --git a/styles/git-identity.less b/styles/git-identity.less index 9de8483119..2371343ec3 100644 --- a/styles/git-identity.less +++ b/styles/git-identity.less @@ -26,6 +26,8 @@ } &-buttons { - // + .btn { + margin: @component-padding/2; + } } } diff --git a/test/containers/github-tab-container.test.js b/test/containers/github-tab-container.test.js index 4ccd4c11b2..1b7ac14d30 100644 --- a/test/containers/github-tab-container.test.js +++ b/test/containers/github-tab-container.test.js @@ -1,5 +1,5 @@ import React from 'react'; -import {mount, shallow} from 'enzyme'; +import {shallow} from 'enzyme'; import {buildRepository, cloneRepository} from '../helpers'; import GitHubTabContainer from '../../lib/containers/github-tab-container'; @@ -7,6 +7,10 @@ import GitHubTabController from '../../lib/controllers/github-tab-controller'; import Repository from '../../lib/models/repository'; import {InMemoryStrategy} from '../../lib/shared/keytar-strategy'; import GithubLoginModel from '../../lib/models/github-login-model'; +import Remote from '../../lib/models/remote'; +import RemoteSet from '../../lib/models/remote-set'; +import Branch, {nullBranch} from '../../lib/models/branch'; +import BranchSet from '../../lib/models/branch-set'; import RefHolder from '../../lib/models/ref-holder'; describe('GitHubTabContainer', function() { @@ -37,6 +41,7 @@ describe('GitHubTabContainer', function() { repository={repository} loginModel={new GithubLoginModel(InMemoryStrategy)} rootHolder={new RefHolder()} + contextLocked={false} changeWorkingDirectory={() => {}} onDidChangeWorkDirs={() => {}} @@ -45,6 +50,7 @@ describe('GitHubTabContainer', function() { openPublishDialog={() => {}} openCloneDialog={() => {}} openGitTab={() => {}} + setContextLock={() => {}} {...props} /> @@ -72,10 +78,11 @@ describe('GitHubTabContainer', function() { beforeEach(function() { wrapper = shallow(buildApp()); - const childWrapper = wrapper.find('ObserveModel').renderProp('children')(defaultRepositoryData); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(defaultRepositoryData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); retry = sinon.spy(); - const refresher = childWrapper.find(GitHubTabController).prop('refresher'); + const refresher = tokenWrapper.find(GitHubTabController).prop('refresher'); refresher.setRetryCallback(Symbol('key'), retry); stubRepository(repository); @@ -106,6 +113,13 @@ describe('GitHubTabContainer', function() { assert.isTrue(retry.called); }); + it('preserves the observer when the repository is unchanged', function() { + wrapper.setProps({}); + + simulateOperation(repository, 'fetch'); + assert.isTrue(retry.called); + }); + it('un-observes the repository when unmounting', function() { wrapper.unmount(); @@ -114,25 +128,153 @@ describe('GitHubTabContainer', function() { }); }); + describe('before loading', function() { + it('passes isLoading to the controller', async function() { + const loadingRepo = new Repository(await cloneRepository()); + const wrapper = shallow(buildApp({repository: loadingRepo})); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(null); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + + assert.isTrue(tokenWrapper.find('GitHubTabController').prop('isLoading')); + }); + }); + describe('while loading', function() { - it('passes isLoading to its view', async function() { + it('passes isLoading to the controller', async function() { const loadingRepo = new Repository(await cloneRepository()); assert.isTrue(loadingRepo.isLoading()); - const wrapper = mount(buildApp({repository: loadingRepo})); + const wrapper = shallow(buildApp({repository: loadingRepo})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(loadingRepo); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); - assert.isTrue(wrapper.find('GitHubTabController').prop('isLoading')); + assert.isTrue(tokenWrapper.find('GitHubTabController').prop('isLoading')); + }); + }); + + describe('when absent', function() { + it('passes placeholder data to the controller', async function() { + const absent = Repository.absent(); + const wrapper = shallow(buildApp({repository: absent})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(absent); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + const controller = tokenWrapper.find('GitHubTabController'); + + assert.strictEqual(controller.prop('allRemotes').size(), 0); + assert.strictEqual(controller.prop('githubRemotes').size(), 0); + assert.isFalse(controller.prop('currentRemote').isPresent()); + assert.strictEqual(controller.prop('branches').getNames().length, 0); + assert.isFalse(controller.prop('currentBranch').isPresent()); + assert.strictEqual(controller.prop('aheadCount'), 0); + assert.isFalse(controller.prop('manyRemotesAvailable')); + assert.isFalse(controller.prop('pushInProgress')); + assert.isFalse(controller.prop('isLoading')); }); }); describe('once loaded', function() { + let nonGitHub, github0, github1; + let loadedRepo, singleGitHubRemoteSet, multiGitHubRemoteSet; + let otherBranch, mainBranch; + let branches; + + beforeEach(async function() { + loadedRepo = new Repository(await cloneRepository()); + await loadedRepo.getLoadPromise(); + + nonGitHub = new Remote('no', 'git@elsewhere.com:abc/def.git'); + github0 = new Remote('yes0', 'git@github.com:user/repo0.git'); + github1 = new Remote('yes1', 'git@github.com:user/repo1.git'); + + singleGitHubRemoteSet = new RemoteSet([nonGitHub, github0]); + multiGitHubRemoteSet = new RemoteSet([nonGitHub, github0, github1]); + + otherBranch = new Branch('other'); + mainBranch = new Branch('main', nullBranch, nullBranch, true); + branches = new BranchSet([otherBranch, mainBranch]); + }); + + async function installRemoteSet(remoteSet) { + for (const remote of remoteSet) { + // In your face, no-await-in-loop rule + await loadedRepo.addRemote(remote.getName(), remote.getUrl()); + } + } + + it('derives the subset of GitHub remotes', async function() { + await installRemoteSet(multiGitHubRemoteSet); + + const wrapper = shallow(buildApp({repository: loadedRepo})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(loadedRepo); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + const githubRemotes = tokenWrapper.find('GitHubTabController').prop('githubRemotes'); + + assert.sameMembers(Array.from(githubRemotes, remote => remote.getName()), ['yes0', 'yes1']); + }); + + it('derives the current branch', async function() { + const wrapper = shallow(buildApp({repository: loadedRepo})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(loadedRepo); + repoData.branches = branches; + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + const currentBranch = tokenWrapper.find('GitHubTabController').prop('currentBranch'); + + assert.strictEqual(mainBranch, currentBranch); + }); + + it('identifies the current remote from the config key', async function() { + await loadedRepo.setConfig('atomGithub.currentRemote', 'yes1'); + await installRemoteSet(multiGitHubRemoteSet); + + const wrapper = shallow(buildApp({repository: loadedRepo})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(loadedRepo); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + const currentRemote = tokenWrapper.find('GitHubTabController').prop('currentRemote'); + + assert.strictEqual(currentRemote.getUrl(), github1.getUrl()); + }); + + it('identifies the current remote as the only GitHub remote', async function() { + await installRemoteSet(singleGitHubRemoteSet); + + const wrapper = shallow(buildApp({repository: loadedRepo})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(loadedRepo); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + const currentRemote = tokenWrapper.find('GitHubTabController').prop('currentRemote'); + + assert.strictEqual(currentRemote.getUrl(), github0.getUrl()); + }); + + it('identifies when there are multiple GitHub remotes available', async function() { + await installRemoteSet(multiGitHubRemoteSet); + + const wrapper = shallow(buildApp({repository: loadedRepo})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(loadedRepo); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + const controller = tokenWrapper.find('GitHubTabController'); + + assert.isFalse(controller.prop('currentRemote').isPresent()); + assert.isTrue(controller.prop('manyRemotesAvailable')); + }); + it('renders the controller', async function() { - const workdir = await cloneRepository(); - const presentRepo = new Repository(workdir); - await presentRepo.getLoadPromise(); - const wrapper = mount(buildApp({repository: presentRepo})); + await installRemoteSet(singleGitHubRemoteSet); + + const wrapper = shallow(buildApp({repository: loadedRepo})); + const repoData = await wrapper.find('ObserveModel').prop('fetchData')(loadedRepo); + const repoWrapper = wrapper.find('ObserveModel').renderProp('children')(repoData); + const tokenWrapper = repoWrapper.find('ObserveModel').renderProp('children')('1234'); + const controller = tokenWrapper.find('GitHubTabController'); - await assert.async.isFalse(wrapper.update().find('GitHubTabController').prop('isLoading')); - assert.strictEqual(wrapper.find('GitHubTabController').prop('workingDirectory'), workdir); + assert.isFalse(controller.prop('isLoading')); + assert.isFalse(controller.prop('manyRemotesAvailable')); + assert.strictEqual(controller.prop('token'), '1234'); }); }); }); diff --git a/test/containers/github-tab-header-container.test.js b/test/containers/github-tab-header-container.test.js index db68e86492..296aecd885 100644 --- a/test/containers/github-tab-header-container.test.js +++ b/test/containers/github-tab-header-container.test.js @@ -4,18 +4,16 @@ import {QueryRenderer} from 'react-relay'; import GithubTabHeaderContainer from '../../lib/containers/github-tab-header-container'; import {queryBuilder} from '../builder/graphql/query'; -import GithubLoginModel from '../../lib/models/github-login-model'; -import {getEndpoint} from '../../lib/models/endpoint'; -import {InMemoryStrategy, INSUFFICIENT, UNAUTHENTICATED} from '../../lib/shared/keytar-strategy'; +import {DOTCOM} from '../../lib/models/endpoint'; +import {UNAUTHENTICATED, INSUFFICIENT} from '../../lib/shared/keytar-strategy'; import tabHeaderQuery from '../../lib/containers/__generated__/githubTabHeaderContainerQuery.graphql'; describe('GithubTabHeaderContainer', function() { - let atomEnv, model; + let atomEnv; beforeEach(function() { atomEnv = global.buildAtomEnvironment(); - model = new GithubLoginModel(InMemoryStrategy); }); afterEach(function() { @@ -25,65 +23,56 @@ describe('GithubTabHeaderContainer', function() { function buildApp(overrideProps = {}) { return ( {}} setContextLock={() => {}} getCurrentWorkDirs={() => new Set()} + onDidChangeWorkDirs={() => {}} {...overrideProps} /> ); } - it('renders a null user while the GraphQL query is being performed', async function() { - model.setToken('https://api.github.com', '1234'); - - sinon.spy(model, 'getToken'); - sinon.stub(model, 'getScopes').resolves(GithubLoginModel.REQUIRED_SCOPES); - - const wrapper = shallow(buildApp()); - - assert.strictEqual(await wrapper.find('ObserveModel').prop('fetchData')(model), '1234'); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234'); - - const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({ - error: null, - props: null, - retry: () => {}, - }); - - assert.isFalse(resultWrapper.find('GithubTabHeaderController').prop('user').isPresent()); + it('renders a null user if the token is still loading', function() { + const wrapper = shallow(buildApp({token: null})); + assert.isFalse(wrapper.find('GithubTabHeaderController').prop('user').isPresent()); }); it('renders a null user if no token is found', function() { - const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(UNAUTHENTICATED); - assert.isFalse(tokenWrapper.find('GithubTabHeaderController').prop('user').isPresent()); + const wrapper = shallow(buildApp({token: UNAUTHENTICATED})); + assert.isFalse(wrapper.find('GithubTabHeaderController').prop('user').isPresent()); }); it('renders a null user if the token has insufficient OAuth scopes', function() { - const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(INSUFFICIENT); - - assert.isFalse(tokenWrapper.find('GithubTabHeaderController').prop('user').isPresent()); + const wrapper = shallow(buildApp({token: INSUFFICIENT})); + assert.isFalse(wrapper.find('GithubTabHeaderController').prop('user').isPresent()); }); - it('renders a null user if the user is offline', function() { - sinon.spy(model, 'didUpdate'); + it('renders a null user if there was an error acquiring the token', function() { + const e = new Error('oops'); + e.rawStack = e.stack; + const wrapper = shallow(buildApp({token: e})); + assert.isFalse(wrapper.find('GithubTabHeaderController').prop('user').isPresent()); + }); + it('renders a null user while the GraphQL query is being performed', function() { const wrapper = shallow(buildApp()); - const e = new Error('oh no'); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(e); - assert.isFalse(tokenWrapper.find('GithubTabHeaderController').prop('user').isPresent()); + const resultWrapper = wrapper.find(QueryRenderer).renderProp('render')({ + error: null, + props: null, + retry: () => {}, + }); + + assert.isFalse(resultWrapper.find('GithubTabHeaderController').prop('user').isPresent()); }); it('renders the controller once results have arrived', function() { const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234'); - const props = queryBuilder(tabHeaderQuery) .viewer(v => { v.name('user'); @@ -92,7 +81,7 @@ describe('GithubTabHeaderContainer', function() { v.login('us3rh4nd13'); }) .build(); - const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({error: null, props, retry: () => {}}); + const resultWrapper = wrapper.find(QueryRenderer).renderProp('render')({error: null, props, retry: () => {}}); const controller = resultWrapper.find('GithubTabHeaderController'); assert.isTrue(controller.prop('user').isPresent()); diff --git a/test/containers/remote-container.test.js b/test/containers/remote-container.test.js index b6a1cb09eb..deefe382d6 100644 --- a/test/containers/remote-container.test.js +++ b/test/containers/remote-container.test.js @@ -3,25 +3,21 @@ import {shallow} from 'enzyme'; import {QueryRenderer} from 'react-relay'; import RemoteContainer from '../../lib/containers/remote-container'; -import * as reporterProxy from '../../lib/reporter-proxy'; import {queryBuilder} from '../builder/graphql/query'; import Remote from '../../lib/models/remote'; import RemoteSet from '../../lib/models/remote-set'; import Branch, {nullBranch} from '../../lib/models/branch'; import BranchSet from '../../lib/models/branch-set'; -import GithubLoginModel from '../../lib/models/github-login-model'; -import {getEndpoint} from '../../lib/models/endpoint'; +import {DOTCOM} from '../../lib/models/endpoint'; import Refresher from '../../lib/models/refresher'; -import {InMemoryStrategy, INSUFFICIENT, UNAUTHENTICATED} from '../../lib/shared/keytar-strategy'; import remoteQuery from '../../lib/containers/__generated__/remoteContainerQuery.graphql'; describe('RemoteContainer', function() { - let atomEnv, model; + let atomEnv; beforeEach(function() { atomEnv = global.buildAtomEnvironment(); - model = new GithubLoginModel(InMemoryStrategy); }); afterEach(function() { @@ -36,20 +32,20 @@ describe('RemoteContainer', function() { return ( {}} + handleLogout={() => {}} onPushBranch={() => {}} {...overrideProps} @@ -57,24 +53,9 @@ describe('RemoteContainer', function() { ); } - it('renders a loading spinner while the token is being fetched', function() { + it('renders a loading spinner while the GraphQL query is being performed', function() { const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(null); - assert.isTrue(tokenWrapper.exists('LoadingView')); - }); - - it('renders a loading spinner while the GraphQL query is being performed', async function() { - model.setToken('https://api.github.com', '1234'); - - sinon.spy(model, 'getToken'); - sinon.stub(model, 'getScopes').resolves(GithubLoginModel.REQUIRED_SCOPES); - - const wrapper = shallow(buildApp()); - - assert.strictEqual(await wrapper.find('ObserveModel').prop('fetchData')(model), '1234'); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234'); - - const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({ + const resultWrapper = wrapper.find(QueryRenderer).renderProp('render')({ error: null, props: null, retry: () => {}, @@ -83,68 +64,18 @@ describe('RemoteContainer', function() { assert.isTrue(resultWrapper.exists('LoadingView')); }); - it('renders a login prompt if no token is found', function() { - const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(UNAUTHENTICATED); - assert.isTrue(tokenWrapper.exists('GithubLoginView')); - }); - - it('renders a login prompt if the token has insufficient OAuth scopes', function() { - const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(INSUFFICIENT); - - assert.match(tokenWrapper.find('GithubLoginView').find('p').text(), /sufficient/); - }); - - it('renders an offline view if the user is offline', function() { - sinon.spy(model, 'didUpdate'); - - const wrapper = shallow(buildApp()); - const e = new Error('oh no'); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(e); - assert.isTrue(tokenWrapper.exists('QueryErrorView')); - - tokenWrapper.find('QueryErrorView').prop('retry')(); - assert.isTrue(model.didUpdate.called); - }); - it('renders an error message if the GraphQL query fails', function() { const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234'); const error = new Error('oh shit!'); error.rawStack = error.stack; - const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({error, props: null, retry: () => {}}); + const resultWrapper = wrapper.find(QueryRenderer).renderProp('render')({error, props: null, retry: () => {}}); assert.strictEqual(resultWrapper.find('QueryErrorView').prop('error'), error); }); - it('increments a counter on login', function() { - const incrementCounterStub = sinon.stub(reporterProxy, 'incrementCounter'); - - const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')(UNAUTHENTICATED); - - tokenWrapper.find('GithubLoginView').prop('onLogin')(); - assert.isTrue(incrementCounterStub.calledOnceWith('github-login')); - }); - - it('increments a counter on logout', function() { - const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234'); - - const error = new Error('just show the logout button'); - error.rawStack = error.stack; - const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({error, props: null, retry: () => {}}); - - const incrementCounterStub = sinon.stub(reporterProxy, 'incrementCounter'); - resultWrapper.find('QueryErrorView').prop('logout')(); - assert.isTrue(incrementCounterStub.calledOnceWith('github-logout')); - }); - it('renders the controller once results have arrived', function() { const wrapper = shallow(buildApp()); - const tokenWrapper = wrapper.find('ObserveModel').renderProp('children')('1234'); const props = queryBuilder(remoteQuery) .repository(r => { @@ -155,10 +86,9 @@ describe('RemoteContainer', function() { }); }) .build(); - const resultWrapper = tokenWrapper.find(QueryRenderer).renderProp('render')({error: null, props, retry: () => {}}); + const resultWrapper = wrapper.find(QueryRenderer).renderProp('render')({error: null, props, retry: () => {}}); const controller = resultWrapper.find('RemoteController'); - assert.strictEqual(controller.prop('token'), '1234'); assert.deepEqual(controller.prop('repository'), { id: 'the-repo', defaultBranchRef: { diff --git a/test/controllers/editor-conflict-controller.test.js b/test/controllers/editor-conflict-controller.test.js index 4de8ac326e..0d0e91a9eb 100644 --- a/test/controllers/editor-conflict-controller.test.js +++ b/test/controllers/editor-conflict-controller.test.js @@ -3,6 +3,7 @@ import temp from 'temp'; import path from 'path'; import React from 'react'; import {mount} from 'enzyme'; +import {Point} from 'atom'; import ResolutionProgress from '../../lib/models/conflicts/resolution-progress'; import {OURS, BASE, THEIRS} from '../../lib/models/conflicts/source'; @@ -48,7 +49,7 @@ describe('EditorConflictController', function() { atomEnv.destroy(); }); - const useFixture = async function(fixtureName, {isRebase} = {isRebase: false}) { + const useFixture = async function(fixtureName, {isRebase, withEditor} = {isRebase: false}) { const fixturePath = path.join( path.dirname(__filename), '..', 'fixtures', 'conflict-marker-examples', fixtureName); const tempDir = temp.mkdirSync('conflict-fixture-'); @@ -56,6 +57,9 @@ describe('EditorConflictController', function() { fs.copySync(fixturePath, fixtureFile); editor = await workspace.open(fixtureFile); + if (withEditor) { + withEditor(editor); + } editorView = atomEnv.views.getView(editor); app = ( @@ -75,6 +79,14 @@ describe('EditorConflictController', function() { return editor.getTextInBufferRange(side.marker.getBufferRange()); }; + it('scrolls the first conflict into view', async function() { + await useFixture('triple-2way-diff.txt', { + withEditor(e) { sinon.stub(e, 'scrollToBufferPosition'); }, + }); + + assert.isTrue(editor.scrollToBufferPosition.calledWith(new Point(4, 0), {center: true})); + }); + describe('on a file with 2-way diff markers', function() { let conflicts; diff --git a/test/controllers/git-tab-controller.test.js b/test/controllers/git-tab-controller.test.js index d04a79c832..45bad35417 100644 --- a/test/controllers/git-tab-controller.test.js +++ b/test/controllers/git-tab-controller.test.js @@ -230,6 +230,51 @@ describe('GitTabController', function() { assert.strictEqual(wrapper.find('GitTabView').prop('emailBuffer'), emailBuffer); assert.strictEqual(emailBuffer.getText(), 'changed+@email.com'); }); + + it('sets repository-local identity', async function() { + const repository = await buildRepository(await cloneRepository('three-files')); + const setConfig = sinon.stub(repository, 'setConfig'); + + const wrapper = mount(await buildApp(repository)); + + wrapper.find('GitTabView').prop('usernameBuffer').setText('changed'); + wrapper.find('GitTabView').prop('emailBuffer').setText('changed@email.com'); + + await wrapper.find('GitTabView').prop('setLocalIdentity')(); + + assert.isTrue(setConfig.calledWith('user.name', 'changed', {})); + assert.isTrue(setConfig.calledWith('user.email', 'changed@email.com', {})); + }); + + it('sets account-global identity', async function() { + const repository = await buildRepository(await cloneRepository('three-files')); + const setConfig = sinon.stub(repository, 'setConfig'); + + const wrapper = mount(await buildApp(repository)); + + wrapper.find('GitTabView').prop('usernameBuffer').setText('changed'); + wrapper.find('GitTabView').prop('emailBuffer').setText('changed@email.com'); + + await wrapper.find('GitTabView').prop('setGlobalIdentity')(); + + assert.isTrue(setConfig.calledWith('user.name', 'changed', {global: true})); + assert.isTrue(setConfig.calledWith('user.email', 'changed@email.com', {global: true})); + }); + + it('unsets config values when empty', async function() { + const repository = await buildRepository(await cloneRepository('three-files')); + const unsetConfig = sinon.stub(repository, 'unsetConfig'); + + const wrapper = mount(await buildApp(repository)); + + wrapper.find('GitTabView').prop('usernameBuffer').setText(''); + wrapper.find('GitTabView').prop('emailBuffer').setText(''); + + await wrapper.find('GitTabView').prop('setLocalIdentity')(); + + assert.isTrue(unsetConfig.calledWith('user.name')); + assert.isTrue(unsetConfig.calledWith('user.email')); + }); }); describe('abortMerge()', function() { diff --git a/test/controllers/github-tab-controller.test.js b/test/controllers/github-tab-controller.test.js index c7be628195..c29a5b5b25 100644 --- a/test/controllers/github-tab-controller.test.js +++ b/test/controllers/github-tab-controller.test.js @@ -6,11 +6,13 @@ import Repository from '../../lib/models/repository'; import BranchSet from '../../lib/models/branch-set'; import Branch, {nullBranch} from '../../lib/models/branch'; import RemoteSet from '../../lib/models/remote-set'; -import Remote from '../../lib/models/remote'; -import {InMemoryStrategy} from '../../lib/shared/keytar-strategy'; +import Remote, {nullRemote} from '../../lib/models/remote'; +import {DOTCOM} from '../../lib/models/endpoint'; +import {InMemoryStrategy, UNAUTHENTICATED} from '../../lib/shared/keytar-strategy'; import GithubLoginModel from '../../lib/models/github-login-model'; import RefHolder from '../../lib/models/ref-holder'; import Refresher from '../../lib/models/refresher'; +import * as reporterProxy from '../../lib/reporter-proxy'; import {buildRepository, cloneRepository} from '../helpers'; @@ -34,12 +36,18 @@ describe('GitHubTabController', function() { workspace={atomEnv.workspace} refresher={new Refresher()} loginModel={new GithubLoginModel(InMemoryStrategy)} + token="1234" rootHolder={new RefHolder()} workingDirectory={repo.getWorkingDirectoryPath()} repository={repo} allRemotes={new RemoteSet()} + githubRemotes={new RemoteSet()} + currentRemote={nullRemote} branches={new BranchSet()} + currentBranch={nullBranch} + aheadCount={0} + manyRemotesAvailable={false} pushInProgress={false} isLoading={false} currentWorkDir={repo.getWorkingDirectoryPath()} @@ -60,48 +68,15 @@ describe('GitHubTabController', function() { } describe('derived view props', function() { - const dotcom0 = new Remote('yes0', 'git@github.com:aaa/bbb.git'); - const dotcom1 = new Remote('yes1', 'https://github.com/ccc/ddd.git'); - const nonDotcom = new Remote('no0', 'git@sourceforge.net:eee/fff.git'); - - it('passes the current branch', function() { - const currentBranch = new Branch('aaa', nullBranch, nullBranch, true); - const otherBranch = new Branch('bbb'); - const branches = new BranchSet([currentBranch, otherBranch]); - const wrapper = shallow(buildApp({branches})); - - assert.strictEqual(wrapper.find('GitHubTabView').prop('currentBranch'), currentBranch); - }); - - it('passes remotes hosted on GitHub', function() { - const allRemotes = new RemoteSet([dotcom0, dotcom1, nonDotcom]); - const wrapper = shallow(buildApp({allRemotes})); - - const passed = wrapper.find('GitHubTabView').prop('remotes'); - assert.isTrue(passed.withName('yes0').isPresent()); - assert.isTrue(passed.withName('yes1').isPresent()); - assert.isFalse(passed.withName('no0').isPresent()); - }); - - it('detects an explicitly specified current remote', function() { - const allRemotes = new RemoteSet([dotcom0, dotcom1, nonDotcom]); - const wrapper = shallow(buildApp({allRemotes, selectedRemoteName: 'yes1'})); - assert.strictEqual(wrapper.find('GitHubTabView').prop('currentRemote'), dotcom1); - assert.isFalse(wrapper.find('GitHubTabView').prop('manyRemotesAvailable')); + it('passes the endpoint from the current GitHub remote when one exists', function() { + const remote = new Remote('hub', 'git@github.com:some/repo.git'); + const wrapper = shallow(buildApp({currentRemote: remote})); + assert.strictEqual(wrapper.find('GitHubTabView').prop('endpoint'), remote.getEndpoint()); }); - it('uses a single GitHub-hosted remote', function() { - const allRemotes = new RemoteSet([dotcom0, nonDotcom]); - const wrapper = shallow(buildApp({allRemotes})); - assert.strictEqual(wrapper.find('GitHubTabView').prop('currentRemote'), dotcom0); - assert.isFalse(wrapper.find('GitHubTabView').prop('manyRemotesAvailable')); - }); - - it('indicates when multiple remotes are available', function() { - const allRemotes = new RemoteSet([dotcom0, dotcom1]); - const wrapper = shallow(buildApp({allRemotes})); - assert.isFalse(wrapper.find('GitHubTabView').prop('currentRemote').isPresent()); - assert.isTrue(wrapper.find('GitHubTabView').prop('manyRemotesAvailable')); + it('defaults the endpoint to dotcom', function() { + const wrapper = shallow(buildApp({currentRemote: nullRemote})); + assert.strictEqual(wrapper.find('GitHubTabView').prop('endpoint'), DOTCOM); }); }); @@ -139,5 +114,26 @@ describe('GitHubTabController', function() { wrapper.find('GitHubTabView').prop('openBoundPublishDialog')(); assert.isTrue(openPublishDialog.calledWith(someRepo)); }); + + it('handles and instruments a login', async function() { + sinon.stub(reporterProxy, 'incrementCounter'); + const loginModel = new GithubLoginModel(InMemoryStrategy); + + const wrapper = shallow(buildApp({loginModel})); + await wrapper.find('GitHubTabView').prop('handleLogin')('good-token'); + assert.strictEqual(await loginModel.getToken(DOTCOM.getLoginAccount()), 'good-token'); + assert.isTrue(reporterProxy.incrementCounter.calledWith('github-login')); + }); + + it('handles and instruments a logout', async function() { + sinon.stub(reporterProxy, 'incrementCounter'); + const loginModel = new GithubLoginModel(InMemoryStrategy); + await loginModel.setToken(DOTCOM.getLoginAccount(), 'good-token'); + + const wrapper = shallow(buildApp({loginModel})); + await wrapper.find('GitHubTabView').prop('handleLogout')(); + assert.strictEqual(await loginModel.getToken(DOTCOM.getLoginAccount()), UNAUTHENTICATED); + assert.isTrue(reporterProxy.incrementCounter.calledWith('github-logout')); + }); }); }); diff --git a/test/controllers/issueish-list-controller.test.js b/test/controllers/issueish-list-controller.test.js index c5b7ab4e3d..13f4ffa07c 100644 --- a/test/controllers/issueish-list-controller.test.js +++ b/test/controllers/issueish-list-controller.test.js @@ -90,7 +90,7 @@ describe('IssueishListController', function() { it('calls shell.openExternal with specified url', async function() { const wrapper = shallow(buildApp()); - sinon.stub(shell, 'openExternal').callsArg(2); + sinon.stub(shell, 'openExternal').callsFake(() => { }); await wrapper.instance().openOnGitHub(url); assert.isTrue(shell.openExternal.calledWith(url)); @@ -98,7 +98,7 @@ describe('IssueishListController', function() { it('fires `open-issueish-in-browser` event upon success', async function() { const wrapper = shallow(buildApp()); - sinon.stub(shell, 'openExternal').callsArg(2); + sinon.stub(shell, 'openExternal').callsFake(() => {}); sinon.stub(reporterProxy, 'addEvent'); await wrapper.instance().openOnGitHub(url); @@ -109,7 +109,7 @@ describe('IssueishListController', function() { it('handles error when openOnGitHub fails', async function() { const wrapper = shallow(buildApp()); - sinon.stub(shell, 'openExternal').callsArgWith(2, new Error('oh noes')); + sinon.stub(shell, 'openExternal').throws(new Error('oh noes')); sinon.stub(reporterProxy, 'addEvent'); try { diff --git a/test/controllers/remote-controller.test.js b/test/controllers/remote-controller.test.js index 36e34cccf1..3028264145 100644 --- a/test/controllers/remote-controller.test.js +++ b/test/controllers/remote-controller.test.js @@ -52,7 +52,7 @@ describe('RemoteController', function() { it('increments a counter when onCreatePr is called', async function() { const wrapper = shallow(createApp()); - sinon.stub(shell, 'openExternal').callsArg(2); + sinon.stub(shell, 'openExternal').callsFake(() => {}); sinon.stub(reporterProxy, 'incrementCounter'); await wrapper.instance().onCreatePr(); @@ -62,7 +62,7 @@ describe('RemoteController', function() { it('handles error when onCreatePr fails', async function() { const wrapper = shallow(createApp()); - sinon.stub(shell, 'openExternal').callsArgWith(2, new Error('oh noes')); + sinon.stub(shell, 'openExternal').throws(new Error('oh noes')); sinon.stub(reporterProxy, 'incrementCounter'); try { diff --git a/test/fixtures/props/git-tab-props.js b/test/fixtures/props/git-tab-props.js index 22a9a7b343..726f659f85 100644 --- a/test/fixtures/props/git-tab-props.js +++ b/test/fixtures/props/git-tab-props.js @@ -101,6 +101,8 @@ export async function gitTabViewProps(atomEnv, repository, overrides = {}) { toggleIdentityEditor: () => {}, closeIdentityEditor: () => {}, + setLocalIdentity: () => {}, + setGlobalIdentity: () => {}, openInitializeDialog: () => {}, abortMerge: () => {}, commit: () => {}, diff --git a/test/git-strategies.test.js b/test/git-strategies.test.js index c39b8dca60..3d7ad41b85 100644 --- a/test/git-strategies.test.js +++ b/test/git-strategies.test.js @@ -837,7 +837,7 @@ import * as reporterProxy from '../lib/reporter-proxy'; it('returns an empty diff', async function() { const workingDirPath = await cloneRepository('three-files'); const git = createTestStrategy(workingDirPath); - const data = new Buffer(10); + const data = Buffer.alloc(10); for (let i = 0; i < 10; i++) { data.writeUInt8(i + 200, i); } diff --git a/test/integration/file-patch.test.js b/test/integration/file-patch.test.js index d2d3a0d9e1..f608b1ef51 100644 --- a/test/integration/file-patch.test.js +++ b/test/integration/file-patch.test.js @@ -7,6 +7,10 @@ import {setup, teardown} from './helpers'; import GitShellOutStrategy from '../../lib/git-shell-out-strategy'; describe('integration: file patches', function() { + // NOTE: This test does not pass on VSTS macOS builds. It will be re-enabled + // once the underlying problem is solved. See atom/github#2617 for details. + if (process.env.CI_PROVIDER === 'VSTS') { return; } + let context, wrapper, atomEnv; let workspace; let commands, workspaceElement; diff --git a/test/models/remote.test.js b/test/models/remote.test.js index 410c660e18..68d55636e7 100644 --- a/test/models/remote.test.js +++ b/test/models/remote.test.js @@ -76,6 +76,7 @@ describe('Remote', function() { assert.isNull(nullRemote.getSlug()); assert.strictEqual(nullRemote.getNameOr('else'), 'else'); assert.isNull(nullRemote.getEndpoint()); + assert.strictEqual(nullRemote.getEndpointOrDotcom().getGraphQLRoot(), 'https://api.github.com/graphql'); }); describe('getEndpoint', function() { @@ -89,4 +90,16 @@ describe('Remote', function() { assert.isNull(elsewhere.getEndpoint()); }); }); + + describe('getEndpointOrDotcom', function() { + it('accesses the same Endpoint for the corresponding GitHub host', function() { + const remote = new Remote('origin', 'git@github.com:atom/github.git'); + assert.strictEqual(remote.getEndpointOrDotcom().getGraphQLRoot(), 'https://api.github.com/graphql'); + }); + + it('returns dotcom for non-GitHub URLs', function() { + const elsewhere = new Remote('mirror', 'https://me@bitbucket.org/team/repo.git'); + assert.strictEqual(elsewhere.getEndpointOrDotcom().getGraphQLRoot(), 'https://api.github.com/graphql'); + }); + }); }); diff --git a/test/models/repository.test.js b/test/models/repository.test.js index 3aede68ea6..35ef739a32 100644 --- a/test/models/repository.test.js +++ b/test/models/repository.test.js @@ -73,12 +73,15 @@ describe('Repository', function() { } // Methods that resolve to null - for (const method of [ - 'getAheadCount', 'getBehindCount', 'getConfig', 'getLastHistorySnapshots', 'getCache', - ]) { + for (const method of ['getLastHistorySnapshots', 'getCache']) { assert.isNull(await repository[method]()); } + // Methods that resolve to 0 + for (const method of ['getAheadCount', 'getBehindCount']) { + assert.strictEqual(await repository[method](), 0); + } + // Methods that resolve to an empty array for (const method of [ 'getRecentCommits', 'getAuthors', 'getDiscardHistory', @@ -121,7 +124,7 @@ describe('Repository', function() { 'init', 'clone', 'stageFiles', 'unstageFiles', 'stageFilesFromParentCommit', 'applyPatchToIndex', 'applyPatchToWorkdir', 'commit', 'merge', 'abortMerge', 'checkoutSide', 'mergeFile', 'writeMergeConflictToIndex', 'checkout', 'checkoutPathsAtRevision', 'undoLastCommit', 'fetch', 'pull', - 'push', 'setConfig', 'unsetConfig', 'createBlob', 'expandBlobToFile', 'createDiscardHistoryBlob', + 'push', 'unsetConfig', 'createBlob', 'expandBlobToFile', 'createDiscardHistoryBlob', 'updateDiscardHistory', 'storeBeforeAndAfterBlobs', 'restoreLastDiscardInTempFiles', 'popDiscardHistory', 'clearDiscardHistory', 'discardWorkDirChangesForPaths', 'addRemote', 'setCommitMessage', 'fetchCommitMessageTemplate', @@ -138,6 +141,11 @@ describe('Repository', function() { /fatal: Not a valid object name abcd/, ); }); + + it('works anyway', async function() { + await repository.setConfig('atomGithub.test', 'yes', {global: true}); + assert.strictEqual(await repository.getConfig('atomGithub.test'), 'yes'); + }); }); it('accesses an OperationStates model', async function() { @@ -1321,14 +1329,17 @@ describe('Repository', function() { }); it('does nothing on a destroyed repository', async function() { + sinon.spy(repository, 'setConfig'); repository.destroy(); await repository.saveDiscardHistory(); - assert.isNull(await repository.getConfig('atomGithub.historySha')); + assert.isFalse(repository.setConfig.called); }); it('does nothing if the repository is destroyed after the blob is created', async function() { + sinon.spy(repository, 'setConfig'); + let resolveCreateHistoryBlob = () => {}; sinon.stub(repository, 'createDiscardHistoryBlob').callsFake(() => new Promise(resolve => { resolveCreateHistoryBlob = resolve; @@ -1339,7 +1350,7 @@ describe('Repository', function() { resolveCreateHistoryBlob('nope'); await promise; - assert.isNull(await repository.getConfig('atomGithub.historySha')); + assert.isFalse(repository.setConfig.called); }); it('creates a blob and saves it in the git config', async function() { diff --git a/test/models/workdir-context-pool.test.js b/test/models/workdir-context-pool.test.js index b5b12a22e5..d29c824af4 100644 --- a/test/models/workdir-context-pool.test.js +++ b/test/models/workdir-context-pool.test.js @@ -368,4 +368,44 @@ describe('WorkdirContextPool', function() { }); }); }); + + describe('cross-instance cache invalidation', function() { + it('invalidates a config cache key in different instances when a global setting is changed', async function() { + const base = String(Date.now()); + const value0 = `${base}-0`; + const value1 = `${base}-1`; + + const repo0 = pool.add(await cloneRepository('three-files')).getRepository(); + const repo1 = pool.add(await cloneRepository('three-files')).getRepository(); + const repo2 = pool.add(temp.mkdirSync()).getRepository(); + + await Promise.all([repo0, repo1, repo2].map(repo => repo.getLoadPromise())); + + const [before0, before1, before2] = await Promise.all( + [repo0, repo1, repo2].map(repo => repo.getConfig('atomGithub.test')), + ); + + assert.notInclude([before0, before1, before2], value0); + + await repo2.setConfig('atomGithub.test', value0, {global: true}); + + const [after0, after1, after2] = await Promise.all( + [repo0, repo1, repo2].map(repo => repo.getConfig('atomGithub.test')), + ); + + assert.strictEqual(after0, value0); + assert.strictEqual(after1, value0); + assert.strictEqual(after2, value0); + + await repo0.setConfig('atomGithub.test', value1, {global: true}); + + const [final0, final1, final2] = await Promise.all( + [repo0, repo1, repo2].map(repo => repo.getConfig('atomGithub.test')), + ); + + assert.strictEqual(final0, value1); + assert.strictEqual(final1, value1); + assert.strictEqual(final2, value1); + }); + }); }); diff --git a/test/views/actionable-review-view.test.js b/test/views/actionable-review-view.test.js index 0c5474cec0..598ad362e0 100644 --- a/test/views/actionable-review-view.test.js +++ b/test/views/actionable-review-view.test.js @@ -69,17 +69,17 @@ describe('ActionableReviewView', function() { } it("opens the content object's URL with 'Open on GitHub'", async function() { - sinon.stub(shell, 'openExternal').callsArg(2); + sinon.stub(shell, 'openExternal').callsFake(() => {}); const item = triggerMenu({url: 'https://github.com'}, {}).items.find(i => i.label === 'Open on GitHub'); await item.click(); - assert.isTrue(shell.openExternal.calledWith('https://github.com', {})); + assert.isTrue(shell.openExternal.calledWith('https://github.com')); assert.isTrue(reporterProxy.addEvent.calledWith('open-comment-in-browser')); }); it("rejects the promise when 'Open on GitHub' fails", async function() { - sinon.stub(shell, 'openExternal').callsArgWith(2, new Error("I don't feel like it")); + sinon.stub(shell, 'openExternal').throws(new Error("I don't feel like it")); const item = triggerMenu({url: 'https://github.com'}, {}).items.find(i => i.label === 'Open on GitHub'); await assert.isRejected(item.click()); @@ -87,7 +87,7 @@ describe('ActionableReviewView', function() { }); it('opens a prepopulated abuse-reporting link with "Report abuse"', async function() { - sinon.stub(shell, 'openExternal').callsArg(2); + sinon.stub(shell, 'openExternal').callsFake(() => {}); const item = triggerMenu({url: 'https://github.com/a/b'}, {login: 'tyrion'}) .items.find(i => i.label === 'Report abuse'); @@ -95,13 +95,12 @@ describe('ActionableReviewView', function() { assert.isTrue(shell.openExternal.calledWith( 'https://github.com/contact/report-content?report=tyrion&content_url=https%3A%2F%2Fgithub.com%2Fa%2Fb', - {}, )); assert.isTrue(reporterProxy.addEvent.calledWith('report-abuse')); }); it("rejects the promise when 'Report abuse' fails", async function() { - sinon.stub(shell, 'openExternal').callsArgWith(2, new Error('nah')); + sinon.stub(shell, 'openExternal').throws(new Error('nah')); const item = triggerMenu({url: 'https://github.com/a/b'}, {login: 'tyrion'}) .items.find(i => i.label === 'Report abuse'); diff --git a/test/views/directory-select.test.js b/test/views/directory-select.test.js index 8e27125111..b371ccd426 100644 --- a/test/views/directory-select.test.js +++ b/test/views/directory-select.test.js @@ -24,7 +24,7 @@ describe('DirectorySelect', function() { {}} + showOpenDialog={() => Promise.resolve()} tabGroup={new TabGroup()} {...override} /> @@ -47,7 +47,7 @@ describe('DirectorySelect', function() { describe('clicking the directory button', function() { it('populates the destination path buffer on accept', async function() { - const showOpenDialog = sinon.stub().callsArgWith(2, ['/some/directory/path']); + const showOpenDialog = sinon.stub().returns(Promise.resolve({filePaths: ['/some/directory/path']})); const buffer = new TextBuffer({text: '/original'}); const wrapper = shallow(buildApp({showOpenDialog, buffer})); @@ -58,7 +58,7 @@ describe('DirectorySelect', function() { }); it('leaves the destination path buffer unmodified on cancel', async function() { - const showOpenDialog = sinon.stub().callsArgWith(2, undefined); + const showOpenDialog = sinon.stub().returns(Promise.resolve({filePaths: []})); const buffer = new TextBuffer({text: '/original'}); const wrapper = shallow(buildApp({showOpenDialog, buffer})); diff --git a/test/views/git-identity-view.test.js b/test/views/git-identity-view.test.js index de0f6fb2a2..153953f327 100644 --- a/test/views/git-identity-view.test.js +++ b/test/views/git-identity-view.test.js @@ -10,6 +10,9 @@ describe('GitIdentityView', function() { {}} + setGlobal={() => {}} close={() => {}} {...override} /> @@ -30,27 +33,37 @@ describe('GitIdentityView', function() { assert.strictEqual(getEditor('email address').prop('buffer'), emailBuffer); }); - it('disables the "Continue" button if the name is blank', function() { - const usernameBuffer = new TextBuffer(); - const wrapper = mount(buildApp({usernameBuffer})); + it('disables the local repo button when canWriteLocal is false', function() { + const wrapper = mount(buildApp({canWriteLocal: false})); - assert.isTrue(wrapper.find('.btn').prop('disabled')); + assert.isTrue(wrapper.find('.btn').filterWhere(each => /this repository/.test(each.text())).prop('disabled')); }); - it('disables the "Continue" button if the email is blank', function() { - const emailBuffer = new TextBuffer(); - const wrapper = mount(buildApp({emailBuffer})); + it('triggers a callback when "Use for this repository" is clicked', function() { + const setLocal = sinon.spy(); + const wrapper = mount(buildApp({setLocal})); + + wrapper.find('.btn').filterWhere(each => /this repository/.test(each.text())).simulate('click'); + + assert.isTrue(setLocal.called); + }); + + it('triggers a callback when "Use for all repositories" is clicked', function() { + const setGlobal = sinon.spy(); + const wrapper = mount(buildApp({setGlobal})); + + wrapper.find('.btn').filterWhere(each => /all repositories/.test(each.text())).simulate('click'); - assert.isTrue(wrapper.find('.btn').prop('disabled')); + assert.isTrue(setGlobal.called); }); - it('triggers a callback when "Continue" is clicked', function() { + it('triggers a callback when "Cancel" is clicked', function() { const usernameBuffer = new TextBuffer({text: 'Me'}); const emailBuffer = new TextBuffer({text: 'me@email.com'}); const close = sinon.spy(); const wrapper = mount(buildApp({usernameBuffer, emailBuffer, close})); - wrapper.find('.btn').simulate('click'); + wrapper.find('.btn').filterWhere(each => /Cancel/.test(each.text())).simulate('click'); assert.isTrue(close.called); }); diff --git a/test/views/github-dotcom-markdown.test.js b/test/views/github-dotcom-markdown.test.js index d8aa347f7e..a34ad96296 100644 --- a/test/views/github-dotcom-markdown.test.js +++ b/test/views/github-dotcom-markdown.test.js @@ -140,6 +140,7 @@ describe('GithubDotcomMarkdown', function() { }); it('opens item in pane and activates accordingly', async function() { + atom.workspace = {open: () => {}}; sinon.stub(atom.workspace, 'open').returns(Promise.resolve()); const issueishLink = wrapper.getDOMNode().querySelector('a.issue-link'); @@ -213,7 +214,7 @@ describe('GithubDotcomMarkdown', function() { }); it('records event for opening issueish in browser', async function() { - sinon.stub(shell, 'openExternal').callsArg(2); + sinon.stub(shell, 'openExternal').callsFake(() => {}); sinon.stub(reporterProxy, 'addEvent'); const issueishLink = wrapper.getDOMNode().querySelector('a.issue-link'); @@ -228,7 +229,7 @@ describe('GithubDotcomMarkdown', function() { }); it('does not record event if opening issueish in browser fails', function() { - sinon.stub(shell, 'openExternal').callsArgWith(2, new Error('oh noes')); + sinon.stub(shell, 'openExternal').throws(new Error('oh noes')); sinon.stub(reporterProxy, 'addEvent'); // calling `handleClick` directly rather than dispatching event so that we can catch the error thrown and prevent errors in the console diff --git a/test/views/github-tab-view.test.js b/test/views/github-tab-view.test.js index e507264c49..b29bc50acb 100644 --- a/test/views/github-tab-view.test.js +++ b/test/views/github-tab-view.test.js @@ -8,10 +8,10 @@ import RemoteSet from '../../lib/models/remote-set'; import Branch, {nullBranch} from '../../lib/models/branch'; import BranchSet from '../../lib/models/branch-set'; import GitHubTabView from '../../lib/views/github-tab-view'; -import {InMemoryStrategy} from '../../lib/shared/keytar-strategy'; -import GithubLoginModel from '../../lib/models/github-login-model'; +import {DOTCOM} from '../../lib/models/endpoint'; import RefHolder from '../../lib/models/ref-holder'; import Refresher from '../../lib/models/refresher'; +import {UNAUTHENTICATED, INSUFFICIENT} from '../../lib/shared/keytar-strategy'; import {buildRepository, cloneRepository} from '../helpers'; @@ -34,7 +34,8 @@ describe('GitHubTabView', function() { refresher={new Refresher()} rootHolder={new RefHolder()} - loginModel={new GithubLoginModel(InMemoryStrategy)} + endpoint={DOTCOM} + token="1234" workspace={atomEnv.workspace} workingDirectory={repo.getWorkingDirectoryPath()} @@ -52,6 +53,9 @@ describe('GitHubTabView', function() { currentBranch={nullBranch} pushInProgress={false} + handleLogin={() => {}} + handleLogout={() => {}} + handleTokenRetry={() => {}} handleWorkDirSelect={() => {}} handlePushBranch={() => {}} handleRemoteSelect={() => {}} @@ -66,6 +70,30 @@ describe('GitHubTabView', function() { ); } + it('renders a LoadingView if the token is still loading', function() { + const wrapper = shallow(buildApp({token: null})); + assert.isTrue(wrapper.exists('LoadingView')); + }); + + it('renders a login view if the token is missing or incorrect', function() { + const wrapper = shallow(buildApp({token: UNAUTHENTICATED})); + assert.isTrue(wrapper.exists('GithubLoginView')); + }); + + it('renders a login view with a custom message if the token has insufficient scopes', function() { + const wrapper = shallow(buildApp({token: INSUFFICIENT})); + assert.isTrue(wrapper.exists('GithubLoginView')); + assert.isTrue(wrapper.find('GithubLoginView').exists('p')); + }); + + it('renders an error view if there was an error acquiring the token', function() { + const e = new Error('oh no'); + e.rawStack = e.stack; + const wrapper = shallow(buildApp({token: e})); + assert.isTrue(wrapper.exists('QueryErrorView')); + assert.strictEqual(wrapper.find('QueryErrorView').prop('error'), e); + }); + it('renders a LoadingView if data is still loading', function() { const wrapper = shallow(buildApp({isLoading: true})); assert.isTrue(wrapper.find('LoadingView').exists()); diff --git a/test/worker-manager.test.js b/test/worker-manager.test.js index 27932fe8bb..515d54c1d7 100644 --- a/test/worker-manager.test.js +++ b/test/worker-manager.test.js @@ -151,23 +151,25 @@ describe('WorkerManager', function() { it('destroys all the renderer processes that were created', async function() { this.retries(5); // FLAKE - const browserWindow = new BrowserWindow({show: !!process.env.ATOM_GITHUB_SHOW_RENDERER_WINDOW, webPreferences: {nodeIntegration: true}}); + const browserWindow = new BrowserWindow({show: !!process.env.ATOM_GITHUB_SHOW_RENDERER_WINDOW, webPreferences: {nodeIntegration: true, enableRemoteModule: true}}); browserWindow.loadURL('about:blank'); sinon.stub(Worker.prototype, 'getWebContentsId').returns(browserWindow.webContents.id); const script = ` const ipc = require('electron').ipcRenderer; - ipc.on('${Worker.channelName}', function() { - const args = Array.prototype.slice.apply(arguments) - args.shift(); - - args.unshift('${Worker.channelName}'); - args.unshift(${remote.getCurrentWebContents().id}) - ipc.sendTo.apply(ipc, args); - }); + (function() { + ipc.on('${Worker.channelName}', function() { + const args = Array.prototype.slice.apply(arguments) + args.shift(); + + args.unshift('${Worker.channelName}'); + args.unshift(${remote.getCurrentWebContents().id}) + ipc.sendTo.apply(ipc, args); + }); + })() `; - await new Promise(resolve => browserWindow.webContents.executeJavaScript(script, resolve)); + await browserWindow.webContents.executeJavaScript(script); workerManager.destroy(true); workerManager = new WorkerManager();