Full Code of vercel/hyper for AI

canary 2a7bb18259d9 cached
158 files
5.2 MB
1.4M tokens
5094 symbols
1 requests
Download .txt
Showing preview only (5,470K chars total). Download the full file or copy to clipboard to get everything.
Repository: vercel/hyper
Branch: canary
Commit: 2a7bb18259d9
Files: 158
Total size: 5.2 MB

Directory structure:
gitextract_sxduwfdj/

├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── codeql-analysis.yml
│       ├── e2e_comment.yml
│       └── nodejs.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   └── pre-push
├── .vscode/
│   └── launch.json
├── .yarnrc
├── LICENSE
├── PLUGINS.md
├── README.md
├── app/
│   ├── .yarnrc
│   ├── auto-updater-linux.ts
│   ├── commands.ts
│   ├── config/
│   │   ├── config-default.json
│   │   ├── import.ts
│   │   ├── init.ts
│   │   ├── migrate.ts
│   │   ├── open.ts
│   │   ├── paths.ts
│   │   └── windows.ts
│   ├── config.ts
│   ├── index.html
│   ├── index.ts
│   ├── keymaps/
│   │   ├── darwin.json
│   │   ├── linux.json
│   │   └── win32.json
│   ├── menus/
│   │   ├── menu.ts
│   │   └── menus/
│   │       ├── darwin.ts
│   │       ├── edit.ts
│   │       ├── help.ts
│   │       ├── shell.ts
│   │       ├── tools.ts
│   │       ├── view.ts
│   │       └── window.ts
│   ├── notifications.ts
│   ├── notify.ts
│   ├── package.json
│   ├── patches/
│   │   └── node-pty+1.0.0.patch
│   ├── plugins.ts
│   ├── rpc.ts
│   ├── session.ts
│   ├── tsconfig.json
│   ├── ui/
│   │   ├── contextmenu.ts
│   │   └── window.ts
│   ├── updater.ts
│   └── utils/
│       ├── cli-install.ts
│       ├── colors.ts
│       ├── map-keys.ts
│       ├── renderer-utils.ts
│       ├── shell-fallback.ts
│       ├── system-context-menu.ts
│       ├── to-electron-background-color.ts
│       └── window-utils.ts
├── ava-e2e.config.js
├── ava.config.js
├── babel.config.json
├── bin/
│   ├── cp-snapshot.js
│   ├── mk-snapshot.js
│   ├── notarize.js
│   ├── rimraf-standalone.js
│   ├── snapshot-libs.js
│   └── yarn-standalone.js
├── build/
│   ├── canary.icns
│   ├── icon.fig
│   ├── icon.icns
│   ├── linux/
│   │   ├── after-install.tpl
│   │   └── hyper
│   ├── mac/
│   │   ├── entitlements.plist
│   │   └── hyper
│   └── win/
│       ├── hyper
│       ├── hyper.cmd
│       └── installer.nsh
├── cli/
│   ├── api.ts
│   └── index.ts
├── electron-builder-linux-ci.json
├── electron-builder.json
├── lib/
│   ├── actions/
│   │   ├── config.ts
│   │   ├── header.ts
│   │   ├── index.ts
│   │   ├── notifications.ts
│   │   ├── sessions.ts
│   │   ├── term-groups.ts
│   │   ├── ui.ts
│   │   └── updater.ts
│   ├── command-registry.ts
│   ├── components/
│   │   ├── header.tsx
│   │   ├── new-tab.tsx
│   │   ├── notification.tsx
│   │   ├── notifications.tsx
│   │   ├── searchBox.tsx
│   │   ├── split-pane.tsx
│   │   ├── style-sheet.tsx
│   │   ├── tab.tsx
│   │   ├── tabs.tsx
│   │   ├── term-group.tsx
│   │   ├── term.tsx
│   │   └── terms.tsx
│   ├── containers/
│   │   ├── header.ts
│   │   ├── hyper.tsx
│   │   ├── notifications.ts
│   │   └── terms.ts
│   ├── index.tsx
│   ├── reducers/
│   │   ├── index.ts
│   │   ├── sessions.ts
│   │   ├── term-groups.ts
│   │   └── ui.ts
│   ├── rpc.ts
│   ├── selectors.ts
│   ├── store/
│   │   ├── configure-store.dev.ts
│   │   ├── configure-store.prod.ts
│   │   ├── configure-store.ts
│   │   └── write-middleware.ts
│   ├── terms.ts
│   ├── utils/
│   │   ├── config.ts
│   │   ├── effects.ts
│   │   ├── file.ts
│   │   ├── ipc-child-process.ts
│   │   ├── ipc.ts
│   │   ├── notify.ts
│   │   ├── object.ts
│   │   ├── paste.ts
│   │   ├── plugins.ts
│   │   ├── rpc.ts
│   │   └── term-groups.ts
│   └── v8-snapshot-util.ts
├── package.json
├── release.js
├── test/
│   ├── index.ts
│   ├── testUtils/
│   │   └── is-hex-color.ts
│   └── unit/
│       ├── cli-api.test.ts
│       ├── to-electron-background-color.test.ts
│       └── window-utils.test.ts
├── tsconfig.base.json
├── tsconfig.eslint.json
├── tsconfig.json
├── typings/
│   ├── common.d.ts
│   ├── config.d.ts
│   ├── constants/
│   │   ├── config.d.ts
│   │   ├── index.d.ts
│   │   ├── notifications.d.ts
│   │   ├── sessions.d.ts
│   │   ├── tabs.d.ts
│   │   ├── term-groups.d.ts
│   │   ├── ui.d.ts
│   │   └── updater.d.ts
│   ├── ext-modules.d.ts
│   ├── extend-electron.d.ts
│   └── hyper.d.ts
└── webpack.config.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false


================================================
FILE: .eslintignore
================================================
build
app/renderer
app/static
app/bin
app/dist
app/node_modules
app/typings
assets
website
bin
dist
target
cache
schema.json

================================================
FILE: .eslintrc.json
================================================
{
  "plugins": [
    "react",
    "prettier",
    "@typescript-eslint",
    "eslint-comments",
    "lodash",
    "import"
  ],
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:prettier/recommended",
    "plugin:eslint-comments/recommended"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true,
      "impliedStrict": true,
      "experimentalObjectRestSpread": true
    },
    "allowImportExportEverywhere": true,
    "project": [
      "./tsconfig.eslint.json"
    ]
  },
  "env": {
    "es6": true,
    "browser": true,
    "node": true
  },
  "settings": {
    "react": {
      "version": "detect"
    },
    "import/resolver": {
      "typescript": {}
    },
    "import/internal-regex": "^(electron|react)$"
  },
  "rules": {
    "func-names": [
      "error",
      "as-needed"
    ],
    "no-shadow": "error",
    "no-extra-semi": 0,
    "react/prop-types": 0,
    "react/react-in-jsx-scope": 0,
    "react/no-unescaped-entities": 0,
    "react/jsx-no-target-blank": 0,
    "react/no-string-refs": 0,
    "prettier/prettier": [
      "error",
      {
        "printWidth": 120,
        "tabWidth": 2,
        "singleQuote": true,
        "trailingComma": "none",
        "bracketSpacing": false,
        "semi": true,
        "useTabs": false,
        "bracketSameLine": false
      }
    ],
    "eslint-comments/no-unused-disable": "error",
    "react/no-unknown-property":[
      "error",
      {
        "ignore": [
          "jsx",
          "global"
        ]
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**.ts",
        "**.tsx"
      ],
      "extends": [
        "plugin:@typescript-eslint/recommended",
        "plugin:@typescript-eslint/recommended-requiring-type-checking",
        "prettier"
      ],
      "rules": {
        "@typescript-eslint/explicit-function-return-type": "off",
        "@typescript-eslint/explicit-module-boundary-types": "off",
        "@typescript-eslint/no-explicit-any": "off",
        "@typescript-eslint/no-non-null-assertion": "off",
        "@typescript-eslint/prefer-optional-chain": "error",
        "@typescript-eslint/ban-types": "off",
        "no-shadow": "off",
        "@typescript-eslint/no-shadow": ["error"],
        "@typescript-eslint/no-unsafe-assignment": "off",
        "@typescript-eslint/no-unsafe-member-access": "off",
        "@typescript-eslint/restrict-template-expressions": "off",
        "@typescript-eslint/consistent-type-imports": [ "error", { "disallowTypeAnnotations": false } ],
        "lodash/prop-shorthand": [ "error", "always" ],
        "lodash/import-scope": [ "error", "method" ],
        "lodash/collection-return": "error",
        "lodash/collection-method-value": "error",
        "import/no-extraneous-dependencies": "error",
        "import/no-anonymous-default-export": "error",
        "import/order": [
          "error",
          {
            "groups": [
              "builtin",
              "internal",
              "external",
              "parent",
              "sibling",
              "index"
            ],
            "newlines-between": "always",
            "alphabetize": {
              "order": "asc",
              "orderImportKind": "desc",
              "caseInsensitive": true
            }
          }
        ]
      }
    },
    {
      "extends": [
        "plugin:jsonc/recommended-with-json",
        "plugin:json-schema-validator/recommended"
      ],
      "files": [
        "*.json"
      ],
      "parser": "jsonc-eslint-parser",
      "plugins": [
        "jsonc",
        "json-schema-validator"
      ],
      "rules": {
        "jsonc/array-element-newline": [
          "error",
          "consistent"
        ],
        "jsonc/array-bracket-newline": [
          "error",
          "consistent"
        ],
        "jsonc/indent": [
          "error",
          2
        ],
        "prettier/prettier": "off",
        "json-schema-validator/no-invalid": "error"
      }
    }
  ]
}


================================================
FILE: .gitattributes
================================================
* text=auto
*.js text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
bin/* linguist-vendored


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help Hyper improve
title: ''
labels: ''
assignees: ''

---

<!--
  Hi there! Thank you for discovering and submitting an issue.

  Before you submit this; let's make sure of a few things.
  Please make sure the following boxes are ticked if they are correct.
  If not, please try and fulfill these first.
-->

<!-- Checked checkbox should look like this: [x] -->
- [ ] I am on the [latest](https://github.com/vercel/hyper/releases/latest) Hyper.app version
- [ ] I have searched the [issues](https://github.com/vercel/hyper/issues) of this repo and believe that this is not a duplicate

<!--
  Once those are done, if you're able to fill in the following list with your information,
  it'd be very helpful to whoever handles the issue.
-->

- **OS version and name**: <!-- Replace with version + name -->
- **Hyper.app version**: <!-- Replace with version -->
- **Link of a [Gist](https://gist.github.com/) with the contents of your hyper.json**: <!-- Gist Link Here -->
- **Relevant information from devtools** _(CMD+ALT+I on macOS, CTRL+SHIFT+I elsewhere)_: <!-- Replace with info if applicable, or N/A -->
- **The issue is reproducible in vanilla Hyper.app**: <!-- Replace with info if applicable, or `Is Vanilla`. (Vanilla means Hyper.app without any add-ons or extras. Straight out of the box.) -->

## Issue
<!-- Now feel free to write your issue, but please be descriptive! Thanks again 🙌 ❤️ -->


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea/feature for Hyper
title: ''
labels: ''
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: npm
  directory: "/"
  schedule:
    interval: weekly
    time: '11:00'
  open-pull-requests-limit: 30
  target-branch: canary
  versioning-strategy: increase
- package-ecosystem: npm
  directory: "/app"
  schedule:
    interval: weekly
    time: '11:00'
  open-pull-requests-limit: 30
  target-branch: canary
  versioning-strategy: increase
- package-ecosystem: github-actions
  directory: "/"
  schedule:
    interval: weekly
    time: '11:00'
  open-pull-requests-limit: 30
  target-branch: canary


================================================
FILE: .github/pull_request_template.md
================================================
<!-- Hi there! Thanks for submitting a PR! We're excited to see what you've got for us.

- To help whoever reviews your PR, it'd be extremely helpful for you to list whether your PR is ready to be merged,
If there's anything left to do and if there are any related PRs
- It'd also be extremely helpful to enable us to update your PR incase we need to rebase or what-not by checking `Allow edits from maintainers`
- If your PR changes some API, please make a PR for hyper website too: https://github.com/vercel/hyper-site.

Thanks, again! -->


================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  push:
    branches: [ canary ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ canary ]
  schedule:
    - cron: '37 6 * * 5'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: [ 'javascript' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
        # Learn more:
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        # queries: ./path/to/local/query, your-org/your-repo/queries@main

    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v3

    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
    #    and modify them (or add more) to build your code if your project
    #    uses a compiled language

    #- run: |
    #   make bootstrap
    #   make release

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3


================================================
FILE: .github/workflows/e2e_comment.yml
================================================
name: Comment e2e test screenshots on PR
on:
  workflow_run:
    workflows: ['Node CI']
    types:
      - completed
jobs:
  e2e_comment:
    runs-on: ubuntu-latest
    if: github.event.workflow_run.event == 'pull_request'
    steps:
      - name: Dump Workflow run info from GitHub context
        env:
          WORKFLOW_RUN_INFO: ${{ toJSON(github.event.workflow_run) }}
        run: echo "$WORKFLOW_RUN_INFO"
      - name: Download Artifacts
        uses: dawidd6/action-download-artifact@v3.1.4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          workflow: nodejs.yml
          run_id: ${{ github.event.workflow_run.id }}
          name: e2e
      - name: Get PR number
        uses: dawidd6/action-download-artifact@v3.1.4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          workflow: nodejs.yml
          run_id: ${{ github.event.workflow_run.id }}
          name: pr_num
      - name: Read the pr_num file
        id: pr_num_reader
        uses: juliangruber/read-file-action@v1.1.7
        with:
          path: ./pr_num.txt
      - name: List images
        run: ls -al
      - name: Upload images to imgur
        id: upload_screenshots
        uses: devicons/public-upload-to-imgur@v2.2.2
        with:
          path: ./*.png
          client_id: ${{ secrets.IMGUR_CLIENT_ID }}
      - name: Comment on the PR
        uses: jungwinter/comment@v1
        env:
          IMG_MARKDOWN: ${{ join(fromJSON(steps.upload_screenshots.outputs.markdown_urls), '') }}
          MESSAGE: |
            Hi there,
            Thank you for contributing to Hyper!
            You can get the build artifacts from [here](https://nightly.link/{1}/actions/runs/{2}).
            Here are screenshots of Hyper built from this pr.
            {0}
        with:
          type: create
          issue_number: ${{ steps.pr_num_reader.outputs.content }}
          token: ${{ secrets.GITHUB_TOKEN }}
          body: ${{ format(env.MESSAGE, env.IMG_MARKDOWN, github.repository, github.event.workflow_run.id) }}
      - name: Hide older comments
        uses: kanga333/comment-hider@v0.4.0
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          leave_visible: 1
          issue_number: ${{ steps.pr_num_reader.outputs.content }}


================================================
FILE: .github/workflows/nodejs.yml
================================================
name: Node CI
on:
  push:
    branches:
      - master
      - canary
  pull_request:
defaults:
  run:
    shell: bash
env:
  NODE_VERSION: 18.x
jobs:
  build:
    runs-on: ${{matrix.os}}
    strategy:
      matrix:
        os:
          - macos-latest
          - ubuntu-latest
          - windows-latest
      fail-fast: false
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Use Node.js ${{ env.NODE_VERSION }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Fix node-gyp and Python
        run: python3 -m pip install packaging setuptools
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
      - uses: actions/cache/restore@v4
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', 'app/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
      - name: Install
        run: yarn install
        env:
          npm_config_node_gyp: ${{ github.workspace }}${{ runner.os == 'Windows' && '\node_modules\node-gyp\bin\node-gyp.js' || '/node_modules/node-gyp/bin/node-gyp.js' }}
      - name: Install libarchive-tools
        if: runner.os == 'Linux'
        run: |
          sudo apt update
          sudo apt install libarchive-tools
      - name: Lint and Run Unit Tests
        run: yarn run test
      - name: Getting Build Icon
        if: github.ref == 'refs/heads/canary' || github.base_ref == 'canary'
        run: |
          cp build/canary.ico build/icon.ico
          cp build/canary.icns build/icon.icns
      - name: Build
        run: |
          if [ -z "$CSC_LINK" ] ; then unset CSC_LINK ; fi
          if [ -z "$CSC_KEY_PASSWORD" ] ; then unset CSC_KEY_PASSWORD ; fi
          if [ -z "$WIN_CSC_LINK" ] ; then unset WIN_CSC_LINK ; fi
          if [ -z "$WIN_CSC_KEY_PASSWORD" ] ; then unset WIN_CSC_KEY_PASSWORD ; fi
          if [ -z "$APPLE_ID" ] ; then unset APPLE_ID ; fi
          if [ -z "$APPLE_APP_SPECIFIC_PASSWORD" ] ; then unset APPLE_APP_SPECIFIC_PASSWORD ; fi
          yarn run dist
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CSC_LINK: ${{ secrets.MAC_CERT_P12_BASE64 }}
          CSC_KEY_PASSWORD: ${{ secrets.MAC_CERT_P12_PASSWORD }}
          WIN_CSC_LINK: ${{ secrets.WIN_CERT_P12_BASE64 }}
          WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CERT_P12_PASSWORD }}
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
      - name: Archive Build Artifacts
        uses: LabhanshAgrawal/upload-artifact@v3
        with:
          path: |
            dist/*.dmg
            dist/*.snap
            dist/*.AppImage
            dist/*.deb
            dist/*.rpm
            dist/*.pacman
            dist/*.exe
      - name: Run E2E Tests
        if: runner.os != 'Linux'
        run: yarn run test:e2e
      - name: Run E2E Tests on Linux
        if: runner.os == 'Linux'
        uses: GabrielBB/xvfb-action@v1.6
        with:
          run: yarn run test:e2e
        env:
          SHELL: /bin/bash
      - name: Archive E2E test screenshot
        uses: actions/upload-artifact@v3
        with:
          name: e2e
          path: dist/tmp/*.png
      - name: Save the pr number in an artifact
        if: github.event_name == 'pull_request'
        env:
          PR_NUM: ${{ github.event.number }}
        run: echo $PR_NUM > pr_num.txt
      - name: Upload the pr num
        uses: actions/upload-artifact@v3
        if: github.event_name == 'pull_request'
        with:
          name: pr_num
          path: ./pr_num.txt
      - uses: actions/cache/save@v4
        if: github.event_name == 'push'
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', 'app/yarn.lock') }}

  build-linux-arm:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - name: armv7l
            cpu: cortex-a8
            image: raspios_lite:latest
          - name: arm64
            cpu: cortex-a53
            image: raspios_lite_arm64:latest
      fail-fast: false
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Use Node.js ${{ env.NODE_VERSION }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Fix node-gyp and Python
        run: python3 -m pip install packaging setuptools
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
      - uses: actions/cache/restore@v4
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', 'app/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
      - name: Install
        run: |
          yarn install
          sudo apt update
          sudo apt install libarchive-tools
      - name: Compile
        run: yarn run build
      - name: rebuild node-pty
        uses: pguyot/arm-runner-action@v2.5.2
        with:
          image_additional_mb: 2000
          base_image: ${{ matrix.image }}
          cpu: ${{ matrix.cpu }}
          shell: bash
          copy_artifact_path: target/node_modules/node-pty
          copy_artifact_dest: target/node_modules
          commands: |
            wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-${{ matrix.name }}.tar.xz
            tar -xJf node-v18.16.0-linux-${{ matrix.name }}.tar.xz
            sudo cp node-v18.16.0-linux-${{ matrix.name }}/* /usr/local/ -R
            npm run rebuild-node-pty
      - name: chown node-pty
        run: |
          sudo chown -R $USER:$USER target/node_modules/node-pty
      - name: Prepare v8 snapshot
        if: matrix.name == 'armv7l'
        run: |
          sudo dpkg --add-architecture i386
          sudo apt update
          sudo apt install -y libglib2.0-0:i386 libexpat1:i386 libgcc-s1:i386
          npm_config_arch=armv7l yarn run v8-snapshot:arch
      - name: Build
        run: yarn run electron-builder -l deb rpm AppImage pacman --${{ matrix.name }} -c electron-builder-linux-ci.json
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Archive Build Artifacts
        uses: LabhanshAgrawal/upload-artifact@v3
        with:
          path: |
            dist/*.snap
            dist/*.AppImage
            dist/*.deb
            dist/*.rpm
            dist/*.pacman


================================================
FILE: .gitignore
================================================
# build output
dist
app/renderer
target
bin/cli.*
cache

# dependencies
node_modules

# logs
npm-debug.log
yarn-error.log

# optional dev config file and plugins directory
hyper.json
schema.json
plugins

.DS_Store
.vscode/*
!.vscode/launch.json
.idea


================================================
FILE: .husky/.gitignore
================================================
_


================================================
FILE: .husky/pre-push
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn test


================================================
FILE: .vscode/launch.json
================================================
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Hyper",
      "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
      "program": "${workspaceRoot}/target/index.js",
      "protocol": "inspector"
    },
     {
      "type": "node",
      "request": "launch",
      "name": "cli",
      "runtimeExecutable": "node",
      "program": "${workspaceRoot}/bin/cli.js",
      "args": ["--help"],
      "protocol": "inspector"
    }
  ]
}


================================================
FILE: .yarnrc
================================================
registry "https://registry.npmjs.org/"


================================================
FILE: LICENSE
================================================
# MIT License

Copyright (c) 2018 Vercel, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: PLUGINS.md
================================================
# Plugin development

## Workflow

### Run Hyper in dev mode
Hyper can be run in dev mode by cloning this repository and following the ["Contributing" section of our README](https://github.com/vercel/hyper#contribute).

In dev mode you'll get more ouput and access to React/Redux dev-tools in Electron.

Prerequisites and steps are described in the ["Contributing" section of our README](https://github.com/vercel/hyper#contribute).
Be sure to use the `canary` branch.

### Create a dev config file
Copy your config file `hyper.json` to the root of your cloned repository. Hyper, in dev mode, will use this copied config file. That means that you can continue to use your main installation of Hyper with your day-to-day configuration.
After the first run, Hyper, in dev mode, will have created a new `plugins` directory in your repository directory.

### Setup your plugin
Go to your recently created `<repository_root>/plugins/local` directory and create/clone your plugin repo. An even better method on macOS/Linux is to add a symlink to your plugin directory.

Edit your dev config file, and add your plugin name (directory name in your `local` directory) in the `localPlugins` array.
```js
module.exports = {
  config: {
    ...
  },
  plugins: [],
  localPlugins: ['hyper-awesome-plugin'],
  ...
}
```

### Running your plugin
To load, your plugin should expose at least one API method. All possible methods are listed [here](https://github.com/vercel/hyper/blob/canary/app/plugins/extensions.ts).

After launching Hyper in dev mode, run `yarn run app`, it should log that your plugin has been correcty loaded: `Plugin hyper-awesome-plugin (0.1.0) loaded.`. Name and version printed are the ones in your plugins `package.json` file.

When you put a `console.log()` in your plugin code, it will be displayed in the Electron dev-tools, but only if it is located in a renderer method, like component decorators. If it is located in the Electron main process method, like the `onApp` handler, it will be displayed in your terminal where you ran `yarn run app` or in your VSCode console.

## Recipes
Almost all available API methods can be found on https://hyper.is.
If there's any missing, let us know or submit a PR to document it!

### Components
You can decorate almost all Hyper components with a Higher-Order Component (HOC). To understand their architecture, the easiest way is to use React dev-tools to dig in to their hierarchy.

Multiple plugins can decorate the same Hyper component. Thus, `Component` passed as first argument to your decorator function could possibly not be an original Hyper component but a HOC of a previous plugin. If you need to retrieve a reference to a real Hyper component, you can pass down a `onDecorated` handler.
```js
exports.decorateTerms = (Terms, {React}) => {
  return class extends React.Component {
    constructor(props, context) {
      super(props, context);
      this.terms = null;
      this.onDecorated = this.onDecorated.bind(this);
    }

    onDecorated(terms) {
      this.terms = terms;
      // Don't forget to propagate it to HOC chain
      if (this.props.onDecorated) this.props.onDecorated(terms);
    }

    render() {
      return React.createElement(
        Terms,
        Object.assign({}, this.props, {
          onDecorated: this.onDecorated
        })
      );
      // Or if you use JSX:
      // <Terms onDecorated={this.onDecorated} />
    }
  }
```
:warning: Note that you have to execute `this.props.onDecorated` to not break the handler chain. Without this, you could break other plugins that decorate the same component.

### Keymaps
If you want to add some keymaps, you need to do 2 things:

#### Declare your key bindings
Use the `decorateKeymaps` API handler to modify existing keymaps and add yours with the following format `command: hotkeys`.
```js
// Adding Keymaps
exports.decorateKeymaps = keymaps => {
  const newKeymaps = {
    'pane:maximize': 'ctrl+shift+m',
    'pane:invert': 'ctrl+shift+i'
  }
  return Object.assign({}, keymaps, newKeymaps);
}
```
The command name can be whatever you want, but the following is better to respect the default naming convention: `<context>:<action>`.
Hotkeys are composed by [Mousetrap supported keys](https://craig.is/killing/mice#keys).

**Bonus feature**: if your command ends with `:prefix`, it would mean that you want to use this command with an additional digit to the command. Then Hyper will create all your commands under the hood. For example, this keymap `'pane:hide:prefix': 'ctrl+shift'` will automatically generate the following:
```
{
  'pane:hide:1': 'ctrl+shift+1',
  'pane:hide:2': 'ctrl+shift+2',
  ...
  'pane:hide:8': 'ctrl+shift+8',
  'pane:hide:last': 'ctrl+shift+9'
}
```
Notice that `9` has been replaced by `last` because most of the time this is handy if you have more than 9 items.


#### Register a handler for your commands
##### Renderer/Window
Most of time, you'll want to execute some sort of handler in context of the renderer, like dispatching a Redux action.
To trigger these handlers, you'll have to register them with the `registerCommands` Terms method.
```js
this.terms.registerCommands({
  'pane:maximize': e => {
    this.props.onMaximizePane();
    // e parameter is React key event
    e.preventDefault();
  }
})
```

##### Main process
If there is no handler in the renderer for an existing command, an `rpc` message is emitted.
If you want to execute a handler in main process you have to subscribe to a message, for example:
```js
rpc.on('command pane:snapshot', () => {
  /* Awesome snapshot feature */
});
```

### Menu
Your plugin can expose a `decorateMenu` function to modify the Hyper menu template.
Check the [Electron documentation](https://electronjs.org/docs/api/menu-item) for more details about the different menu item types/options available.

Be careful, a click handler will be executed on the main process. If you need to trigger a handler in the render process you need to use an `rpc` message like this:
```js
exports.decorateMenu = (menu) => {
  debug('decorateMenu');
  const isMac = process.platform === 'darwin';
  // menu label is different on mac
  const menuLabel = isMac ? 'Shell' : 'File';

  return menu.map(menuCategory => {
    if (menuCategory.label !== menuLabel) {
      return menuItem;
    }
    return [
      ...menuCategory,
      {
        type: 'separator'
      },
      {
        label: 'Clear all panes in all tabs',
        accelerator: 'ctrl+shift+y',
        click(item, focusedWindow) {
          // on macOS, menu item can clicked without or minized window
          if (focusedWindow) {
            focusedWindow.rpc.emit('clear allPanes');
          }
        }
      }
    ]
  });
}
/* Plugin needs to register a rpc handler on renderer side for example in a Terms HOC*/
exports.decorateTerms = (Terms, { React }) => {
  return class extends React.Component {
    componentDidMount() {
      window.rpc.on('clear allPanes',() => {
        /* Awesome plugin feature */
      })
    }
  }
}
```

### Cursor
If your plugin needs to know cursor position/size, it can decorate the Term component and pass a handler. This handler will be called with each cursor move while passing back all information about the cursor.
```js
exports.decorateTerm = (Term, { React, notify }) => {
  // Define and return our higher order component.
  return class extends React.Component {
    onCursorMove (cursorFrame) {
      // Don't forget to propagate it to HOC chain
      if (this.props.onCursorMove) this.props.onCursorMove(cursorFrame);

      const { x, y, width, height, col, row } = cursorFrame;
      /* Awesome cursor feature */
    }
  }
}
```

### Require Electron
Hyper doesn't provide a reference to electron. However plugins can directly require electron.

```js
const electron = require('electron')
// or
const { dialog, Menu } = require('electron')
```

This is needed in order to allow show/hide to have proper return of focus.

## Hyper v2 breaking changes
Hyper v2 uses `xterm.js` instead of `hterm`. It means that PTY output renders now in a canvas element, not with a hackable DOM structure.
For example, plugins can't use TermCSS in order to modify text or link styles anymore. It is now required to use available configuration params that are passed down to `xterm.js`.

If your plugin was deeply linked with the `hterm` API (even public methods), it certainly doesn't work anymore.

If your plugin needs some unavailable API to tweak `xterm.js`, please open an issue. We'll be happy to expose some existing `xterm.js` API or implement new ones.


================================================
FILE: README.md
================================================
![](https://assets.vercel.com/image/upload/v1549723846/repositories/hyper/hyper-3-repo-banner.png)

<p align="center">
  <a aria-label="Vercel logo" href="https://vercel.com">
    <img src="https://img.shields.io/badge/MADE%20BY%20Vercel-000000.svg?style=for-the-badge&logo=vercel&labelColor=000000&logoWidth=20">
  </a>
 </p>
  
[![Node CI](https://github.com/vercel/hyper/workflows/Node%20CI/badge.svg?event=push)](https://github.com/vercel/hyper/actions?query=workflow%3A%22Node+CI%22+branch%3Acanary+event%3Apush)
[![Changelog #213](https://img.shields.io/badge/changelog-%23213-lightgrey.svg)](https://changelog.com/213)

For more details, head to: https://hyper.is

## Project goals

The goal of the project is to create a beautiful and extensible experience for command-line interface users, built on open web standards. In the beginning, our focus will be primarily around speed, stability and the development of the correct API for extension authors.

In the future, we anticipate the community will come up with innovative additions to enhance what could be the simplest, most powerful and well-tested interface for productivity.

## Usage

[Download the latest release!](https://hyper.is/#installation)

### Linux
#### Arch and derivatives
Hyper is available in the [AUR](https://aur.archlinux.org/packages/hyper/). Use an AUR [package manager](https://wiki.archlinux.org/index.php/AUR_helpers) e.g. [paru](https://github.com/Morganamilo/paru)

```sh
paru -S hyper
```

#### NixOS
Hyper is available as [Nix package](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/misc/hyper/default.nix), to install the app run this command:

```sh
nix-env -i hyper
```

### macOS

Use [Homebrew Cask](https://brew.sh) to download the app by running these commands:

```bash
brew update
brew install --cask hyper
```

### Windows

Use [chocolatey](https://chocolatey.org/) to install the app by running the following command (package information can be found [here](https://chocolatey.org/packages/hyper/)):

```bash
choco install hyper
```

**Note:** The version available on [Homebrew Cask](https://brew.sh), [Chocolatey](https://chocolatey.org), [Snapcraft](https://snapcraft.io/store) or the [AUR](https://aur.archlinux.org) may not be the latest. Please consider downloading it from [here](https://hyper.is/#installation) if that's the case.

## Contribute

Regardless of the platform you are working on, you will need to have Yarn installed. If you have never installed Yarn before, you can find out how at: https://yarnpkg.com/en/docs/install.

1. Install necessary packages:
  * Windows
    - Be sure to run  `yarn global add windows-build-tools` from an elevated prompt (as an administrator) to install `windows-build-tools`.
  * macOS
    - Once you have installed Yarn, you can skip this section!
  * Linux (You can see [here](https://en.wikipedia.org/wiki/List_of_Linux_distributions) what your Linux is based on.)
    - RPM-based
        + `GraphicsMagick`
        + `libicns-utils`
        + `xz` (Installed by default on some distributions.)
    - Debian-based
        + `graphicsmagick`
        + `icnsutils`
        + `xz-utils`
2. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
3. Install the dependencies: `yarn`
4. Build the code and watch for changes: `yarn run dev`
5. To run `hyper`
  * `yarn run app` from another terminal tab/window/pane
  * If you are using **Visual Studio Code**, select `Launch Hyper` in debugger configuration to launch a new Hyper instance with debugger attached.
  * If you interrupt `yarn run dev`, you'll need to relaunch it each time you want to test something. Webpack will watch changes and will rebuild renderer code when needed (and only what have changed). You'll just have to relaunch electron by using yarn run app or VSCode launch task.

To make sure that your code works in the finished application, you can generate the binaries like this:

```bash
yarn run dist
```

After that, you will see the binary in the `./dist` folder!

#### Known issues that can happen during development

##### Error building `node-pty`

If after building during development you get an alert dialog related to `node-pty` issues,
make sure its build process is working correctly by running `yarn run rebuild-node-pty`.

If you are on macOS, this typically is related to Xcode issues (like not having agreed
to the Terms of Service by running `sudo xcodebuild` after a fresh Xcode installation).

##### Error with `C++` on macOS when running `yarn`

If you are getting compiler errors when running `yarn` add the environment variable `export CXX=clang++`

##### Error with `codesign` on macOS when running `yarn run dist`

If you have issues in the `codesign` step when running `yarn run dist` on macOS, you can temporarily disable code signing locally by setting
`export CSC_IDENTITY_AUTO_DISCOVERY=false` for the current terminal session.

## Related Repositories

- [Website](https://github.com/vercel/hyper-site)
- [Sample Extension](https://github.com/vercel/hyperpower)
- [Sample Theme](https://github.com/vercel/hyperyellow)
- [Awesome Hyper](https://github.com/bnb/awesome-hyper)


================================================
FILE: app/.yarnrc
================================================
registry "https://registry.npmjs.org/"


================================================
FILE: app/auto-updater-linux.ts
================================================
import {EventEmitter} from 'events';

import fetch from 'electron-fetch';

class AutoUpdater extends EventEmitter implements Electron.AutoUpdater {
  updateURL!: string;
  quitAndInstall() {
    this.emitError('QuitAndInstall unimplemented');
  }
  getFeedURL() {
    return this.updateURL;
  }

  setFeedURL(options: Electron.FeedURLOptions) {
    this.updateURL = options.url;
  }

  checkForUpdates() {
    if (!this.updateURL) {
      return this.emitError('Update URL is not set');
    }
    this.emit('checking-for-update');

    fetch(this.updateURL)
      .then((res) => {
        if (res.status === 204) {
          this.emit('update-not-available');
          return;
        }
        return res.json().then(({name, notes, pub_date}: {name: string; notes: string; pub_date: string}) => {
          // Only name is mandatory, needed to construct release URL.
          if (!name) {
            throw new Error('Malformed server response: release name is missing.');
          }
          const date = pub_date ? new Date(pub_date) : new Date();
          this.emit('update-available', {}, notes, name, date);
        });
      })
      .catch(this.emitError.bind(this));
  }

  emitError(error: string | Error) {
    if (typeof error === 'string') {
      error = new Error(error);
    }
    this.emit('error', error);
  }
}

const autoUpdaterLinux = new AutoUpdater();

export default autoUpdaterLinux;


================================================
FILE: app/commands.ts
================================================
import {app, Menu} from 'electron';
import type {BrowserWindow} from 'electron';

import {openConfig, getConfig} from './config';
import {updatePlugins} from './plugins';
import {installCLI} from './utils/cli-install';
import * as systemContextMenu from './utils/system-context-menu';

const commands: Record<string, (focusedWindow?: BrowserWindow) => void> = {
  'window:new': () => {
    // If window is created on the same tick, it will consume event too
    setTimeout(app.createWindow, 0);
  },
  'tab:new': (focusedWindow) => {
    if (focusedWindow) {
      focusedWindow.rpc.emit('termgroup add req', {});
    } else {
      setTimeout(app.createWindow, 0);
    }
  },
  'pane:splitRight': (focusedWindow) => {
    focusedWindow?.rpc.emit('split request vertical', {});
  },
  'pane:splitDown': (focusedWindow) => {
    focusedWindow?.rpc.emit('split request horizontal', {});
  },
  'pane:close': (focusedWindow) => {
    focusedWindow?.rpc.emit('termgroup close req');
  },
  'window:preferences': () => {
    void openConfig();
  },
  'editor:clearBuffer': (focusedWindow) => {
    focusedWindow?.rpc.emit('session clear req');
  },
  'editor:selectAll': (focusedWindow) => {
    focusedWindow?.rpc.emit('term selectAll');
  },
  'plugins:update': () => {
    updatePlugins();
  },
  'window:reload': (focusedWindow) => {
    focusedWindow?.rpc.emit('reload');
  },
  'window:reloadFull': (focusedWindow) => {
    focusedWindow?.reload();
  },
  'window:devtools': (focusedWindow) => {
    if (!focusedWindow) {
      return;
    }
    const webContents = focusedWindow.webContents;
    if (webContents.isDevToolsOpened()) {
      webContents.closeDevTools();
    } else {
      webContents.openDevTools({mode: 'detach'});
    }
  },
  'zoom:reset': (focusedWindow) => {
    focusedWindow?.rpc.emit('reset fontSize req');
  },
  'zoom:in': (focusedWindow) => {
    focusedWindow?.rpc.emit('increase fontSize req');
  },
  'zoom:out': (focusedWindow) => {
    focusedWindow?.rpc.emit('decrease fontSize req');
  },
  'tab:prev': (focusedWindow) => {
    focusedWindow?.rpc.emit('move left req');
  },
  'tab:next': (focusedWindow) => {
    focusedWindow?.rpc.emit('move right req');
  },
  'pane:prev': (focusedWindow) => {
    focusedWindow?.rpc.emit('prev pane req');
  },
  'pane:next': (focusedWindow) => {
    focusedWindow?.rpc.emit('next pane req');
  },
  'editor:movePreviousWord': (focusedWindow) => {
    focusedWindow?.rpc.emit('session move word left req');
  },
  'editor:moveNextWord': (focusedWindow) => {
    focusedWindow?.rpc.emit('session move word right req');
  },
  'editor:moveBeginningLine': (focusedWindow) => {
    focusedWindow?.rpc.emit('session move line beginning req');
  },
  'editor:moveEndLine': (focusedWindow) => {
    focusedWindow?.rpc.emit('session move line end req');
  },
  'editor:deletePreviousWord': (focusedWindow) => {
    focusedWindow?.rpc.emit('session del word left req');
  },
  'editor:deleteNextWord': (focusedWindow) => {
    focusedWindow?.rpc.emit('session del word right req');
  },
  'editor:deleteBeginningLine': (focusedWindow) => {
    focusedWindow?.rpc.emit('session del line beginning req');
  },
  'editor:deleteEndLine': (focusedWindow) => {
    focusedWindow?.rpc.emit('session del line end req');
  },
  'editor:break': (focusedWindow) => {
    focusedWindow?.rpc.emit('session break req');
  },
  'editor:stop': (focusedWindow) => {
    focusedWindow?.rpc.emit('session stop req');
  },
  'editor:quit': (focusedWindow) => {
    focusedWindow?.rpc.emit('session quit req');
  },
  'editor:tmux': (focusedWindow) => {
    focusedWindow?.rpc.emit('session tmux req');
  },
  'editor:search': (focusedWindow) => {
    focusedWindow?.rpc.emit('session search');
  },
  'editor:search-close': (focusedWindow) => {
    focusedWindow?.rpc.emit('session search close');
  },
  'cli:install': () => {
    void installCLI(true);
  },
  'window:hamburgerMenu': () => {
    if (process.platform !== 'darwin' && ['', true].includes(getConfig().showHamburgerMenu)) {
      Menu.getApplicationMenu()!.popup({x: 25, y: 22});
    }
  },
  'systemContextMenu:add': () => {
    systemContextMenu.add();
  },
  'systemContextMenu:remove': () => {
    systemContextMenu.remove();
  },
  'window:toggleKeepOnTop': (focusedWindow) => {
    focusedWindow?.setAlwaysOnTop(!focusedWindow.isAlwaysOnTop());
  }
};

//Special numeric command
([1, 2, 3, 4, 5, 6, 7, 8, 'last'] as const).forEach((cmdIndex) => {
  const index = cmdIndex === 'last' ? cmdIndex : cmdIndex - 1;
  commands[`tab:jump:${cmdIndex}`] = (focusedWindow) => {
    focusedWindow?.rpc.emit('move jump req', index);
  };
});

//Profile specific commands
getConfig().profiles.forEach((profile) => {
  commands[`window:new:${profile.name}`] = () => {
    setTimeout(() => app.createWindow(undefined, undefined, profile.name), 0);
  };
  commands[`tab:new:${profile.name}`] = (focusedWindow) => {
    focusedWindow?.rpc.emit('termgroup add req', {profile: profile.name});
  };
  commands[`pane:splitRight:${profile.name}`] = (focusedWindow) => {
    focusedWindow?.rpc.emit('split request vertical', {profile: profile.name});
  };
  commands[`pane:splitDown:${profile.name}`] = (focusedWindow) => {
    focusedWindow?.rpc.emit('split request horizontal', {profile: profile.name});
  };
});

export const execCommand = (command: string, focusedWindow?: BrowserWindow) => {
  const fn = commands[command];
  if (fn) {
    fn(focusedWindow);
  }
};


================================================
FILE: app/config/config-default.json
================================================
{
  "$schema": "./schema.json",
  "config": {
    "updateChannel": "stable",
    "fontSize": 12,
    "fontFamily": "Menlo, \"DejaVu Sans Mono\", Consolas, \"Lucida Console\", monospace",
    "fontWeight": "normal",
    "fontWeightBold": "bold",
    "lineHeight": 1,
    "letterSpacing": 0,
    "scrollback": 1000,
    "cursorColor": "rgba(248,28,229,0.8)",
    "cursorAccentColor": "#000",
    "cursorShape": "BLOCK",
    "cursorBlink": false,
    "foregroundColor": "#fff",
    "backgroundColor": "#000",
    "selectionColor": "rgba(248,28,229,0.3)",
    "borderColor": "#333",
    "css": "",
    "termCSS": "",
    "workingDirectory": "",
    "showHamburgerMenu": "",
    "showWindowControls": "",
    "padding": "12px 14px",
    "colors": {
      "black": "#000000",
      "red": "#C51E14",
      "green": "#1DC121",
      "yellow": "#C7C329",
      "blue": "#0A2FC4",
      "magenta": "#C839C5",
      "cyan": "#20C5C6",
      "white": "#C7C7C7",
      "lightBlack": "#686868",
      "lightRed": "#FD6F6B",
      "lightGreen": "#67F86F",
      "lightYellow": "#FFFA72",
      "lightBlue": "#6A76FB",
      "lightMagenta": "#FD7CFC",
      "lightCyan": "#68FDFE",
      "lightWhite": "#FFFFFF",
      "limeGreen": "#32CD32",
      "lightCoral": "#F08080"
    },
    "shell": "",
    "shellArgs": [
      "--login"
    ],
    "env": {},
    "bell": "SOUND",
    "bellSound": null,
    "bellSoundURL": null,
    "copyOnSelect": false,
    "defaultSSHApp": true,
    "quickEdit": false,
    "macOptionSelectionMode": "vertical",
    "webGLRenderer": false,
    "webLinksActivationKey": "",
    "disableLigatures": true,
    "disableAutoUpdates": false,
    "autoUpdatePlugins": true,
    "preserveCWD": true,
    "screenReaderMode": false,
    "imageSupport": true,
    "defaultProfile": "default",
    "profiles": [
      {
        "name": "default",
        "config": {}
      }
    ]
  },
  "plugins": [],
  "localPlugins": [],
  "keymaps": {}
}


================================================
FILE: app/config/import.ts
================================================
import {readFileSync, mkdirpSync} from 'fs-extra';

import type {rawConfig} from '../../typings/config';
import notify from '../notify';

import {_init} from './init';
import {migrateHyper3Config} from './migrate';
import {defaultCfg, cfgPath, plugs, defaultPlatformKeyPath} from './paths';

let defaultConfig: rawConfig;

const _importConf = () => {
  // init plugin directories if not present
  mkdirpSync(plugs.base);
  mkdirpSync(plugs.local);

  try {
    migrateHyper3Config();
  } catch (err) {
    console.error(err);
  }

  let defaultCfgRaw = '{}';
  try {
    defaultCfgRaw = readFileSync(defaultCfg, 'utf8');
  } catch (err) {
    console.log(err);
  }
  const _defaultCfg = JSON.parse(defaultCfgRaw) as rawConfig;

  // Importing platform specific keymap
  let content = '{}';
  try {
    content = readFileSync(defaultPlatformKeyPath(), 'utf8');
  } catch (err) {
    console.error(err);
  }
  const mapping = JSON.parse(content) as Record<string, string | string[]>;
  _defaultCfg.keymaps = mapping;

  // Import user config
  let userCfg: rawConfig;
  try {
    userCfg = JSON.parse(readFileSync(cfgPath, 'utf8'));
  } catch (err) {
    notify("Couldn't parse config file. Using default config instead.");
    userCfg = JSON.parse(defaultCfgRaw);
  }

  return {userCfg, defaultCfg: _defaultCfg};
};

export const _import = () => {
  const imported = _importConf();
  defaultConfig = imported.defaultCfg;
  const result = _init(imported.userCfg, imported.defaultCfg);
  return result;
};

export const getDefaultConfig = () => {
  if (!defaultConfig) {
    defaultConfig = _importConf().defaultCfg;
  }
  return defaultConfig;
};


================================================
FILE: app/config/init.ts
================================================
import vm from 'vm';

import merge from 'lodash/merge';

import type {parsedConfig, rawConfig, configOptions} from '../../typings/config';
import notify from '../notify';
import mapKeys from '../utils/map-keys';

const _extract = (script?: vm.Script): Record<string, any> => {
  const module: Record<string, any> = {};
  script?.runInNewContext({module}, {displayErrors: true});
  if (!module.exports) {
    throw new Error('Error reading configuration: `module.exports` not set');
  }
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
  return module.exports;
};

const _syntaxValidation = (cfg: string) => {
  try {
    return new vm.Script(cfg, {filename: '.hyper.js'});
  } catch (_err) {
    const err = _err as {name: string};
    notify(`Error loading config: ${err.name}`, JSON.stringify(err), {error: err});
  }
};

const _extractDefault = (cfg: string) => {
  return _extract(_syntaxValidation(cfg));
};

// init config
const _init = (userCfg: rawConfig, defaultCfg: rawConfig): parsedConfig => {
  return {
    config: (() => {
      if (userCfg?.config) {
        const conf = userCfg.config;
        conf.defaultProfile = conf.defaultProfile || 'default';
        conf.profiles = conf.profiles || [];
        conf.profiles = conf.profiles.length > 0 ? conf.profiles : [{name: 'default', config: {}}];
        conf.profiles = conf.profiles.map((p, i) => ({
          ...p,
          name: p.name || `profile-${i + 1}`,
          config: p.config || {}
        }));
        if (!conf.profiles.map((p) => p.name).includes(conf.defaultProfile)) {
          conf.defaultProfile = conf.profiles[0].name;
        }
        return merge({}, defaultCfg.config, conf);
      } else {
        notify('Error reading configuration: `config` key is missing');
        return defaultCfg.config || ({} as configOptions);
      }
    })(),
    // Merging platform specific keymaps with user defined keymaps
    keymaps: mapKeys({...defaultCfg.keymaps, ...userCfg?.keymaps}),
    // Ignore undefined values in plugin and localPlugins array Issue #1862
    plugins: userCfg?.plugins?.filter(Boolean) || [],
    localPlugins: userCfg?.localPlugins?.filter(Boolean) || []
  };
};

export {_init, _extractDefault};


================================================
FILE: app/config/migrate.ts
================================================
import {dirname, resolve} from 'path';

import {builders, namedTypes} from 'ast-types';
import type {ExpressionKind} from 'ast-types/lib/gen/kinds';
import {copy, copySync, existsSync, readFileSync, writeFileSync} from 'fs-extra';
import merge from 'lodash/merge';
import {parse, prettyPrint} from 'recast';
import * as babelParser from 'recast/parsers/babel';

import notify from '../notify';

import {_extractDefault} from './init';
import {cfgDir, cfgPath, defaultCfg, legacyCfgPath, plugs, schemaFile, schemaPath} from './paths';

// function to remove all json serializable entries from an array expression
function removeElements(node: namedTypes.ArrayExpression): namedTypes.ArrayExpression {
  const newElements = node.elements.filter((element) => {
    if (namedTypes.ObjectExpression.check(element)) {
      const newElement = removeProperties(element);
      if (newElement.properties.length === 0) {
        return false;
      }
    } else if (namedTypes.ArrayExpression.check(element)) {
      const newElement = removeElements(element);
      if (newElement.elements.length === 0) {
        return false;
      }
    } else if (namedTypes.Literal.check(element)) {
      return false;
    }
    return true;
  });
  return {...node, elements: newElements};
}

// function to remove all json serializable properties from an object expression
function removeProperties(node: namedTypes.ObjectExpression): namedTypes.ObjectExpression {
  const newProperties = node.properties.filter((property) => {
    if (
      namedTypes.ObjectProperty.check(property) &&
      (namedTypes.Literal.check(property.key) || namedTypes.Identifier.check(property.key)) &&
      !property.computed
    ) {
      if (namedTypes.ObjectExpression.check(property.value)) {
        const newValue = removeProperties(property.value);
        if (newValue.properties.length === 0) {
          return false;
        }
      } else if (namedTypes.ArrayExpression.check(property.value)) {
        const newValue = removeElements(property.value);
        if (newValue.elements.length === 0) {
          return false;
        }
      } else if (namedTypes.Literal.check(property.value)) {
        return false;
      }
    }
    return true;
  });
  return {...node, properties: newProperties};
}

export function configToPlugin(code: string): string {
  const ast: namedTypes.File = parse(code, {
    parser: babelParser
  });
  const statements = ast.program.body;
  let moduleExportsNode: namedTypes.AssignmentExpression | null = null;
  let configNode: ExpressionKind | null = null;

  for (const statement of statements) {
    if (namedTypes.ExpressionStatement.check(statement)) {
      const expression = statement.expression;
      if (
        namedTypes.AssignmentExpression.check(expression) &&
        expression.operator === '=' &&
        namedTypes.MemberExpression.check(expression.left) &&
        namedTypes.Identifier.check(expression.left.object) &&
        expression.left.object.name === 'module' &&
        namedTypes.Identifier.check(expression.left.property) &&
        expression.left.property.name === 'exports'
      ) {
        moduleExportsNode = expression;
        if (namedTypes.ObjectExpression.check(expression.right)) {
          const properties = expression.right.properties;
          for (const property of properties) {
            if (
              namedTypes.ObjectProperty.check(property) &&
              namedTypes.Identifier.check(property.key) &&
              property.key.name === 'config'
            ) {
              configNode = property.value as ExpressionKind;
              if (namedTypes.ObjectExpression.check(property.value)) {
                configNode = removeProperties(property.value);
              }
            }
          }
        } else {
          configNode = builders.memberExpression(moduleExportsNode.right, builders.identifier('config'));
        }
      }
    }
  }

  if (!moduleExportsNode) {
    console.log('No module.exports found in config');
    return '';
  }
  if (!configNode) {
    console.log('No config field found in module.exports');
    return '';
  }
  if (namedTypes.ObjectExpression.check(configNode) && configNode.properties.length === 0) {
    return '';
  }

  moduleExportsNode.right = builders.objectExpression([
    builders.property(
      'init',
      builders.identifier('decorateConfig'),
      builders.arrowFunctionExpression(
        [builders.identifier('_config')],
        builders.callExpression(
          builders.memberExpression(builders.identifier('Object'), builders.identifier('assign')),
          [builders.objectExpression([]), builders.identifier('_config'), configNode]
        )
      )
    )
  ]);

  return prettyPrint(ast, {tabWidth: 2}).code;
}

export const _write = (path: string, data: string) => {
  // This method will take text formatted as Unix line endings and transform it
  // to text formatted with DOS line endings. We do this because the default
  // text editor on Windows (notepad) doesn't Deal with LF files. Still. In 2017.
  const crlfify = (str: string) => {
    return str.replace(/\r?\n/g, '\r\n');
  };
  const format = process.platform === 'win32' ? crlfify(data.toString()) : data;
  writeFileSync(path, format, 'utf8');
};

// Migrate Hyper3 config to Hyper4 but only if the user hasn't manually
// touched the new config and if the old config is not a symlink
export const migrateHyper3Config = () => {
  copy(schemaPath, resolve(cfgDir, schemaFile), (err) => {
    if (err) {
      console.error(err);
    }
  });

  if (existsSync(cfgPath)) {
    return;
  }

  if (!existsSync(legacyCfgPath)) {
    copySync(defaultCfg, cfgPath);
    return;
  }

  // Migrate
  copySync(resolve(dirname(legacyCfgPath), '.hyper_plugins', 'local'), plugs.local);

  const defaultCfgData = JSON.parse(readFileSync(defaultCfg, 'utf8'));
  let newCfgData;
  try {
    const legacyCfgRaw = readFileSync(legacyCfgPath, 'utf8');
    const legacyCfgData = _extractDefault(legacyCfgRaw);
    newCfgData = merge({}, defaultCfgData, legacyCfgData);

    const pluginCode = configToPlugin(legacyCfgRaw);
    if (pluginCode) {
      const pluginPath = resolve(plugs.local, 'migrated-hyper3-config.js');
      newCfgData.localPlugins = ['migrated-hyper3-config', ...(newCfgData.localPlugins || [])];
      _write(pluginPath, pluginCode);
    }
  } catch (e) {
    console.error(e);
    notify(
      'Hyper 4',
      `Failed to migrate your config from Hyper 3.\nDefault config will be created instead at ${cfgPath}`
    );
    newCfgData = defaultCfgData;
  }
  _write(cfgPath, JSON.stringify(newCfgData, null, 2));

  notify('Hyper 4', `Settings location and format has changed to ${cfgPath}`);
};


================================================
FILE: app/config/open.ts
================================================
import {exec} from 'child_process';

import {shell} from 'electron';

import * as Registry from 'native-reg';

import {cfgPath} from './paths';

const getUserChoiceKey = () => {
  try {
    // Load FileExts keys for .js files
    const fileExtsKeys = Registry.openKey(
      Registry.HKCU,
      'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.js',
      Registry.Access.READ
    );
    const keys = fileExtsKeys ? Registry.enumKeyNames(fileExtsKeys) : [];
    Registry.closeKey(fileExtsKeys);

    // Find UserChoice key
    const userChoice = keys.find((k) => k.endsWith('UserChoice'));
    return userChoice
      ? `Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.js\\${userChoice}`
      : userChoice;
  } catch (error) {
    console.error(error);
    return;
  }
};

const hasDefaultSet = () => {
  const userChoice = getUserChoiceKey();
  if (!userChoice) return false;

  try {
    // Load key values
    const userChoiceKey = Registry.openKey(Registry.HKCU, userChoice, Registry.Access.READ)!;
    const values: string[] = Registry.enumValueNames(userChoiceKey).map(
      (x) => (Registry.queryValue(userChoiceKey, x) as string) || ''
    );
    Registry.closeKey(userChoiceKey);

    // Look for default program
    const hasDefaultProgramConfigured = values.every(
      (value) => value && typeof value === 'string' && !value.includes('WScript.exe') && !value.includes('JSFile')
    );

    return hasDefaultProgramConfigured;
  } catch (error) {
    console.error(error);
    return false;
  }
};

// This mimics shell.openItem, true if it worked, false if not.
const openNotepad = (file: string) =>
  new Promise<boolean>((resolve) => {
    exec(`start notepad.exe ${file}`, (error) => {
      resolve(!error);
    });
  });

const openConfig = () => {
  // Windows opens .js files with  WScript.exe by default
  // If the user hasn't set up an editor for .js files, we fallback to notepad.
  if (process.platform === 'win32') {
    try {
      if (hasDefaultSet()) {
        return shell.openPath(cfgPath).then((error) => error === '');
      }
      console.warn('No default app set for .js files, using notepad.exe fallback');
    } catch (err) {
      console.error('Open config with default app error:', err);
    }
    return openNotepad(cfgPath);
  }
  return shell.openPath(cfgPath).then((error) => error === '');
};

export default openConfig;


================================================
FILE: app/config/paths.ts
================================================
// This module exports paths, names, and other metadata that is referenced
import {statSync} from 'fs';
import {homedir} from 'os';
import {resolve, join} from 'path';

import {app} from 'electron';

import isDev from 'electron-is-dev';

const cfgFile = 'hyper.json';
const defaultCfgFile = 'config-default.json';
const schemaFile = 'schema.json';
const homeDirectory = homedir();

// If the user defines XDG_CONFIG_HOME they definitely want their config there,
// otherwise use the home directory in linux/mac and userdata in windows
let cfgDir = process.env.XDG_CONFIG_HOME
  ? join(process.env.XDG_CONFIG_HOME, 'Hyper')
  : process.platform === 'win32'
    ? app.getPath('userData')
    : join(homeDirectory, '.config', 'Hyper');

const legacyCfgPath = join(
  process.env.XDG_CONFIG_HOME !== undefined
    ? join(process.env.XDG_CONFIG_HOME, 'hyper')
    : process.platform == 'win32'
      ? app.getPath('userData')
      : homedir(),
  '.hyper.js'
);

let cfgPath = join(cfgDir, cfgFile);
const schemaPath = resolve(__dirname, schemaFile);

const devDir = resolve(__dirname, '../..');
const devCfg = join(devDir, cfgFile);
const defaultCfg = resolve(__dirname, defaultCfgFile);

if (isDev) {
  // if a local config file exists, use it
  try {
    statSync(devCfg);
    cfgPath = devCfg;
    cfgDir = devDir;
    console.log('using config file:', cfgPath);
  } catch (err) {
    // ignore
  }
}

const plugins = resolve(cfgDir, 'plugins');
const plugs = {
  base: plugins,
  local: resolve(plugins, 'local'),
  cache: resolve(plugins, 'cache')
};
const yarn = resolve(__dirname, '../../bin/yarn-standalone.js');
const cliScriptPath = resolve(__dirname, '../../bin/hyper');
const cliLinkPath = '/usr/local/bin/hyper';

const icon = resolve(__dirname, '../static/icon96x96.png');

const keymapPath = resolve(__dirname, '../keymaps');
const darwinKeys = join(keymapPath, 'darwin.json');
const win32Keys = join(keymapPath, 'win32.json');
const linuxKeys = join(keymapPath, 'linux.json');

const defaultPlatformKeyPath = () => {
  switch (process.platform) {
    case 'darwin':
      return darwinKeys;
    case 'win32':
      return win32Keys;
    case 'linux':
      return linuxKeys;
    default:
      return darwinKeys;
  }
};

export {
  cfgDir,
  cfgPath,
  legacyCfgPath,
  cfgFile,
  defaultCfg,
  icon,
  defaultPlatformKeyPath,
  plugs,
  yarn,
  cliScriptPath,
  cliLinkPath,
  homeDirectory,
  schemaFile,
  schemaPath
};


================================================
FILE: app/config/windows.ts
================================================
import type {BrowserWindow} from 'electron';

import Config from 'electron-store';

export const defaults = {
  windowPosition: [50, 50] as [number, number],
  windowSize: [540, 380] as [number, number]
};

// local storage
const cfg = new Config({defaults});

export function get() {
  const position = cfg.get('windowPosition', defaults.windowPosition);
  const size = cfg.get('windowSize', defaults.windowSize);
  return {position, size};
}
export function recordState(win: BrowserWindow) {
  cfg.set('windowPosition', win.getPosition());
  cfg.set('windowSize', win.getSize());
}


================================================
FILE: app/config.ts
================================================
import {app} from 'electron';

import chokidar from 'chokidar';

import type {parsedConfig, configOptions} from '../typings/config';

import {_import, getDefaultConfig} from './config/import';
import _openConfig from './config/open';
import {cfgPath, cfgDir} from './config/paths';
import notify from './notify';
import {getColorMap} from './utils/colors';

const watchers: Function[] = [];
let cfg: parsedConfig = {} as any;
let _watcher: chokidar.FSWatcher;

export const getDeprecatedCSS = (config: configOptions) => {
  const deprecated: string[] = [];
  const deprecatedCSS = ['x-screen', 'x-row', 'cursor-node', '::selection'];
  deprecatedCSS.forEach((css) => {
    if (config.css?.includes(css) || config.termCSS?.includes(css)) {
      deprecated.push(css);
    }
  });
  return deprecated;
};

const checkDeprecatedConfig = () => {
  if (!cfg.config) {
    return;
  }
  const deprecated = getDeprecatedCSS(cfg.config);
  if (deprecated.length === 0) {
    return;
  }
  const deprecatedStr = deprecated.join(', ');
  notify('Configuration warning', `Your configuration uses some deprecated CSS classes (${deprecatedStr})`);
};

const _watch = () => {
  if (_watcher) {
    return;
  }

  const onChange = () => {
    // Need to wait 100ms to ensure that write is complete
    setTimeout(() => {
      cfg = _import();
      notify('Configuration updated', 'Hyper configuration reloaded!');
      watchers.forEach((fn) => {
        fn();
      });
      checkDeprecatedConfig();
    }, 100);
  };

  _watcher = chokidar.watch(cfgPath);
  _watcher.on('change', onChange);
  _watcher.on('error', (error) => {
    console.error('error watching config', error);
  });

  app.on('before-quit', () => {
    if (Object.keys(_watcher.getWatched()).length > 0) {
      _watcher.close().catch((err) => {
        console.warn(err);
      });
    }
  });
};

export const subscribe = (fn: Function) => {
  watchers.push(fn);
  return () => {
    watchers.splice(watchers.indexOf(fn), 1);
  };
};

export const getConfigDir = () => {
  // expose config directory to load plugin from the right place
  return cfgDir;
};

export const getDefaultProfile = () => {
  return cfg.config.defaultProfile || cfg.config.profiles[0]?.name || 'default';
};

// get config for the default profile, keeping it for backward compatibility
export const getConfig = () => {
  return getProfileConfig(getDefaultProfile());
};

export const getProfiles = () => {
  return cfg.config.profiles;
};

export const getProfileConfig = (profileName: string): configOptions => {
  const {profiles, defaultProfile, ...baseConfig} = cfg.config;
  const profileConfig = profiles.find((p) => p.name === profileName)?.config || {};
  for (const key in profileConfig) {
    if (typeof baseConfig[key] === 'object' && !Array.isArray(baseConfig[key])) {
      baseConfig[key] = {...baseConfig[key], ...profileConfig[key]};
    } else {
      baseConfig[key] = profileConfig[key];
    }
  }
  return {...baseConfig, defaultProfile, profiles};
};

export const openConfig = () => {
  return _openConfig();
};

export const getPlugins = (): {plugins: string[]; localPlugins: string[]} => {
  return {
    plugins: cfg.plugins,
    localPlugins: cfg.localPlugins
  };
};

export const getKeymaps = () => {
  return cfg.keymaps;
};

export const setup = () => {
  cfg = _import();
  _watch();
  checkDeprecatedConfig();
};

export {get as getWin, recordState as winRecord, defaults as windowDefaults} from './config/windows';

export const fixConfigDefaults = (decoratedConfig: configOptions) => {
  const defaultConfig = getDefaultConfig().config!;
  decoratedConfig.colors = getColorMap(decoratedConfig.colors) || {};
  // We must have default colors for xterm css.
  decoratedConfig.colors = {...defaultConfig.colors, ...decoratedConfig.colors};
  return decoratedConfig;
};

export const htermConfigTranslate = (config: configOptions) => {
  const cssReplacements: Record<string, string> = {
    'x-screen x-row([ {.[])': '.xterm-rows > div$1',
    '.cursor-node([ {.[])': '.terminal-cursor$1',
    '::selection([ {.[])': '.terminal .xterm-selection div$1',
    'x-screen a([ {.[])': '.terminal a$1',
    'x-row a([ {.[])': '.terminal a$1'
  };
  Object.keys(cssReplacements).forEach((pattern) => {
    const searchvalue = new RegExp(pattern, 'g');
    const newvalue = cssReplacements[pattern];
    config.css = config.css?.replace(searchvalue, newvalue);
    config.termCSS = config.termCSS?.replace(searchvalue, newvalue);
  });
  return config;
};


================================================
FILE: app/index.html
================================================
<!doctype html>
<html>
  <head>
    <title>Hyper</title>

    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0">
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">

    <style>
      body {
        color: #fff;
        -webkit-backface-visibility: hidden;
      }

      * {
        margin: 0;
        padding: 0;
        text-rendering: optimizeLegibility;
        box-sizing: border-box;
      }

      @media (min-resolution: 2dppx) {
        * {
          text-rendering: geometricPrecision;
        }
      }
    </style>
  </head>

  <body>
    <div id="mount"></div>

    <script>start = performance.now();</script>
    <script src="renderer/bundle.js"></script>
    <script>console.log('total init time', performance.now() - start);</script>
  </body>
</html>


================================================
FILE: app/index.ts
================================================
// eslint-disable-next-line import/order
import {cfgPath} from './config/paths';

// Print diagnostic information for a few arguments instead of running Hyper.
if (['--help', '-v', '--version'].includes(process.argv[1])) {
  // eslint-disable-next-line @typescript-eslint/no-var-requires
  const {version} = require('./package');
  console.log(`Hyper version ${version}`);
  console.log('Hyper does not accept any command line arguments. Please modify the config file instead.');
  console.log(`Hyper configuration file located at: ${cfgPath}`);
  process.exit();
}

// Enable remote module
// eslint-disable-next-line import/order
import {initialize as remoteInitialize} from '@electron/remote/main';
remoteInitialize();

// set up config
// eslint-disable-next-line import/order
import * as config from './config';
config.setup();

// Native
import {resolve} from 'path';

// Packages
import {app, BrowserWindow, Menu, screen} from 'electron';

import isDev from 'electron-is-dev';
import {gitDescribe} from 'git-describe';
import parseUrl from 'parse-url';

import * as AppMenu from './menus/menu';
import * as plugins from './plugins';
import {newWindow} from './ui/window';
import {installCLI} from './utils/cli-install';
import * as windowUtils from './utils/window-utils';

const windowSet = new Set<BrowserWindow>([]);

// expose to plugins
app.config = config;
app.plugins = plugins;
app.getWindows = () => new Set([...windowSet]); // return a clone

// function to retrieve the last focused window in windowSet;
// added to app object in order to expose it to plugins.
app.getLastFocusedWindow = () => {
  if (!windowSet.size) {
    return null;
  }
  return Array.from(windowSet).reduce((lastWindow, win) => {
    return win.focusTime > lastWindow.focusTime ? win : lastWindow;
  });
};

console.log('Disabling Chromium GPU blacklist');
app.commandLine.appendSwitch('ignore-gpu-blacklist');

if (isDev) {
  console.log('running in dev mode');

  // Override default appVersion which is set from package.json
  gitDescribe({customArguments: ['--tags']}, (error: any, gitInfo: {raw: string}) => {
    if (!error) {
      app.setVersion(gitInfo.raw);
    }
  });
} else {
  console.log('running in prod mode');
}

const url = `file://${resolve(isDev ? __dirname : app.getAppPath(), 'index.html')}`;
console.log('electron will open', url);

async function installDevExtensions(isDev_: boolean) {
  if (!isDev_) {
    return [];
  }
  const {default: installer, REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS} = await import('electron-devtools-installer');

  const extensions = [REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS];
  const forceDownload = Boolean(process.env.UPGRADE_EXTENSIONS);

  return Promise.all(
    extensions.map((extension) => installer(extension, {forceDownload, loadExtensionOptions: {allowFileAccess: true}}))
  );
}

// eslint-disable-next-line @typescript-eslint/no-misused-promises
app.on('ready', () =>
  installDevExtensions(isDev)
    .then(() => {
      function createWindow(
        fn?: (win: BrowserWindow) => void,
        options: {size?: [number, number]; position?: [number, number]} = {},
        profileName: string = config.getDefaultProfile()
      ) {
        const cfg = plugins.getDecoratedConfig(profileName);

        const winSet = config.getWin();
        let [startX, startY] = winSet.position;

        const [width, height] = options.size ? options.size : cfg.windowSize || winSet.size;

        const winPos = options.position;

        // Open the new window roughly the height of the header away from the
        // previous window. This also ensures in multi monitor setups that the
        // new terminal is on the correct screen.
        const focusedWindow = BrowserWindow.getFocusedWindow() || app.getLastFocusedWindow();
        // In case of options defaults position and size, we should ignore the focusedWindow.
        if (winPos !== undefined) {
          [startX, startY] = winPos;
        } else if (focusedWindow) {
          const points = focusedWindow.getPosition();
          const currentScreen = screen.getDisplayNearestPoint({
            x: points[0],
            y: points[1]
          });

          const biggestX = points[0] + 100 + width - currentScreen.bounds.x;
          const biggestY = points[1] + 100 + height - currentScreen.bounds.y;

          if (biggestX > currentScreen.size.width) {
            startX = 50;
          } else {
            startX = points[0] + 34;
          }
          if (biggestY > currentScreen.size.height) {
            startY = 50;
          } else {
            startY = points[1] + 34;
          }
        }

        if (!windowUtils.positionIsValid([startX, startY])) {
          [startX, startY] = config.windowDefaults.windowPosition;
        }

        const hwin = newWindow({width, height, x: startX, y: startY}, cfg, fn, profileName);
        windowSet.add(hwin);
        void hwin.loadURL(url);

        // the window can be closed by the browser process itself
        hwin.on('close', () => {
          hwin.clean();
          windowSet.delete(hwin);
        });

        return hwin;
      }

      // when opening create a new window
      createWindow();

      // expose to plugins
      app.createWindow = createWindow;

      // mac only. when the dock icon is clicked
      // and we don't have any active windows open,
      // we open one
      app.on('activate', () => {
        if (!windowSet.size) {
          createWindow();
        }
      });

      app.on('window-all-closed', () => {
        if (process.platform !== 'darwin') {
          app.quit();
        }
      });

      const makeMenu = () => {
        const menu = plugins.decorateMenu(AppMenu.createMenu(createWindow, plugins.getLoadedPluginVersions));

        // If we're on Mac make a Dock Menu
        if (process.platform === 'darwin') {
          const dockMenu = Menu.buildFromTemplate([
            {
              label: 'New Window',
              click() {
                createWindow();
              }
            }
          ]);
          app.dock.setMenu(dockMenu);
        }

        Menu.setApplicationMenu(AppMenu.buildMenu(menu));
      };

      plugins.onApp(app);
      makeMenu();
      plugins.subscribe(plugins.onApp.bind(undefined, app));
      config.subscribe(makeMenu);
      if (!isDev) {
        // check if should be set/removed as default ssh protocol client
        if (config.getConfig().defaultSSHApp && !app.isDefaultProtocolClient('ssh')) {
          console.log('Setting Hyper as default client for ssh:// protocol');
          app.setAsDefaultProtocolClient('ssh');
        } else if (!config.getConfig().defaultSSHApp && app.isDefaultProtocolClient('ssh')) {
          console.log('Removing Hyper from default client for ssh:// protocol');
          app.removeAsDefaultProtocolClient('ssh');
        }
        void installCLI(false);
      }
    })
    .catch((err) => {
      console.error('Error while loading devtools extensions', err);
    })
);

/**
 * Get last focused BrowserWindow or create new if none and callback
 * @param callback Function to call with the BrowserWindow
 */
function GetWindow(callback: (win: BrowserWindow) => void) {
  const lastWindow = app.getLastFocusedWindow();
  if (lastWindow) {
    callback(lastWindow);
  } else if (!lastWindow && {}.hasOwnProperty.call(app, 'createWindow')) {
    app.createWindow(callback);
  } else {
    // If createWindow doesn't exist yet ('ready' event was not fired),
    // sets his callback to an app.windowCallback property.
    app.windowCallback = callback;
  }
}

app.on('open-file', (_event, path) => {
  GetWindow((win: BrowserWindow) => {
    win.rpc.emit('open file', {path});
  });
});

app.on('open-url', (_event, sshUrl) => {
  GetWindow((win: BrowserWindow) => {
    win.rpc.emit('open ssh', parseUrl(sshUrl));
  });
});


================================================
FILE: app/keymaps/darwin.json
================================================
{
  "window:devtools": "command+alt+i",
  "window:reload": "command+shift+r",
  "window:reloadFull": "command+shift+f5",
  "window:preferences": "command+,",
  "zoom:reset": "command+0",
  "zoom:in": [
    "command+plus",
    "command+="
  ],
  "zoom:out": "command+-",
  "window:new": "command+n",
  "window:minimize": "command+m",
  "window:zoom": "ctrl+alt+command+m",
  "window:toggleFullScreen": "command+ctrl+f",
  "window:close": "command+shift+w",
  "tab:new": "command+t",
  "tab:next": [
    "command+shift+]",
    "command+shift+right",
    "command+alt+right",
    "ctrl+tab"
  ],
  "tab:prev": [
    "command+shift+[",
    "command+shift+left",
    "command+alt+left",
    "ctrl+shift+tab"
  ],
  "tab:jump:prefix": "command",
  "pane:next": "command+]",
  "pane:prev": "command+[",
  "pane:splitRight": "command+d",
  "pane:splitDown": "command+shift+d",
  "pane:close": "command+w",
  "editor:undo": "command+z",
  "editor:redo": "command+y",
  "editor:cut": "command+x",
  "editor:copy": "command+c",
  "editor:paste": "command+v",
  "editor:selectAll": "command+a",
  "editor:search": "command+f",
  "editor:search-close": "esc",
  "editor:movePreviousWord": "alt+left",
  "editor:moveNextWord": "alt+right",
  "editor:moveBeginningLine": "command+left",
  "editor:moveEndLine": "command+right",
  "editor:deletePreviousWord": "alt+backspace",
  "editor:deleteNextWord": "alt+delete",
  "editor:deleteBeginningLine": "command+backspace",
  "editor:deleteEndLine": "command+delete",
  "editor:clearBuffer": "command+k",
  "editor:break": "ctrl+c",
  "plugins:update": "command+shift+u"
}


================================================
FILE: app/keymaps/linux.json
================================================
{
  "window:devtools": "ctrl+shift+i",
  "window:reload": "ctrl+shift+r",
  "window:reloadFull": "ctrl+shift+f5",
  "window:preferences": "ctrl+,",
  "window:hamburgerMenu": "alt+f",
  "zoom:reset": "ctrl+0",
  "zoom:in": "ctrl+=",
  "zoom:out": "ctrl+-",
  "window:new": "ctrl+shift+n",
  "window:minimize": "ctrl+shift+m",
  "window:zoom": "ctrl+shift+alt+m",
  "window:toggleFullScreen": "f11",
  "window:close": "ctrl+shift+q",
  "tab:new": "ctrl+shift+t",
  "tab:next": [
    "ctrl+shift+]",
    "ctrl+shift+right",
    "ctrl+alt+right",
    "ctrl+tab"
  ],
  "tab:prev": [
    "ctrl+shift+[",
    "ctrl+shift+left",
    "ctrl+alt+left",
    "ctrl+shift+tab"
  ],
  "tab:jump:prefix": "ctrl",
  "pane:next": "ctrl+pageup",
  "pane:prev": "ctrl+pagedown",
  "pane:splitRight": "ctrl+shift+d",
  "pane:splitDown": "ctrl+shift+e",
  "pane:close": "ctrl+shift+w",
  "editor:undo": "ctrl+shift+z",
  "editor:redo": "ctrl+shift+y",
  "editor:cut": "ctrl+shift+x",
  "editor:copy": "ctrl+shift+c",
  "editor:paste": "ctrl+shift+v",
  "editor:selectAll": "ctrl+shift+a",
  "editor:search": "ctrl+shift+f",
  "editor:search-close": "esc",
  "editor:movePreviousWord": "ctrl+left",
  "editor:moveNextWord": "ctrl+right",
  "editor:moveBeginningLine": "home",
  "editor:moveEndLine": "end",
  "editor:deletePreviousWord": "ctrl+backspace",
  "editor:deleteNextWord": "ctrl+del",
  "editor:deleteBeginningLine": "ctrl+home",
  "editor:deleteEndLine": "ctrl+end",
  "editor:clearBuffer": "ctrl+shift+k",
  "editor:break": "ctrl+c",
  "plugins:update": "ctrl+shift+u"
}


================================================
FILE: app/keymaps/win32.json
================================================
{
  "window:devtools": "ctrl+shift+i",
  "window:reload": "ctrl+shift+r",
  "window:reloadFull": "ctrl+shift+f5",
  "window:preferences": "ctrl+,",
  "window:hamburgerMenu": "alt+f",
  "zoom:reset": "ctrl+0",
  "zoom:in": "ctrl+=",
  "zoom:out": "ctrl+-",
  "window:new": "ctrl+shift+n",
  "window:minimize": "ctrl+shift+m",
  "window:zoom": "ctrl+shift+alt+m",
  "window:toggleFullScreen": "f11",
  "window:close": [
    "ctrl+shift+q",
    "alt+f4"
  ],
  "tab:new": "ctrl+shift+t",
  "tab:next": [
    "ctrl+tab"
  ],
  "tab:prev": [
    "ctrl+shift+tab"
  ],
  "tab:jump:prefix": "ctrl",
  "pane:next": "ctrl+pageup",
  "pane:prev": "ctrl+pagedown",
  "pane:splitRight": "ctrl+shift+d",
  "pane:splitDown": "ctrl+shift+e",
  "pane:close": "ctrl+shift+w",
  "editor:undo": "ctrl+shift+z",
  "editor:redo": "ctrl+shift+y",
  "editor:cut": "ctrl+shift+x",
  "editor:copy": "ctrl+shift+c",
  "editor:paste": "ctrl+shift+v",
  "editor:selectAll": "ctrl+shift+a",
  "editor:search": "ctrl+shift+f",
  "editor:search-close": "esc",
  "editor:movePreviousWord": "",
  "editor:moveNextWord": "",
  "editor:moveBeginningLine": "Home",
  "editor:moveEndLine": "End",
  "editor:deletePreviousWord": "ctrl+backspace",
  "editor:deleteNextWord": "ctrl+del",
  "editor:deleteBeginningLine": "ctrl+home",
  "editor:deleteEndLine": "ctrl+end",
  "editor:clearBuffer": "ctrl+shift+k",
  "editor:break": "ctrl+c",
  "plugins:update": "ctrl+shift+u"
}


================================================
FILE: app/menus/menu.ts
================================================
// Packages
import {app, dialog, Menu} from 'electron';
import type {BrowserWindow} from 'electron';

// Utilities
import {execCommand} from '../commands';
import {getConfig} from '../config';
import {icon} from '../config/paths';
import {getDecoratedKeymaps} from '../plugins';
import {getRendererTypes} from '../utils/renderer-utils';

import darwinMenu from './menus/darwin';
import editMenu from './menus/edit';
import helpMenu from './menus/help';
import shellMenu from './menus/shell';
import toolsMenu from './menus/tools';
import viewMenu from './menus/view';
import windowMenu from './menus/window';

const appName = app.name;
const appVersion = app.getVersion();

let menu_: Menu;

export const createMenu = (
  createWindow: (fn?: (win: BrowserWindow) => void, options?: Record<string, any>) => BrowserWindow,
  getLoadedPluginVersions: () => {name: string; version: string}[]
) => {
  const config = getConfig();
  // We take only first shortcut in array for each command
  const allCommandKeys = getDecoratedKeymaps();
  const commandKeys = Object.keys(allCommandKeys).reduce((result: Record<string, string>, command) => {
    result[command] = allCommandKeys[command][0];
    return result;
  }, {});

  let updateChannel = 'stable';

  if (config?.updateChannel && config.updateChannel === 'canary') {
    updateChannel = 'canary';
  }

  const showAbout = () => {
    const loadedPlugins = getLoadedPluginVersions();
    const pluginList =
      loadedPlugins.length === 0 ? 'none' : loadedPlugins.map((plugin) => `\n  ${plugin.name} (${plugin.version})`);

    const rendererCounts = Object.values(getRendererTypes()).reduce((acc: Record<string, number>, type) => {
      acc[type] = acc[type] ? acc[type] + 1 : 1;
      return acc;
    }, {});
    const renderers = Object.entries(rendererCounts)
      .map(([type, count]) => type + (count > 1 ? ` (${count})` : ''))
      .join(', ');

    void dialog.showMessageBox({
      title: `About ${appName}`,
      message: `${appName} ${appVersion} (${updateChannel})`,
      detail: `Renderers: ${renderers}\nPlugins: ${pluginList}\n\nCreated by Guillermo Rauch\nCopyright © 2022 Vercel, Inc.`,
      buttons: [],
      icon: icon as any
    });
  };
  const menu = [
    ...(process.platform === 'darwin' ? [darwinMenu(commandKeys, execCommand, showAbout)] : []),
    shellMenu(
      commandKeys,
      execCommand,
      getConfig().profiles.map((p) => p.name)
    ),
    editMenu(commandKeys, execCommand),
    viewMenu(commandKeys, execCommand),
    toolsMenu(commandKeys, execCommand),
    windowMenu(commandKeys, execCommand),
    helpMenu(commandKeys, showAbout)
  ];

  return menu;
};

export const buildMenu = (template: Electron.MenuItemConstructorOptions[]): Electron.Menu => {
  menu_ = Menu.buildFromTemplate(template);
  return menu_;
};


================================================
FILE: app/menus/menus/darwin.ts
================================================
// This menu label is overrided by OSX to be the appName
// The label is set to appName here so it matches actual behavior
import {app} from 'electron';
import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';

const darwinMenu = (
  commandKeys: Record<string, string>,
  execCommand: (command: string, focusedWindow?: BrowserWindow) => void,
  showAbout: () => void
): MenuItemConstructorOptions => {
  return {
    label: `${app.name}`,
    submenu: [
      {
        label: 'About Hyper',
        click() {
          showAbout();
        }
      },
      {
        type: 'separator'
      },
      {
        label: 'Preferences...',
        accelerator: commandKeys['window:preferences'],
        click() {
          execCommand('window:preferences');
        }
      },
      {
        type: 'separator'
      },
      {
        role: 'services',
        submenu: []
      },
      {
        type: 'separator'
      },
      {
        role: 'hide'
      },
      {
        role: 'hideOthers'
      },
      {
        role: 'unhide'
      },
      {
        type: 'separator'
      },
      {
        role: 'quit'
      }
    ]
  };
};

export default darwinMenu;


================================================
FILE: app/menus/menus/edit.ts
================================================
import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';

const editMenu = (
  commandKeys: Record<string, string>,
  execCommand: (command: string, focusedWindow?: BrowserWindow) => void
) => {
  const submenu: MenuItemConstructorOptions[] = [
    {
      label: 'Undo',
      accelerator: commandKeys['editor:undo'],
      enabled: false
    },
    {
      label: 'Redo',
      accelerator: commandKeys['editor:redo'],
      enabled: false
    },
    {
      type: 'separator'
    },
    {
      label: 'Cut',
      accelerator: commandKeys['editor:cut'],
      enabled: false
    },
    {
      role: 'copy',
      command: 'editor:copy',
      accelerator: commandKeys['editor:copy'],
      registerAccelerator: true
    } as any,
    {
      role: 'paste',
      accelerator: commandKeys['editor:paste'],
      registerAccelerator: true
    },
    {
      label: 'Select All',
      accelerator: commandKeys['editor:selectAll'],
      click(item, focusedWindow) {
        execCommand('editor:selectAll', focusedWindow);
      }
    },
    {
      type: 'separator'
    },
    {
      label: 'Move to...',
      submenu: [
        {
          label: 'Previous word',
          accelerator: commandKeys['editor:movePreviousWord'],
          click(item, focusedWindow) {
            execCommand('editor:movePreviousWord', focusedWindow);
          }
        },
        {
          label: 'Next word',
          accelerator: commandKeys['editor:moveNextWord'],
          click(item, focusedWindow) {
            execCommand('editor:moveNextWord', focusedWindow);
          }
        },
        {
          label: 'Line beginning',
          accelerator: commandKeys['editor:moveBeginningLine'],
          click(item, focusedWindow) {
            execCommand('editor:moveBeginningLine', focusedWindow);
          }
        },
        {
          label: 'Line end',
          accelerator: commandKeys['editor:moveEndLine'],
          click(item, focusedWindow) {
            execCommand('editor:moveEndLine', focusedWindow);
          }
        }
      ]
    },
    {
      label: 'Delete...',
      submenu: [
        {
          label: 'Previous word',
          accelerator: commandKeys['editor:deletePreviousWord'],
          click(item, focusedWindow) {
            execCommand('editor:deletePreviousWord', focusedWindow);
          }
        },
        {
          label: 'Next word',
          accelerator: commandKeys['editor:deleteNextWord'],
          click(item, focusedWindow) {
            execCommand('editor:deleteNextWord', focusedWindow);
          }
        },
        {
          label: 'Line beginning',
          accelerator: commandKeys['editor:deleteBeginningLine'],
          click(item, focusedWindow) {
            execCommand('editor:deleteBeginningLine', focusedWindow);
          }
        },
        {
          label: 'Line end',
          accelerator: commandKeys['editor:deleteEndLine'],
          click(item, focusedWindow) {
            execCommand('editor:deleteEndLine', focusedWindow);
          }
        }
      ]
    },
    {
      type: 'separator'
    },
    {
      label: 'Clear Buffer',
      accelerator: commandKeys['editor:clearBuffer'],
      click(item, focusedWindow) {
        execCommand('editor:clearBuffer', focusedWindow);
      }
    },
    {
      label: 'Search',
      accelerator: commandKeys['editor:search'],
      click(item, focusedWindow) {
        execCommand('editor:search', focusedWindow);
      }
    }
  ];

  if (process.platform !== 'darwin') {
    submenu.push(
      {type: 'separator'},
      {
        label: 'Preferences...',
        accelerator: commandKeys['window:preferences'],
        click() {
          execCommand('window:preferences');
        }
      }
    );
  }

  return {
    label: 'Edit',
    submenu
  };
};

export default editMenu;


================================================
FILE: app/menus/menus/help.ts
================================================
import {release} from 'os';

import {app, shell, dialog, clipboard} from 'electron';
import type {MenuItemConstructorOptions} from 'electron';

import {getConfig, getPlugins} from '../../config';
import {version} from '../../package.json';

const {arch, env, platform, versions} = process;

const helpMenu = (commands: Record<string, string>, showAbout: () => void): MenuItemConstructorOptions => {
  const submenu: MenuItemConstructorOptions[] = [
    {
      label: `${app.name} Website`,
      click() {
        void shell.openExternal('https://hyper.is');
      }
    },
    {
      label: 'Report Issue',
      click(menuItem, focusedWindow) {
        const body = `<!--
  Hi there! Thank you for discovering and submitting an issue.
  Before you submit this; let's make sure of a few things.
  Please make sure the following boxes are ✅ if they are correct.
  If not, please try and fulfil these first.
-->
<!-- 👉 Checked checkbox should look like this: [x] -->
- [ ] Your Hyper.app version is **${version}**. Please verify you're using the [latest](https://github.com/vercel/hyper/releases/latest) Hyper.app version
- [ ] I have searched the [issues](https://github.com/vercel/hyper/issues) of this repo and believe that this is not a duplicate
---
- **Any relevant information from devtools?** _(CMD+OPTION+I on macOS, CTRL+SHIFT+I elsewhere)_:
<!-- 👉 Replace with info if applicable, or N/A -->

- **Is the issue reproducible in vanilla Hyper.app?**
<!-- 👉 Replace with info if applicable, or Is Vanilla. (Vanilla means Hyper.app without any add-ons or extras. Straight out of the box.) -->

## Issue
<!-- 👉 Now feel free to write your issue, but please be descriptive! Thanks again 🙌 ❤️ -->





---
<!-- hyper.json config -->
- **${app.name} version**: ${env.TERM_PROGRAM_VERSION} "${app.getVersion()}"
- **OS ARCH VERSION:** ${platform} ${arch} ${release()}
- **Electron:** ${versions.electron}  **LANG:** ${env.LANG}
- **SHELL:** ${env.SHELL}   **TERM:** ${env.TERM}
<details><summary><strong>hyper.json contents</strong></summary>

\`\`\`json
${JSON.stringify(getConfig(), null, 2)}
\`\`\`
</details>
<details><summary><strong>plugins</strong></summary>

\`\`\`json
${JSON.stringify(getPlugins(), null, 2)}
\`\`\`
</details>`;

        const issueURL = `https://github.com/vercel/hyper/issues/new?body=${encodeURIComponent(body)}`;
        const copyAndSend = () => {
          clipboard.writeText(body);
          void shell.openExternal(
            `https://github.com/vercel/hyper/issues/new?body=${encodeURIComponent(
              '<!-- We have written the needed data into your clipboard because it was too large to send. ' +
                'Please paste. -->\n'
            )}`
          );
        };
        if (!focusedWindow) {
          copyAndSend();
        } else if (issueURL.length > 6144) {
          void dialog
            .showMessageBox(focusedWindow, {
              message:
                'There is too much data to send to GitHub directly. The data will be copied to the clipboard, ' +
                'please paste it into the GitHub issue page that will open.',
              type: 'warning',
              buttons: ['OK', 'Cancel']
            })
            .then((result) => {
              if (result.response === 0) {
                copyAndSend();
              }
            });
        } else {
          void shell.openExternal(issueURL);
        }
      }
    }
  ];

  if (process.platform !== 'darwin') {
    submenu.push(
      {type: 'separator'},
      {
        label: 'About Hyper',
        click() {
          showAbout();
        }
      }
    );
  }
  return {
    role: 'help',
    submenu
  };
};

export default helpMenu;


================================================
FILE: app/menus/menus/shell.ts
================================================
import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';

const shellMenu = (
  commandKeys: Record<string, string>,
  execCommand: (command: string, focusedWindow?: BrowserWindow) => void,
  profiles: string[]
): MenuItemConstructorOptions => {
  const isMac = process.platform === 'darwin';

  return {
    label: isMac ? 'Shell' : 'File',
    submenu: [
      {
        label: 'New Tab',
        accelerator: commandKeys['tab:new'],
        click(item, focusedWindow) {
          execCommand('tab:new', focusedWindow);
        }
      },
      {
        label: 'New Window',
        accelerator: commandKeys['window:new'],
        click(item, focusedWindow) {
          execCommand('window:new', focusedWindow);
        }
      },
      {
        type: 'separator'
      },
      {
        label: 'Split Down',
        accelerator: commandKeys['pane:splitDown'],
        click(item, focusedWindow) {
          execCommand('pane:splitDown', focusedWindow);
        }
      },
      {
        label: 'Split Right',
        accelerator: commandKeys['pane:splitRight'],
        click(item, focusedWindow) {
          execCommand('pane:splitRight', focusedWindow);
        }
      },
      {
        type: 'separator'
      },
      ...profiles.map(
        (profile): MenuItemConstructorOptions => ({
          label: profile,
          submenu: [
            {
              label: 'New Tab',
              accelerator: commandKeys[`tab:new:${profile}`],
              click(item, focusedWindow) {
                execCommand(`tab:new:${profile}`, focusedWindow);
              }
            },
            {
              label: 'New Window',
              accelerator: commandKeys[`window:new:${profile}`],
              click(item, focusedWindow) {
                execCommand(`window:new:${profile}`, focusedWindow);
              }
            },
            {
              type: 'separator'
            },
            {
              label: 'Split Down',
              accelerator: commandKeys[`pane:splitDown:${profile}`],
              click(item, focusedWindow) {
                execCommand(`pane:splitDown:${profile}`, focusedWindow);
              }
            },
            {
              label: 'Split Right',
              accelerator: commandKeys[`pane:splitRight:${profile}`],
              click(item, focusedWindow) {
                execCommand(`pane:splitRight:${profile}`, focusedWindow);
              }
            }
          ]
        })
      ),
      {
        type: 'separator'
      },
      {
        label: 'Close',
        accelerator: commandKeys['pane:close'],
        click(item, focusedWindow) {
          execCommand('pane:close', focusedWindow);
        }
      },
      {
        label: isMac ? 'Close Window' : 'Quit',
        role: 'close',
        accelerator: commandKeys['window:close']
      }
    ]
  };
};

export default shellMenu;


================================================
FILE: app/menus/menus/tools.ts
================================================
import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';

const toolsMenu = (
  commands: Record<string, string>,
  execCommand: (command: string, focusedWindow?: BrowserWindow) => void
): MenuItemConstructorOptions => {
  return {
    label: 'Tools',
    submenu: [
      {
        label: 'Update plugins',
        accelerator: commands['plugins:update'],
        click() {
          execCommand('plugins:update');
        }
      },
      {
        label: 'Install Hyper CLI command in PATH',
        click() {
          execCommand('cli:install');
        }
      },
      {
        type: 'separator'
      },
      ...(process.platform === 'win32'
        ? <MenuItemConstructorOptions[]>[
            {
              label: 'Add Hyper to system context menu',
              click() {
                execCommand('systemContextMenu:add');
              }
            },
            {
              label: 'Remove Hyper from system context menu',
              click() {
                execCommand('systemContextMenu:remove');
              }
            },
            {
              type: 'separator'
            }
          ]
        : [])
    ]
  };
};

export default toolsMenu;


================================================
FILE: app/menus/menus/view.ts
================================================
import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';

const viewMenu = (
  commandKeys: Record<string, string>,
  execCommand: (command: string, focusedWindow?: BrowserWindow) => void
): MenuItemConstructorOptions => {
  return {
    label: 'View',
    submenu: [
      {
        label: 'Reload',
        accelerator: commandKeys['window:reload'],
        click(item, focusedWindow) {
          execCommand('window:reload', focusedWindow);
        }
      },
      {
        label: 'Full Reload',
        accelerator: commandKeys['window:reloadFull'],
        click(item, focusedWindow) {
          execCommand('window:reloadFull', focusedWindow);
        }
      },
      {
        label: 'Developer Tools',
        accelerator: commandKeys['window:devtools'],
        click: (item, focusedWindow) => {
          execCommand('window:devtools', focusedWindow);
        }
      },
      {
        type: 'separator'
      },
      {
        label: 'Reset Zoom Level',
        accelerator: commandKeys['zoom:reset'],
        click(item, focusedWindow) {
          execCommand('zoom:reset', focusedWindow);
        }
      },
      {
        label: 'Zoom In',
        accelerator: commandKeys['zoom:in'],
        click(item, focusedWindow) {
          execCommand('zoom:in', focusedWindow);
        }
      },
      {
        label: 'Zoom Out',
        accelerator: commandKeys['zoom:out'],
        click(item, focusedWindow) {
          execCommand('zoom:out', focusedWindow);
        }
      }
    ]
  };
};

export default viewMenu;


================================================
FILE: app/menus/menus/window.ts
================================================
import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';

const windowMenu = (
  commandKeys: Record<string, string>,
  execCommand: (command: string, focusedWindow?: BrowserWindow) => void
): MenuItemConstructorOptions => {
  // Generating tab:jump array
  const tabJump: MenuItemConstructorOptions[] = [];
  for (let i = 1; i <= 9; i++) {
    // 9 is a special number because it means 'last'
    const label = i === 9 ? 'Last' : `${i}`;
    tabJump.push({
      label,
      accelerator: commandKeys[`tab:jump:${label.toLowerCase()}`]
    });
  }

  return {
    role: 'window',
    submenu: [
      {
        role: 'minimize',
        accelerator: commandKeys['window:minimize']
      },
      {
        type: 'separator'
      },
      {
        // It's the same thing as clicking the green traffc-light on macOS
        role: 'zoom',
        accelerator: commandKeys['window:zoom']
      },
      {
        label: 'Select Tab',
        submenu: [
          {
            label: 'Previous',
            accelerator: commandKeys['tab:prev'],
            click: (item, focusedWindow) => {
              execCommand('tab:prev', focusedWindow);
            }
          },
          {
            label: 'Next',
            accelerator: commandKeys['tab:next'],
            click: (item, focusedWindow) => {
              execCommand('tab:next', focusedWindow);
            }
          },
          {
            type: 'separator'
          },
          ...tabJump
        ]
      },
      {
        type: 'separator'
      },
      {
        label: 'Select Pane',
        submenu: [
          {
            label: 'Previous',
            accelerator: commandKeys['pane:prev'],
            click: (item, focusedWindow) => {
              execCommand('pane:prev', focusedWindow);
            }
          },
          {
            label: 'Next',
            accelerator: commandKeys['pane:next'],
            click: (item, focusedWindow) => {
              execCommand('pane:next', focusedWindow);
            }
          }
        ]
      },
      {
        type: 'separator'
      },
      {
        role: 'front'
      },
      {
        label: 'Toggle Always on Top',
        click: (item, focusedWindow) => {
          execCommand('window:toggleKeepOnTop', focusedWindow);
        }
      },
      {
        role: 'togglefullscreen',
        accelerator: commandKeys['window:toggleFullScreen']
      }
    ]
  };
};

export default windowMenu;


================================================
FILE: app/notifications.ts
================================================
import type {BrowserWindow} from 'electron';

import fetch from 'electron-fetch';
import ms from 'ms';

import {version} from './package.json';

const NEWS_URL = 'https://hyper-news.now.sh';

export default function fetchNotifications(win: BrowserWindow) {
  const {rpc} = win;
  const retry = (err?: Error) => {
    setTimeout(() => fetchNotifications(win), ms('30m'));
    if (err) {
      console.error('Notification messages fetch error', err.stack);
    }
  };
  console.log('Checking for notification messages');
  fetch(NEWS_URL, {
    headers: {
      'X-Hyper-Version': version,
      'X-Hyper-Platform': process.platform
    }
  })
    .then((res) => res.json())
    .then((data) => {
      const message: {text: string; url: string; dismissable: boolean} | '' = data.message || '';
      if (typeof message !== 'object' && message !== '') {
        throw new Error('Bad response');
      }
      if (message === '') {
        console.log('No matching notification messages');
      } else {
        rpc.emit('add notification', message);
      }

      retry();
    })
    .catch(retry);
}


================================================
FILE: app/notify.ts
================================================
import {app, Notification} from 'electron';

import {icon} from './config/paths';

export default function notify(title: string, body = '', details: {error?: any} = {}) {
  console.log(`[Notification] ${title}: ${body}`);
  if (details.error) {
    console.error(details.error);
  }
  if (app.isReady()) {
    _createNotification(title, body);
  } else {
    app.on('ready', () => {
      _createNotification(title, body);
    });
  }
}

const _createNotification = (title: string, body: string) => {
  new Notification({title, body, ...(process.platform === 'linux' && {icon})}).show();
};


================================================
FILE: app/package.json
================================================
{
  "name": "hyper",
  "productName": "Hyper",
  "description": "A terminal built on web technologies",
  "version": "4.0.0-canary.5",
  "license": "MIT",
  "author": {
    "name": "ZEIT, Inc.",
    "email": "team@zeit.co"
  },
  "repository": "zeit/hyper",
  "scripts": {
    "postinstall": "npx patch-package"
  },
  "dependencies": {
    "@babel/parser": "7.24.4",
    "@electron/remote": "2.1.2",
    "ast-types": "^0.16.1",
    "async-retry": "1.3.3",
    "chokidar": "^3.6.0",
    "color": "4.2.3",
    "default-shell": "1.0.1",
    "electron-devtools-installer": "3.2.0",
    "electron-fetch": "1.9.1",
    "electron-is-dev": "2.0.0",
    "electron-store": "8.2.0",
    "fs-extra": "11.2.0",
    "git-describe": "4.1.1",
    "lodash": "4.17.21",
    "ms": "2.1.3",
    "native-process-working-directory": "^1.0.2",
    "node-pty": "1.0.0",
    "os-locale": "5.0.0",
    "parse-url": "8.1.0",
    "queue": "6.0.2",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "recast": "0.23.6",
    "semver": "7.6.0",
    "shell-env": "3.0.1",
    "sudo-prompt": "^9.2.1",
    "uuid": "9.0.1"
  },
  "optionalDependencies": {
    "native-reg": "1.1.1"
  }
}


================================================
FILE: app/patches/node-pty+1.0.0.patch
================================================
diff --git a/node_modules/node-pty/src/win/conpty.cc b/node_modules/node-pty/src/win/conpty.cc
index 47af75c..884d542 100644
--- a/node_modules/node-pty/src/win/conpty.cc
+++ b/node_modules/node-pty/src/win/conpty.cc
@@ -472,10 +472,6 @@ static NAN_METHOD(PtyKill) {
       }
     }
 
-    DisconnectNamedPipe(handle->hIn);
-    DisconnectNamedPipe(handle->hOut);
-    CloseHandle(handle->hIn);
-    CloseHandle(handle->hOut);
     CloseHandle(handle->hShell);
   }
 


================================================
FILE: app/plugins.ts
================================================
/* eslint-disable eslint-comments/disable-enable-pair */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-call */
import {exec, execFile} from 'child_process';
import {writeFileSync} from 'fs';
import {resolve, basename} from 'path';
import {promisify} from 'util';

import {app, dialog, ipcMain as _ipcMain} from 'electron';
import type {BrowserWindow, App, MenuItemConstructorOptions} from 'electron';
import React from 'react';

import Config from 'electron-store';
import ms from 'ms';
import ReactDom from 'react-dom';

import type {IpcMainWithCommands} from '../typings/common';
import type {configOptions} from '../typings/config';

import * as config from './config';
import {plugs} from './config/paths';
import notify from './notify';
import {availableExtensions} from './plugins/extensions';
import {install} from './plugins/install';
import mapKeys from './utils/map-keys';

// local storage
const cache = new Config();

const path = plugs.base;
const localPath = plugs.local;

patchModuleLoad();

// caches
let plugins = config.getPlugins();
let paths = getPaths();
let id = getId(plugins);
let modules = requirePlugins();

function getId(plugins_: any) {
  return JSON.stringify(plugins_);
}

const watchers: Function[] = [];

// we listen on configuration updates to trigger
// plugin installation
config.subscribe(() => {
  const plugins_ = config.getPlugins();
  if (plugins !== plugins_) {
    const id_ = getId(plugins_);
    if (id !== id_) {
      id = id_;
      plugins = plugins_;
      updatePlugins();
    }
  }
});

// patching Module._load
// so plugins can `require` them without needing their own version
// https://github.com/vercel/hyper/issues/619
function patchModuleLoad() {
  // eslint-disable-next-line @typescript-eslint/no-var-requires
  const Module = require('module');
  const originalLoad = Module._load;
  Module._load = function _load(modulePath: string) {
    // PLEASE NOTE: Code changes here, also need to be changed in
    // lib/utils/plugins.js
    switch (modulePath) {
      case 'react':
        // DEPRECATED
        return React;
      case 'react-dom':
        // DEPRECATED
        return ReactDom;
      case 'hyper/component':
        // DEPRECATED
        return React.PureComponent;
      // These return Object, since they work differently on the backend, than on the frontend.
      // Still needs to be here, to prevent errors, while loading plugins.
      case 'hyper/Notification':
      case 'hyper/notify':
      case 'hyper/decorate':
        return Object;
      default:
        // eslint-disable-next-line prefer-rest-params
        return originalLoad.apply(this, arguments);
    }
  };
}

function checkDeprecatedExtendKeymaps() {
  modules.forEach((plugin) => {
    if (plugin.extendKeymaps) {
      notify('Plugin warning!', `"${plugin._name}" use deprecated "extendKeymaps" handler`);
      return;
    }
  });
}

let updating = false;

function updatePlugins({force = false} = {}) {
  if (updating) {
    return notify('Plugin update in progress');
  }
  updating = true;
  syncPackageJSON();
  const id_ = id;
  install((err) => {
    updating = false;

    if (err) {
      notify('Error updating plugins.', err, {error: err});
    } else {
      // flag successful plugin update
      cache.set('hyper.plugins', id_);

      // cache paths
      paths = getPaths();

      // clear require cache
      clearCache();

      // cache modules
      modules = requirePlugins();

      const loaded = modules.length;
      const total = paths.plugins.length + paths.localPlugins.length;
      const pluginVersions = JSON.stringify(getPluginVersions());
      const changed = cache.get('hyper.plugin-versions') !== pluginVersions && loaded === total;
      cache.set('hyper.plugin-versions', pluginVersions);

      // notify watchers
      watchers.forEach((fn) => {
        fn(err, {force});
      });

      if (force || changed) {
        if (changed) {
          notify('Plugins Updated', 'Restart the app or hot-reload with "View" > "Reload" to enjoy the updates!');
        } else {
          notify('Plugins Updated', 'No changes!');
        }
        checkDeprecatedExtendKeymaps();
      }
    }
  });
}

function getPluginVersions() {
  const paths_ = paths.plugins.concat(paths.localPlugins);
  return paths_.map((path_) => {
    let version: string | null = null;
    try {
      // eslint-disable-next-line @typescript-eslint/no-var-requires
      version = require(resolve(path_, 'package.json')).version;
      //eslint-disable-next-line no-empty
    } catch (err) {}
    return [basename(path_), version];
  });
}

function clearCache() {
  // trigger unload hooks
  modules.forEach((mod) => {
    if (mod.onUnload) {
      mod.onUnload(app);
    }
  });

  // clear require cache
  for (const entry in require.cache) {
    if (entry.indexOf(path) === 0 || entry.indexOf(localPath) === 0) {
      delete require.cache[entry];
    }
  }
}

export {updatePlugins};

export const getLoadedPluginVersions = () => {
  return modules.map((mod) => ({name: mod._name, version: mod._version}));
};

// we schedule the initial plugins update
// a bit after the user launches the terminal
// to prevent slowness
if (cache.get('hyper.plugins') !== id || process.env.HYPER_FORCE_UPDATE) {
  // install immediately if the user changed plugins
  console.log('plugins have changed / not init, scheduling plugins installation');
  setTimeout(() => {
    updatePlugins();
  }, 1000);
}

(() => {
  const baseConfig = config.getConfig();
  if (baseConfig['autoUpdatePlugins']) {
    // otherwise update plugins every 5 hours
    setInterval(updatePlugins, ms(baseConfig['autoUpdatePlugins'] === true ? '5h' : baseConfig['autoUpdatePlugins']));
  }
})();

function syncPackageJSON() {
  const dependencies = toDependencies(plugins);
  const pkg = {
    name: 'hyper-plugins',
    description: 'Auto-generated from `hyper.json`!',
    private: true,
    version: '0.0.1',
    repository: 'vercel/hyper',
    license: 'MIT',
    homepage: 'https://hyper.is',
    dependencies
  };

  const file = resolve(path, 'package.json');
  try {
    writeFileSync(file, JSON.stringify(pkg, null, 2));
  } catch (err) {
    alert(`An error occurred writing to ${file}`);
  }
}

function alert(message: string) {
  void dialog.showMessageBox({
    message,
    buttons: ['Ok']
  });
}

function toDependencies(plugins_: {plugins: string[]}) {
  const obj: Record<string, string> = {};
  plugins_.plugins.forEach((plugin) => {
    const regex = /.(@|#)/;
    const match = regex.exec(plugin);

    if (match) {
      const index = match.index + 1;
      const pieces: string[] = [];

      pieces[0] = plugin.substring(0, index);
      pieces[1] = plugin.substring(index + 1, plugin.length);
      obj[pieces[0]] = pieces[1];
    } else {
      obj[plugin] = 'latest';
    }
  });
  return obj;
}

export const subscribe = (fn: Function) => {
  watchers.push(fn);
  return () => {
    watchers.splice(watchers.indexOf(fn), 1);
  };
};

function getPaths() {
  return {
    plugins: plugins.plugins.map((name) => {
      return resolve(path, 'node_modules', name.split('#')[0]);
    }),
    localPlugins: plugins.localPlugins.map((name) => {
      return resolve(localPath, name);
    })
  };
}

// expose to renderer
export {getPaths};

// get paths from renderer
export const getBasePaths = () => {
  return {path, localPath};
};

function requirePlugins(): any[] {
  const {plugins: plugins_, localPlugins} = paths;

  const load = (path_: string) => {
    let mod: Record<string, any>;
    try {
      mod = require(path_);
      const exposed = mod && Object.keys(mod).some((key) => availableExtensions.has(key));
      if (!exposed) {
        notify('Plugin error!', `${`Plugin "${basename(path_)}" does not expose any `}Hyper extension API methods`);
        return;
      }

      // populate the name for internal errors here
      mod._name = basename(path_);
      try {
        // eslint-disable-next-line @typescript-eslint/no-var-requires
        mod._version = require(resolve(path_, 'package.json')).version;
      } catch (err) {
        console.warn(`No package.json found in ${path_}`);
      }
      console.log(`Plugin ${mod._name} (${mod._version}) loaded.`);

      return mod;
    } catch (_err) {
      const err = _err as {code: string; message: string};
      if (err.code === 'MODULE_NOT_FOUND') {
        console.warn(`Plugin error while loading "${basename(path_)}" (${path_}): ${err.message}`);
      } else {
        notify('Plugin error!', `Plugin "${basename(path_)}" failed to load (${err.message})`, {error: err});
      }
    }
  };

  return [
    ...localPlugins.filter((p) => basename(p) === 'migrated-hyper3-config'),
    ...plugins_,
    ...localPlugins.filter((p) => basename(p) !== 'migrated-hyper3-config')
  ]
    .map(load)
    .filter((v): v is Record<string, any> => Boolean(v));
}

export const onApp = (app_: App) => {
  modules.forEach((plugin) => {
    if (plugin.onApp) {
      try {
        plugin.onApp(app_);
      } catch (e) {
        notify('Plugin error!', `"${plugin._name}" has encountered an error. Check Developer Tools for details.`, {
          error: e
        });
      }
    }
  });
};

export const onWindowClass = (win: BrowserWindow) => {
  modules.forEach((plugin) => {
    if (plugin.onWindowClass) {
      try {
        plugin.onWindowClass(win);
      } catch (e) {
        notify('Plugin error!', `"${plugin._name}" has encountered an error. Check Developer Tools for details.`, {
          error: e
        });
      }
    }
  });
};

export const onWindow = (win: BrowserWindow) => {
  modules.forEach((plugin) => {
    if (plugin.onWindow) {
      try {
        plugin.onWindow(win);
      } catch (e) {
        notify('Plugin error!', `"${plugin._name}" has encountered an error. Check Developer Tools for details.`, {
          error: e
        });
      }
    }
  });
};

// decorates the base entity by calling plugin[key]
// for all the available plugins
function decorateEntity(base: any, key: string, type: 'object' | 'function') {
  let decorated = base;
  modules.forEach((plugin) => {
    if (plugin[key]) {
      let res;
      try {
        res = plugin[key](decorated);
      } catch (e) {
        notify('Plugin error!', `"${plugin._name}" when decorating ${key}`, {error: e});
        return;
      }
      if (res && (!type || typeof res === type)) {
        decorated = res;
      } else {
        notify('Plugin error!', `"${plugin._name}": invalid return type for \`${key}\``);
      }
    }
  });

  return decorated;
}

function decorateObject<T>(base: T, key: string): T {
  return decorateEntity(base, key, 'object');
}

function decorateClass(base: any, key: string) {
  return decorateEntity(base, key, 'function');
}

export const getDeprecatedConfig = () => {
  const deprecated: Record<string, {css: string[]}> = {};
  const baseConfig = config.getConfig();
  modules.forEach((plugin) => {
    if (!plugin.decorateConfig) {
      return;
    }
    // We need to clone config in case of plugin modifies config directly.
    let configTmp: configOptions;
    try {
      configTmp = plugin.decorateConfig(JSON.parse(JSON.stringify(baseConfig)));
    } catch (e) {
      notify('Plugin error!', `"${plugin._name}" has encountered an error. Check Developer Tools for details.`, {
        error: e
      });
      return;
    }
    const pluginCSSDeprecated = config.getDeprecatedCSS(configTmp);
    if (pluginCSSDeprecated.length === 0) {
      return;
    }
    deprecated[plugin._name] = {css: pluginCSSDeprecated};
  });
  return deprecated;
};

export const decorateMenu = (tpl: MenuItemConstructorOptions[]) => {
  return decorateObject(tpl, 'decorateMenu');
};

export const getDecoratedEnv = (baseEnv: Record<string, string>) => {
  return decorateObject(baseEnv, 'decorateEnv');
};

export const getDecoratedConfig = (profile: string) => {
  const baseConfig = config.getProfileConfig(profile);
  const decoratedConfig = decorateObject(baseConfig, 'decorateConfig');
  const fixedConfig = config.fixConfigDefaults(decoratedConfig);
  const translatedConfig = config.htermConfigTranslate(fixedConfig);
  return translatedConfig;
};

export const getDecoratedKeymaps = () => {
  const baseKeymaps = config.getKeymaps();
  // Ensure that all keys are in an array and don't use deprecated key combination`
  const decoratedKeymaps = mapKeys(decorateObject(baseKeymaps, 'decorateKeymaps'));
  return decoratedKeymaps;
};

export const getDecoratedBrowserOptions = <T>(defaults: T): T => {
  return decorateObject(defaults, 'decorateBrowserOptions');
};

export const decorateWindowClass = <T>(defaults: T): T => {
  return decorateObject(defaults, 'decorateWindowClass');
};

export const decorateSessionOptions = <T>(defaults: T): T => {
  return decorateObject(defaults, 'decorateSessionOptions');
};

export const decorateSessionClass = <T>(Session: T): T => {
  return decorateClass(Session, 'decorateSessionClass');
};

export {toDependencies as _toDependencies};

const ipcMain = _ipcMain as IpcMainWithCommands;

ipcMain.handle('child_process.exec', (event, command, options) => {
  return promisify(exec)(command, options);
});

ipcMain.handle('child_process.execFile', (event, file, args, options) => {
  return promisify(execFile)(file, args, options);
});

ipcMain.handle('getLoadedPluginVersions', () => getLoadedPluginVersions());
ipcMain.handle('getPaths', () => getPaths());
ipcMain.handle('getBasePaths', () => getBasePaths());
ipcMain.handle('getDeprecatedConfig', () => getDeprecatedConfig());
ipcMain.handle('getDecoratedConfig', (e, profile) => getDecoratedConfig(profile));
ipcMain.handle('getDecoratedKeymaps', () => getDecoratedKeymaps());


================================================
FILE: app/rpc.ts
================================================
import {EventEmitter} from 'events';

import {ipcMain} from 'electron';
import type {BrowserWindow, IpcMainEvent} from 'electron';

import {v4 as uuidv4} from 'uuid';

import type {TypedEmitter, MainEvents, RendererEvents, FilterNever} from '../typings/common';

export class Server {
  emitter: TypedEmitter<MainEvents>;
  destroyed = false;
  win: BrowserWindow;
  id!: string;

  constructor(win: BrowserWindow) {
    this.emitter = new EventEmitter();
    this.win = win;
    this.emit = this.emit.bind(this);

    if (this.destroyed) {
      return;
    }

    const uid = uuidv4();
    this.id = uid;

    ipcMain.on(uid, this.ipcListener);

    // we intentionally subscribe to `on` instead of `once`
    // to support reloading the window and re-initializing
    // the channel
    this.wc.on('did-finish-load', () => {
      this.wc.send('init', uid, win.profileName);
    });
  }

  get wc() {
    return this.win.webContents;
  }

  ipcListener = <U extends keyof MainEvents>(event: IpcMainEvent, {ev, data}: {ev: U; data: MainEvents[U]}) =>
    this.emitter.emit(ev, data);

  on = <U extends keyof MainEvents>(ev: U, fn: (arg0: MainEvents[U]) => void) => {
    this.emitter.on(ev, fn);
    return this;
  };

  once = <U extends keyof MainEvents>(ev: U, fn: (arg0: MainEvents[U]) => void) => {
    this.emitter.once(ev, fn);
    return this;
  };

  emit<U extends Exclude<keyof RendererEvents, FilterNever<RendererEvents>>>(ch: U): boolean;
  emit<U extends FilterNever<RendererEvents>>(ch: U, data: RendererEvents[U]): boolean;
  emit<U extends keyof RendererEvents>(ch: U, data?: RendererEvents[U]) {
    // This check is needed because data-batching can cause extra data to be
    // emitted after the window has already closed
    if (!this.win.isDestroyed()) {
      this.wc.send(this.id, {ch, data});
      return true;
    }
    return false;
  }

  destroy() {
    this.emitter.removeAllListeners();
    this.wc.removeAllListeners();
    if (this.id) {
      ipcMain.removeListener(this.id, this.ipcListener);
    } else {
      // mark for `genUid` in constructor
      this.destroyed = true;
    }
  }
}

const createRPC = (win: BrowserWindow) => {
  return new Server(win);
};

export default createRPC;


================================================
FILE: app/session.ts
================================================
import {EventEmitter} from 'events';
import {dirname} from 'path';
import {StringDecoder} from 'string_decoder';

import defaultShell from 'default-shell';
import type {IPty, IWindowsPtyForkOptions, spawn as npSpawn} from 'node-pty';
import osLocale from 'os-locale';
import shellEnv from 'shell-env';

import * as config from './config';
import {cliScriptPath} from './config/paths';
import {productName, version} from './package.json';
import {getDecoratedEnv} from './plugins';
import {getFallBackShellConfig} from './utils/shell-fallback';

const createNodePtyError = () =>
  new Error(
    '`node-pty` failed to load. Typically this means that it was built incorrectly. Please check the `readme.md` to more info.'
  );

let spawn: typeof npSpawn;
try {
  // eslint-disable-next-line @typescript-eslint/no-var-requires
  spawn = require('node-pty').spawn;
} catch (err) {
  throw createNodePtyError();
}

const useConpty = config.getConfig().useConpty;

// Max duration to batch session data before sending it to the renderer process.
const BATCH_DURATION_MS = 16;

// Max size of a session data batch. Note that this value can be exceeded by ~4k
// (chunk sizes seem to be 4k at the most)
const BATCH_MAX_SIZE = 200 * 1024;

// Data coming from the pty is sent to the renderer process for further
// vt parsing and rendering. This class batches data to minimize the number of
// IPC calls. It also reduces GC pressure and CPU cost: each chunk is prefixed
// with the window ID which is then stripped on the renderer process and this
// overhead is reduced with batching.
class DataBatcher extends EventEmitter {
  uid: string;
  decoder: StringDecoder;
  data!: string;
  timeout!: NodeJS.Timeout | null;
  constructor(uid: string) {
    super();
    this.uid = uid;
    this.decoder = new StringDecoder('utf8');

    this.reset();
  }

  reset() {
    this.data = this.uid;
    this.timeout = null;
  }

  write(chunk: Buffer | string) {
    if (this.data.length + chunk.length >= BATCH_MAX_SIZE) {
      // We've reached the max batch size. Flush it and start another one
      if (this.timeout) {
        clearTimeout(this.timeout);
        this.timeout = null;
      }
      this.flush();
    }

    this.data += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);

    if (!this.timeout) {
      this.timeout = setTimeout(() => this.flush(), BATCH_DURATION_MS);
    }
  }

  flush() {
    // Reset before emitting to allow for potential reentrancy
    const data = this.data;
    this.reset();

    this.emit('flush', data);
  }
}

interface SessionOptions {
  uid: string;
  rows?: number;
  cols?: number;
  cwd?: string;
  shell?: string;
  shellArgs?: string[];
  profile: string;
}
export default class Session extends EventEmitter {
  pty: IPty | null;
  batcher: DataBatcher | null;
  shell: string | null;
  ended: boolean;
  initTimestamp: number;
  profile!: string;
  constructor(options: SessionOptions) {
    super();
    this.pty = null;
    this.batcher = null;
    this.shell = null;
    this.ended = false;
    this.initTimestamp = new Date().getTime();
    this.init(options);
  }

  init({uid, rows, cols, cwd, shell: _shell, shellArgs: _shellArgs, profile}: SessionOptions) {
    this.profile = profile;
    const envFromConfig = config.getProfileConfig(profile).env || {};
    const defaultShellArgs = ['--login'];

    const shell = _shell || defaultShell;
    const shellArgs = _shellArgs || defaultShellArgs;

    const cleanEnv =
      process.env['APPIMAGE'] && process.env['APPDIR'] ? shellEnv.sync(_shell || defaultShell) : process.env;
    const baseEnv: Record<string, string> = {
      ...cleanEnv,
      LANG: `${osLocale.sync().replace(/-/, '_')}.UTF-8`,
      TERM: 'xterm-256color',
      COLORTERM: 'truecolor',
      TERM_PROGRAM: productName,
      TERM_PROGRAM_VERSION: version,
      ...envFromConfig
    };
    // path to AppImage mount point is added to PATH environment variable automatically
    // which conflicts with the cli
    if (baseEnv['APPIMAGE'] && baseEnv['APPDIR']) {
      baseEnv['PATH'] = [dirname(cliScriptPath)]
        .concat((baseEnv['PATH'] || '').split(':').filter((val) => !val.startsWith(baseEnv['APPDIR'])))
        .join(':');
    }

    // Electron has a default value for process.env.GOOGLE_API_KEY
    // We don't want to leak this to the shell
    // See https://github.com/vercel/hyper/issues/696
    if (baseEnv.GOOGLE_API_KEY && process.env.GOOGLE_API_KEY === baseEnv.GOOGLE_API_KEY) {
      delete baseEnv.GOOGLE_API_KEY;
    }

    const options: IWindowsPtyForkOptions = {
      cols,
      rows,
      cwd,
      env: getDecoratedEnv(baseEnv)
    };

    // if config do not set the useConpty, it will be judged by the node-pty
    if (typeof useConpty === 'boolean') {
      options.useConpty = useConpty;
    }

    try {
      this.pty = spawn(shell, shellArgs, options);
    } catch (_err) {
      const err = _err as {message: string};
      if (/is not a function/.test(err.message)) {
        throw createNodePtyError();
      } else {
        throw err;
      }
    }

    this.batcher = new DataBatcher(uid);
    this.pty.onData((chunk) => {
      if (this.ended) {
        return;
      }
      this.batcher?.write(chunk);
    });

    this.batcher.on('flush', (data: string) => {
      this.emit('data', data);
    });

    this.pty.onExit((e) => {
      if (!this.ended) {
        // fall back to default shell config if the shell exits within 1 sec with non zero exit code
        // this will inform users in case there are errors in the config instead of instant exit
        const runDuration = new Date().getTime() - this.initTimestamp;
        if (e.exitCode > 0 && runDuration < 1000) {
          const fallBackShellConfig = getFallBackShellConfig(shell, shellArgs, defaultShell, defaultShellArgs);
          if (fallBackShellConfig) {
            const msg = `
shell exited in ${runDuration} ms with exit code ${e.exitCode}
please check the shell config: ${JSON.stringify({shell, shellArgs}, undefined, 2)}
using fallback shell config: ${JSON.stringify(fallBackShellConfig, undefined, 2)}
`;
            console.warn(msg);
            this.batcher?.write(msg.replace(/\n/g, '\r\n'));
            this.init({
              uid,
              rows,
              cols,
              cwd,
              shell: fallBackShellConfig.shell,
              shellArgs: fallBackShellConfig.shellArgs,
              profile
            });
          } else {
            const msg = `
shell exited in ${runDuration} ms with exit code ${e.exitCode}
No fallback available, please check the shell config.
`;
            console.warn(msg);
            this.batcher?.write(msg.replace(/\n/g, '\r\n'));
          }
        } else {
          this.ended = true;
          this.emit('exit');
        }
      }
    });

    this.shell = shell;
  }

  exit() {
    this.destroy();
  }

  write(data: string) {
    if (this.pty) {
      this.pty.write(data);
    } else {
      console.warn('Warning: Attempted to write to a session with no pty');
    }
  }

  resize({cols, rows}: {cols: number; rows: number}) {
    if (this.pty) {
      try {
        this.pty.resize(cols, rows);
      } catch (_err) {
        const err = _err as {stack: any};
        console.error(err.stack);
      }
    } else {
      console.warn('Warning: Attempted to resize a session with no pty');
    }
  }

  destroy() {
    if (this.pty) {
      try {
        this.pty.kill();
      } catch (_err) {
        const err = _err as {stack: any};
        console.error('exit error', err.stack);
      }
    } else {
      console.warn('Warning: Attempted to destroy a session with no pty');
    }
    this.emit('exit');
    this.ended = true;
  }
}


================================================
FILE: app/tsconfig.json
================================================
{
  "extends": "../tsconfig.base.json",
  "compilerOptions": {
    "declarationDir": "../dist/tmp/appdts/",
    "outDir": "../target/",
    "noImplicitAny": false
  },
  "include": [
    "./**/*",
    "./package.json",
    "../typings/extend-electron.d.ts",
    "../typings/ext-modules.d.ts"
  ]
}


================================================
FILE: app/ui/contextmenu.ts
================================================
import type {MenuItemConstructorOptions, BrowserWindow} from 'electron';

import {execCommand} from '../commands';
import {getProfiles} from '../config';
import editMenu from '../menus/menus/edit';
import shellMenu from '../menus/menus/shell';
import {getDecoratedKeymaps} from '../plugins';

const separator: MenuItemConstructorOptions = {type: 'separator'};

const getCommandKeys = (keymaps: Record<string, string[]>): Record<string, string> =>
  Object.keys(keymaps).reduce((commandKeys: Record<string, string>, command) => {
    return Object.assign(commandKeys, {
      [command]: keymaps[command][0]
    });
  }, {});

// only display cut/copy when there's a cursor selection
const filterCutCopy = (selection: string, menuItem: MenuItemConstructorOptions) => {
  if (/^cut$|^copy$/.test(menuItem.role!) && !selection) {
    return;
  }
  return menuItem;
};

const contextMenuTemplate = (
  createWindow: (fn?: (win: BrowserWindow) => void, options?: Record<string, any>) => BrowserWindow,
  selection: string
) => {
  const commandKeys = getCommandKeys(getDecoratedKeymaps());
  const _shell = shellMenu(
    commandKeys,
    execCommand,
    getProfiles().map((p) => p.name)
  ).submenu as MenuItemConstructorOptions[];
  const _edit = editMenu(commandKeys, execCommand).submenu.filter(filterCutCopy.bind(null, selection));
  return _edit
    .concat(separator, _shell)
    .filter((menuItem) => !Object.prototype.hasOwnProperty.call(menuItem, 'enabled') || menuItem.enabled);
};

export default contextMenuTemplate;


================================================
FILE: app/ui/window.ts
================================================
import {existsSync} from 'fs';
import {isAbsolute, normalize, sep} from 'path';
import {URL, fileURLToPath} from 'url';

import {app, BrowserWindow, shell, Menu} from 'electron';
import type {BrowserWindowConstructorOptions} from 'electron';

import {enable as remoteEnable} from '@electron/remote/main';
import isDev from 'electron-is-dev';
import {getWorkingDirectoryFromPID} from 'native-process-working-directory';
import {v4 as uuidv4} from 'uuid';

import type {sessionExtraOptions} from '../../typings/common';
import type {configOptions} from '../../typings/config';
import {execCommand} from '../commands';
import {getDefaultProfile} from '../config';
import {icon, homeDirectory} from '../config/paths';
import fetchNotifications from '../notifications';
import notify from '../notify';
import {decorateSessionOptions, decorateSessionClass} from '../plugins';
import createRPC from '../rpc';
import Session from '../session';
import updater from '../updater';
import {setRendererType, unsetRendererType} from '../utils/renderer-utils';
import toElectronBackgroundColor from '../utils/to-electron-background-color';

import contextMenuTemplate from './contextmenu';

export function newWindow(
  options_: BrowserWindowConstructorOptions,
  cfg: configOptions,
  fn?: (win: BrowserWindow) => void,
  profileName: string = getDefaultProfile()
): BrowserWindow {
  const classOpts = Object.assign({uid: uuidv4()});
  app.plugins.decorateWindowClass(classOpts);

  const winOpts: BrowserWindowConstructorOptions = {
    minWidth: 370,
    minHeight: 190,
    backgroundColor: toElectronBackgroundColor(cfg.backgroundColor || '#000'),
    titleBarStyle: 'hiddenInset',
    title: 'Hyper.app',
    // we want to go frameless on Windows and Linux
    frame: process.platform === 'darwin',
    transparent: process.platform === 'darwin',
    icon,
    show: Boolean(process.env.HYPER_DEBUG || process.env.HYPERTERM_DEBUG || isDev),
    acceptFirstMouse: true,
    webPreferences: {
      nodeIntegration: true,
      navigateOnDragDrop: true,
      contextIsolation: false
    },
    ...options_
  };
  const window = new BrowserWindow(app.plugins.getDecoratedBrowserOptions(winOpts));

  window.profileName = profileName;

  // Enable remote module on this window
  remoteEnable(window.webContents);

  window.uid = classOpts.uid;

  app.plugins.onWindowClass(window);
  window.uid = classOpts.uid;

  const rpc = createRPC(window);
  const sessions = new Map<string, Session>();

  const updateBackgroundColor = () => {
    const cfg_ = app.plugins.getDecoratedConfig(profileName);
    window.setBackgroundColor(toElectronBackgroundColor(cfg_.backgroundColor || '#000'));
  };

  // config changes
  const cfgUnsubscribe = app.config.subscribe(() => {
    const cfg_ = app.plugins.getDecoratedConfig(profileName);

    // notify renderer
    window.webContents.send('config change');

    // notify user that shell changes require new sessions
    if (cfg_.shell !== cfg.shell || JSON.stringify(cfg_.shellArgs) !== JSON.stringify(cfg.shellArgs)) {
      notify('Shell configuration changed!', 'Open a new tab or window to start using the new shell');
    }

    // update background color if necessary
    updateBackgroundColor();

    cfg = cfg_;
  });

  rpc.on('init', () => {
    window.show();
    updateBackgroundColor();

    // If no callback is passed to createWindow,
    // a new session will be created by default.
    if (!fn) {
      fn = (win: BrowserWindow) => {
        win.rpc.emit('termgroup add req', {});
      };
    }

    // app.windowCallback is the createWindow callback
    // that can be set before the 'ready' app event
    // and createWindow definition. It's executed in place of
    // the callback passed as parameter, and deleted right after.
    (app.windowCallback || fn)(window);
    app.windowCallback = undefined;
    fetchNotifications(window);
    // auto updates
    if (!isDev) {
      updater(window);
    } else {
      console.log('ignoring auto updates during dev');
    }
  });

  function createSession(extraOptions: sessionExtraOptions = {}) {
    const uid = uuidv4();
    const extraOptionsFiltered: sessionExtraOptions = {};
    Object.keys(extraOptions).forEach((key) => {
      if (extraOptions[key] !== undefined) extraOptionsFiltered[key] = extraOptions[key];
    });

    const profile = extraOptionsFiltered.profile || profileName;
    const activeSession = extraOptionsFiltered.activeUid ? sessions.get(extraOptionsFiltered.activeUid) : undefined;
    let cwd = '';
    if (cfg.preserveCWD !== false && activeSession && activeSession.profile === profile) {
      const activePID = activeSession.pty?.pid;
      if (activePID !== undefined) {
        try {
          cwd = getWorkingDirectoryFromPID(activePID) || '';
        } catch (error) {
          console.error(error);
        }
      }
      cwd = cwd && isAbsolute(cwd) && existsSync(cwd) ? cwd : '';
    }

    const profileCfg = app.plugins.getDecoratedConfig(profile);

    // set working directory
    let argPath = process.argv[1];
    if (argPath && process.platform === 'win32') {
      if (/[a-zA-Z]:"/.test(argPath)) {
        argPath = argPath.replace('"', sep);
      }
      argPath = normalize(argPath + sep);
    }
    let workingDirectory = homeDirectory;
    if (argPath && isAbsolute(argPath)) {
      workingDirectory = argPath;
    } else if (profileCfg.workingDirectory && isAbsolute(profileCfg.workingDirectory)) {
      workingDirectory = profileCfg.workingDirectory;
    }

    // remove the rows and cols, the wrong value of them will break layout when init create
    const defaultOptions = Object.assign(
      {
        cwd: cwd || workingDirectory,
        splitDirection: undefined,
        shell: profileCfg.shell,
        shellArgs: profileCfg.shellArgs && Array.from(profileCfg.shellArgs)
      },
      extraOptionsFiltered,
      {
        profile: extraOptionsFiltered.profile || profileName,
        uid
      }
    );
    const options = decorateSessionOptions(defaultOptions);
    const DecoratedSession = decorateSessionClass(Session);
    const session = new DecoratedSession(options);
    sessions.set(uid, session);
    return {session, options};
  }

  rpc.on('new', (extraOptions) => {
    const {session, options} = createSession(extraOptions);

    sessions.set(options.uid, session);
    rpc.emit('session add', {
      rows: options.rows,
      cols: options.cols,
      uid: options.uid,
      splitDirection: options.splitDirection,
      shell: session.shell,
      pid: session.pty ? session.pty.pid : null,
      activeUid: options.activeUid ?? undefined,
      profile: options.profile
    });

    session.on('data', (data: string) => {
      rpc.emit('session data', data);
    });

    session.on('exit', () => {
      rpc.emit('session exit', {uid: options.uid});
      unsetRendererType(options.uid);
      sessions.delete(options.uid);
    });
  });

  rpc.on('exit', ({uid}) => {
    const session = sessions.get(uid);
    if (session) {
      session.exit();
    }
  });
  rpc.on('unmaximize', () => {
    window.unmaximize();
  });
  rpc.on('maximize', () => {
    window.maximize();
  });
  rpc.on('minimize', () => {
    window.minimize();
  });
  rpc.on('resize', ({uid, cols, rows}) => {
    const session = sessions.get(uid);
    if (session) {
      session.resize({cols, rows});
    }
  });
  rpc.on('data', ({uid, data, escaped}) => {
    const session = uid && sessions.get(uid);
    if (session) {
      if (escaped) {
        const escapedData = session.shell?.endsWith('cmd.exe')
          ? `"${data}"` // This is how cmd.exe does it
          : `'${data.replace(/'/g, `'\\''`)}'`; // Inside a single-quoted string nothing is interpreted

        session.write(escapedData);
      } else {
        session.write(data);
      }
    }
  });
  rpc.on('info renderer', ({uid, type}) => {
    // Used in the "About" dialog
    setRendererType(uid, type);
  });
  rpc.on('open external', ({url}) => {
    void shell.openExternal(url);
  });
  rpc.on('open context menu', (selection) => {
    const {createWindow} = app;
    Menu.buildFromTemplate(contextMenuTemplate(createWindow, selection)).popup({window});
  });
  rpc.on('open hamburger menu', ({x, y}) => {
    Menu.getApplicationMenu()!.popup({x: Math.ceil(x), y: Math.ceil(y)});
  });
  // Same deal as above, grabbing the window titlebar when the window
  // is maximized on Windows results in unmaximize, without hitting any
  // app buttons
  const onGeometryChange = () => rpc.emit('windowGeometry change', {isMaximized: window.isMaximized()});
  window.on('maximize', onGeometryChange);
  window.on('unmaximize', onGeometryChange);
  window.on('minimize', onGeometryChange);
  window.on('restore', onGeometryChange);

  window.on('move', () => {
    const position = window.getPosition();
    rpc.emit('move', {bounds: {x: position[0], y: position[1]}});
  });
  rpc.on('close', () => {
    window.close();
  });
  rpc.on('command', (command) => {
    const focusedWindow = BrowserWindow.getFocusedWindow();
    execCommand(command, focusedWindow!);
  });
  // pass on the full screen events from the window to react
  rpc.win.on('enter-full-screen', () => {
    rpc.emit('enter full screen');
  });
  rpc.win.on('leave-full-screen', () => {
    rpc.emit('leave full screen');
  });
  const deleteSessions = () => {
    sessions.forEach((session, key) => {
      session.removeAllListeners();
      session.destroy();
      sessions.delete(key);
    });
  };
  // we reset the rpc channel only upon
  // subsequent refreshes (ie: F5)
  let i = 0;
  window.webContents.on('did-navigate', () => {
    if (i++) {
      deleteSessions();
    }
  });

  const handleDroppedURL = (url: string) => {
    const protocol = typeof url === 'string' && new URL(url).protocol;
    if (protocol === 'file:') {
      const path = fileURLToPath(url);
      return {uid: null, data: path, escaped: true};
    } else if (protocol === 'http:' || protocol === 'https:') {
      return {uid: null, data: url};
    }
  };

  // If file is dropped onto the terminal window, navigate and new-window events are prevented
  // and it's path is added to active session.
  window.webContents.on('will-navigate', (event, url) => {
    const data = handleDroppedURL(url);
    if (data) {
      event.preventDefault();
      rpc.emit('session data send', data);
    }
  });
  window.webContents.setWindowOpenHandler(({url}) => {
    const data = handleDroppedURL(url);
    if (data) {
      rpc.emit('session data send', data);
      return {action: 'deny'};
    }
    return {action: 'allow'};
  });

  // expose internals to extension authors
  window.rpc = rpc;
  window.sessions = sessions;

  const load = () => {
    app.plugins.onWindow(window);
  };

  // load plugins
  load();

  const pluginsUnsubscribe = app.plugins.subscribe((err: any) => {
    if (!err) {
      load();
      window.webContents.send('plugins change');
      updateBackgroundColor();
    }
  });

  // Keep track of focus time of every window, to figure out
  // which one of the existing window is the last focused.
  // Works nicely even if a window is closed and removed.
  const updateFocusTime = () => {
    window.focusTime = process.uptime();
  };

  window.on('focus', () => {
    updateFocusTime();
  });

  // the window can be closed by the browser process itself
  window.clean = () => {
    app.config.winRecord(window);
    rpc.destroy();
    deleteSessions();
    cfgUnsubscribe();
    pluginsUnsubscribe();
  };
  // Ensure focusTime is set on window open. The focus event doesn't
  // fire from the dock (see bug #583)
  updateFocusTime();

  return window;
}


================================================
FILE: app/updater.ts
================================================
// Packages
import electron, {app} from 'electron';
import type {BrowserWindow, AutoUpdater} from 'electron';

import retry from 'async-retry';
import ms from 'ms';

// Utilities
import autoUpdaterLinux from './auto-updater-linux';
import {getDefaultProfile} from './config';
import {version} from './package.json';
import {getDecoratedConfig} from './plugins';

const {platform} = process;
const isLinux = platform === 'linux';

const autoUpdater: AutoUpdater = isLinux ? autoUpdaterLinux : electron.autoUpdater;

const getDecoratedConfigWithRetry = async () => {
  return await retry(() => {
    const content = getDecoratedConfig(getDefaultProfile());
    if (!content) {
      throw new Error('No config content loaded');
    }
    return content;
  });
};

const checkForUpdates = async () => {
  const config = await getDecoratedConfigWithRetry();
  if (!config.disableAutoUpdates) {
    autoUpdater.checkForUpdates();
  }
};

let isInit = false;
// Default to the "stable" update channel
let canaryUpdates = false;

const buildFeedUrl = (canary: boolean, currentVersion: string) => {
  const updatePrefix = canary ? 'releases-canary' : 'releases';
  const archSuffix = process.arch === 'arm64' || app.runningUnderARM64Translation ? '_arm64' : '';
  return `https://${updatePrefix}.hyper.is/update/${isLinux ? 'deb' : platform}${archSuffix}/${currentVersion}`;
};

const isCanary = (updateChannel: string) => updateChannel === 'canary';

async function init() {
  autoUpdater.on('error', (err) => {
    console.error('Error fetching updates', `${err.message} (${err.stack})`);
  });

  const config = await getDecoratedConfigWithRetry();

  // If defined in the config, switch to the "canary" channel
  if (config.updateChannel && isCanary(config.updateChannel)) {
    canaryUpdates = true;
  }

  const feedURL = buildFeedUrl(canaryUpdates, version);

  autoUpdater.setFeedURL({url: feedURL});

  setTimeout(() => {
    void checkForUpdates();
  }, ms('10s'));

  setInterval(() => {
    void checkForUpdates();
  }, ms('30m'));

  isInit = true;
}

const updater = (win: BrowserWindow) => {
  if (!isInit) {
    void init();
  }

  const {rpc} = win;

  const onupdate = (ev: Event, releaseNotes: string, releaseName: string, date: Date, updateUrl: string) => {
    const releaseUrl = updateUrl || `https://github.com/vercel/hyper/releases/tag/${releaseName}`;
    rpc.emit('update available', {releaseNotes, releaseName, releaseUrl, canInstall: !isLinux});
  };

  if (isLinux) {
    autoUpdater.on('update-available', onupdate);
  } else {
    autoUpdater.on('update-downloaded', onupdate);
  }

  rpc.once('quit and install', () => {
    autoUpdater.quitAndInstall();
  });

  app.config.subscribe(async () => {
    const {updateChannel} = await getDecoratedConfigWithRetry();
    const newUpdateIsCanary = isCanary(updateChannel);

    if (newUpdateIsCanary !== canaryUpdates) {
      const feedURL = buildFeedUrl(newUpdateIsCanary, version);

      autoUpdater.setFeedURL({url: feedURL});
      void checkForUpdates();

      canaryUpdates = newUpdateIsCanary;
    }
  });

  win.on('close', () => {
    if (isLinux) {
      autoUpdater.removeListener('update-available', onupdate);
    } else {
      autoUpdater.removeListener('update-downloaded', onupdate);
    }
  });
};

export default updater;


================================================
FILE: app/utils/cli-install.ts
================================================
import {existsSync, readlink, symlink} from 'fs';
import path from 'path';
import {promisify} from 'util';

import {clipboard, dialog} from 'electron';

import {mkdirpSync} from 'fs-extra';
import * as Registry from 'native-reg';
import type {ValueType} from 'native-reg';
import sudoPrompt from 'sudo-prompt';

import {cliScriptPath, cliLinkPath} from '../config/paths';
import notify from '../notify';

const readLink = promisify(readlink);
const symLink = promisify(symlink);
const sudoExec = promisify(sudoPrompt.exec);

const checkInstall = () => {
  return readLink(cliLinkPath)
    .then((link) => link === cliScriptPath)
    .catch((err) => {
      if (err.code === 'ENOENT') {
        return false;
      }
      throw err;
    });
};

const addSymlink = async (silent: boolean) => {
  try {
    const isInstalled = await checkInstall();
    if (isInstalled) {
      console.log('Hyper CLI already in PATH');
      return;
    }
    console.log('Linking HyperCLI');
    if (!existsSync(path.dirname(cliLinkPath))) {
      try {
        mkdirpSync(path.dirname(cliLinkPath));
      } catch (err) {
        throw `Failed to create directory ${path.dirname(cliLinkPath)} - ${err}`;
      }
    }
    await symLink(cliScriptPath, cliLinkPath);
  } catch (_err) {
    const err = _err as {code: string};
    // 'EINVAL' is returned by readlink,
    // 'EEXIST' is returned by symlink
    let error =
      err.code === 'EEXIST' || err.code === 'EINVAL'
        ? `File already exists: ${cliLinkPath}`
        : `Symlink creation failed: ${err.code}`;
    // Need sudo access to create symlink
    if (err.code === 'EACCES' && !silent) {
      const result = await dialog.showMessageBox({
        message: `You need to grant elevated privileges to add Hyper CLI to PATH
Or you can run
sudo ln -sf "${cliScriptPath}" "${cliLinkPath}"`,
        type: 'info',
        buttons: ['OK', 'Copy Command', 'Cancel']
      });
      if (result.response === 0) {
        try {
          await sudoExec(`ln -sf "${cliScriptPath}" "${cliLinkPath}"`, {name: 'Hyper'});
          return;
        } catch (_error) {
          error = (_error as any[])[0];
        }
      } else if (result.response === 1) {
        clipboard.writeText(`sudo ln -sf "${cliScriptPath}" "${cliLinkPath}"`);
      }
    }
    throw error;
  }
};

const addBinToUserPath = () => {
  return new Promise<void>((resolve, reject) => {
    try {
      const envKey = Registry.openKey(Registry.HKCU, 'Environment', Registry.Access.ALL_ACCESS)!;

      // C:\Users\<user>\AppData\Local\Programs\hyper\resources\bin
      const binPath = path.dirname(cliScriptPath);
      // C:\Users\<user>\AppData\Local\hyper
      const oldPath = path.resolve(process.env.LOCALAPPDATA!, 'hyper');

      const items = Registry.enumValueNames(envKey);
      const pathItem = items.find((item) => item.toUpperCase() === 'PATH');
      const pathItemName = pathItem || 'PATH';

      let newPathValue = binPath;
      let type: ValueType = Registry.ValueType.SZ;
      if (pathItem) {
        type = Registry.queryValueRaw(envKey, pathItem)!.type;
        if (type !== Registry.ValueType.SZ && type !== Registry.ValueType.EXPAND_SZ) {
          reject(`Registry key type is ${type}`);
          return;
        }
        const value = Registry.queryValue(envKey, pathItem) as string;
        let pathParts = value.split(';');
        const existingPath = pathParts.includes(binPath);
        const existingOldPath = pathParts.some((pathPart) => pathPart.startsWith(oldPath));
        if (existingPath && !existingOldPath) {
          console.log('Hyper CLI already in PATH');
          Registry.closeKey(envKey);
          resolve();
          return;
        }

        // Because nsis install path is different from squirrel we need to remove old path if present
        // and add current path if absent
        if (existingOldPath) pathParts = pathParts.filter((pathPart) => !pathPart.startsWith(oldPath));
        if (!pathParts.includes(binPath)) pathParts.push(binPath);
        newPathValue = pathParts.join(';');
      }
      console.log('Adding HyperCLI path (registry)');
      Registry.setValueRaw(envKey, pathItemName, type, Registry.formatString(newPathValue));
      Registry.closeKey(envKey);
      resolve();
    } catch (error) {
      reject(error);
    }
  });
};

const logNotify = (withNotification: boolean, title: string, body: string, details?: {error?: any}) => {
  console.log(title, body, details);
  withNotification && notify(title, body, details);
};

export const installCLI = async (withNotification: boolean) => {
  if (process.platform === 'win32') {
    try {
      await addBinToUserPath();
      logNotify(
        withNotification,
        'Hyper CLI installed',
        'You may need to restart your computer to complete this installation process.'
      );
    } catch (err) {
      logNotify(withNotification, 'Hyper CLI installation failed', `Failed to add Hyper CLI path to user PATH ${err}`);
    }
  } else if (process.platform === 'darwin' || process.platform === 'linux') {
    // AppImages are mounted on run at a temporary path, don't create symlink
    if (process.env['APPIMAGE']) {
      console.log('Skipping CLI symlink creation as it is an AppImage install');
      return;
    }
    try {
      await addSymlink(!withNotification);
      logNotify(withNotification, 'Hyper CLI installed', `Symlink created at ${cliLinkPath}`);
    } catch (error) {
      logNotify(withNotification, 'Hyper CLI installation failed', `${error}`);
    }
  } else {
    logNotify(withNotification, 'Hyper CLI installation failed', `Unsupported platform ${process.platform}`);
  }
};


================================================
FILE: app/utils/colors.ts
================================================
const colorList = [
  'black',
  'red',
  'green',
  'yellow',
  'blue',
  'magenta',
  'cyan',
  'white',
  'lightBlack',
  'lightRed',
  'lightGreen',
  'lightYellow',
  'lightBlue',
  'lightMagenta',
  'lightCyan',
  'lightWhite',
  'colorCubes',
  'grayscale'
];

export const getColorMap: {
  <T>(colors: T): T extends (infer U)[] ? {[k: string]: U} : T;
} = (colors) => {
  if (!Array.isArray(colors)) {
    return colors;
  }
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
  return colors.reduce((result, color, index) => {
    if (index < colorList.length) {
      result[colorList[index]] = color;
    }
    // eslint-disable-next-line @typescript-eslint/no-unsafe-return
    return result;
  }, {});
};


================================================
FILE: app/utils/map-keys.ts
================================================
const generatePrefixedCommand = (command: string, shortcuts: string[]) => {
  const result: Record<string, string[]> = {};
  const baseCmd = command.replace(/:prefix$/, '');
  for (let i = 1; i <= 9; i++) {
    // 9 is a special number because it means 'last'
    const index = i === 9 ? 'last' : i;
    const prefixedShortcuts = shortcuts.map((shortcut) => `${shortcut}+${i}`);
    result[`${baseCmd}:${index}`] = prefixedShortcuts;
  }

  return result;
};

const mapKeys = (config: Record<string, string[] | string>) => {
  return Object.keys(config).reduce((keymap: Record<string, string[]>, command: string) => {
    if (!command) {
      return keymap;
    }
    // We can have different keys for a same command.
    const _shortcuts = config[command];
    const shortcuts = Array.isArray(_shortcuts) ? _shortcuts : [_shortcuts];
    const fixedShortcuts: string[] = [];
    shortcuts.forEach((shortcut) => {
      let newShortcut = shortcut;
      if (newShortcut.indexOf('cmd') !== -1) {
        // Mousetrap use `command` and not `cmd`
        console.warn('Your config use deprecated `cmd` in key combination. Please use `command` instead.');
        newShortcut = newShortcut.replace('cmd', 'command');
      }
      fixedShortcuts.push(newShortcut);
    });

    if (command.endsWith(':prefix')) {
      return Object.assign(keymap, generatePrefixedCommand(command, fixedShortcuts));
    }

    keymap[command] = fixedShortcuts;

    return keymap;
  }, {});
};

export default mapKeys;


================================================
FILE: app/utils/renderer-utils.ts
================================================
const rendererTypes: Record<string, string> = {};

function getRendererTypes() {
  return rendererTypes;
}

function setRendererType(uid: string, type: string) {
  rendererTypes[uid] = type;
}

function unsetRendererType(uid: string) {
  delete rendererTypes[uid];
}

export {getRendererTypes, setRendererType, unsetRendererType};


================================================
FILE: app/utils/shell-fallback.ts
================================================
export const getFallBackShellConfig = (
  shell: string,
  shellArgs: string[],
  defaultShell: string,
  defaultShellArgs: string[]
): {
  shell: string;
  shellArgs: string[];
} | null => {
  if (shellArgs.length > 0) {
    return {
      shell,
      shellArgs: []
    };
  }

  if (shell != defaultShell) {
    return {
      shell: defaultShell,
      shellArgs: defaultShellArgs
    };
  }

  return null;
};


================================================
FILE: app/utils/system-context-menu.ts
================================================
import * as Registry from 'native-reg';
import type {HKEY} from 'native-reg';

const appPath = `"${process.execPath}"`;
const regKeys = [
  `Software\\Classes\\Directory\\Background\\shell\\Hyper`,
  `Software\\Classes\\Directory\\shell\\Hyper`,
  `Software\\Classes\\Drive\\shell\\Hyper`
];
const regParts = [
  {key: 'command', name: '', value: `${appPath} "%V"`},
  {name: '', value: 'Open &Hyper here'},
  {name: 'Icon', value: `${appPath}`}
];

function addValues(hyperKey: HKEY, commandKey: HKEY) {
  try {
    Registry.setValueSZ(hyperKey, regParts[1].name, regParts[1].value);
  } catch (error) {
    console.error(error);
  }
  try {
    Registry.setValueSZ(hyperKey, regParts[2].name, regParts[2].value);
  } catch (err) {
    console.error(err);
  }
  try {
    Registry.setValueSZ(commandKey, regParts[0].name, regParts[0].value);
  } catch (err_) {
    console.error(err_);
  }
}

export const add = () => {
  regKeys.forEach((regKey) => {
    try {
      const hyperKey =
        Registry.openKey(Registry.HKCU, regKey, Registry.Access.ALL_ACCESS) ||
        Registry.createKey(Registry.HKCU, regKey, Registry.Access.ALL_ACCESS);
      const commandKey =
        Registry.openKey(Registry.HKCU, `${regKey}\\${regParts[0].key}`, Registry.Access.ALL_ACCESS) ||
        Registry.createKey(Registry.HKCU, `${regKey}\\${regParts[0].key}`, Registry.Access.ALL_ACCESS);
      addValues(hyperKey, commandKey);
      Registry.closeKey(hyperKey);
      Registry.closeKey(commandKey);
    } catch (error) {
      console.error(error);
    }
  });
};

export const remove = () => {
  regKeys.forEach((regKey) => {
    try {
      Registry.deleteTree(Registry.HKCU, regKey);
    } catch (err) {
      console.error(err);
    }
  });
};


================================================
FILE: app/utils/to-electron-background-color.ts
================================================
// Packages
import Color from 'color';

// returns a background color that's in hex
// format including the alpha channel (e.g.: `#00000050`)
// input can be any css value (rgb, hsl, string…)
const toElectronBackgroundColor = (bgColor: string) => {
  const color = Color(bgColor);

  if (color.alpha() === 1) {
    return color.hex().toString();
  }

  // http://stackoverflow.com/a/11019879/1202488
  const alphaHex = Math.round(color.alpha() * 255).toString(16);
  return `#${alphaHex}${color.hex().toString().slice(1)}`;
};

export default toElectronBackgroundColor;


================================================
FILE: app/utils/window-utils.ts
================================================
import electron from 'electron';

export function positionIsValid(position: [number, number]) {
  const displays = electron.screen.getAllDisplays();
  const [x, y] = position;

  return displays.some(({workArea}) => {
    return x >= workArea.x && x <= workArea.x + workArea.width && y >= workArea.y && y <= workArea.y + workArea.height;
  });
}


================================================
FILE: ava-e2e.config.js
================================================
module.exports = {
  files: ['test/*'],
  extensions: ['ts'],
  require: ['ts-node/register/transpile-only'],
  timeout: '30s'
};


================================================
FILE: ava.config.js
================================================
module.exports = {
  files: ['test/unit/*'],
  extensions: ['ts'],
  require: ['ts-node/register/transpile-only']
};


================================================
FILE: babel.config.json
================================================
{
  "presets": [
    "@babel/react",
    "@babel/typescript"
  ],
  "plugins": [
    [
      "styled-jsx/babel",
      {
        "vendorPrefixes": false
      }
    ],
    "@babel/plugin-proposal-numeric-separator",
    "@babel/proposal-class-properties",
    "@babel/proposal-object-rest-spread",
    "@babel/plugin-proposal-optional-chaining"
  ]
}


================================================
FILE: bin/cp-snapshot.js
================================================
const path = require('path');
const fs = require('fs');
const {Arch} = require('electron-builder');

function copySnapshot(pathToElectron, archToCopy) {
  const snapshotFileName = 'snapshot_blob.bin';
  const v8ContextFileName = getV8ContextFileName(archToCopy);
  const pathToBlob = path.resolve(__dirname, '..', 'cache', archToCopy, snapshotFileName);
  const pathToBlobV8 = path.resolve(__dirname, '..', 'cache', archToCopy, v8ContextFileName);

  console.log('Copying v8 snapshots from', pathToBlob, 'to', pathToElectron);
  fs.copyFileSync(pathToBlob, path.join(pathToElectron, snapshotFileName));
  fs.copyFileSync(pathToBlobV8, path.join(pathToElectron, v8ContextFileName));
}

function getPathToElectron() {
  switch (process.platform) {
    case 'darwin':
      return path.resolve(
        __dirname,
        '..',
        'node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources'
      );
    case 'win32':
    case 'linux':
      return path.resolve(__dirname, '..', 'node_modules', 'electron', 'dist');
  }
}

function getV8ContextFileName(archToCopy) {
  if (process.platform === 'darwin') {
    return `v8_context_snapshot${archToCopy === 'arm64' ? '.arm64' : '.x86_64'}.bin`;
  } else {
    return `v8_context_snapshot.bin`;
  }
}

exports.default = async (context) => {
  const archToCopy = Arch[context.arch];
  const pathToElectron =
    process.platform === 'darwin'
      ? `${context.appOutDir}/Hyper.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources`
      : context.appOutDir;
  copySnapshot(pathToElectron, archToCopy);
};

if (require.main === module) {
  const archToCopy = process.env.npm_config_arch;
  const pathToElectron = getPathToElectron();
  if ((process.arch.startsWith('arm') ? 'arm64' : 'x64') === archToCopy) {
    copySnapshot(pathToElectron, archToCopy);
  }
}


================================================
FILE: bin/mk-snapshot.js
================================================
const childProcess = require('child_process');
const vm = require('vm');
const path = require('path');
const fs = require('fs');
const electronLink = require('electron-link');
const {mkdirp} = require('fs-extra');

const excludedModules = {};

const crossArchDirs = ['clang_x86_v8_arm', 'clang_x64_v8_arm64', 'win_clang_x64'];

async function main() {
  const baseDirPath = path.resolve(__dirname, '..');

  console.log('Creating a linked script..');
  const result = await electronLink({
    baseDirPath: baseDirPath,
    mainPath: `${__dirname}/snapshot-libs.js`,
    cachePath: `${baseDirPath}/cache`,
    // eslint-disable-next-line no-prototype-builtins
    shouldExcludeModule: (modulePath) => excludedModules.hasOwnProperty(modulePath)
  });

  const snapshotScriptPath = `${baseDirPath}/cache/snapshot-libs.js`;
  fs.writeFileSync(snapshotScriptPath, result.snapshotScript);

  // Verify if we will be able to use this in `mksnapshot`
  vm.runInNewContext(result.snapshotScript, undefined, {filename: snapshotScriptPath, displayErrors: true});

  const outputBlobPath = `${baseDirPath}/cache/${process.env.npm_config_arch}`;
  await mkdirp(outputBlobPath);

  if (process.platform !== 'darwin') {
    const mksnapshotBinPath = `${baseDirPath}/node_modules/electron-mksnapshot/bin`;
    const matchingDirs = crossArchDirs.map((dir) => `${mksnapshotBinPath}/${dir}`).filter((dir) => fs.existsSync(dir));
    for (const dir of matchingDirs) {
      if (fs.existsSync(`${mksnapshotBinPath}/gen/v8/embedded.S`)) {
        await mkdirp(`${dir}/gen/v8`);
        fs.copyFileSync(`${mksnapshotBinPath}/gen/v8/embedded.S`, `${dir}/gen/v8/embedded.S`);
      }
    }
  }

  console.log(`Generating startup blob in "${outputBlobPath}"`);
  childProcess.execFileSync(
    path.resolve(__dirname, '..', 'node_modules', '.bin', 'mksnapshot' + (process.platform === 'win32' ? '.cmd' : '')),
    [snapshotScriptPath, '--output_dir', outputBlobPath]
  );
}

main().catch((err) => console.error(err));


================================================
FILE: bin/notarize.js
================================================
const { notarize } = require("@electron/notarize");

exports.default = async function notarizing(context) {
  const { electronPlatformName, appOutDir } = context;
  if (electronPlatformName !== "darwin" || !process.env.APPLE_ID || !process.env.APPLE_PASSWORD) {
    return;
  }

  const appName = context.packager.appInfo.productFilename;
  return await notarize({
    appBundleId: "co.zeit.hyper",
    appPath: `${appOutDir}/${appName}.app`,
    appleId: process.env.APPLE_ID,
    appleIdPassword: process.env.APPLE_PASSWORD
  });
};


================================================
FILE: bin/rimraf-standalone.js
================================================
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }

var assert = _interopDefault(require('assert'));
var require$$0 = _interopDefault(require('path'));
var fs = _interopDefault(require('fs'));
var util = _interopDefault(require('util'));
var events = _interopDefault(require('events'));

// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

var pathModule = require$$0;
var isWindows$1 = process.platform === 'win32';
var fs$4 = fs;

// JavaScript implementation of realpath, ported from node pre-v6

var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);

function rethrow() {
  // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and
  // is fairly slow to generate.
  var callback;
  if (DEBUG) {
    var backtrace = new Error;
    callback = debugCallback;
  } else
    callback = missingCallback;

  return callback;

  function debugCallback(err) {
    if (err) {
      backtrace.message = err.message;
      err = backtrace;
      missingCallback(err);
    }
  }

  function missingCallback(err) {
    if (err) {
      if (process.throwDeprecation)
        throw err;  // Forgot a callback but don't know where? Use NODE_DEBUG=fs
      else if (!process.noDeprecation) {
        var msg = 'fs: missing callback ' + (err.stack || err.message);
        if (process.traceDeprecation)
          console.trace(msg);
        else
          console.error(msg);
      }
    }
  }
}

function maybeCallback(cb) {
  return typeof cb === 'function' ? cb : rethrow();
}

// Regexp that finds the next partion of a (partial) path
// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']
if (isWindows$1) {
  var nextPartRe = /(.*?)(?:[\/\\]+|$)/g;
} else {
  var nextPartRe = /(.*?)(?:[\/]+|$)/g;
}

// Regex to find the device root, including trailing slash. E.g. 'c:\\'.
if (isWindows$1) {
  var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;
} else {
  var splitRootRe = /^[\/]*/;
}

var realpathSync$1 = function realpathSync(p, cache) {
  // make p is absolute
  p = pathModule.resolve(p);

  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
    return cache[p];
  }

  var original = p,
      seenLinks = {},
      knownHard = {};

  // current character position in p
  var pos;
  // the partial path so far, including a trailing slash if any
  var current;
  // the partial path without a trailing slash (except when pointing at a root)
  var base;
  // the partial path scanned in the previous round, with slash
  var previous;

  start();

  function start() {
    // Skip over roots
    var m = splitRootRe.exec(p);
    pos = m[0].length;
    current = m[0];
    base = m[0];
    previous = '';

    // On windows, check that the root exists. On unix there is no need.
    if (isWindows$1 && !knownHard[base]) {
      fs$4.lstatSync(base);
      knownHard[base] = true;
    }
  }

  // walk down the path, swapping out linked pathparts for their real
  // values
  // NB: p.length changes.
  while (pos < p.length) {
    // find the next part
    nextPartRe.lastIndex = pos;
    var result = nextPartRe.exec(p);
    previous = current;
    current += result[0];
    base = previous + result[1];
    pos = nextPartRe.lastIndex;

    // continue if not a symlink
    if (knownHard[base] || (cache && cache[base] === base)) {
      continue;
    }

    var resolvedLink;
    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
      // some known symbolic link.  no need to stat again.
      resolvedLink = cache[base];
    } else {
      var stat = fs$4.lstatSync(base);
      if (!stat.isSymbolicLink()) {
        knownHard[base] = true;
        if (cache) cache[base] = base;
        continue;
      }

      // read the link if it wasn't read before
      // dev/ino always return 0 on windows, so skip the check.
      var linkTarget = null;
      if (!isWindows$1) {
        var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
        if (seenLinks.hasOwnProperty(id)) {
          linkTarget = seenLinks[id];
        }
      }
      if (linkTarget === null) {
        fs$4.statSync(base);
        linkTarget = fs$4.readlinkSync(base);
      }
      resolvedLink = pathModule.resolve(previous, linkTarget);
      // track this, if given a cache.
      if (cache) cache[base] = resolvedLink;
      if (!isWindows$1) seenLinks[id] = linkTarget;
    }

    // resolve the link, then start over
    p = pathModule.resolve(resolvedLink, p.slice(pos));
    start();
  }

  if (cache) cache[original] = p;

  return p;
};


var realpath$1 = function realpath(p, cache, cb) {
  if (typeof cb !== 'function') {
    cb = maybeCallback(cache);
    cache = null;
  }

  // make p is absolute
  p = pathModule.resolve(p);

  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
    return process.nextTick(cb.bind(null, null, cache[p]));
  }

  var original = p,
      seenLinks = {},
      knownHard = {};

  // current character position in p
  var pos;
  // the partial path so far, including a trailing slash if any
  var current;
  // the partial path without a trailing slash (except when pointing at a root)
  var base;
  // the partial path scanned in the previous round, with slash
  var previous;

  start();

  function start() {
    // Skip over roots
    var m = splitRootRe.exec(p);
    pos = m[0].length;
    current = m[0];
    base = m[0];
    previous = '';

    // On windows, check that the root exists. On unix there is no need.
    if (isWindows$1 && !knownHard[base]) {
      fs$4.lstat(base, function(err) {
        if (err) return cb(err);
        knownHard[base] = true;
        LOOP();
      });
    } else {
      process.nextTick(LOOP);
    }
  }

  // walk down the path, swapping out linked pathparts for their real
  // values
  function LOOP() {
    // stop if scanned past end of path
    if (pos >= p.length) {
      if (cache) cache[original] = p;
      return cb(null, p);
    }

    // find the next part
    nextPartRe.lastIndex = pos;
    var result = nextPartRe.exec(p);
    previous = current;
    current += result[0];
    base = previous + result[1];
    pos = nextPartRe.lastIndex;

    // continue if not a symlink
    if (knownHard[base] || (cache && cache[base] === base)) {
      return process.nextTick(LOOP);
    }

    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
      // known symbolic link.  no need to stat again.
      return gotResolvedLink(cache[base]);
    }

    return fs$4.lstat(base, gotStat);
  }

  function gotStat(err, stat) {
    if (err) return cb(err);

    // if not a symlink, skip to the next path part
    if (!stat.isSymbolicLink()) {
      knownHard[base] = true;
      if (cache) cache[base] = base;
      return process.nextTick(LOOP);
    }

    // stat & read the link if not read before
    // call gotTarget as soon as the link target is known
    // dev/ino always return 0 on windows, so skip the check.
    if (!isWindows$1) {
      var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
      if (seenLinks.hasOwnProperty(id)) {
        return gotTarget(null, seenLinks[id], base);
      }
    }
    fs$4.stat(base, function(err) {
      if (err) return cb(err);

      fs$4.readlink(base, function(err, target) {
        if (!isWindows$1) seenLinks[id] = target;
        gotTarget(err, target);
      });
    });
  }

  function gotTarget(err, target, base) {
    if (err) return cb(err);

    var resolvedLink = pathModule.resolve(previous, target);
    if (cache) cache[base] = resolvedLink;
    gotResolvedLink(resolvedLink);
  }

  function gotResolvedLink(resolvedLink) {
    // resolve the link, then start over
    p = pathModule.resolve(resolvedLink, p.slice(pos));
    start();
  }
};

var old$1 = {
	realpathSync: realpathSync$1,
	realpath: realpath$1
};

var index = realpath;
realpath.realpath = realpath;
realpath.sync = realpathSync;
realpath.realpathSync = realpathSync;
realpath.monkeypatch = monkeypatch;
realpath.unmonkeypatch = unmonkeypatch;

var fs$3 = fs;
var origRealpath = fs$3.realpath;
var origRealpathSync = fs$3.realpathSync;

var version = process.version;
var ok = /^v[0-5]\./.test(version);
var old = old$1;

function newError (er) {
  return er && er.syscall === 'realpath' && (
    er.code === 'ELOOP' ||
    er.code === 'ENOMEM' ||
    er.code === 'ENAMETOOLONG'
  )
}

function realpath (p, cache, cb) {
  if (ok) {
    return origRealpath(p, cache, cb)
  }

  if (typeof cache === 'function') {
    cb = cache;
    cache = null;
  }
  origRealpath(p, cache, function (er, result) {
    if (newError(er)) {
      old.realpath(p, cache, cb);
    } else {
      cb(er, result);
    }
  });
}

function realpathSync (p, cache) {
  if (ok) {
    return origRealpathSync(p, cache)
  }

  try {
    return origRealpathSync(p, cache)
  } catch (er) {
    if (newError(er)) {
      return old.realpathSync(p, cache)
    } else {
      throw er
    }
  }
}

function monkeypatch () {
  fs$3.realpath = realpath;
  fs$3.realpathSync = realpathSync;
}

function unmonkeypatch () {
  fs$3.realpath = origRealpath;
  fs$3.realpathSync = origRealpathSync;
}

var index$4 = function (xs, fn) {
    var res = [];
    for (var i = 0; i < xs.length; i++) {
        var x = fn(xs[i], i);
        if (isArray(x)) res.push.apply(res, x);
        else res.push(x);
    }
    return res;
};

var isArray = Array.isArray || function (xs) {
    return Object.prototype.toString.call(xs) === '[object Array]';
};

var index$6 = balanced$1;
function balanced$1(a, b, str) {
  if (a instanceof RegExp) a = maybeMatch(a, str);
  if (b instanceof RegExp) b = maybeMatch(b, str);

  var r = range(a, b, str);

  return r && {
    start: r[0],
    end: r[1],
    pre: str.slice(0, r[0]),
    body: str.slice(r[0] + a.length, r[1]),
    post: str.slice(r[1] + b.length)
  };
}

function maybeMatch(reg, str) {
  var m = str.match(reg);
  return m ? m[0] : null;
}

balanced$1.range = range;
function range(a, b, str) {
  var begs, beg, left, right, result;
  var ai = str.indexOf(a);
  var bi = str.indexOf(b, ai + 1);
  var i = ai;

  if (ai >= 0 && bi > 0) {
    begs = [];
    left = str.length;

    while (i >= 0 && !result) {
      if (i == ai) {
        begs.push(i);
        ai = str.indexOf(a, i + 1);
      } else if (begs.length == 1) {
        result = [ begs.pop(), bi ];
      } else {
        beg = begs.pop();
        if (beg < left) {
          left = beg;
          right = bi;
        }

        bi = str.indexOf(b, i + 1);
      }

      i = ai < bi && ai >= 0 ? ai : bi;
    }

    if (begs.length) {
      result = [ left, right ];
    }
  }

  return result;
}

var concatMap = index$4;
var balanced = index$6;

var index$2 = expandTop;

var escSlash = '\0SLASH'+Math.random()+'\0';
var escOpen = '\0OPEN'+Math.random()+'\0';
var escClose = '\0CLOSE'+Math.random()+'\0';
var escComma = '\0COMMA'+Math.random()+'\0';
var escPeriod = '\0PERIOD'+Math.random()+'\0';

function numeric(str) {
  return parseInt(str, 10) == str
    ? parseInt(str, 10)
    : str.charCodeAt(0);
}

function escapeBraces(str) {
  return str.split('\\\\').join(escSlash)
            .split('\\{').join(escOpen)
            .split('\\}').join(escClose)
            .split('\\,').join(escComma)
            .split('\\.').join(escPeriod);
}

function unescapeBraces(str) {
  return str.split(escSlash).join('\\')
            .split(escOpen).join('{')
            .split(escClose).join('}')
            .split(escComma).join(',')
            .split(escPeriod).join('.');
}


// Basically just str.split(","), but handling cases
// where we have nested braced sections, which should be
// treated as individual members, like {a,{b,c},d}
function parseCommaParts(str) {
  if (!str)
    return [''];

  var parts = [];
  var m = balanced('{', '}', str);

  if (!m)
    return str.split(',');

  var pre = m.pre;
  var body = m.body;
  var post = m.post;
  var p = pre.split(',');

  p[p.length-1] += '{' + body + '}';
  var postParts = parseCommaParts(post);
  if (post.length) {
    p[p.length-1] += postParts.shift();
    p.push.apply(p, postParts);
  }

  parts.push.apply(parts, p);

  return parts;
}

function expandTop(str) {
  if (!str)
    return [];

  // I don't know why Bash 4.3 does this, but it does.
  // Anything starting with {} will have the first two bytes preserved
  // but *only* at the top level, so {},a}b will not expand to anything,
  // but a{},b}c will be expanded to [a}c,abc].
  // One could argue that this is a bug in Bash, but since the goal of
  // this module is to match Bash's rules, we escape a leading {}
  if (str.substr(0, 2) === '{}') {
    str = '\\{\\}' + str.substr(2);
  }

  return expand$1(escapeBraces(str), true).map(unescapeBraces);
}

function embrace(str) {
  return '{' + str + '}';
}
function isPadded(el) {
  return /^-?0\d/.test(el);
}

function lte(i, y) {
  return i <= y;
}
function gte(i, y) {
  return i >= y;
}

function expand$1(str, isTop) {
  var expansions = [];

  var m = balanced('{', '}', str);
  if (!m || /\$$/.test(m.pre)) return [str];

  var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
  var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
  var isSequence = isNumericSequence || isAlphaSequence;
  var isOptions = /^(.*,)+(.+)?$/.test(m.body);
  if (!isSequence && !isOptions) {
    // {a},b}
    if (m.post.match(/,.*\}/)) {
      str = m.pre + '{' + m.body + escClose + m.post;
      return expand$1(str);
    }
    return [str];
  }

  var n;
  if (isSequence) {
    n = m.body.split(/\.\./);
  } else {
    n = parseCommaParts(m.body);
    if (n.length === 1) {
      // x{{a,b}}y ==> x{a}y x{b}y
      n = expand$1(n[0], false).map(embrace);
      if (n.length === 1) {
        var post = m.post.length
          ? expand$1(m.post, false)
          : [''];
        return post.map(function(p) {
          return m.pre + n[0] + p;
        });
      }
    }
  }

  // at this point, n is the parts, and we know it's not a comma set
  // with a single entry.

  // no need to expand pre, since it is guaranteed to be free of brace-sets
  var pre = m.pre;
  var post = m.post.length
    ? expand$1(m.post, false)
    : [''];

  var N;

  if (isSequence) {
    var x = numeric(n[0]);
    var y = numeric(n[1]);
    var width = Math.max(n[0].length, n[1].length);
    var incr = n.length == 3
      ? Math.abs(numeric(n[2]))
      : 1;
    var test = lte;
    var reverse = y < x;
    if (reverse) {
      incr *= -1;
      test = gte;
    }
    var pad = n.some(isPadded);

    N = [];

    for (var i = x; test(i, y); i += incr) {
      var c;
      if (isAlphaSequence) {
        c = String.fromCharCode(i);
        if (c === '\\')
          c = '';
      } else {
        c = String(i);
        if (pad) {
          var need = width - c.length;
          if (need > 0) {
            var z = new Array(need + 1).join('0');
            if (i < 0)
              c = '-' + z + c.slice(1);
            else
              c = z + c;
          }
        }
      }
      N.push(c);
    }
  } else {
    N = concatMap(n, function(el) { return expand$1(el, false) });
  }

  for (var j = 0; j < N.length; j++) {
    for (var k = 0; k < post.length; k++) {
      var expansion = pre + N[j] + post[k];
      if (!isTop || isSequence || expansion)
        expansions.push(expansion);
    }
  }

  return expansions;
}

var minimatch_1 = minimatch$1;
minimatch$1.Minimatch = Minimatch$1;

var path$2 = { sep: '/' };
try {
  path$2 = require$$0;
} catch (er) {}

var GLOBSTAR = minimatch$1.GLOBSTAR = Minimatch$1.GLOBSTAR = {};
var expand = index$2;

var plTypes = {
  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},
  '?': { open: '(?:', close: ')?' },
  '+': { open: '(?:', close: ')+' },
  '*': { open: '(?:', close: ')*' },
  '@': { open: '(?:', close: ')' }
};

// any single thing other than /
// don't need to escape / when using new RegExp()
var qmark = '[^/]';

// * => any number of characters
var star = qmark + '*?';

// ** when dots are allowed.  Anything goes, except .. and .
// not (^ or / followed by one or two dots followed by $ or /),
// followed by anything, any number of times.
var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?';

// not a ^ or / followed by a dot,
// followed by anything, any number of times.
var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?';

// characters that need to be escaped in RegExp.
var reSpecials = charSet('().*{}+?[]^$\\!');

// "abc" -> { a:true, b:true, c:true }
function charSet (s) {
  return s.split('').reduce(function (set, c) {
    set[c] = true;
    return set
  }, {})
}

// normalizes slashes.
var slashSplit = /\/+/;

minimatch$1.filter = filter;
function filter (pattern, options) {
  options = options || {};
  return function (p, i, list) {
    return minimatch$1(p, pattern, options)
  }
}

function ext (a, b) {
  a = a || {};
  b = b || {};
  var t = {};
  Object.keys(b).forEach(function (k) {
    t[k] = b[k];
  });
  Object.keys(a).forEach(function (k) {
    t[k] = a[k];
  });
  return t
}

minimatch$1.defaults = function (def) {
  if (!def || !Object.keys(def).length) return minimatch$1

  var orig = minimatch$1;

  var m = function minimatch (p, pattern, options) {
    return orig.minimatch(p, pattern, ext(def, options))
  };

  m.Minimatch = function Minimatch (pattern, options) {
    return new orig.Minimatch(pattern, ext(def, options))
  };

  return m
};

Minimatch$1.defaults = function (def) {
  if (!def || !Object.keys(def).length) return Minimatch$1
  return minimatch$1.defaults(def).Minimatch
};

function minimatch$1 (p, pattern, options) {
  if (typeof pattern !== 'string') {
    throw new TypeError('glob pattern string required')
  }

  if (!options) options = {};

  // shortcut: comments match nothing.
  if (!options.nocomment && pattern.charAt(0) === '#') {
    return false
  }

  // "" only matches ""
  if (pattern.trim() === '') return p === ''

  return new Minimatch$1(pattern, options).match(p)
}

function Minimatch$1 (pattern, options) {
  if (!(this instanceof Minimatch$1)) {
    return new Minimatch$1(pattern, options)
  }

  if (typeof pattern !== 'string') {
    throw new TypeError('glob pattern string required')
  }

  if (!options) options = {};
  pattern = pattern.trim();

  // windows support: need to use /, not \
  if (path$2.sep !== '/') {
    pattern = pattern.split(path$2.sep).join('/');
  }

  this.options = options;
  this.set = [];
  this.pattern = pattern;
  this.regexp = null;
  this.negate = false;
  this.comment = false;
  this.empty = false;

  // make the set of regexps etc.
  this.make();
}

Minimatch$1.prototype.debug = function () {};

Minimatch$1.prototype.make = make;
function make () {
  // don't do it more than once.
  if (this._made) return

  var pattern = this.pattern;
  var options = this.options;

  // empty patterns and comments match nothing.
  if (!options.nocomment && pattern.charAt(0) === '#') {
    this.comment = true;
    return
  }
  if (!pattern) {
    this.empty = true;
    return
  }

  // step 1: figure out negation, etc.
  this.parseNegate();

  // step 2: expand braces
  var set = this.globSet = this.braceExpand();

  if (options.debug) this.debug = console.error;

  this.debug(this.pattern, set);

  // step 3: now we have a set, so turn each one into a series of path-portion
  // matching patterns.
  // These will be regexps, except in the case of "**", which is
  // set to the GLOBSTAR object for globstar behavior,
  // and will not contain any / characters
  set = this.globParts = set.map(function (s) {
    return s.split(slashSplit)
  });

  this.debug(this.pattern, set);

  // glob --> regexps
  set = set.map(function (s, si, set) {
    return s.map(this.parse, this)
  }, this);

  this.debug(this.pattern, set);

  // filter out everything that didn't compile properly.
  set = set.filter(function (s) {
    return s.indexOf(false) === -1
  });

  this.debug(this.pattern, set);

  this.set = set;
}

Minimatch$1.prototype.parseNegate = parseNegate;
function parseNegate () {
  var pattern = this.pattern;
  var negate = false;
  var options = this.options;
  var negateOffset = 0;

  if (options.nonegate) return

  for (var i = 0, l = pattern.length
    ; i < l && pattern.charAt(i) === '!'
    ; i++) {
    negate = !negate;
    negateOffset++;
  }

  if (negateOffset) this.pattern = pattern.substr(negateOffset);
  this.negate = negate;
}

// Brace expansion:
// a{b,c}d -> abd acd
// a{b,}c -> abc ac
// a{0..3}d -> a0d a1d a2d a3d
// a{b,c{d,e}f}g -> abg acdfg acefg
// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
//
// Invalid sets are not expanded.
// a{2..}b -> a{2..}b
// a{b}c -> a{b}c
minimatch$1.braceExpand = function (pattern, options) {
  return braceExpand(pattern, options)
};

Minimatch$1.prototype.braceExpand = braceExpand;

function braceExpand (pattern, options) {
  if (!options) {
    if (this instanceof Minimatch$1) {
      options = this.options;
    } else {
      options = {};
    }
  }

  pattern = typeof pattern === 'undefined'
    ? this.pattern : pattern;

  if (typeof pattern === 'undefined') {
    throw new TypeError('undefined pattern')
  }

  if (options.nobrace ||
    !pattern.match(/\{.*\}/)) {
    // shortcut. no need to expand.
    return [pattern]
  }

  return expand(pattern)
}

// parse a component of the expanded set.
// At this point, no pattern may contain "/" in it
// so we're going to return a 2d array, where each entry is the full
// pattern, split on '/', and then turned into a regular expression.
// A regexp is made at the end which joins each array with an
// escaped /, and another full one which joins each regexp with |.
//
// Following the lead of Bash 4.1, note that "**" only has special meaning
// when it is the *only* thing in a path portion.  Otherwise, any series
// of * is equivalent to a single *.  Globstar behavior is enabled by
// default, and can be disabled by setting options.noglobstar.
Minimatch$1.prototype.parse = parse;
var SUBPARSE = {};
function parse (pattern, isSub) {
  if (pattern.length > 1024 * 64) {
    throw new TypeError('pattern is too long')
  }

  var options = this.options;

  // shortcuts
  if (!options.noglobstar && pattern === '**') return GLOBSTAR
  if (pattern === '') return ''

  var re = '';
  var hasMagic = !!options.nocase;
  var escaping = false;
  // ? => one single character
  var patternListStack = [];
  var negativeLists = [];
  var stateChar;
  var inClass = false;
  var reClassStart = -1;
  var classStart = -1;
  // . and .. never match anything that doesn't start with .,
  // even when options.dot is set.
  var patternStart = pattern.charAt(0) === '.' ? '' // anything
  // not (start or / followed by . or .. followed by / or end)
  : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
  : '(?!\\.)';
  var self = this;

  function clearStateChar () {
    if (stateChar) {
      // we had some state-tracking character
      // that wasn't consumed by this pass.
      switch (stateChar) {
        case '*':
          re += star;
          hasMagic = true;
        break
        case '?':
          re += qmark;
          hasMagic = true;
        break
        default:
          re += '\\' + stateChar;
        break
      }
      self.debug('clearStateChar %j %j', stateChar, re);
      stateChar = false;
    }
  }

  for (var i = 0, len = pattern.length, c
    ; (i < len) && (c = pattern.charAt(i))
    ; i++) {
    this.debug('%s\t%s %s %j', pattern, i, re, c);

    // skip over any that are escaped.
    if (escaping && reSpecials[c]) {
      re += '\\' + c;
      escaping = false;
      continue
    }

    switch (c) {
      case '/':
        // completely not allowed, even escaped.
        // Should already be path-split by now.
        return false

      case '\\':
        clearStateChar();
        escaping = true;
      continue

      // the various stateChar values
      // for the "extglob" stuff.
      case '?':
      case '*':
      case '+':
      case '@':
      case '!':
        this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c);

        // all of those are literals inside a class, except that
        // the glob [!a] means [^a] in regexp
        if (inClass) {
          this.debug('  in class');
          if (c === '!' && i === classStart + 1) c = '^';
          re += c;
          continue
        }

        // if we already have a stateChar, then it means
        // that there was something like ** or +? in there.
        // Handle the stateChar, then proceed with this one.
        self.debug('call clearStateChar %j', stateChar);
        clearStateChar();
        stateChar = c;
        // if extglob is disabled, then +(asdf|foo) isn't a thing.
        // just clear the statechar *now*, rather than even diving into
        // the patternList stuff.
        if (options.noext) clearStateChar();
      continue

      case '(':
        if (inClass) {
          re += '(';
          continue
        }

        if (!stateChar) {
          re += '\\(';
          continue
        }

        patternListStack.push({
          type: stateChar,
          start: i - 1,
          reStart: re.length,
          open: plTypes[stateChar].open,
          close: plTypes[stateChar].close
        });
        // negation is (?:(?!js)[^/]*)
        re += stateChar === '!' ? '(?:(?!(?:' : '(?:';
        this.debug('plType %j %j', stateChar, re);
        stateChar = false;
      continue

      case ')':
        if (inClass || !patternListStack.length) {
          re += '\\)';
          continue
        }

        clearStateChar();
        hasMagic = true;
        var pl = patternListStack.pop();
        // negation is (?:(?!js)[^/]*)
        // The others are (?:<pattern>)<type>
        re += pl.close;
        if (pl.type === '!') {
          negativeLists.push(pl);
        }
        pl.reEnd = re.length;
      continue

      case '|':
        if (inClass || !patternListStack.length || escaping) {
          re += '\\|';
          escaping = false;
          continue
        }

        clearStateChar();
        re += '|';
      continue

      // these are mostly the same in regexp and glob
      case '[':
        // swallow any state-tracking char before the [
        clearStateChar();

        if (inClass) {
          re += '\\' + c;
          continue
        }

        inClass = true;
        classStart = i;
        reClassStart = re.length;
        re += c;
      continue

      case ']':
        //  a right bracket shall lose its special
        //  meaning and represent itself in
        //  a bracket expression if it occurs
        //  first in the list.  -- POSIX.2 2.8.3.2
        if (i === classStart + 1 || !inClass) {
          re += '\\' + c;
          escaping = false;
          continue
        }

        // handle the case where we left a class open.
        // "[z-a]" is valid, equivalent to "\[z-a\]"
        if (inClass) {
          // split where the last [ was, make sure we don't have
          // an invalid re. if so, re-walk the contents of the
          // would-be class to re-translate any characters that
          // were passed through as-is
          // TODO: It would probably be faster to determine this
          // without a try/catch and a new RegExp, but it's tricky
          // to do safely.  For now, this is safe and works.
          var cs = pattern.substring(classStart + 1, i);
          try {
            RegExp('[' + cs + ']');
          } catch (er) {
            // not a valid class!
            var sp = this.parse(cs, SUBPARSE);
            re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]';
            hasMagic = hasMagic || sp[1];
            inClass = false;
            continue
          }
        }

        // finish up the class.
        hasMagic = true;
        inClass = false;
        re += c;
      continue

      default:
        // swallow any state char that wasn't consumed
        clearStateChar();

        if (escaping) {
          // no need
          escaping = false;
        } else if (reSpecials[c]
          && !(c === '^' && inClass)) {
          re += '\\';
        }

        re += c;

    } // switch
  } // for

  // handle the case where we left a class open.
  // "[abc" is valid, equivalent to "\[abc"
  if (inClass) {
    // split where the last [ was, and escape it
    // this is a huge pita.  We now have to re-walk
    // the contents of the would-be class to re-translate
    // any characters that were passed through as-is
    cs = pattern.substr(classStart + 1);
    sp = this.parse(cs, SUBPARSE);
    re = re.substr(0, reClassStart) + '\\[' + sp[0];
    hasMagic = hasMagic || sp[1];
  }

  // handle the case where we had a +( thing at the *end*
  // of the pattern.
  // each pattern list stack adds 3 chars, and we need to go through
  // and escape any | chars that were passed through as-is for the regexp.
  // Go through and escape them, taking care not to double-escape any
  // | chars that were already escaped.
  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
    var tail = re.slice(pl.reStart + pl.open.length);
    this.debug('setting tail', re, pl);
    // maybe some even number of \, then maybe 1 \, followed by a |
    tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) {
      if (!$2) {
        // the | isn't already escaped, so escape it.
        $2 = '\\';
      }

      // need to escape all those slashes *again*, without escaping the
      // one that we need for escaping the | character.  As it works out,
      // escaping an even number of slashes can be done by simply repeating
      // it exactly after itself.  That's why this trick works.
      //
      // I am sorry that you have to see this.
      return $1 + $1 + $2 + '|'
    });

    this.debug('tail=%j\n   %s', tail, tail, pl, re);
    var t = pl.type === '*' ? star
      : pl.type === '?' ? qmark
      : '\\' + pl.type;

    hasMagic = true;
    re = re.slice(0, pl.reStart) + t + '\\(' + tail;
  }

  // handle trailing things that only matter at the very end.
  clearStateChar();
  if (escaping) {
    // trailing \\
    re += '\\\\';
  }

  // only need to apply the nodot start if the re starts with
  // something that could conceivably capture a dot
  var addPatternStart = false;
  switch (re.charAt(0)) {
    case '.':
    case '[':
    case '(': addPatternStart = true;
  }

  // Hack to work around lack of negative lookbehind in JS
  // A pattern like: *.!(x).!(y|z) needs to ensure that a name
  // like 'a.xyz.yz' doesn't match.  So, the first negative
  // lookahead, has to look ALL the way ahead, to the end of
  // the pattern.
  for (var n = negativeLists.length - 1; n > -1; n--) {
    var nl = negativeLists[n];

    var nlBefore = re.slice(0, nl.reStart);
    var nlFirst = re.slice(nl.reStart, nl.reEnd - 8);
    var nlLast = re.slice(nl.reEnd - 8, nl.reEnd);
    var nlAfter = re.slice(nl.reEnd);

    nlLast += nlAfter;

    // Handle nested stuff like *(*.js|!(*.json)), where open parens
    // mean that we should *not* include the ) in the bit that is considered
    // "after" the negated section.
    var openParensBefore = nlBefore.split('(').length - 1;
    var cleanAfter = nlAfter;
    for (i = 0; i < openParensBefore; i++) {
      cleanAfter = cleanAfter.replace(/\)[+*?]?/, '');
    }
    nlAfter = cleanAfter;

    var dollar = '';
    if (nlAfter === '' && isSub !== SUBPARSE) {
      dollar = '$';
    }
    var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast;
    re = newRe;
  }

  // if the re is not "" at this point, then we need to make sure
  // it doesn't match against an empty path part.
  // Otherwise a/* will match a/, which it should not.
  if (re !== '' && hasMagic) {
    re = '(?=.)' + re;
  }

  if (addPatternStart) {
    re = patternStart + re;
  }

  // parsing just a piece of a larger pattern.
  if (isSub === SUBPARSE) {
    return [re, hasMagic]
  }

  // skip the regexp for non-magical patterns
  // unescape anything in it, though, so that it'll be
  // an exact match against a file etc.
  if (!hasMagic) {
    return globUnescape(pattern)
  }

  var flags = options.nocase ? 'i' : '';
  try {
    var regExp = new RegExp('^' + re + '$', flags);
  } catch (er) {
    // If it was an invalid regular expression, then it can't match
    // anything.  This trick looks for a character after the end of
    // the string, which is of course impossible, except in multi-line
    // mode, but it's not a /m regex.
    return new RegExp('$.')
  }

  regExp._glob = pattern;
  regExp._src = re;

  return regExp
}

minimatch$1.makeRe = function (pattern, options) {
  return new Minimatch$1(pattern, options || {}).makeRe()
};

Minimatch$1.prototype.makeRe = makeRe;
function makeRe () {
  if (this.regexp || this.regexp === false) return this.regexp

  // at this point, this.set is a
Download .txt
gitextract_sxduwfdj/

├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── codeql-analysis.yml
│       ├── e2e_comment.yml
│       └── nodejs.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   └── pre-push
├── .vscode/
│   └── launch.json
├── .yarnrc
├── LICENSE
├── PLUGINS.md
├── README.md
├── app/
│   ├── .yarnrc
│   ├── auto-updater-linux.ts
│   ├── commands.ts
│   ├── config/
│   │   ├── config-default.json
│   │   ├── import.ts
│   │   ├── init.ts
│   │   ├── migrate.ts
│   │   ├── open.ts
│   │   ├── paths.ts
│   │   └── windows.ts
│   ├── config.ts
│   ├── index.html
│   ├── index.ts
│   ├── keymaps/
│   │   ├── darwin.json
│   │   ├── linux.json
│   │   └── win32.json
│   ├── menus/
│   │   ├── menu.ts
│   │   └── menus/
│   │       ├── darwin.ts
│   │       ├── edit.ts
│   │       ├── help.ts
│   │       ├── shell.ts
│   │       ├── tools.ts
│   │       ├── view.ts
│   │       └── window.ts
│   ├── notifications.ts
│   ├── notify.ts
│   ├── package.json
│   ├── patches/
│   │   └── node-pty+1.0.0.patch
│   ├── plugins.ts
│   ├── rpc.ts
│   ├── session.ts
│   ├── tsconfig.json
│   ├── ui/
│   │   ├── contextmenu.ts
│   │   └── window.ts
│   ├── updater.ts
│   └── utils/
│       ├── cli-install.ts
│       ├── colors.ts
│       ├── map-keys.ts
│       ├── renderer-utils.ts
│       ├── shell-fallback.ts
│       ├── system-context-menu.ts
│       ├── to-electron-background-color.ts
│       └── window-utils.ts
├── ava-e2e.config.js
├── ava.config.js
├── babel.config.json
├── bin/
│   ├── cp-snapshot.js
│   ├── mk-snapshot.js
│   ├── notarize.js
│   ├── rimraf-standalone.js
│   ├── snapshot-libs.js
│   └── yarn-standalone.js
├── build/
│   ├── canary.icns
│   ├── icon.fig
│   ├── icon.icns
│   ├── linux/
│   │   ├── after-install.tpl
│   │   └── hyper
│   ├── mac/
│   │   ├── entitlements.plist
│   │   └── hyper
│   └── win/
│       ├── hyper
│       ├── hyper.cmd
│       └── installer.nsh
├── cli/
│   ├── api.ts
│   └── index.ts
├── electron-builder-linux-ci.json
├── electron-builder.json
├── lib/
│   ├── actions/
│   │   ├── config.ts
│   │   ├── header.ts
│   │   ├── index.ts
│   │   ├── notifications.ts
│   │   ├── sessions.ts
│   │   ├── term-groups.ts
│   │   ├── ui.ts
│   │   └── updater.ts
│   ├── command-registry.ts
│   ├── components/
│   │   ├── header.tsx
│   │   ├── new-tab.tsx
│   │   ├── notification.tsx
│   │   ├── notifications.tsx
│   │   ├── searchBox.tsx
│   │   ├── split-pane.tsx
│   │   ├── style-sheet.tsx
│   │   ├── tab.tsx
│   │   ├── tabs.tsx
│   │   ├── term-group.tsx
│   │   ├── term.tsx
│   │   └── terms.tsx
│   ├── containers/
│   │   ├── header.ts
│   │   ├── hyper.tsx
│   │   ├── notifications.ts
│   │   └── terms.ts
│   ├── index.tsx
│   ├── reducers/
│   │   ├── index.ts
│   │   ├── sessions.ts
│   │   ├── term-groups.ts
│   │   └── ui.ts
│   ├── rpc.ts
│   ├── selectors.ts
│   ├── store/
│   │   ├── configure-store.dev.ts
│   │   ├── configure-store.prod.ts
│   │   ├── configure-store.ts
│   │   └── write-middleware.ts
│   ├── terms.ts
│   ├── utils/
│   │   ├── config.ts
│   │   ├── effects.ts
│   │   ├── file.ts
│   │   ├── ipc-child-process.ts
│   │   ├── ipc.ts
│   │   ├── notify.ts
│   │   ├── object.ts
│   │   ├── paste.ts
│   │   ├── plugins.ts
│   │   ├── rpc.ts
│   │   └── term-groups.ts
│   └── v8-snapshot-util.ts
├── package.json
├── release.js
├── test/
│   ├── index.ts
│   ├── testUtils/
│   │   └── is-hex-color.ts
│   └── unit/
│       ├── cli-api.test.ts
│       ├── to-electron-background-color.test.ts
│       └── window-utils.test.ts
├── tsconfig.base.json
├── tsconfig.eslint.json
├── tsconfig.json
├── typings/
│   ├── common.d.ts
│   ├── config.d.ts
│   ├── constants/
│   │   ├── config.d.ts
│   │   ├── index.d.ts
│   │   ├── notifications.d.ts
│   │   ├── sessions.d.ts
│   │   ├── tabs.d.ts
│   │   ├── term-groups.d.ts
│   │   ├── ui.d.ts
│   │   └── updater.d.ts
│   ├── ext-modules.d.ts
│   ├── extend-electron.d.ts
│   └── hyper.d.ts
└── webpack.config.ts
Download .txt
Showing preview only (385K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5094 symbols across 68 files)

FILE: app/auto-updater-linux.ts
  class AutoUpdater (line 5) | class AutoUpdater extends EventEmitter implements Electron.AutoUpdater {
    method quitAndInstall (line 7) | quitAndInstall() {
    method getFeedURL (line 10) | getFeedURL() {
    method setFeedURL (line 14) | setFeedURL(options: Electron.FeedURLOptions) {
    method checkForUpdates (line 18) | checkForUpdates() {
    method emitError (line 42) | emitError(error: string | Error) {

FILE: app/config/migrate.ts
  function removeElements (line 16) | function removeElements(node: namedTypes.ArrayExpression): namedTypes.Ar...
  function removeProperties (line 37) | function removeProperties(node: namedTypes.ObjectExpression): namedTypes...
  function configToPlugin (line 63) | function configToPlugin(code: string): string {

FILE: app/config/windows.ts
  function get (line 13) | function get() {
  function recordState (line 18) | function recordState(win: BrowserWindow) {

FILE: app/index.ts
  function installDevExtensions (line 77) | async function installDevExtensions(isDev_: boolean) {
  function createWindow (line 95) | function createWindow(
  method click (line 184) | click() {
  function GetWindow (line 220) | function GetWindow(callback: (win: BrowserWindow) => void) {

FILE: app/menus/menus/darwin.ts
  method click (line 16) | click() {
  method click (line 26) | click() {

FILE: app/menus/menus/edit.ts
  method click (line 40) | click(item, focusedWindow) {
  method click (line 53) | click(item, focusedWindow) {
  method click (line 60) | click(item, focusedWindow) {
  method click (line 67) | click(item, focusedWindow) {
  method click (line 74) | click(item, focusedWindow) {
  method click (line 86) | click(item, focusedWindow) {
  method click (line 93) | click(item, focusedWindow) {
  method click (line 100) | click(item, focusedWindow) {
  method click (line 107) | click(item, focusedWindow) {
  method click (line 119) | click(item, focusedWindow) {
  method click (line 126) | click(item, focusedWindow) {
  method click (line 138) | click() {

FILE: app/menus/menus/help.ts
  method click (line 15) | click() {
  method click (line 21) | click(menuItem, focusedWindow) {
  method click (line 102) | click() {

FILE: app/menus/menus/shell.ts
  method click (line 16) | click(item, focusedWindow) {
  method click (line 23) | click(item, focusedWindow) {
  method click (line 33) | click(item, focusedWindow) {
  method click (line 40) | click(item, focusedWindow) {
  method click (line 54) | click(item, focusedWindow) {
  method click (line 61) | click(item, focusedWindow) {
  method click (line 71) | click(item, focusedWindow) {
  method click (line 78) | click(item, focusedWindow) {
  method click (line 91) | click(item, focusedWindow) {

FILE: app/menus/menus/tools.ts
  method click (line 13) | click() {
  method click (line 19) | click() {
  method click (line 30) | click() {
  method click (line 36) | click() {

FILE: app/menus/menus/view.ts
  method click (line 13) | click(item, focusedWindow) {
  method click (line 20) | click(item, focusedWindow) {
  method click (line 37) | click(item, focusedWindow) {
  method click (line 44) | click(item, focusedWindow) {
  method click (line 51) | click(item, focusedWindow) {

FILE: app/notifications.ts
  constant NEWS_URL (line 8) | const NEWS_URL = 'https://hyper-news.now.sh';
  function fetchNotifications (line 10) | function fetchNotifications(win: BrowserWindow) {

FILE: app/notify.ts
  function notify (line 5) | function notify(title: string, body = '', details: {error?: any} = {}) {

FILE: app/plugins.ts
  function getId (line 41) | function getId(plugins_: any) {
  function patchModuleLoad (line 64) | function patchModuleLoad() {
  function checkDeprecatedExtendKeymaps (line 94) | function checkDeprecatedExtendKeymaps() {
  function updatePlugins (line 105) | function updatePlugins({force = false} = {}) {
  function getPluginVersions (line 153) | function getPluginVersions() {
  function clearCache (line 166) | function clearCache() {
  function syncPackageJSON (line 207) | function syncPackageJSON() {
  function alert (line 228) | function alert(message: string) {
  function toDependencies (line 235) | function toDependencies(plugins_: {plugins: string[]}) {
  function getPaths (line 262) | function getPaths() {
  function requirePlugins (line 281) | function requirePlugins(): any[] {
  function decorateEntity (line 368) | function decorateEntity(base: any, key: string, type: 'object' | 'functi...
  function decorateObject (line 390) | function decorateObject<T>(base: T, key: string): T {
  function decorateClass (line 394) | function decorateClass(base: any, key: string) {

FILE: app/rpc.ts
  class Server (line 10) | class Server {
    method constructor (line 16) | constructor(win: BrowserWindow) {
    method wc (line 38) | get wc() {
    method emit (line 57) | emit<U extends keyof RendererEvents>(ch: U, data?: RendererEvents[U]) {
    method destroy (line 67) | destroy() {

FILE: app/session.ts
  constant BATCH_DURATION_MS (line 32) | const BATCH_DURATION_MS = 16;
  constant BATCH_MAX_SIZE (line 36) | const BATCH_MAX_SIZE = 200 * 1024;
  class DataBatcher (line 43) | class DataBatcher extends EventEmitter {
    method constructor (line 48) | constructor(uid: string) {
    method reset (line 56) | reset() {
    method write (line 61) | write(chunk: Buffer | string) {
    method flush (line 78) | flush() {
  type SessionOptions (line 87) | interface SessionOptions {
  class Session (line 96) | class Session extends EventEmitter {
    method constructor (line 103) | constructor(options: SessionOptions) {
    method init (line 113) | init({uid, rows, cols, cwd, shell: _shell, shellArgs: _shellArgs, prof...
    method exit (line 224) | exit() {
    method write (line 228) | write(data: string) {
    method resize (line 236) | resize({cols, rows}: {cols: number; rows: number}) {
    method destroy (line 249) | destroy() {

FILE: app/ui/window.ts
  function newWindow (line 29) | function newWindow(

FILE: app/updater.ts
  function init (line 48) | async function init() {

FILE: app/utils/renderer-utils.ts
  function getRendererTypes (line 3) | function getRendererTypes() {
  function setRendererType (line 7) | function setRendererType(uid: string, type: string) {
  function unsetRendererType (line 11) | function unsetRendererType(uid: string) {

FILE: app/utils/system-context-menu.ts
  function addValues (line 16) | function addValues(hyperKey: HKEY, commandKey: HKEY) {

FILE: app/utils/window-utils.ts
  function positionIsValid (line 3) | function positionIsValid(position: [number, number]) {

FILE: bin/cp-snapshot.js
  function copySnapshot (line 5) | function copySnapshot(pathToElectron, archToCopy) {
  function getPathToElectron (line 16) | function getPathToElectron() {
  function getV8ContextFileName (line 30) | function getV8ContextFileName(archToCopy) {

FILE: bin/mk-snapshot.js
  function main (line 12) | async function main() {

FILE: bin/rimraf-standalone.js
  function _interopDefault (line 1) | function _interopDefault (ex) { return (ex && (typeof ex === 'object') &...
  function rethrow (line 38) | function rethrow() {
  function maybeCallback (line 73) | function maybeCallback(cb) {
  function start (line 115) | function start() {
  function start (line 217) | function start() {
  function LOOP (line 239) | function LOOP() {
  function gotStat (line 267) | function gotStat(err, stat) {
  function gotTarget (line 296) | function gotTarget(err, target, base) {
  function gotResolvedLink (line 304) | function gotResolvedLink(resolvedLink) {
  function newError (line 331) | function newError (er) {
  function realpath (line 339) | function realpath (p, cache, cb) {
  function realpathSync (line 357) | function realpathSync (p, cache) {
  function monkeypatch (line 373) | function monkeypatch () {
  function unmonkeypatch (line 378) | function unmonkeypatch () {
  function balanced$1 (line 398) | function balanced$1(a, b, str) {
  function maybeMatch (line 413) | function maybeMatch(reg, str) {
  function range (line 419) | function range(a, b, str) {
  function numeric (line 467) | function numeric(str) {
  function escapeBraces (line 473) | function escapeBraces(str) {
  function unescapeBraces (line 481) | function unescapeBraces(str) {
  function parseCommaParts (line 493) | function parseCommaParts(str) {
  function expandTop (line 520) | function expandTop(str) {
  function embrace (line 537) | function embrace(str) {
  function isPadded (line 540) | function isPadded(el) {
  function lte (line 544) | function lte(i, y) {
  function gte (line 547) | function gte(i, y) {
  function expand$1 (line 551) | function expand$1(str, isTop) {
  function charSet (line 692) | function charSet (s) {
  function filter (line 703) | function filter (pattern, options) {
  function ext (line 710) | function ext (a, b) {
  function minimatch$1 (line 744) | function minimatch$1 (p, pattern, options) {
  function Minimatch$1 (line 762) | function Minimatch$1 (pattern, options) {
  function make (line 794) | function make () {
  function parseNegate (line 850) | function parseNegate () {
  function braceExpand (line 885) | function braceExpand (pattern, options) {
  function parse (line 923) | function parse (pattern, isSub) {
  function makeRe (line 1294) | function makeRe () {
  function match (line 1352) | function match (f, partial) {
  function globUnescape (line 1569) | function globUnescape (s) {
  function regExpEscape (line 1573) | function regExpEscape (s) {
  function createCommonjsModule (line 1577) | function createCommonjsModule(fn, module) {
  function posix (line 1617) | function posix(path) {
  function win32 (line 1621) | function win32(path) {
  function ownProp$2 (line 1649) | function ownProp$2 (obj, field) {
  function alphasorti$2 (line 1658) | function alphasorti$2 (a, b) {
  function alphasort$2 (line 1662) | function alphasort$2 (a, b) {
  function setupIgnores (line 1666) | function setupIgnores (self, options) {
  function ignoreMap (line 1678) | function ignoreMap (pattern) {
  function setopts$2 (line 1691) | function setopts$2 (self, pattern, options) {
  function finish (line 1760) | function finish (self) {
  function mark (line 1817) | function mark (self, p) {
  function makeAbs (line 1841) | function makeAbs (self, f) {
  function isIgnored$2 (line 1862) | function isIgnored$2 (self, path) {
  function childrenIgnored$2 (line 1871) | function childrenIgnored$2 (self, path) {
  function globSync$1 (line 1907) | function globSync$1 (pattern, options) {
  function GlobSync$1 (line 1915) | function GlobSync$1 (pattern, options) {
  function wrappy$1 (line 2380) | function wrappy$1 (fn, cb) {
  function once$2 (line 2428) | function once$2 (fn) {
  function onceStrict (line 2438) | function onceStrict (fn) {
  function inflight$1 (line 2459) | function inflight$1 (key, cb) {
  function makeres (line 2469) | function makeres (key) {
  function slice (line 2500) | function slice (args) {
  function glob$1 (line 2568) | function glob$1 (pattern, options, cb) {
  function extend (line 2587) | function extend (origin, add) {
  function Glob (line 2623) | function Glob (pattern, options, cb) {
  function next (line 2719) | function next () {
  function lstatcb_ (line 3013) | function lstatcb_ (er, lstat) {
  function readdirCb (line 3055) | function readdirCb (self, abs, cb) {
  function lstatcb_ (line 3258) | function lstatcb_ (er, lstat) {
  function defaults (line 3315) | function defaults (options) {
  function rimraf$1 (line 3339) | function rimraf$1 (p, options, cb) {
  function rimraf_ (line 3423) | function rimraf_ (p, options, cb) {
  function fixWinEPERM (line 3457) | function fixWinEPERM (p, options, er, cb) {
  function fixWinEPERMSync (line 3479) | function fixWinEPERMSync (p, options, er) {
  function rmdir (line 3509) | function rmdir (p, options, originalEr, cb) {
  function rmkids (line 3529) | function rmkids(p, options, cb) {
  function rimrafSync (line 3557) | function rimrafSync (p, options) {
  function rmdirSync (line 3615) | function rmdirSync (p, options, originalEr) {
  function rmkidsSync (line 3633) | function rmkidsSync (p, options) {
  function go (line 3699) | function go (n) {

FILE: bin/yarn-standalone.js
  function __webpack_require__ (line 8) | function __webpack_require__(moduleId) {
  function __extends (line 124) | function __extends(d, b) {
  function __rest (line 141) | function __rest(s, e) {
  function __decorate (line 151) | function __decorate(decorators, target, key, desc) {
  function __param (line 158) | function __param(paramIndex, decorator) {
  function __metadata (line 162) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 166) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 175) | function __generator(thisArg, body) {
  function __exportStar (line 203) | function __exportStar(m, exports) {
  function __values (line 207) | function __values(o) {
  function __read (line 218) | function __read(o, n) {
  function __spread (line 235) | function __spread() {
  function __await (line 241) | function __await(v) {
  function __asyncGenerator (line 245) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 257) | function __asyncDelegator(o) {
  function __asyncValues (line 263) | function __asyncValues(o) {
  function __makeTemplateObject (line 271) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 276) | function __importStar(mod) {
  function __importDefault (line 284) | function __importDefault(mod) {
  function _interopRequireDefault (line 302) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function step (line 308) | function step(key, arg) {
  function _load_asyncToGenerator (line 353) | function _load_asyncToGenerator() {
  function onDone (line 546) | function onDone() {
  function onDone (line 838) | function onDone() {
  function _load_fs (line 1395) | function _load_fs() {
  function _load_glob (line 1401) | function _load_glob() {
  function _load_os (line 1407) | function _load_os() {
  function _load_path (line 1413) | function _load_path() {
  function _load_blockingQueue (line 1419) | function _load_blockingQueue() {
  function _load_promise (line 1425) | function _load_promise() {
  function _load_promise2 (line 1431) | function _load_promise2() {
  function _load_map (line 1437) | function _load_map() {
  function _load_fsNormalized (line 1443) | function _load_fsNormalized() {
  function _interopRequireWildcard (line 1447) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 1449) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function copy (line 1488) | function copy(src, dest, reporter) {
  function _readFile (line 1492) | function _readFile(loc, encoding) {
  function readFile (line 1504) | function readFile(loc) {
  function readFileRaw (line 1508) | function readFileRaw(loc) {
  function normalizeOS (line 1512) | function normalizeOS(body) {
  class MessageError (line 1535) | class MessageError extends Error {
    method constructor (line 1536) | constructor(msg, code) {
  class ProcessSpawnError (line 1544) | class ProcessSpawnError extends MessageError {
    method constructor (line 1545) | constructor(msg, code, process) {
  class SecurityError (line 1553) | class SecurityError extends MessageError {}
  class ProcessTermError (line 1556) | class ProcessTermError extends MessageError {}
  class ResponseError (line 1559) | class ResponseError extends Error {
    method constructor (line 1560) | constructor(msg, responseCode) {
  class OneTimePasswordError (line 1568) | class OneTimePasswordError extends Error {}
  function Subscriber (line 1595) | function Subscriber(destinationOrNext, error, complete) {
  function SafeSubscriber (line 1688) | function SafeSubscriber(_parentSubscriber, observerOrNext, error, comple...
  function getPreferredCacheDirectories (line 1881) | function getPreferredCacheDirectories() {
  function getYarnBinPath (line 1904) | function getYarnBinPath() {
  function getPathKey (line 1936) | function getPathKey(platform, env) {
  function compileStyleAliases (line 2049) | function compileStyleAliases(map) {
  function Type (line 2063) | function Type(tag, options) {
  function Observable (line 2115) | function Observable(subscribe) {
  function getPromiseCtor (line 2214) | function getPromiseCtor(promiseCtor) {
  function OuterSubscriber (line 2239) | function OuterSubscriber() {
  function subscribeToResult (line 2268) | function subscribeToResult(outerSubscriber, result, outerValue, outerInd...
  function _capitalize (line 2384) | function _capitalize(str) {
  function _toss (line 2388) | function _toss(name, expected, oper, arg, actual) {
  function _getClass (line 2398) | function _getClass(arg) {
  function noop (line 2402) | function noop() {
  function _setExports (line 2465) | function _setExports(ndebug) {
  function sortAlpha (line 2615) | function sortAlpha(a, b) {
  function sortOptionsByFlags (line 2628) | function sortOptionsByFlags(a, b) {
  function entries (line 2634) | function entries(obj) {
  function removePrefix (line 2644) | function removePrefix(pattern, prefix) {
  function removeSuffix (line 2652) | function removeSuffix(pattern, suffix) {
  function addSuffix (line 2660) | function addSuffix(pattern, suffix) {
  function hyphenate (line 2668) | function hyphenate(str) {
  function camelCase (line 2674) | function camelCase(str) {
  function compareSortedArrays (line 2682) | function compareSortedArrays(array1, array2) {
  function sleep (line 2694) | function sleep(ms) {
  function _load_asyncToGenerator (line 2714) | function _load_asyncToGenerator() {
  function _load_parse (line 2720) | function _load_parse() {
  function _load_stringify (line 2733) | function _load_stringify() {
  function _load_misc (line 2748) | function _load_misc() {
  function _load_normalizePattern (line 2754) | function _load_normalizePattern() {
  function _load_parse2 (line 2760) | function _load_parse2() {
  function _load_constants (line 2766) | function _load_constants() {
  function _load_fs (line 2772) | function _load_fs() {
  function _interopRequireWildcard (line 2776) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 2778) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function getName (line 2785) | function getName(pattern) {
  function blankObjectUndefined (line 2789) | function blankObjectUndefined(obj) {
  function keyForRemote (line 2793) | function keyForRemote(remote) {
  function serializeIntegrity (line 2797) | function serializeIntegrity(integrity) {
  function implodeEntry (line 2803) | function implodeEntry(pattern, obj) {
  function explodeEntry (line 2823) | function explodeEntry(pattern, obj) {
  class Lockfile (line 2837) | class Lockfile {
    method constructor (line 2838) | constructor({ cache, source, parseResultType } = {}) {
    method hasEntriesExistWithoutIntegrity (line 2848) | hasEntriesExistWithoutIntegrity() {
    method fromDirectory (line 2863) | static fromDirectory(dir, reporter) {
    method getLocked (line 2898) | getLocked(pattern) {
    method removePattern (line 2916) | removePattern(pattern) {
    method getLockfile (line 2924) | getLockfile(patterns) {
  function _interopRequireDefault (line 3023) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function parse (line 3290) | function parse(version, loose) {
  function valid (line 3312) | function valid(version, loose) {
  function clean (line 3319) | function clean(version, loose) {
  function SemVer (line 3326) | function SemVer(version, loose) {
  function inc (line 3539) | function inc(version, release, loose, identifier) {
  function diff (line 3553) | function diff(version1, version2) {
  function compareIdentifiers (line 3582) | function compareIdentifiers(a, b) {
  function rcompareIdentifiers (line 3599) | function rcompareIdentifiers(a, b) {
  function major (line 3604) | function major(a, loose) {
  function minor (line 3609) | function minor(a, loose) {
  function patch (line 3614) | function patch(a, loose) {
  function compare (line 3619) | function compare(a, b, loose) {
  function compareLoose (line 3624) | function compareLoose(a, b) {
  function rcompare (line 3629) | function rcompare(a, b, loose) {
  function sort (line 3634) | function sort(list, loose) {
  function rsort (line 3641) | function rsort(list, loose) {
  function gt (line 3648) | function gt(a, b, loose) {
  function lt (line 3653) | function lt(a, b, loose) {
  function eq (line 3658) | function eq(a, b, loose) {
  function neq (line 3663) | function neq(a, b, loose) {
  function gte (line 3668) | function gte(a, b, loose) {
  function lte (line 3673) | function lte(a, b, loose) {
  function cmp (line 3678) | function cmp(a, op, b, loose) {
  function Comparator (line 3703) | function Comparator(comp, loose) {
  function Range (line 3802) | function Range(range, loose) {
  function toComparators (line 3906) | function toComparators(range, loose) {
  function parseComparator (line 3917) | function parseComparator(comp, loose) {
  function isX (line 3930) | function isX(id) {
  function replaceTildes (line 3940) | function replaceTildes(comp, loose) {
  function replaceTilde (line 3946) | function replaceTilde(comp, loose) {
  function replaceCarets (line 3981) | function replaceCarets(comp, loose) {
  function replaceCaret (line 3987) | function replaceCaret(comp, loose) {
  function replaceXRanges (line 4036) | function replaceXRanges(comp, loose) {
  function replaceXRange (line 4043) | function replaceXRange(comp, loose) {
  function replaceStars (line 4109) | function replaceStars(comp, loose) {
  function hyphenReplace (line 4120) | function hyphenReplace($0,
  function testSet (line 4163) | function testSet(set, version) {
  function satisfies (line 4197) | function satisfies(version, range, loose) {
  function maxSatisfying (line 4207) | function maxSatisfying(versions, range, loose) {
  function minSatisfying (line 4227) | function minSatisfying(versions, range, loose) {
  function validRange (line 4247) | function validRange(range, loose) {
  function ltr (line 4259) | function ltr(version, range, loose) {
  function gtr (line 4265) | function gtr(version, range, loose) {
  function outside (line 4270) | function outside(version, range, hilo, loose) {
  function prerelease (line 4340) | function prerelease(version, loose) {
  function intersects (line 4346) | function intersects(r1, r2, loose) {
  function coerce (line 4353) | function coerce(version) {
  function Subscription (line 4401) | function Subscription(unsubscribe) {
  function flattenUnsubscriptionErrors (line 4521) | function flattenUnsubscriptionErrors(errors) {
  function isCompatible (line 4566) | function isCompatible(obj, klass, needVer) {
  function assertCompatible (line 4591) | function assertCompatible(obj, klass, needVer, name) {
  function opensslKeyDeriv (line 4624) | function opensslKeyDeriv(cipher, salt, passphrase, count) {
  function countZeros (line 4656) | function countZeros(buf) {
  function bufferSplit (line 4671) | function bufferSplit(buf, chr) {
  function ecNormalize (line 4699) | function ecNormalize(buf, addZero) {
  function readBitString (line 4725) | function readBitString(der, tag) {
  function writeBitString (line 4734) | function writeBitString(der, buf, tag) {
  function mpNormalize (line 4743) | function mpNormalize(buf) {
  function mpDenormalize (line 4756) | function mpDenormalize(buf) {
  function zeroPadToLength (line 4763) | function zeroPadToLength(buf, len) {
  function bigintToMpBuf (line 4779) | function bigintToMpBuf(bigint) {
  function calculateDSAPublic (line 4785) | function calculateDSAPublic(g, p, x) {
  function calculateED25519Public (line 4803) | function calculateED25519Public(k) {
  function calculateX25519Public (line 4813) | function calculateX25519Public(k) {
  function addRSAMissing (line 4823) | function addRSAMissing(key) {
  function publicFromPrivateECDSA (line 4854) | function publicFromPrivateECDSA(curveName, priv) {
  function opensshCipherInfo (line 4880) | function opensshCipherInfo(cipher) {
  function Key (line 4961) | function Key(opts) {
  function nullify (line 5220) | function nullify(obj = {}) {
  function applyOptions (line 5274) | function applyOptions(obj, options) {
  function Chalk (line 5283) | function Chalk(options) {
  method get (line 5315) | get() {
  method get (line 5323) | get() {
  method get (line 5335) | get() {
  method get (line 5358) | get() {
  function build (line 5375) | function build(_styles, _empty, key) {
  function applyStyle (line 5415) | function applyStyle() {
  function chalkTag (line 5462) | function chalkTag(chalk, strings) {
  function PrivateKey (line 5715) | function PrivateKey(opts) {
  function _load_extends (line 5942) | function _load_extends() {
  function _load_asyncToGenerator (line 5948) | function _load_asyncToGenerator() {
  function _load_objectPath (line 6037) | function _load_objectPath() {
  function _load_hooks (line 6043) | function _load_hooks() {
  function _load_index (line 6049) | function _load_index() {
  function _load_errors (line 6055) | function _load_errors() {
  function _load_integrityChecker (line 6061) | function _load_integrityChecker() {
  function _load_lockfile (line 6067) | function _load_lockfile() {
  function _load_lockfile2 (line 6073) | function _load_lockfile2() {
  function _load_packageFetcher (line 6079) | function _load_packageFetcher() {
  function _load_packageInstallScripts (line 6085) | function _load_packageInstallScripts() {
  function _load_packageCompatibility (line 6091) | function _load_packageCompatibility() {
  function _load_packageResolver (line 6097) | function _load_packageResolver() {
  function _load_packageLinker (line 6103) | function _load_packageLinker() {
  function _load_index2 (line 6109) | function _load_index2() {
  function _load_index3 (line 6115) | function _load_index3() {
  function _load_autoclean (line 6121) | function _load_autoclean() {
  function _load_constants (line 6127) | function _load_constants() {
  function _load_normalizePattern (line 6133) | function _load_normalizePattern() {
  function _load_fs (line 6139) | function _load_fs() {
  function _load_map (line 6145) | function _load_map() {
  function _load_yarnVersion (line 6151) | function _load_yarnVersion() {
  function _load_generatePnpMap (line 6157) | function _load_generatePnpMap() {
  function _load_workspaceLayout (line 6163) | function _load_workspaceLayout() {
  function _load_resolutionMap (line 6169) | function _load_resolutionMap() {
  function _load_guessName (line 6175) | function _load_guessName() {
  function _load_audit (line 6181) | function _load_audit() {
  function _interopRequireWildcard (line 6185) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 6187) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function getUpdateCommand (line 6204) | function getUpdateCommand(installationMethod) {
  function getUpdateInstaller (line 6240) | function getUpdateInstaller(installationMethod) {
  function normalizeFlags (line 6249) | function normalizeFlags(config, rawFlags) {
  class Install (line 6306) | class Install {
    method constructor (line 6307) | constructor(flags, config, reporter, lockfile) {
    method fetchRequestFromCwd (line 6326) | fetchRequestFromCwd(excludePatterns = [], ignoreUnusedPatterns = false) {
    method prepareRequests (line 6625) | prepareRequests(requests) {
    method preparePatterns (line 6629) | preparePatterns(patterns) {
    method preparePatternsForLinking (line 6632) | preparePatternsForLinking(patterns, cwdManifest, cwdIsRoot) {
    method prepareManifests (line 6636) | prepareManifests() {
    method bailout (line 6645) | bailout(patterns, workspaceLayout) {
    method createEmptyManifestFolders (line 6707) | createEmptyManifestFolders() {
    method markIgnored (line 6740) | markIgnored(patterns) {
    method getFlattenedDeps (line 6769) | getFlattenedDeps() {
    method init (line 6792) | init() {
    method checkCompatibility (line 7013) | checkCompatibility() {
    method persistChanges (line 7025) | persistChanges() {
    method applyChanges (line 7038) | applyChanges(manifests) {
    method shouldClean (line 7069) | shouldClean() {
    method flatten (line 7077) | flatten(patterns) {
    method pruneOfflineMirror (line 7198) | pruneOfflineMirror(lockfile) {
    method saveLockfileAndIntegrity (line 7248) | saveLockfileAndIntegrity(patterns, workspaceLayout) {
    method _logSuccessSaveLockfile (line 7320) | _logSuccessSaveLockfile() {
    method hydrate (line 7327) | hydrate(ignoreUnusedPatterns) {
    method checkUpdate (line 7394) | checkUpdate() {
    method _checkUpdate (line 7421) | _checkUpdate() {
    method maybeOutputUpdate (line 7463) | maybeOutputUpdate() {}
  function hasWrapper (line 7467) | function hasWrapper(commander, args) {
  function setFlags (line 7471) | function setFlags(commander) {
  function SubjectSubscriber (line 7520) | function SubjectSubscriber(destination) {
  function Subject (line 7530) | function Subject() {
  function AnonymousSubject (line 7631) | function AnonymousSubject(destination, source) {
  function normalizePattern (line 7686) | function normalizePattern(pattern) {
  function apply (line 8193) | function apply(func, thisArg, args) {
  function arrayAggregator (line 8213) | function arrayAggregator(array, setter, iteratee, accumulator) {
  function arrayEach (line 8233) | function arrayEach(array, iteratee) {
  function arrayEachRight (line 8254) | function arrayEachRight(array, iteratee) {
  function arrayEvery (line 8275) | function arrayEvery(array, predicate) {
  function arrayFilter (line 8296) | function arrayFilter(array, predicate) {
  function arrayIncludes (line 8320) | function arrayIncludes(array, value) {
  function arrayIncludesWith (line 8334) | function arrayIncludesWith(array, value, comparator) {
  function arrayMap (line 8355) | function arrayMap(array, iteratee) {
  function arrayPush (line 8374) | function arrayPush(array, values) {
  function arrayReduce (line 8397) | function arrayReduce(array, iteratee, accumulator, initAccum) {
  function arrayReduceRight (line 8422) | function arrayReduceRight(array, iteratee, accumulator, initAccum) {
  function arraySome (line 8443) | function arraySome(array, predicate) {
  function asciiToArray (line 8471) | function asciiToArray(string) {
  function asciiWords (line 8482) | function asciiWords(string) {
  function baseFindKey (line 8497) | function baseFindKey(collection, predicate, eachFunc) {
  function baseFindIndex (line 8519) | function baseFindIndex(array, predicate, fromIndex, fromRight) {
  function baseIndexOf (line 8540) | function baseIndexOf(array, value, fromIndex) {
  function baseIndexOfWith (line 8556) | function baseIndexOfWith(array, value, fromIndex, comparator) {
  function baseIsNaN (line 8575) | function baseIsNaN(value) {
  function baseMean (line 8588) | function baseMean(array, iteratee) {
  function baseProperty (line 8600) | function baseProperty(key) {
  function basePropertyOf (line 8613) | function basePropertyOf(object) {
  function baseReduce (line 8632) | function baseReduce(collection, iteratee, accumulator, initAccum, eachFu...
  function baseSortBy (line 8651) | function baseSortBy(array, comparer) {
  function baseSum (line 8670) | function baseSum(array, iteratee) {
  function baseTimes (line 8693) | function baseTimes(n, iteratee) {
  function baseToPairs (line 8712) | function baseToPairs(object, props) {
  function baseUnary (line 8725) | function baseUnary(func) {
  function baseValues (line 8741) | function baseValues(object, props) {
  function cacheHas (line 8755) | function cacheHas(cache, key) {
  function charsStartIndex (line 8768) | function charsStartIndex(strSymbols, chrSymbols) {
  function charsEndIndex (line 8785) | function charsEndIndex(strSymbols, chrSymbols) {
  function countHolders (line 8800) | function countHolders(array, placeholder) {
  function escapeStringChar (line 8838) | function escapeStringChar(chr) {
  function getValue (line 8850) | function getValue(object, key) {
  function hasUnicode (line 8861) | function hasUnicode(string) {
  function hasUnicodeWord (line 8872) | function hasUnicodeWord(string) {
  function iteratorToArray (line 8883) | function iteratorToArray(iterator) {
  function mapToArray (line 8900) | function mapToArray(map) {
  function overArg (line 8918) | function overArg(func, transform) {
  function replaceHolders (line 8933) | function replaceHolders(array, placeholder) {
  function safeGet (line 8957) | function safeGet(object, key) {
  function setToArray (line 8970) | function setToArray(set) {
  function setToPairs (line 8987) | function setToPairs(set) {
  function strictIndexOf (line 9007) | function strictIndexOf(array, value, fromIndex) {
  function strictLastIndexOf (line 9029) | function strictLastIndexOf(array, value, fromIndex) {
  function stringSize (line 9046) | function stringSize(string) {
  function stringToArray (line 9059) | function stringToArray(string) {
  function unicodeSize (line 9081) | function unicodeSize(string) {
  function unicodeToArray (line 9096) | function unicodeToArray(string) {
  function unicodeWords (line 9107) | function unicodeWords(string) {
  function lodash (line 9384) | function lodash(value) {
  function object (line 9405) | function object() {}
  function baseLodash (line 9425) | function baseLodash() {
  function LodashWrapper (line 9436) | function LodashWrapper(value, chainAll) {
  function LazyWrapper (line 9521) | function LazyWrapper(value) {
  function lazyClone (line 9539) | function lazyClone() {
  function lazyReverse (line 9558) | function lazyReverse() {
  function lazyValue (line 9578) | function lazyValue() {
  function Hash (line 9640) | function Hash(entries) {
    method isHash (line 26225) | get isHash () { return true }
    method constructor (line 26226) | constructor (hash, opts) {
    method hexDigest (line 26244) | hexDigest () {
    method toJSON (line 26247) | toJSON () {
    method toString (line 26250) | toString (opts) {
  function hashClear (line 9658) | function hashClear() {
  function hashDelete (line 9673) | function hashDelete(key) {
  function hashGet (line 9688) | function hashGet(key) {
  function hashHas (line 9706) | function hashHas(key) {
  function hashSet (line 9721) | function hashSet(key, value) {
  function ListCache (line 9744) | function ListCache(entries) {
  function listCacheClear (line 9762) | function listCacheClear() {
  function listCacheDelete (line 9776) | function listCacheDelete(key) {
  function listCacheGet (line 9802) | function listCacheGet(key) {
  function listCacheHas (line 9818) | function listCacheHas(key) {
  function listCacheSet (line 9832) | function listCacheSet(key, value) {
  function MapCache (line 9861) | function MapCache(entries) {
  function mapCacheClear (line 9879) | function mapCacheClear() {
  function mapCacheDelete (line 9897) | function mapCacheDelete(key) {
  function mapCacheGet (line 9912) | function mapCacheGet(key) {
  function mapCacheHas (line 9925) | function mapCacheHas(key) {
  function mapCacheSet (line 9939) | function mapCacheSet(key, value) {
  function SetCache (line 9965) | function SetCache(values) {
  function setCacheAdd (line 9985) | function setCacheAdd(value) {
  function setCacheHas (line 9999) | function setCacheHas(value) {
  function Stack (line 10016) | function Stack(entries) {
  function stackClear (line 10028) | function stackClear() {
  function stackDelete (line 10042) | function stackDelete(key) {
  function stackGet (line 10059) | function stackGet(key) {
  function stackHas (line 10072) | function stackHas(key) {
  function stackSet (line 10086) | function stackSet(key, value) {
  function arrayLikeKeys (line 10119) | function arrayLikeKeys(value, inherited) {
  function arraySample (line 10153) | function arraySample(array) {
  function arraySampleSize (line 10166) | function arraySampleSize(array, n) {
  function arrayShuffle (line 10177) | function arrayShuffle(array) {
  function assignMergeValue (line 10190) | function assignMergeValue(object, key, value) {
  function assignValue (line 10207) | function assignValue(object, key, value) {
  function assocIndexOf (line 10223) | function assocIndexOf(array, key) {
  function baseAggregator (line 10244) | function baseAggregator(collection, setter, iteratee, accumulator) {
  function baseAssign (line 10260) | function baseAssign(object, source) {
  function baseAssignIn (line 10273) | function baseAssignIn(object, source) {
  function baseAssignValue (line 10286) | function baseAssignValue(object, key, value) {
  function baseAt (line 10307) | function baseAt(object, paths) {
  function baseClamp (line 10328) | function baseClamp(number, lower, upper) {
  function baseClone (line 10356) | function baseClone(value, bitmask, customizer, key, object, stack) {
  function baseConforms (line 10445) | function baseConforms(source) {
  function baseConformsTo (line 10460) | function baseConformsTo(object, source, props) {
  function baseDelay (line 10488) | function baseDelay(func, wait, args) {
  function baseDifference (line 10506) | function baseDifference(array, values, iteratee, comparator) {
  function baseEvery (line 10580) | function baseEvery(collection, predicate) {
  function baseExtremum (line 10599) | function baseExtremum(array, iteratee, comparator) {
  function baseFill (line 10628) | function baseFill(array, value, start, end) {
  function baseFilter (line 10654) | function baseFilter(collection, predicate) {
  function baseFlatten (line 10675) | function baseFlatten(array, depth, predicate, isStrict, result) {
  function baseForOwn (line 10731) | function baseForOwn(object, iteratee) {
  function baseForOwnRight (line 10743) | function baseForOwnRight(object, iteratee) {
  function baseFunctions (line 10756) | function baseFunctions(object, props) {
  function baseGet (line 10770) | function baseGet(object, path) {
  function baseGetAllKeys (line 10793) | function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  function baseGetTag (line 10805) | function baseGetTag(value) {
  function baseGt (line 10823) | function baseGt(value, other) {
  function baseHas (line 10835) | function baseHas(object, key) {
  function baseHasIn (line 10847) | function baseHasIn(object, key) {
  function baseInRange (line 10860) | function baseInRange(number, start, end) {
  function baseIntersection (line 10874) | function baseIntersection(arrays, iteratee, comparator) {
  function baseInverter (line 10938) | function baseInverter(object, setter, iteratee, accumulator) {
  function baseInvoke (line 10955) | function baseInvoke(object, path, args) {
  function baseIsArguments (line 10969) | function baseIsArguments(value) {
  function baseIsArrayBuffer (line 10980) | function baseIsArrayBuffer(value) {
  function baseIsDate (line 10991) | function baseIsDate(value) {
  function baseIsEqual (line 11009) | function baseIsEqual(value, other, bitmask, customizer, stack) {
  function baseIsEqualDeep (line 11033) | function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, ...
  function baseIsMap (line 11085) | function baseIsMap(value) {
  function baseIsMatch (line 11099) | function baseIsMatch(object, source, matchData, customizer) {
  function baseIsNative (line 11151) | function baseIsNative(value) {
  function baseIsRegExp (line 11166) | function baseIsRegExp(value) {
  function baseIsSet (line 11177) | function baseIsSet(value) {
  function baseIsTypedArray (line 11188) | function baseIsTypedArray(value) {
  function baseIteratee (line 11200) | function baseIteratee(value) {
  function baseKeys (line 11224) | function baseKeys(object) {
  function baseKeysIn (line 11244) | function baseKeysIn(object) {
  function baseLt (line 11268) | function baseLt(value, other) {
  function baseMap (line 11280) | function baseMap(collection, iteratee) {
  function baseMatches (line 11297) | function baseMatches(source) {
  function baseMatchesProperty (line 11315) | function baseMatchesProperty(path, srcValue) {
  function baseMerge (line 11338) | function baseMerge(object, source, srcIndex, customizer, stack) {
  function baseMergeDeep (line 11375) | function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customi...
  function baseNth (line 11445) | function baseNth(array, n) {
  function baseOrderBy (line 11463) | function baseOrderBy(collection, iteratees, orders) {
  function basePick (line 11488) | function basePick(object, paths) {
  function basePickBy (line 11503) | function basePickBy(object, paths, predicate) {
  function basePropertyDeep (line 11526) | function basePropertyDeep(path) {
  function basePullAll (line 11543) | function basePullAll(array, values, iteratee, comparator) {
  function basePullAt (line 11579) | function basePullAt(array, indexes) {
  function baseRandom (line 11606) | function baseRandom(lower, upper) {
  function baseRange (line 11621) | function baseRange(start, end, step, fromRight) {
  function baseRepeat (line 11641) | function baseRepeat(string, n) {
  function baseRest (line 11669) | function baseRest(func, start) {
  function baseSample (line 11680) | function baseSample(collection) {
  function baseSampleSize (line 11692) | function baseSampleSize(collection, n) {
  function baseSet (line 11707) | function baseSet(object, path, value, customizer) {
  function baseShuffle (line 11774) | function baseShuffle(collection) {
  function baseSlice (line 11787) | function baseSlice(array, start, end) {
  function baseSome (line 11817) | function baseSome(collection, predicate) {
  function baseSortedIndex (line 11839) | function baseSortedIndex(array, value, retHighest) {
  function baseSortedIndexBy (line 11873) | function baseSortedIndexBy(array, value, iteratee, retHighest) {
  function baseSortedUniq (line 11922) | function baseSortedUniq(array, iteratee) {
  function baseToNumber (line 11948) | function baseToNumber(value) {
  function baseToString (line 11966) | function baseToString(value) {
  function baseUniq (line 11991) | function baseUniq(array, iteratee, comparator) {
  function baseUnset (line 12051) | function baseUnset(object, path) {
  function baseUpdate (line 12067) | function baseUpdate(object, path, updater, customizer) {
  function baseWhile (line 12082) | function baseWhile(array, predicate, isDrop, fromRight) {
  function baseWrapperValue (line 12104) | function baseWrapperValue(value, actions) {
  function baseXor (line 12124) | function baseXor(arrays, iteratee, comparator) {
  function baseZipObject (line 12154) | function baseZipObject(props, values, assignFunc) {
  function castArrayLikeObject (line 12174) | function castArrayLikeObject(value) {
  function castFunction (line 12185) | function castFunction(value) {
  function castPath (line 12197) | function castPath(value, object) {
  function castSlice (line 12224) | function castSlice(array, start, end) {
  function cloneBuffer (line 12248) | function cloneBuffer(buffer, isDeep) {
  function cloneArrayBuffer (line 12266) | function cloneArrayBuffer(arrayBuffer) {
  function cloneDataView (line 12280) | function cloneDataView(dataView, isDeep) {
  function cloneRegExp (line 12292) | function cloneRegExp(regexp) {
  function cloneSymbol (line 12305) | function cloneSymbol(symbol) {
  function cloneTypedArray (line 12317) | function cloneTypedArray(typedArray, isDeep) {
  function compareAscending (line 12330) | function compareAscending(value, other) {
  function compareMultiple (line 12374) | function compareMultiple(object, other, orders) {
  function composeArgs (line 12412) | function composeArgs(args, partials, holders, isCurried) {
  function composeArgsRight (line 12447) | function composeArgsRight(args, partials, holders, isCurried) {
  function copyArray (line 12481) | function copyArray(source, array) {
  function copyObject (line 12502) | function copyObject(source, props, object, customizer) {
  function copySymbols (line 12536) | function copySymbols(source, object) {
  function copySymbolsIn (line 12548) | function copySymbolsIn(source, object) {
  function createAggregator (line 12560) | function createAggregator(setter, initializer) {
  function createAssigner (line 12576) | function createAssigner(assigner) {
  function createBaseEach (line 12610) | function createBaseEach(eachFunc, fromRight) {
  function createBaseFor (line 12638) | function createBaseFor(fromRight) {
  function createBind (line 12665) | function createBind(func, bitmask, thisArg) {
  function createCaseFirst (line 12683) | function createCaseFirst(methodName) {
  function createCompounder (line 12710) | function createCompounder(callback) {
  function createCtor (line 12724) | function createCtor(Ctor) {
  function createCurry (line 12758) | function createCurry(func, bitmask, arity) {
  function createFind (line 12793) | function createFind(findIndexFunc) {
  function createFlow (line 12813) | function createFlow(fromRight) {
  function createHybrid (line 12886) | function createHybrid(func, bitmask, thisArg, partials, holders, partial...
  function createInverter (line 12948) | function createInverter(setter, toIteratee) {
  function createMathOperation (line 12962) | function createMathOperation(operator, defaultValue) {
  function createOver (line 12995) | function createOver(arrayFunc) {
  function createPadding (line 13016) | function createPadding(length, chars) {
  function createPartial (line 13041) | function createPartial(func, bitmask, thisArg, partials) {
  function createRange (line 13071) | function createRange(fromRight) {
  function createRelationalOperation (line 13096) | function createRelationalOperation(operator) {
  function createRecurry (line 13123) | function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, pa...
  function createRound (line 13156) | function createRound(methodName) {
  function createToPairs (line 13192) | function createToPairs(keysFunc) {
  function createWrap (line 13230) | function createWrap(func, bitmask, thisArg, partials, holders, argPos, a...
  function customDefaultsAssignIn (line 13297) | function customDefaultsAssignIn(objValue, srcValue, key, object) {
  function customDefaultsMerge (line 13319) | function customDefaultsMerge(objValue, srcValue, key, object, source, st...
  function customOmitClone (line 13338) | function customOmitClone(value) {
  function equalArrays (line 13355) | function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  function equalByTag (line 13433) | function equalByTag(object, other, tag, bitmask, customizer, equalFunc, ...
  function equalObjects (line 13511) | function equalObjects(object, other, bitmask, customizer, equalFunc, sta...
  function flatRest (line 13582) | function flatRest(func) {
  function getAllKeys (line 13593) | function getAllKeys(object) {
  function getAllKeysIn (line 13605) | function getAllKeysIn(object) {
  function getFuncName (line 13627) | function getFuncName(func) {
  function getHolder (line 13649) | function getHolder(func) {
  function getIteratee (line 13665) | function getIteratee() {
  function getMapData (line 13679) | function getMapData(map, key) {
  function getMatchData (line 13693) | function getMatchData(object) {
  function getNative (line 13714) | function getNative(object, key) {
  function getRawTag (line 13726) | function getRawTag(value) {
  function getView (line 13822) | function getView(start, end, transforms) {
  function getWrapDetails (line 13847) | function getWrapDetails(source) {
  function hasPath (line 13861) | function hasPath(object, path, hasFunc) {
  function initCloneArray (line 13890) | function initCloneArray(array) {
  function initCloneObject (line 13909) | function initCloneObject(object) {
  function initCloneByTag (line 13927) | function initCloneByTag(object, tag, isDeep) {
  function insertWrapDetails (line 13971) | function insertWrapDetails(source, details) {
  function isFlattenable (line 13989) | function isFlattenable(value) {
  function isIndex (line 14002) | function isIndex(value, length) {
  function isIterateeCall (line 14022) | function isIterateeCall(value, index, object) {
  function isKey (line 14044) | function isKey(value, object) {
  function isKeyable (line 14064) | function isKeyable(value) {
  function isLaziable (line 14079) | function isLaziable(func) {
  function isMasked (line 14100) | function isMasked(func) {
  function isPrototype (line 14120) | function isPrototype(value) {
  function isStrictComparable (line 14135) | function isStrictComparable(value) {
  function matchesStrictComparable (line 14148) | function matchesStrictComparable(key, srcValue) {
  function memoizeCapped (line 14166) | function memoizeCapped(func) {
  function mergeData (line 14194) | function mergeData(data, source) {
  function nativeKeysIn (line 14258) | function nativeKeysIn(object) {
  function objectToString (line 14275) | function objectToString(value) {
  function overRest (line 14288) | function overRest(func, start, transform) {
  function parent (line 14317) | function parent(object, path) {
  function reorder (line 14331) | function reorder(array, indexes) {
  function setWrapToString (line 14391) | function setWrapToString(wrapper, reference, bitmask) {
  function shortOut (line 14405) | function shortOut(func) {
  function shuffleSelf (line 14433) | function shuffleSelf(array, size) {
  function toKey (line 14475) | function toKey(value) {
  function toSource (line 14490) | function toSource(func) {
  function updateWrapDetails (line 14510) | function updateWrapDetails(details, bitmask) {
  function wrapperClone (line 14527) | function wrapperClone(wrapper) {
  function chunk (line 14561) | function chunk(array, size, guard) {
  function compact (line 14596) | function compact(array) {
  function concat (line 14633) | function concat() {
  function drop (line 14769) | function drop(array, n, guard) {
  function dropRight (line 14803) | function dropRight(array, n, guard) {
  function dropRightWhile (line 14848) | function dropRightWhile(array, predicate) {
  function dropWhile (line 14889) | function dropWhile(array, predicate) {
  function fill (line 14924) | function fill(array, value, start, end) {
  function findIndex (line 14971) | function findIndex(array, predicate, fromIndex) {
  function findLastIndex (line 15018) | function findLastIndex(array, predicate, fromIndex) {
  function flatten (line 15047) | function flatten(array) {
  function flattenDeep (line 15066) | function flattenDeep(array) {
  function flattenDepth (line 15091) | function flattenDepth(array, depth) {
  function fromPairs (line 15115) | function fromPairs(pairs) {
  function head (line 15145) | function head(array) {
  function indexOf (line 15172) | function indexOf(array, value, fromIndex) {
  function initial (line 15198) | function initial(array) {
  function join (line 15313) | function join(array, separator) {
  function last (line 15331) | function last(array) {
  function lastIndexOf (line 15357) | function lastIndexOf(array, value, fromIndex) {
  function nth (line 15393) | function nth(array, n) {
  function pullAll (line 15442) | function pullAll(array, values) {
  function pullAllBy (line 15471) | function pullAllBy(array, values, iteratee) {
  function pullAllWith (line 15500) | function pullAllWith(array, values, comparator) {
  function remove (line 15569) | function remove(array, predicate) {
  function reverse (line 15613) | function reverse(array) {
  function slice (line 15633) | function slice(array, start, end) {
  function sortedIndex (line 15666) | function sortedIndex(array, value) {
  function sortedIndexBy (line 15695) | function sortedIndexBy(array, value, iteratee) {
  function sortedIndexOf (line 15715) | function sortedIndexOf(array, value) {
  function sortedLastIndex (line 15744) | function sortedLastIndex(array, value) {
  function sortedLastIndexBy (line 15773) | function sortedLastIndexBy(array, value, iteratee) {
  function sortedLastIndexOf (line 15793) | function sortedLastIndexOf(array, value) {
  function sortedUniq (line 15819) | function sortedUniq(array) {
  function sortedUniqBy (line 15841) | function sortedUniqBy(array, iteratee) {
  function tail (line 15861) | function tail(array) {
  function take (line 15891) | function take(array, n, guard) {
  function takeRight (line 15924) | function takeRight(array, n, guard) {
  function takeRightWhile (line 15969) | function takeRightWhile(array, predicate) {
  function takeWhile (line 16010) | function takeWhile(array, predicate) {
  function uniq (line 16112) | function uniq(array) {
  function uniqBy (line 16139) | function uniqBy(array, iteratee) {
  function uniqWith (line 16163) | function uniqWith(array, comparator) {
  function unzip (line 16187) | function unzip(array) {
  function unzipWith (line 16224) | function unzipWith(array, iteratee) {
  function zipObject (line 16377) | function zipObject(props, values) {
  function zipObjectDeep (line 16396) | function zipObjectDeep(props, values) {
  function chain (line 16459) | function chain(value) {
  function tap (line 16488) | function tap(value, interceptor) {
  function thru (line 16516) | function thru(value, interceptor) {
  function wrapperChain (line 16587) | function wrapperChain() {
  function wrapperCommit (line 16617) | function wrapperCommit() {
  function wrapperNext (line 16643) | function wrapperNext() {
  function wrapperToIterator (line 16671) | function wrapperToIterator() {
  function wrapperPlant (line 16699) | function wrapperPlant(value) {
  function wrapperReverse (line 16739) | function wrapperReverse() {
  function wrapperValue (line 16771) | function wrapperValue() {
  function every (line 16848) | function every(collection, predicate, guard) {
  function filter (line 16893) | function filter(collection, predicate) {
  function flatMap (line 16978) | function flatMap(collection, iteratee) {
  function flatMapDeep (line 17002) | function flatMapDeep(collection, iteratee) {
  function flatMapDepth (line 17027) | function flatMapDepth(collection, iteratee, depth) {
  function forEach (line 17062) | function forEach(collection, iteratee) {
  function forEachRight (line 17087) | function forEachRight(collection, iteratee) {
  function includes (line 17153) | function includes(collection, value, fromIndex, guard) {
  function map (line 17274) | function map(collection, iteratee) {
  function orderBy (line 17308) | function orderBy(collection, iteratees, orders, guard) {
  function reduce (line 17399) | function reduce(collection, iteratee, accumulator) {
  function reduceRight (line 17428) | function reduceRight(collection, iteratee, accumulator) {
  function reject (line 17469) | function reject(collection, predicate) {
  function sample (line 17488) | function sample(collection) {
  function sampleSize (line 17513) | function sampleSize(collection, n, guard) {
  function shuffle (line 17538) | function shuffle(collection) {
  function size (line 17564) | function size(collection) {
  function some (line 17614) | function some(collection, predicate, guard) {
  function after (line 17712) | function after(n, func) {
  function ary (line 17741) | function ary(func, n, guard) {
  function before (line 17764) | function before(n, func) {
  function curry (line 17920) | function curry(func, arity, guard) {
  function curryRight (line 17965) | function curryRight(func, arity, guard) {
  function debounce (line 18026) | function debounce(func, wait, options) {
  function flip (line 18213) | function flip(func) {
  function memoize (line 18261) | function memoize(func, resolver) {
  function negate (line 18304) | function negate(predicate) {
  function once (line 18338) | function once(func) {
  function rest (line 18516) | function rest(func, start) {
  function spread (line 18558) | function spread(func, start) {
  function throttle (line 18618) | function throttle(func, wait, options) {
  function unary (line 18651) | function unary(func) {
  function wrap (line 18677) | function wrap(value, wrapper) {
  function castArray (line 18716) | function castArray() {
  function clone (line 18750) | function clone(value) {
  function cloneWith (line 18785) | function cloneWith(value, customizer) {
  function cloneDeep (line 18808) | function cloneDeep(value) {
  function cloneDeepWith (line 18840) | function cloneDeepWith(value, customizer) {
  function conformsTo (line 18869) | function conformsTo(object, source) {
  function eq (line 18905) | function eq(value, other) {
  function isArrayLike (line 19053) | function isArrayLike(value) {
  function isArrayLikeObject (line 19082) | function isArrayLikeObject(value) {
  function isBoolean (line 19103) | function isBoolean(value) {
  function isElement (line 19163) | function isElement(value) {
  function isEmpty (line 19200) | function isEmpty(value) {
  function isEqual (line 19252) | function isEqual(value, other) {
  function isEqualWith (line 19288) | function isEqualWith(value, other, customizer) {
  function isError (line 19312) | function isError(value) {
  function isFinite (line 19347) | function isFinite(value) {
  function isFunction (line 19368) | function isFunction(value) {
  function isInteger (line 19404) | function isInteger(value) {
  function isLength (line 19434) | function isLength(value) {
  function isObject (line 19464) | function isObject(value) {
  function isObjectLike (line 19493) | function isObjectLike(value) {
  function isMatch (line 19544) | function isMatch(object, source) {
  function isMatchWith (line 19580) | function isMatchWith(object, source, customizer) {
  function isNaN (line 19613) | function isNaN(value) {
  function isNative (line 19646) | function isNative(value) {
  function isNull (line 19670) | function isNull(value) {
  function isNil (line 19694) | function isNil(value) {
  function isNumber (line 19724) | function isNumber(value) {
  function isPlainObject (line 19757) | function isPlainObject(value) {
  function isSafeInteger (line 19816) | function isSafeInteger(value) {
  function isString (line 19856) | function isString(value) {
  function isSymbol (line 19878) | function isSymbol(value) {
  function isUndefined (line 19919) | function isUndefined(value) {
  function isWeakMap (line 19940) | function isWeakMap(value) {
  function isWeakSet (line 19961) | function isWeakSet(value) {
  function toArray (line 20040) | function toArray(value) {
  function toFinite (line 20079) | function toFinite(value) {
  function toInteger (line 20117) | function toInteger(value) {
  function toLength (line 20151) | function toLength(value) {
  function toNumber (line 20178) | function toNumber(value) {
  function toPlainObject (line 20223) | function toPlainObject(value) {
  function toSafeInteger (line 20251) | function toSafeInteger(value) {
  function toString (line 20278) | function toString(value) {
  function create (line 20481) | function create(prototype, properties) {
  function findKey (line 20597) | function findKey(object, predicate) {
  function findLastKey (line 20636) | function findLastKey(object, predicate) {
  function forIn (line 20668) | function forIn(object, iteratee) {
  function forInRight (line 20700) | function forInRight(object, iteratee) {
  function forOwn (line 20734) | function forOwn(object, iteratee) {
  function forOwnRight (line 20764) | function forOwnRight(object, iteratee) {
  function functions (line 20791) | function functions(object) {
  function functionsIn (line 20818) | function functionsIn(object) {
  function get (line 20847) | function get(object, path, defaultValue) {
  function has (line 20879) | function has(object, path) {
  function hasIn (line 20909) | function hasIn(object, path) {
  function keys (line 21027) | function keys(object) {
  function keysIn (line 21054) | function keysIn(object) {
  function mapKeys (line 21079) | function mapKeys(object, iteratee) {
  function mapValues (line 21117) | function mapValues(object, iteratee) {
  function omitBy (line 21259) | function omitBy(object, predicate) {
  function pickBy (line 21302) | function pickBy(object, predicate) {
  function result (line 21344) | function result(object, path, defaultValue) {
  function set (line 21394) | function set(object, path, value) {
  function setWith (line 21422) | function setWith(object, path, value, customizer) {
  function transform (line 21509) | function transform(object, iteratee, accumulator) {
  function unset (line 21559) | function unset(object, path) {
  function update (line 21590) | function update(object, path, updater) {
  function updateWith (line 21618) | function updateWith(object, path, updater, customizer) {
  function values (line 21649) | function values(object) {
  function valuesIn (line 21677) | function valuesIn(object) {
  function clamp (line 21702) | function clamp(number, lower, upper) {
  function inRange (line 21756) | function inRange(number, start, end) {
  function random (line 21799) | function random(lower, upper, floating) {
  function capitalize (line 21880) | function capitalize(string) {
  function deburr (line 21902) | function deburr(string) {
  function endsWith (line 21930) | function endsWith(string, target, position) {
  function escape (line 21972) | function escape(string) {
  function escapeRegExp (line 21994) | function escapeRegExp(string) {
  function pad (line 22092) | function pad(string, length, chars) {
  function padEnd (line 22131) | function padEnd(string, length, chars) {
  function padStart (line 22164) | function padStart(string, length, chars) {
  function parseInt (line 22198) | function parseInt(string, radix, guard) {
  function repeat (line 22229) | function repeat(string, n, guard) {
  function replace (line 22257) | function replace() {
  function split (line 22308) | function split(string, separator, limit) {
  function startsWith (line 22377) | function startsWith(string, target, position) {
  function template (line 22491) | function template(string, options, guard) {
  function toLower (line 22620) | function toLower(value) {
  function toUpper (line 22645) | function toUpper(value) {
  function trim (line 22671) | function trim(string, chars, guard) {
  function trimEnd (line 22706) | function trimEnd(string, chars, guard) {
  function trimStart (line 22739) | function trimStart(string, chars, guard) {
  function truncate (line 22790) | function truncate(string, options) {
  function unescape (line 22865) | function unescape(string) {
  function words (line 22934) | function words(string, pattern, guard) {
  function cond (line 23039) | function cond(pairs) {
  function conforms (line 23085) | function conforms(source) {
  function constant (line 23108) | function constant(value) {
  function defaultTo (line 23134) | function defaultTo(value, defaultValue) {
  function identity (line 23201) | function identity(value) {
  function iteratee (line 23247) | function iteratee(func) {
  function matches (line 23279) | function matches(source) {
  function matchesProperty (line 23309) | function matchesProperty(path, srcValue) {
  function mixin (line 23408) | function mixin(object, source, options) {
  function noConflict (line 23457) | function noConflict() {
  function noop (line 23476) | function noop() {
  function nthArg (line 23500) | function nthArg(n) {
  function property (line 23601) | function property(path) {
  function propertyOf (line 23626) | function propertyOf(object) {
  function stubArray (line 23731) | function stubArray() {
  function stubFalse (line 23748) | function stubFalse() {
  function stubObject (line 23770) | function stubObject() {
  function stubString (line 23787) | function stubString() {
  function stubTrue (line 23804) | function stubTrue() {
  function times (line 23827) | function times(n, iteratee) {
  function toPath (line 23862) | function toPath(value) {
  function uniqueId (line 23886) | function uniqueId(prefix) {
  function max (line 23995) | function max(array) {
  function maxBy (line 24024) | function maxBy(array, iteratee) {
  function mean (line 24044) | function mean(array) {
  function meanBy (line 24071) | function meanBy(array, iteratee) {
  function min (line 24093) | function min(array) {
  function minBy (line 24122) | function minBy(array, iteratee) {
  function sum (line 24203) | function sum(array) {
  function sumBy (line 24232) | function sumBy(array, iteratee) {
  function empty (line 24844) | function empty(scheduler) {
  function emptyScheduled (line 24847) | function emptyScheduled(scheduler) {
  function isNothing (line 24901) | function isNothing(subject) {
  function isObject (line 24906) | function isObject(subject) {
  function toArray (line 24911) | function toArray(sequence) {
  function extend (line 24919) | function extend(target, source) {
  function repeat (line 24935) | function repeat(string, count) {
  function isNegativeZero (line 24946) | function isNegativeZero(number) {
  function compileList (line 24973) | function compileList(schema, name, result) {
  function compileMap (line 24996) | function compileMap(/* lists... */) {
  function Schema (line 25015) | function Schema(definition) {
  function copyProps (line 25083) | function copyProps (src, dst) {
  function SafeBuffer (line 25096) | function SafeBuffer (arg, encodingOrOffset, length) {
  function map (line 25160) | function map(project, thisArg) {
  function MapOperator (line 25169) | function MapOperator(project, thisArg) {
  function MapSubscriber (line 25181) | function MapSubscriber(destination, project, thisArg) {
  function isScheduler (line 25222) | function isScheduler(value) {
  function wait (line 25241) | function wait(delay) {
  function promisify (line 25247) | function promisify(fn, firstData) {
  function queue (line 25274) | function queue(arr, promiseProducer, concurrency = Infinity) {
  function YAMLException (line 25346) | function YAMLException(reason, mark) {
  function tryCatcher (line 25432) | function tryCatcher() {
  function tryCatch (line 25441) | function tryCatch(fn) {
  function _load_yarnRegistry (line 25462) | function _load_yarnRegistry() {
  function _load_npmRegistry (line 25468) | function _load_npmRegistry() {
  function _interopRequireDefault (line 25472) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _load_constants (line 25499) | function _load_constants() {
  function _load_blockingQueue (line 25505) | function _load_blockingQueue() {
  function _load_errors (line 25511) | function _load_errors() {
  function _load_promise (line 25517) | function _load_promise() {
  function _interopRequireDefault (line 25521) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireWildcard (line 25523) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function forkp (line 25536) | function forkp(program, args, opts) {
  function spawnp (line 25550) | function spawnp(program, args, opts) {
  function forwardSignalToSpawnedProcesses (line 25566) | function forwardSignalToSpawnedProcesses(signal) {
  function spawn (line 25585) | function spawn(program, args, opts = {}, onData) {
  function _load_asyncToGenerator (line 25670) | function _load_asyncToGenerator() {
  function setFlags (line 25715) | function setFlags(commander) {
  function hasWrapper (line 25719) | function hasWrapper(commander, args) {
  function _load_errors (line 25732) | function _load_errors() {
  function _load_misc (line 25738) | function _load_misc() {
  function _interopRequireDefault (line 25742) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function from (line 25852) | function from(input, scheduler) {
  class Hash (line 26224) | class Hash {
    method isHash (line 26225) | get isHash () { return true }
    method constructor (line 26226) | constructor (hash, opts) {
    method hexDigest (line 26244) | hexDigest () {
    method toJSON (line 26247) | toJSON () {
    method toString (line 26250) | toString (opts) {
  class Integrity (line 26278) | class Integrity {
    method isIntegrity (line 26279) | get isIntegrity () { return true }
    method toJSON (line 26280) | toJSON () {
    method toString (line 26283) | toString (opts) {
    method concat (line 26296) | concat (integrity, opts) {
    method hexDigest (line 26302) | hexDigest () {
    method match (line 26305) | match (integrity, opts) {
    method pickAlgorithm (line 26318) | pickAlgorithm (opts) {
  function parse (line 26333) | function parse (sri, opts) {
  function _parse (line 26346) | function _parse (integrity, opts) {
  function stringify (line 26364) | function stringify (obj, opts) {
  function fromHex (line 26375) | function fromHex (hexDigest, algorithm, opts) {
  function fromData (line 26387) | function fromData (data, opts) {
  function fromStream (line 26409) | function fromStream (stream, opts) {
  function checkData (line 26425) | function checkData (data, sri, opts) {
  function checkStream (line 26464) | function checkStream (stream, sri, opts) {
  function integrityStream (line 26482) | function integrityStream (opts) {
  function createIntegrity (line 26538) | function createIntegrity (opts) {
  function getPrioritizedHash (line 26584) | function getPrioritizedHash (algo1, algo2) {
  function _load_rootUser (line 26631) | function _load_rootUser() {
  function _interopRequireDefault (line 26635) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function FingerprintFormatError (line 26765) | function FingerprintFormatError(fp, format) {
  function InvalidAlgorithmError (line 26779) | function InvalidAlgorithmError(alg) {
  function KeyParseError (line 26788) | function KeyParseError(name, format, innerErr) {
  function SignatureParseError (line 26800) | function SignatureParseError(type, format, innerErr) {
  function CertificateParseError (line 26812) | function CertificateParseError(name, format, innerErr) {
  function KeyEncryptedError (line 26824) | function KeyEncryptedError(name, format) {
  function Signature (line 26866) | function Signature(opts) {
  function parseOneNum (line 27031) | function parseOneNum(data, type, format, opts) {
  function parseDSAasn1 (line 27074) | function parseDSAasn1(data, type, format, opts) {
  function parseDSA (line 27086) | function parseDSA(data, type, format, opts) {
  function parseECDSA (line 27101) | function parseECDSA(data, type, format, opts) {
  function ts64 (line 27200) | function ts64(x, i, h, l) {
  function vn (line 27211) | function vn(x, xi, y, yi, n) {
  function crypto_verify_16 (line 27217) | function crypto_verify_16(x, xi, y, yi) {
  function crypto_verify_32 (line 27221) | function crypto_verify_32(x, xi, y, yi) {
  function core_salsa20 (line 27225) | function core_salsa20(o, p, k, c) {
  function core_hsalsa20 (line 27418) | function core_hsalsa20(o,p,k,c) {
  function crypto_core_salsa20 (line 27555) | function crypto_core_salsa20(out,inp,k,c) {
  function crypto_core_hsalsa20 (line 27559) | function crypto_core_hsalsa20(out,inp,k,c) {
  function crypto_stream_salsa20_xor (line 27566) | function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
  function crypto_stream_salsa20 (line 27591) | function crypto_stream_salsa20(c,cpos,b,n,k) {
  function crypto_stream (line 27615) | function crypto_stream(c,cpos,d,n,k) {
  function crypto_stream_xor (line 27623) | function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
  function crypto_onetimeauth (line 27988) | function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
  function crypto_onetimeauth_verify (line 27995) | function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
  function crypto_secretbox (line 28001) | function crypto_secretbox(c,m,d,n,k) {
  function crypto_secretbox_open (line 28010) | function crypto_secretbox_open(m,c,d,n,k) {
  function set25519 (line 28021) | function set25519(r, a) {
  function car25519 (line 28026) | function car25519(o) {
  function sel25519 (line 28036) | function sel25519(p, q, b) {
  function pack25519 (line 28045) | function pack25519(o, n) {
  function neq25519 (line 28069) | function neq25519(a, b) {
  function par25519 (line 28076) | function par25519(a) {
  function unpack25519 (line 28082) | function unpack25519(o, n) {
  function A (line 28088) | function A(o, a, b) {
  function Z (line 28092) | function Z(o, a, b) {
  function M (line 28096) | function M(o, a, b) {
  function S (line 28467) | function S(o, a) {
  function inv25519 (line 28471) | function inv25519(o, i) {
  function pow2523 (line 28482) | function pow2523(o, i) {
  function crypto_scalarmult (line 28493) | function crypto_scalarmult(q, n, p) {
  function crypto_scalarmult_base (line 28546) | function crypto_scalarmult_base(q, n) {
  function crypto_box_keypair (line 28550) | function crypto_box_keypair(y, x) {
  function crypto_box_beforenm (line 28555) | function crypto_box_beforenm(k, y, x) {
  function crypto_box (line 28564) | function crypto_box(c, m, d, n, y, x) {
  function crypto_box_open (line 28570) | function crypto_box_open(m, c, d, n, y, x) {
  function crypto_hashblocks_hl (line 28619) | function crypto_hashblocks_hl(hh, hl, m, n) {
  function crypto_hash (line 28980) | function crypto_hash(out, m, n) {
  function add (line 29020) | function add(p, q) {
  function cswap (line 29046) | function cswap(p, q, b) {
  function pack (line 29053) | function pack(r, p) {
  function scalarmult (line 29062) | function scalarmult(p, q, s) {
  function scalarbase (line 29077) | function scalarbase(p, s) {
  function crypto_sign_keypair (line 29086) | function crypto_sign_keypair(pk, sk, seeded) {
  function modL (line 29106) | function modL(r, x) {
  function reduce (line 29131) | function reduce(r) {
  function crypto_sign (line 29139) | function crypto_sign(sm, m, n, sk) {
  function unpackneg (line 29174) | function unpackneg(r, p) {
  function crypto_sign_open (line 29212) | function crypto_sign_open(m, sm, n, pk) {
  function checkLengths (line 29307) | function checkLengths(k, n) {
  function checkBoxLengths (line 29312) | function checkBoxLengths(pk, sk) {
  function checkArrayTypes (line 29317) | function checkArrayTypes() {
  function cleanup (line 29325) | function cleanup(arr) {
  function _load_baseResolver (line 29582) | function _load_baseResolver() {
  function _load_npmResolver (line 29588) | function _load_npmResolver() {
  function _load_yarnResolver (line 29594) | function _load_yarnResolver() {
  function _load_gitResolver (line 29600) | function _load_gitResolver() {
  function _load_tarballResolver (line 29606) | function _load_tarballResolver() {
  function _load_githubResolver (line 29612) | function _load_githubResolver() {
  function _load_fileResolver (line 29618) | function _load_fileResolver() {
  function _load_linkResolver (line 29624) | function _load_linkResolver() {
  function _load_gitlabResolver (line 29630) | function _load_gitlabResolver() {
  function _load_gistResolver (line 29636) | function _load_gistResolver() {
  function _load_bitbucketResolver (line 29642) | function _load_bitbucketResolver() {
  function _load_hostedGitResolver (line 29648) | function _load_hostedGitResolver() {
  function _load_registryResolver (line 29654) | function _load_registryResolver() {
  function _interopRequireDefault (line 29658) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function getExoticResolver (line 29669) | function getExoticResolver(pattern) {
  function hostedGitFragmentToGitUrl (line 29699) | function hostedGitFragmentToGitUrl(fragment, reporter) {
  class Prompt (line 29738) | class Prompt {
    method constructor (line 29739) | constructor(question, rl, answers) {
    method run (line 29779) | run() {
    method _run (line 29786) | _run(cb) {
    method throwParamError (line 29796) | throwParamError(name) {
    method close (line 29803) | close() {
    method handleSubmitEvents (line 29812) | handleSubmitEvents(submit) {
    method getQuestion (line 29850) | getQuestion() {
  function normalizeKeypressEvents (line 29884) | function normalizeKeypressEvents(value, key) {
  function BigInteger (line 29955) | function BigInteger(a,b,c) {
  function nbi (line 29963) | function nbi() { return new BigInteger(null); }
  function am1 (line 29973) | function am1(i,x,w,j,c,n) {
  function am2 (line 29984) | function am2(i,x,w,j,c,n) {
  function am3 (line 29998) | function am3(i,x,w,j,c,n) {
  function int2char (line 30044) | function int2char(n) { return BI_RM.charAt(n); }
  function intAt (line 30045) | function intAt(s,i) {
  function bnpCopyTo (line 30051) | function bnpCopyTo(r) {
  function bnpFromInt (line 30058) | function bnpFromInt(x) {
  function nbv (line 30067) | function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
  function bnpFromString (line 30070) | function bnpFromString(s,b) {
  function bnpClamp (line 30109) | function bnpClamp() {
  function bnToString (line 30115) | function bnToString(b) {
  function bnNegate (line 30145) | function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); retu...
  function bnAbs (line 30148) | function bnAbs() { return (this.s<0)?this.negate():this; }
  function bnCompareTo (line 30151) | function bnCompareTo(a) {
  function nbits (line 30162) | function nbits(x) {
  function bnBitLength (line 30173) | function bnBitLength() {
  function bnpDLShiftTo (line 30179) | function bnpDLShiftTo(n,r) {
  function bnpDRShiftTo (line 30188) | function bnpDRShiftTo(n,r) {
  function bnpLShiftTo (line 30195) | function bnpLShiftTo(n,r) {
  function bnpRShiftTo (line 30212) | function bnpRShiftTo(n,r) {
  function bnpSubTo (line 30230) | function bnpSubTo(a,r) {
  function bnpMultiplyTo (line 30264) | function bnpMultiplyTo(a,r) {
  function bnpSquareTo (line 30276) | function bnpSquareTo(r) {
  function bnpDivRemTo (line 30294) | function bnpDivRemTo(m,q,r) {
  function bnMod (line 30342) | function bnMod(a) {
  function Classic (line 30350) | function Classic(m) { this.m = m; }
  function cConvert (line 30351) | function cConvert(x) {
  function cRevert (line 30355) | function cRevert(x) { return x; }
  function cReduce (line 30356) | function cReduce(x) { x.divRemTo(this.m,null,x); }
  function cMulTo (line 30357) | function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
  function cSqrTo (line 30358) | function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
  function bnpInvDigit (line 30376) | function bnpInvDigit() {
  function Montgomery (line 30392) | function Montgomery(m) {
  function montConvert (line 30402) | function montConvert(x) {
  function montRevert (line 30411) | function montRevert(x) {
  function montReduce (line 30419) | function montReduce(x) {
  function montSqrTo (line 30438) | function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
  function montMulTo (line 30441) | function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
  function bnpIsEven (line 30450) | function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }
  function bnpExp (line 30453) | function bnpExp(e,z) {
  function bnModPowInt (line 30466) | function bnModPowInt(e,m) {
  function bnClone (line 30512) | function bnClone() { var r = nbi(); this.copyTo(r); return r; }
  function bnIntValue (line 30515) | function bnIntValue() {
  function bnByteValue (line 30527) | function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; }
  function bnShortValue (line 30530) | function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }
  function bnpChunkSize (line 30533) | function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r...
  function bnSigNum (line 30536) | function bnSigNum() {
  function bnpToRadix (line 30543) | function bnpToRadix(b) {
  function bnpFromRadix (line 30558) | function bnpFromRadix(s,b) {
  function bnpFromNumber (line 30585) | function bnpFromNumber(a,b,c) {
  function bnToByteArray (line 30611) | function bnToByteArray() {
  function bnEquals (line 30635) | function bnEquals(a) { return(this.compareTo(a)==0); }
  function bnMin (line 30636) | function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
  function bnMax (line 30637) | function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
  function bnpBitwiseTo (line 30640) | function bnpBitwiseTo(a,op,r) {
  function op_and (line 30658) | function op_and(x,y) { return x&y; }
  function bnAnd (line 30659) | function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
  function op_or (line 30662) | function op_or(x,y) { return x|y; }
  function bnOr (line 30663) | function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
  function op_xor (line 30666) | function op_xor(x,y) { return x^y; }
  function bnXor (line 30667) | function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
  function op_andnot (line 30670) | function op_andnot(x,y) { return x&~y; }
  function bnAndNot (line 30671) | function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); ret...
  function bnNot (line 30674) | function bnNot() {
  function bnShiftLeft (line 30683) | function bnShiftLeft(n) {
  function bnShiftRight (line 30690) | function bnShiftRight(n) {
  function lbit (line 30697) | function lbit(x) {
  function bnGetLowestSetBit (line 30709) | function bnGetLowestSetBit() {
  function cbit (line 30717) | function cbit(x) {
  function bnBitCount (line 30724) | function bnBitCount() {
  function bnTestBit (line 30731) | function bnTestBit(n) {
  function bnpChangeBit (line 30738) | function bnpChangeBit(n,op) {
  function bnSetBit (line 30745) | function bnSetBit(n) { return this.changeBit(n,op_or); }
  function bnClearBit (line 30748) | function bnClearBit(n) { return this.changeBit(n,op_andnot); }
  function bnFlipBit (line 30751) | function bnFlipBit(n) { return this.changeBit(n,op_xor); }
  function bnpAddTo (line 30754) | function bnpAddTo(a,r) {
  function bnAdd (line 30787) | function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
  function bnSubtract (line 30790) | function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
  function bnMultiply (line 30793) | function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
  function bnSquare (line 30796) | function bnSquare() { var r = nbi(); this.squareTo(r); return r; }
  function bnDivide (line 30799) | function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
  function bnRemainder (line 30802) | function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return...
  function bnDivideAndRemainder (line 30805) | function bnDivideAndRemainder(a) {
  function bnpDMultiply (line 30812) | function bnpDMultiply(n) {
  function bnpDAddOffset (line 30819) | function bnpDAddOffset(n,w) {
  function NullExp (line 30831) | function NullExp() {}
  function nNop (line 30832) | function nNop(x) { return x; }
  function nMulTo (line 30833) | function nMulTo(x,y,r) { x.multiplyTo(y,r); }
  function nSqrTo (line 30834) | function nSqrTo(x,r) { x.squareTo(r); }
  function bnPow (line 30842) | function bnPow(e) { return this.exp(e,new NullExp()); }
  function bnpMultiplyLowerTo (line 30846) | function bnpMultiplyLowerTo(a,n,r) {
  function bnpMultiplyUpperTo (line 30859) | function bnpMultiplyUpperTo(a,n,r) {
  function Barrett (line 30871) | function Barrett(m) {
  function barrettConvert (line 30880) | function barrettConvert(x) {
  function barrettRevert (line 30886) | function barrettRevert(x) { return x; }
  function barrettReduce (line 30889) | function barrettReduce(x) {
  function barrettSqrTo (line 30900) | function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
  function barrettMulTo (line 30903) | function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
  function bnModPow (line 30912) | function bnModPow(e,m) {
  function bnGCD (line 30971) | function bnGCD(a) {
  function bnpModInt (line 30999) | function bnpModInt(n) {
  function bnModInverse (line 31009) | function bnModInverse(m) {
  function bnIsProbablePrime (line 31054) | function bnIsProbablePrime(t) {
  function bnpMillerRabin (line 31073) | function bnpMillerRabin(t) {
  function rng_seed_int (line 31173) | function rng_seed_int(x) {
  function rng_seed_time (line 31182) | function rng_seed_time() {
  function rng_get_byte (line 31217) | function rng_get_byte() {
  function rng_get_bytes (line 31231) | function rng_get_bytes(ba) {
  function SecureRandom (line 31236) | function SecureRandom() {}
  function Arcfour (line 31242) | function Arcfour() {
  function ARC4init (line 31249) | function ARC4init(key) {
  function ARC4next (line 31264) | function ARC4next() {
  function prng_newstate (line 31278) | function prng_newstate() {
  function charSet (line 31341) | function charSet (s) {
  function filter (line 31352) | function filter (pattern, options) {
  function ext (line 31359) | function ext (a, b) {
  function minimatch (line 31393) | function minimatch (p, pattern, options) {
  function Minimatch (line 31411) | function Minimatch (pattern, options) {
  function make (line 31443) | function make () {
  function parseNegate (line 31499) | function parseNegate () {
  function braceExpand (line 31534) | function braceExpand (pattern, options) {
  function parse (line 31572) | function parse (pattern, isSub) {
  function makeRe (line 31943) | function makeRe () {
  function match (line 32001) | function match (f, partial) {
  function globUnescape (line 32218) | function globUnescape (s) {
  function regExpEscape (line 32222) | function regExpEscape (s) {
  function once (line 32251) | function once (fn) {
  function onceStrict (line 32261) | function onceStrict (fn) {
  function InnerSubscriber (line 32288) | function InnerSubscriber(parent, outerValue, outerIndex) {
  function fromArray (line 32326) | function fromArray(input, scheduler) {
  function read (line 32382) | function read(buf, options, forceType) {
  function write (line 32490) | function write(key, options, type) {
  function _load_extends (line 32569) | function _load_extends() {
  function _load_asyncToGenerator (line 32575) | function _load_asyncToGenerator() {
  function _load_constants (line 32581) | function _load_constants() {
  function _load_fs (line 32587) | function _load_fs() {
  function _load_npmResolver (line 32593) | function _load_npmResolver() {
  function _load_envReplace (line 32599) | function _load_envReplace() {
  function _load_baseRegistry (line 32605) | function _load_baseRegistry() {
  function _load_misc (line 32611) | function _load_misc() {
  function _load_path (line 32617) | function _load_path() {
  function _load_normalizeUrl (line 32623) | function _load_normalizeUrl() {
  function _load_userHomeDir (line 32629) | function _load_userHomeDir() {
  function _load_userHomeDir2 (line 32635) | function _load_userHomeDir2() {
  function _load_errors (line 32641) | function _load_errors() {
  function _load_login (line 32647) | function _load_login() {
  function _load_path2 (line 32653) | function _load_path2() {
  function _load_url (line 32659) | function _load_url() {
  function _load_ini (line 32665) | function _load_ini() {
  function _interopRequireWildcard (line 32669) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 32671) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function getGlobalPrefix (line 32690) | function getGlobalPrefix() {
  function isPathConfigOption (line 32711) | function isPathConfigOption(key) {
  function normalizePath (line 32715) | function normalizePath(val) {
  function urlParts (line 32727) | function urlParts(requestUrl) {
  class NpmRegistry (line 32735) | class NpmRegistry extends (_baseRegistry || _load_baseRegistry()).default {
    method constructor (line 32736) | constructor(cwd, registries, requestManager, reporter, enableDefaultRc...
    method escapeName (line 32741) | static escapeName(name) {
    method isScopedPackage (line 32746) | isScopedPackage(packageIdent) {
    method getRequestUrl (line 32750) | getRequestUrl(registry, pathname) {
    method isRequestToRegistry (line 32764) | isRequestToRegistry(requestUrl, registryUrl) {
    method request (line 32778) | request(pathname, opts = {}, packageName) {
    method requestNeedsAuth (line 32841) | requestNeedsAuth(requestUrl) {
    method checkOutdated (line 32856) | checkOutdated(config, name, range) {
    method getPossibleConfigLocations (line 32895) | getPossibleConfigLocations(filename, reporter) {
    method getConfigEnv (line 32965) | static getConfigEnv(env = process.env) {
    method normalizeConfig (line 32973) | static normalizeConfig(config) {
    method loadConfig (line 32987) | loadConfig() {
    method getScope (line 33025) | getScope(packageIdent) {
    method getRegistry (line 33030) | getRegistry(packageIdent) {
    method getAuthByRegistry (line 33052) | getAuthByRegistry(registry) {
    method getAuth (line 33076) | getAuth(packageIdent) {
    method getScopedOption (line 33113) | getScopedOption(scope, option) {
    method getRegistryOption (line 33117) | getRegistryOption(registry, option) {
    method getRegistryOrGlobalOption (line 33130) | getRegistryOrGlobalOption(registry, option) {
  function _load_baseResolver (line 33150) | function _load_baseResolver() {
  function _interopRequireDefault (line 33154) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class ExoticResolver (line 33156) | class ExoticResolver extends (_baseResolver || _load_baseResolver()).def...
    method isVersion (line 33158) | static isVersion(pattern) {
  function _load_normalizePattern (line 33182) | function _load_normalizePattern() {
  class WorkspaceLayout (line 33188) | class WorkspaceLayout {
    method constructor (line 33189) | constructor(workspaces, config) {
    method getWorkspaceManifest (line 33194) | getWorkspaceManifest(key) {
    method getManifestByPattern (line 33198) | getManifestByPattern(pattern) {
  function PromiseCapability (line 33253) | function PromiseCapability(C) {
  function glob (line 33385) | function glob (pattern, options, cb) {
  function extend (line 33404) | function extend (origin, add) {
  function Glob (line 33440) | function Glob (pattern, options, cb) {
  function next (line 33534) | function next () {
  function lstatcb_ (line 33828) | function lstatcb_ (er, lstat) {
  function readdirCb (line 33870) | function readdirCb (self, abs, cb) {
  function lstatcb_ (line 34073) | function lstatcb_ (er, lstat) {
  function posix (line 34144) | function posix(path) {
  function win32 (line 34148) | function win32(path) {
  function algToKeyType (line 34216) | function algToKeyType(alg) {
  function keyTypeToAlg (line 34232) | function keyTypeToAlg(key) {
  function read (line 34248) | function read(partial, type, buf, options) {
  function write (line 34329) | function write(key, options) {
  function _load_util (line 34385) | function _load_util() {
  function _load_invariant (line 34391) | function _load_invariant() {
  function _load_stripBom (line 34397) | function _load_stripBom() {
  function _load_constants (line 34403) | function _load_constants() {
  function _load_errors (line 34409) | function _load_errors() {
  function _load_map (line 34415) | function _load_map() {
  function _interopRequireDefault (line 34419) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function isValidPropValueToken (line 34447) | function isValidPropValueToken(token) {
  function buildToken (line 34456) | function buildToken(type, value) {
  class Parser (line 34568) | class Parser {
    method constructor (line 34569) | constructor(input, fileLoc = 'lockfile') {
    method onComment (line 34575) | onComment(token) {
    method next (line 34592) | next() {
    method unexpected (line 34609) | unexpected(msg = 'Unexpected token') {
    method expect (line 34613) | expect(tokType) {
    method eat (line 34621) | eat(tokType) {
    method parse (line 34630) | parse(indent = 0) {
  function extractConflictVariants (line 34755) | function extractConflictVariants(str) {
  function hasMergeConflicts (line 34798) | function hasMergeConflicts(str) {
  function parse (line 34805) | function parse(str, fileLoc) {
  function parseWithConflict (line 34824) | function parseWithConflict(str, fileLoc) {
  function copy (line 34872) | function copy(o, to) {
  function checkDataType (line 34879) | function checkDataType(dataType, data, negate) {
  function checkDataTypes (line 34898) | function checkDataTypes(dataTypes, data) {
  function coerceToTypes (line 34921) | function coerceToTypes(optionCoerceTypes, dataTypes) {
  function toHash (line 34938) | function toHash(arr) {
  function getProperty (line 34947) | function getProperty(key) {
  function escapeQuotes (line 34956) | function escapeQuotes(str) {
  function varOccurences (line 34965) | function varOccurences(str, dataVar) {
  function varReplace (line 34972) | function varReplace(str, dataVar, expr) {
  function cleanUpCode (line 34982) | function cleanUpCode(out) {
  function finalCleanUpCode (line 34999) | function finalCleanUpCode(out, async) {
  function schemaHasRules (line 35015) | function schemaHasRules(schema, rules) {
  function schemaHasRulesExcept (line 35021) | function schemaHasRulesExcept(schema, rules, exceptKeyword) {
  function toQuotedString (line 35027) | function toQuotedString(str) {
  function getPathExpr (line 35032) | function getPathExpr(currentPath, expr, jsonPointers, isNumber) {
  function getPath (line 35040) | function getPath(currentPath, prop, jsonPointers) {
  function getData (line 35050) | function getData($data, lvl, paths) {
  function joinPaths (line 35085) | function joinPaths (a, b) {
  function unescapeFragment (line 35091) | function unescapeFragment(str) {
  function escapeFragment (line 35096) | function escapeFragment(str) {
  function escapeJsonPointer (line 35101) | function escapeJsonPointer(str) {
  function unescapeJsonPointer (line 35106) | function unescapeJsonPointer(str) {
  function _load_asyncToGenerator (line 35125) | function _load_asyncToGenerator() {
  function revoke (line 35246) | function revoke() {
  function _load_errors (line 35278) | function _load_errors() {
  function _interopRequireDefault (line 35282) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function getOneTimePassword (line 35284) | function getOneTimePassword(reporter) {
  function hasWrapper (line 35288) | function hasWrapper(commander, args) {
  function setFlags (line 35292) | function setFlags(commander) {
  function _load_asyncToGenerator (line 35309) | function _load_asyncToGenerator() {
  function _load_format (line 35317) | function _load_format() {
  function _load_index (line 35323) | function _load_index() {
  function _load_isCi (line 35329) | function _load_isCi() {
  function _load_os (line 35335) | function _load_os() {
  function _interopRequireWildcard (line 35339) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 35341) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function stringifyLangArgs (line 35348) | function stringifyLangArgs(args) {
  class BaseReporter (line 35370) | class BaseReporter {
    method constructor (line 35371) | constructor(opts = {}) {
    method lang (line 35391) | lang(key, ...args) {
    method rawText (line 35411) | rawText(str) {
    method verbose (line 35419) | verbose(msg) {
    method verboseInspect (line 35425) | verboseInspect(val) {
    method _verbose (line 35431) | _verbose(msg) {}
    method _verboseInspect (line 35432) | _verboseInspect(val) {}
    method _getStandardInput (line 35434) | _getStandardInput() {
    method initPeakMemoryCounter (line 35451) | initPeakMemoryCounter() {
    method checkPeakMemory (line 35460) | checkPeakMemory() {
    method close (line 35470) | close() {
    method getTotalTime (line 35477) | getTotalTime() {
    method list (line 35482) | list(key, items, hints) {}
    method tree (line 35485) | tree(key, obj, { force = false } = {}) {}
    method step (line 35488) | step(current, total, message, emoji) {}
    method error (line 35492) | error(message) {}
    method info (line 35495) | info(message) {}
    method warn (line 35498) | warn(message) {}
    method success (line 35501) | success(message) {}
    method log (line 35505) | log(message, { force = false } = {}) {}
    method command (line 35508) | command(command) {}
    method inspect (line 35511) | inspect(value) {}
    method header (line 35514) | header(command, pkg) {}
    method footer (line 35517) | footer(showPeakMemory) {}
    method table (line 35520) | table(head, body) {}
    method auditAction (line 35523) | auditAction(recommendation) {}
    method auditManualReview (line 35526) | auditManualReview() {}
    method auditAdvisory (line 35529) | auditAdvisory(resolution, auditAdvisory) {}
    method auditSummary (line 35532) | auditSummary(auditMetadata) {}
    method activity (line 35535) | activity() {
    method activitySet (line 35543) | activitySet(total, workers) {
    method question (line 35556) | question(question, options = {}) {
    method questionAffirm (line 35561) | questionAffirm(question) {
    method select (line 35589) | select(header, question, options) {
    method progress (line 35594) | progress(total) {
    method disableProgress (line 35599) | disableProgress() {
    method prompt (line 35604) | prompt(message, choices, options = {}) {
  function _load_asyncToGenerator (line 35623) | function _load_asyncToGenerator() {
  function _load_errors (line 35631) | function _load_errors() {
  function _load_index (line 35637) | function _load_index() {
  function _load_gitResolver (line 35643) | function _load_gitResolver() {
  function _load_exoticResolver (line 35649) | function _load_exoticResolver() {
  function _load_git (line 35655) | function _load_git() {
  function _load_guessName (line 35661) | function _load_guessName() {
  function _interopRequireDefault (line 35665) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function parseHash (line 35667) | function parseHash(fragment) {
  function explodeHostedGitFragment (line 35672) | function explodeHostedGitFragment(fragment, reporter) {
  class HostedGitResolver (line 35699) | class HostedGitResolver extends (_exoticResolver || _load_exoticResolver...
    method constructor (line 35700) | constructor(request, fragment) {
    method getTarballUrl (line 35713) | static getTarballUrl(exploded, commit) {
    method getGitHTTPUrl (line 35719) | static getGitHTTPUrl(exploded) {
    method getGitHTTPBaseUrl (line 35724) | static getGitHTTPBaseUrl(exploded) {
    method getGitSSHUrl (line 35729) | static getGitSSHUrl(exploded) {
    method getHTTPFileUrl (line 35734) | static getHTTPFileUrl(exploded, filename, commit) {
    method getRefOverHTTP (line 35741) | getRefOverHTTP(url) {
    method resolveOverHTTP (line 35777) | resolveOverHTTP(url) {
    method hasHTTPCapability (line 35849) | hasHTTPCapability(url) {
    method resolve (line 35862) | resolve() {
  function _load_map (line 35916) | function _load_map() {
  function _interopRequireDefault (line 35920) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class BlockingQueue (line 35924) | class BlockingQueue {
    method constructor (line 35925) | constructor(alias, maxConcurrency = Infinity) {
    method stillActive (line 35939) | stillActive() {
    method stuckTick (line 35951) | stuckTick() {
    method push (line 35958) | push(key, factory) {
    method shift (line 35976) | shift(key) {
    method maybePushConcurrencyQueue (line 36029) | maybePushConcurrencyQueue(run) {
    method shiftConcurrencyQueue (line 36037) | shiftConcurrencyQueue() {
  function _load_extends (line 36062) | function _load_extends() {
  function _load_asyncToGenerator (line 36068) | function _load_asyncToGenerator() {
  function _load_errors (line 36456) | function _load_errors() {
  function _load_constants (line 36462) | function _load_constants() {
  function _load_child (line 36468) | function _load_child() {
  function _load_fs (line 36474) | function _load_fs() {
  function _load_dynamicRequire (line 36480) | function _load_dynamicRequire() {
  function _load_portableScript (line 36486) | function _load_portableScript() {
  function _load_fixCmdWinSlashes (line 36492) | function _load_fixCmdWinSlashes() {
  function _load_global (line 36498) | function _load_global() {
  function _interopRequireWildcard (line 36502) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 36504) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function checkForGypIfNeeded (line 36528) | function checkForGypIfNeeded(config, cmd, paths) {
  function isArray (line 36581) | function isArray(arg) {
  function isBoolean (line 36589) | function isBoolean(arg) {
  function isNull (line 36594) | function isNull(arg) {
  function isNullOrUndefined (line 36599) | function isNullOrUndefined(arg) {
  function isNumber (line 36604) | function isNumber(arg) {
  function isString (line 36609) | function isString(arg) {
  function isSymbol (line 36614) | function isSymbol(arg) {
  function isUndefined (line 36619) | function isUndefined(arg) {
  function isRegExp (line 36624) | function isRegExp(re) {
  function isObject (line 36629) | function isObject(arg) {
  function isDate (line 36634) | function isDate(d) {
  function isError (line 36639) | function isError(e) {
  function isFunction (line 36644) | function isFunction(arg) {
  function isPrimitive (line 36649) | function isPrimitive(arg) {
  function objectToString (line 36661) | function objectToString(o) {
  function micromatch (line 36693) | function micromatch(files, patterns, opts) {
  function match (line 36732) | function match(files, pattern, opts) {
  function filter (line 36809) | function filter(patterns, opts) {
  function isMatch (line 36855) | function isMatch(fp, pattern, opts) {
  function contains (line 36872) | function contains(fp, pattern, opts) {
  function any (line 36897) | function any(fp, patterns, opts) {
  function matchKeys (line 36924) | function matchKeys(obj, glob, options) {
  function matcher (line 36949) | function matcher(pattern, opts) {
  function toRegex (line 36998) | function toRegex(glob, options) {
  function wrapGlob (line 37035) | function wrapGlob(glob, opts) {
  function makeRe (line 37055) | function makeRe(glob, opts) {
  function msg (line 37077) | function msg(method, what, type) {
  function Duplex (line 37172) | function Duplex(options) {
  function onend (line 37199) | function onend() {
  function onEndNT (line 37209) | function onEndNT(self) {
  function multicast (line 37251) | function multicast(subjectOrSubjectFactory, selector) {
  function MulticastOperator (line 37272) | function MulticastOperator(subjectFactory, selector) {
  function identity (line 37307) | function identity(x) {
  function _load_asyncToGenerator (line 37341) | function _load_asyncToGenerator() {
  function _load_fs (line 37378) | function _load_fs() {
  function _load_fs2 (line 37384) | function _load_fs2() {
  function _load_path (line 37390) | function _load_path() {
  function _interopRequireDefault (line 37394) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _load_asyncToGenerator (line 37420) | function _load_asyncToGenerator() {
  function throwPermError (line 37571) | function throwPermError(err, dest) {
  function _load_errors (line 37691) | function _load_errors() {
  function _load_index (line 37697) | function _load_index() {
  function _load_baseReporter (line 37703) | function _load_baseReporter() {
  function _load_buildSubCommands (line 37709) | function _load_buildSubCommands() {
  function _load_lockfile (line 37715) | function _load_lockfile() {
  function _load_install (line 37721) | function _load_install() {
  function _load_add (line 37727) | function _load_add() {
  function _load_remove (line 37733) | function _load_remove() {
  function _load_upgrade (line 37739) | function _load_upgrade() {
  function _load_upgradeInteractive (line 37745) | function _load_upgradeInteractive() {
  function _load_packageLinker (line 37751) | function _load_packageLinker() {
  function _load_constants (line 37757) | function _load_constants() {
  function _load_fs (line 37763) | function _load_fs() {
  function _interopRequireWildcard (line 37767) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 37769) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class GlobalAdd (line 37771) | class GlobalAdd extends (_add || _load_add()).Add {
    method constructor (line 37772) | constructor(args, flags, config, reporter, lockfile) {
    method maybeOutputSaveTree (line 37778) | maybeOutputSaveTree() {
    method _logSuccessSaveLockfile (line 37799) | _logSuccessSaveLockfile() {
  function hasWrapper (line 37806) | function hasWrapper(flags, args) {
  function ls (line 37810) | function ls(manifest, reporter, saved) {
  method add (line 37826) | add(config, reporter, flags, args) {
  method bin (line 37845) | bin(config, reporter, flags, args) {
  method dir (line 37851) | dir(config, reporter, flags, args) {
  method ls (line 37856) | ls(config, reporter, flags, args) {
  method list (line 37863) | list(config, reporter, flags, args) {
  method remove (line 37869) | remove(config, reporter, flags, args) {
  method upgrade (line 37883) | upgrade(config, reporter, flags, args) {
  method upgradeInteractive (line 37897) | upgradeInteractive(config, reporter, flags, args) {
  function setFlags (line 37915) | function setFlags(commander) {
  function _load_asyncToGenerator (line 37935) | function _load_asyncToGenerator() {
  function _load_path (line 37941) | function _load_path() {
  function _load_invariant (line 37947) | function _load_invariant() {
  function _load_semver (line 37953) | function _load_semver() {
  function _load_validate (line 37959) | function _load_validate() {
  function _load_lockfile (line 37965) | function _load_lockfile() {
  function _load_packageReference (line 37971) | function _load_packageReference() {
  function _load_index (line 37977) | function _load_index() {
  function _load_errors (line 37983) | function _load_errors() {
  function _load_constants (line 37989) | function _load_constants() {
  function _load_version (line 37995) | function _load_version() {
  function _load_workspaceResolver (line 38001) | function _load_workspaceResolver() {
  function _load_fs (line 38007) | function _load_fs() {
  function _load_normalizePattern (line 38013) | function _load_normalizePattern() {
  function _interopRequireWildcard (line 38017) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 38019) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class PackageRequest (line 38023) | class PackageRequest {
    method constructor (line 38024) | constructor(req, resolver) {
    method init (line 38038) | init() {
    method getLocked (line 38042) | getLocked(remoteType) {
    method findVersionOnRegistry (line 38079) | findVersionOnRegistry(pattern) {
    method getRegistryResolver (line 38124) | getRegistryResolver() {
    method normalizeRange (line 38133) | normalizeRange(pattern) {
    method normalize (line 38156) | normalize(pattern) {
    method findExoticVersionInfo (line 38175) | findExoticVersionInfo(ExoticResolver, range) {
    method findVersionInfo (line 38185) | findVersionInfo() {
    method reportResolvedRangeMatch (line 38210) | reportResolvedRangeMatch(info, resolved) {}
    method resolveToExistingVersion (line 38217) | resolveToExistingVersion(info) {
    method find (line 38239) | find({ fresh, frozen }) {
    method validateVersionInfo (line 38379) | static validateVersionInfo(info, reporter) {
    method getPackageVersion (line 38409) | static getPackageVersion(info) {
    method getOutdatedPackages (line 38418) | static getOutdatedPackages(lockfile, install, config, reporter, filter...
  class BaseResolver (line 38513) | class BaseResolver {
    method constructor (line 38514) | constructor(request, fragment) {
    method fork (line 38524) | fork(Resolver, resolveArg, ...args) {
    method resolve (line 38530) | resolve(resolveArg) {
  function _load_asyncToGenerator (line 38549) | function _load_asyncToGenerator() {
  function _load_index (line 38555) | function _load_index() {
  function _load_misc (line 38561) | function _load_misc() {
  function _load_version (line 38567) | function _load_version() {
  function _load_guessName (line 38573) | function _load_guessName() {
  function _load_index2 (line 38579) | function _load_index2() {
  function _load_exoticResolver (line 38585) | function _load_exoticResolver() {
  function _load_git (line 38591) | function _load_git() {
  function _interopRequireWildcard (line 38595) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 38597) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class GitResolver (line 38605) | class GitResolver extends (_exoticResolver || _load_exoticResolver()).de...
    method constructor (line 38606) | constructor(request, fragment) {
    method isVersion (line 38618) | static isVersion(pattern) {
    method resolve (line 38652) | resolve(forked) {
  function _load_errors (line 38842) | function _load_errors() {
  function _load_util (line 38848) | function _load_util() {
  function _load_typos (line 38854) | function _load_typos() {
  function _interopRequireDefault (line 38858) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function isValidName (line 38874) | function isValidName(name) {
  function isValidScopedName (line 38878) | function isValidScopedName(name) {
  function isValidPackageName (line 38887) | function isValidPackageName(name) {
  function cleanDependencies (line 38891) | function cleanDependencies(info, isRoot, reporter, warn) {
  function selectColor (line 39367) | function selectColor(namespace) {
  function createDebug (line 39386) | function createDebug(namespace) {
  function destroy (line 39458) | function destroy () {
  function enable (line 39476) | function enable(namespaces) {
  function disable (line 39508) | function disable() {
  function enabled (line 39520) | function enabled(name) {
  function coerce (line 39546) | function coerce(val) {
  function ECFieldElementFp (line 39568) | function ECFieldElementFp(q,x) {
  function feFpEquals (line 39574) | function feFpEquals(other) {
  function feFpToBigInteger (line 39579) | function feFpToBigInteger() {
  function feFpNegate (line 39583) | function feFpNegate() {
  function feFpAdd (line 39587) | function feFpAdd(b) {
  function feFpSubtract (line 39591) | function feFpSubtract(b) {
  function feFpMultiply (line 39595) | function feFpMultiply(b) {
  function feFpSquare (line 39599) | function feFpSquare() {
  function feFpDivide (line 39603) | function feFpDivide(b) {
  function ECPointFp (line 39620) | function ECPointFp(curve,x,y,z) {
  function pointFpGetX (line 39636) | function pointFpGetX() {
  function pointFpGetY (line 39645) | function pointFpGetY() {
  function pointFpEquals (line 39654) | function pointFpEquals(other) {
  function pointFpIsInfinity (line 39667) | function pointFpIsInfinity() {
  function pointFpNegate (line 39672) | function pointFpNegate() {
  function pointFpAdd (line 39676) | function pointFpAdd(b) {
  function pointFpTwice (line 39713) | function pointFpTwice() {
  function pointFpMultiply (line 39745) | function pointFpMultiply(k) {
  function pointFpMultiplyTwo (line 39771) | function pointFpMultiplyTwo(j,x,k) {
  function ECCurveFp (line 39815) | function ECCurveFp(q,a,b) {
  function curveFpGetQ (line 39823) | function curveFpGetQ() {
  function curveFpGetA (line 39827) | function curveFpGetA() {
  function curveFpGetB (line 39831) | function curveFpGetB() {
  function curveFpEquals (line 39835) | function curveFpEquals(other) {
  function curveFpGetInfinity (line 39840) | function curveFpGetInfinity() {
  function curveFpFromBigInteger (line 39844) | function curveFpFromBigInteger(x) {
  function curveReduce (line 39848) | function curveReduce(x) {
  function curveFpDecodePointHex (line 39853) | function curveFpDecodePointHex(s) {
  function curveFpEncodePointHex (line 39877) | function curveFpEncodePointHex(p) {
  function newError (line 40138) | function newError (er) {
  function realpath (line 40146) | function realpath (p, cache, cb) {
  function realpathSync (line 40164) | function realpathSync (p, cache) {
  function monkeypatch (line 40180) | function monkeypatch () {
  function unmonkeypatch (line 40185) | function unmonkeypatch () {
  function ownProp (line 40205) | function ownProp (obj, field) {
  function alphasorti (line 40214) | function alphasorti (a, b) {
  function alphasort (line 40218) | function alphasort (a, b) {
  function setupIgnores (line 40222) | function setupIgnores (self, options) {
  function ignoreMap (line 40234) | function ignoreMap (pattern) {
  function setopts (line 40247) | function setopts (self, pattern, options) {
  function finish (line 40316) | function finish (self) {
  function mark (line 40373) | function mark (self, p) {
  function makeAbs (line 40397) | function makeAbs (self, f) {
  function isIgnored (line 40418) | function isIgnored (self, path) {
  function childrenIgnored (line 40427) | function childrenIgnored (self, path) {
  function mkdirP (line 40516) | function mkdirP (p, opts, f, made) {
  function defaultIfEmpty (line 40621) | function defaultIfEmpty(defaultValue) {
  function DefaultIfEmptyOperator (line 40628) | function DefaultIfEmptyOperator(defaultValue) {
  function DefaultIfEmptySubscriber (line 40638) | function DefaultIfEmptySubscriber(destination, defaultValue) {
  function filter (line 40670) | function filter(predicate, thisArg) {
  function FilterOperator (line 40676) | function FilterOperator(predicate, thisArg) {
  function FilterSubscriber (line 40687) | function FilterSubscriber(destination, predicate, thisArg) {
  function mergeMap (line 40733) | function mergeMap(project, resultSelector, concurrent) {
  function MergeMapOperator (line 40746) | function MergeMapOperator(project, concurrent) {
  function MergeMapSubscriber (line 40761) | function MergeMapSubscriber(destination, project, concurrent) {
  function AsyncAction (line 40841) | function AsyncAction(scheduler, work) {
  function AsyncScheduler (line 40945) | function AsyncScheduler(SchedulerAction, now) {
  function getSymbolIterator (line 41009) | function getSymbolIterator() {
  function ArgumentOutOfRangeErrorImpl (line 41027) | function ArgumentOutOfRangeErrorImpl() {
  function EmptyErrorImpl (line 41045) | function EmptyErrorImpl() {
  function isFunction (line 41063) | function isFunction(x) {
  function Certificate (line 41098) | function Certificate(opts) {
  function Fingerprint (line 41473) | function Fingerprint(opts) {
  function addColons (line 41589) | function addColons(s) {
  function base64Strip (line 41594) | function base64Strip(s) {
  function sshBase64Format (line 41599) | function sshBase64Format(alg, h) {
  function read (line 41646) | function read(buf, options) {
  function write (line 41650) | function write(key, options) {
  function readMPInt (line 41655) | function readMPInt(der, nm) {
  function readPkcs8 (line 41661) | function readPkcs8(alg, type, der) {
  function readPkcs8RSAPublic (line 41707) | function readPkcs8RSAPublic(der) {
  function readPkcs8RSAPrivate (line 41730) | function readPkcs8RSAPrivate(der) {
  function readPkcs8DSAPublic (line 41765) | function readPkcs8DSAPublic(der) {
  function readPkcs8DSAPrivate (line 41792) | function readPkcs8DSAPrivate(der) {
  function readECDSACurve (line 41819) | function readECDSACurve(der) {
  function readPkcs8ECDSAPrivate (line 41916) | function readPkcs8ECDSAPrivate(der) {
  function readPkcs8ECDSAPublic (line 41944) | function readPkcs8ECDSAPublic(der) {
  function readPkcs8EdDSAPublic (line 41962) | function readPkcs8EdDSAPublic(der) {
  function readPkcs8X25519Public (line 41978) | function readPkcs8X25519Public(der) {
  function readPkcs8EdDSAPrivate (line 41991) | function readPkcs8EdDSAPrivate(der) {
  function readPkcs8X25519Private (line 42018) | function readPkcs8X25519Private(der) {
  function writePkcs8 (line 42039) | function writePkcs8(der, key) {
  function writePkcs8RSAPrivate (line 42084) | function writePkcs8RSAPrivate(key, der) {
  function writePkcs8RSAPublic (line 42109) | function writePkcs8RSAPublic(key, der) {
  function writePkcs8DSAPrivate (line 42124) | function writePkcs8DSAPrivate(key, der) {
  function writePkcs8DSAPublic (line 42138) | function writePkcs8DSAPublic(key, der) {
  function writeECDSACurve (line 42152) | function writeECDSACurve(key, der) {
  function writePkcs8ECDSAPublic (line 42194) | function writePkcs8ECDSAPublic(key, der) {
  function writePkcs8ECDSAPrivate (line 42202) | function writePkcs8ECDSAPrivate(key, der) {
  function writePkcs8EdDSAPublic (line 42223) | function writePkcs8EdDSAPublic(key, der) {
  function writePkcs8EdDSAPrivate (line 42229) | function writePkcs8EdDSAPrivate(key, der) {
  function Identity (line 42278) | function Identity(opts) {
  function globMatch (line 42408) | function globMatch(a, b) {
  function SSHBuffer (line 42545) | function SSHBuffer(opts) {
  function wrappy (line 42720) | function wrappy (fn, cb) {
  function _load_extends (line 42762) | function _load_extends() {
  function _load_asyncToGenerator (line 42768) | function _load_asyncToGenerator() {
  function _load_executeLifecycleScript (line 42776) | function _load_executeLifecycleScript() {
  function _load_path (line 42782) | function _load_path() {
  function _load_conversion (line 42788) | function _load_conversion() {
  function _load_index (line 42794) | function _load_index() {
  function _load_errors (line 42800) | function _load_errors() {
  function _load_fs (line 42806) | function _load_fs() {
  function _load_constants (line 42812) | function _load_constants() {
  function _load_packageConstraintResolver (line 42818) | function _load_packageConstraintResolver() {
  function _load_requestManager (line 42824) | function _load_requestManager() {
  function _load_index2 (line 42830) | function _load_index2() {
  function _load_index3 (line 42836) | function _load_index3() {
  function _load_map (line 42842) | function _load_map() {
  function _interopRequireWildcard (line 42846) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 42848) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function sortObject (line 42857) | function sortObject(object) {
  class Config (line 42865) | class Config {
    method constructor (line 42866) | constructor(reporter) {
    method getCache (line 42935) | getCache(key, factory) {
    method getOption (line 42951) | getOption(key, resolve = false) {
    method resolveConstraints (line 42965) | resolveConstraints(versions, range) {
    method init (line 42973) | init(opts = {}) {
    method _init (line 43199) | _init(opts) {
    method generateUniquePackageSlug (line 43248) | generateUniquePackageSlug(pkg) {
    method generateModuleCachePath (line 43284) | generateModuleCachePath(pkg) {
    method getUnpluggedPath (line 43295) | getUnpluggedPath() {
    method generatePackageUnpluggedPath (line 43302) | generatePackageUnpluggedPath(pkg) {
    method listUnpluggedPackageFolders (line 43310) | listUnpluggedPackageFolders() {
    method executeLifecycleScript (line 43351) | executeLifecycleScript(commandName, cwd) {
    method getTemp (line 43363) | getTemp(filename) {
    method getOfflineMirrorPath (line 43374) | getOfflineMirrorPath(packageFilename) {
    method isValidModuleDest (line 43415) | isValidModuleDest(dest) {
    method readPackageMetadata (line 43433) | readPackageMetadata(dir) {
    method readManifest (line 43455) | readManifest(dir, priorityRegistry, isRoot = false) {
    method maybeReadManifest (line 43474) | maybeReadManifest(dir, priorityRegistry, isRoot = false) {
    method readRootManifest (line 43531) | readRootManifest() {
    method tryManifest (line 43539) | tryManifest(dir, registry, isRoot) {
    method findManifest (line 43557) | findManifest(dir, isRoot) {
    method findWorkspaceRoot (line 43586) | findWorkspaceRoot(initial) {
    method resolveWorkspaces (line 43616) | resolveWorkspaces(root, rootManifest) {
    method getWorkspaces (line 43692) | getWorkspaces(manifest, shouldThrow = false) {
    method getFolder (line 43740) | getFolder(pkg) {
    method getRootManifests (line 43754) | getRootManifests() {
    method saveRootManifests (line 43796) | saveRootManifests(manifests) {
    method readJson (line 43850) | readJson(loc, factory = (_fs || _load_fs()).readJson) {
    method create (line 43862) | static create(opts = {}, reporter = new (_index3 || _load_index3()).No...
  function extractWorkspaces (line 43872) | function extractWorkspaces(manifest) {
  function _load_asyncToGenerator (line 43936) | function _load_asyncToGenerator() {
  function _load_extends (line 43942) | function _load_extends() {
  function _load_lockfile (line 43970) | function _load_lockfile() {
  function _load_normalizePattern (line 43976) | function _load_normalizePattern() {
  function _load_workspaceLayout (line 43982) | function _load_workspaceLayout() {
  function _load_index (line 43988) | function _load_index() {
  function _load_list (line 43994) | function _load_list() {
  function _load_install (line 44000) | function _load_install() {
  function _load_errors (line 44006) | function _load_errors() {
  function _load_constants (line 44012) | function _load_constants() {
  function _load_fs (line 44018) | function _load_fs() {
  function _load_invariant (line 44024) | function _load_invariant() {
  function _load_path (line 44030) | function _load_path() {
  function _load_semver (line 44036) | function _load_semver() {
  function _interopRequireWildcard (line 44040) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 44042) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class Add (line 44046) | class Add extends (_install || _load_install()).Install {
    method constructor (line 44047) | constructor(args, flags, config, reporter, lockfile) {
    method prepareRequests (line 44060) | prepareRequests(requests) {
    method getPatternVersion (line 44089) | getPatternVersion(pattern, pkg) {
    method preparePatterns (line 44123) | preparePatterns(patterns) {
    method preparePatternsForLinking (line 44153) | preparePatternsForLinking(patterns, cwdManifest, cwdIsRoot) {
    method bailout (line 44193) | bailout(patterns, workspaceLayout) {
    method init (line 44215) | init() {
    method applyChanges (line 44233) | applyChanges(manifests) {
    method fetchRequestFromCwd (line 44262) | fetchRequestFromCwd() {
    method maybeOutputSaveTree (line 44270) | maybeOutputSaveTree(patterns) {
    method savePackages (line 44335) | savePackages() {
    method _iterateAddedPackages (line 44339) | _iterateAddedPackages(f) {
  function hasWrapper (line 44379) | function hasWrapper(commander) {
  function setFlags (line 44383) | function setFlags(commander) {
  function _load_asyncToGenerator (line 44409) | function _load_asyncToGenerator() {
  function _load_fs (line 44612) | function _load_fs() {
  function _load_filter (line 44618) | function _load_filter() {
  function _load_errors (line 44624) | function _load_errors() {
  function _interopRequireWildcard (line 44628) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 44630) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function packWithIgnoreAndHeaders (line 44651) | function packWithIgnoreAndHeaders(cwd, ignoreFunction, { mapHeader } = {...
  function setFlags (line 44664) | function setFlags(commander) {
  function hasWrapper (line 44669) | function hasWrapper(commander, args) {
  function _load_asyncToGenerator (line 44686) | function _load_asyncToGenerator() {
  function _load_index (line 44692) | function _load_index() {
  function _load_constants (line 44698) | function _load_constants() {
  function _load_fs (line 44704) | function _load_fs() {
  function _load_mutex (line 44710) | function _load_mutex() {
  function _interopRequireWildcard (line 44714) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 44716) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class BaseFetcher (line 44723) | class BaseFetcher {
    method constructor (line 44724) | constructor(dest, remote, config) {
    method setupMirrorFromCache (line 44735) | setupMirrorFromCache() {
    method _fetch (line 44741) | _fetch() {
    method fetch (line 44745) | fetch(defaultManifest) {
  function hash (line 44844) | function hash(content, type = 'md5') {
  class HashStream (line 44848) | class HashStream extends stream.Transform {
    method constructor (line 44849) | constructor(options) {
    method _transform (line 44855) | _transform(chunk, encoding, callback) {
    method getHash (line 44861) | getHash() {
    method test (line 44865) | test(sum) {
  function _load_url (line 44885) | function _load_url() {
  function _interopRequireDefault (line 44889) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function cleanup (line 44891) | function cleanup(name) {
  function guessNameFallback (line 44896) | function guessNameFallback(source) {
  function guessName (line 44902) | function guessName(source) {
  function HttpSignatureError (line 45104) | function HttpSignatureError(message, caller) {
  function InvalidAlgorithmError (line 45113) | function InvalidAlgorithmError(message) {
  function validateAlgorithm (line 45118) | function validateAlgorithm(algorithm) {
  class Separator (line 45216) | class Separator {
    method constructor (line 45217) | constructor(line) {
    method toString (line 45226) | toString() {
  class Paginator (line 45259) | class Paginator {
    method constructor (line 45260) | constructor(screen) {
    method paginate (line 45266) | paginate(output, active, pageSize) {
  function nextTick (line 45477) | function nextTick(fn, arg1, arg2, arg3) {
  function AsyncSubject (line 45764) | function AsyncSubject() {
  function Notification (line 45821) | function Notification(kind, value, error) {
  method useDeprecatedSynchronousErrorHandling (line 45898) | set useDeprecatedSynchronousErrorHandling(value) {
  method useDeprecatedSynchronousErrorHandling (line 45908) | get useDeprecatedSynchronousErrorHandling() {
  function concat (line 45930) | function concat() {
  function reduce (line 45958) | function reduce(accumulator, seed) {
  function defaultErrorFactory (line 45996) | function defaultErrorFactory() {
  function ObjectUnsubscribedErrorImpl (line 46009) | function ObjectUnsubscribedErrorImpl() {
  function isNumeric (line 46029) | function isNumeric(val) {
  function noop (line 46042) | function noop() { }
  function read (line 46074) | function read(buf, options) {
  function readSSHPrivate (line 46080) | function readSSHPrivate(type, buf, options) {
  function write (line 46186) | function write(key, options) {
  function validate (line 46645) | function validate (fs, name, root, cb) {
  function mkdirfix (line 46654) | function mkdirfix (name, opts, cb) {
  function _load_misc (line 46709) | function _load_misc() {
  function _load_constants (line 46715) | function _load_constants() {
  function _load_package (line 46721) | function _load_package() {
  function shouldWrapKey (line 46727) | function shouldWrapKey(str) {
  function maybeWrap (line 46731) | function maybeWrap(str) {
  function priorityThenAlphaSort (line 46749) | function priorityThenAlphaSort(a, b) {
  function _stringify (line 46757) | function _stringify(obj, options) {
  function stringify (line 46807) | function stringify(obj, noHeader, enableVersions) {
  function _load_consoleReporter (line 46842) | function _load_consoleReporter() {
  function _load_bufferReporter (line 46855) | function _load_bufferReporter() {
  function _load_eventReporter (line 46868) | function _load_eventReporter() {
  function _load_jsonReporter (line 46881) | function _load_jsonReporter() {
  function _load_noopReporter (line 46894) | function _load_noopReporter() {
  function _load_baseReporter (line 46907) | function _load_baseReporter() {
  function _interopRequireDefault (line 46918) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function cmdShimIfExists (line 46951) | function cmdShimIfExists (src, to, opts) {
  function rm (line 46960) | function rm (path) {
  function cmdShim (line 46964) | function cmdShim (src, to, opts) {
  function cmdShim_ (line 46970) | function cmdShim_ (src, to, opts) {
  function writeShim (line 46979) | function writeShim (src, to, opts) {
  function writeShim_ (line 47001) | function writeShim_ (src, to, opts) {
  function chmodShim (line 47159) | function chmodShim (to, {createCmdFile, createPwshFile}) {
  function normalizePathEnvVar (line 47171) | function normalizePathEnvVar (nodePath) {
  function ValidationError (line 47208) | function ValidationError(errors) {
  function MissingRefError (line 47220) | function MissingRefError(baseId, ref, message) {
  function errorSubclass (line 47227) | function errorSubclass(Subclass) {
  function resolve (line 47264) | function resolve(compile, root, ref) {
  function resolveSchema (line 47306) | function resolveSchema(root, ref) {
  function resolveRecursive (line 47338) | function resolveRecursive(root, ref, parsedRef) {
  function getJsonPointer (line 47354) | function getJsonPointer(parsedRef, baseId, schema, root) {
  function inlineRef (line 47396) | function inlineRef(schema, limit) {
  function checkNoRef (line 47403) | function checkNoRef(schema) {
  function countKeys (line 47421) | function countKeys(schema) {
  function getFullPath (line 47445) | function getFullPath(id, normalize) {
  function _getFullPath (line 47452) | function _getFullPath(p) {
  function normalizeId (line 47459) | function normalizeId(id) {
  function resolveUrl (line 47464) | function resolveUrl(baseId, id) {
  function resolveIds (line 47471) | function resolveIds(schema) {
  function _load_asyncToGenerator (line 47649) | function _load_asyncToGenerator() {
  function _load_add (line 47743) | function _load_add() {
  function _load_lockfile (line 47749) | function _load_lockfile() {
  function _load_packageRequest (line 47755) | function _load_packageRequest() {
  function _load_normalizePattern (line 47761) | function _load_normalizePattern() {
  function _load_install (line 47767) | function _load_install() {
  function _interopRequireDefault (line 47771) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function setUserRequestedPackageVersions (line 47784) | function setUserRequestedPackageVersions(deps, args, latest, packagePatt...
  function getRangeOperator (line 47835) | function getRangeOperator(version) {
  function buildPatternToUpgradeTo (line 47842) | function buildPatternToUpgradeTo(dep, flags) {
  function scopeFilter (line 47866) | function scopeFilter(flags, dep) {
  function cleanLockfile (line 47878) | function cleanLockfile(lockfile, deps, packagePatterns, reporter) {
  function setFlags (line 47897) | function setFlags(commander) {
  function hasWrapper (line 47909) | function hasWrapper(commander, args) {
  function _load_extends (line 47929) | function _load_extends() {
  function _load_asyncToGenerator (line 47935) | function _load_asyncToGenerator() {
  function _load_constants (line 47941) | function _load_constants() {
  function _load_fs (line 47947) | function _load_fs() {
  function _load_misc (line 47953) | function _load_misc() {
  function _load_packageNameUtils (line 47959) | function _load_packageNameUtils() {
  function _load_workspaceLayout (line 47965) | function _load_workspaceLayout() {
  function _interopRequireWildcard (line 47969) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 47971) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class InstallationIntegrityChecker (line 48001) | class InstallationIntegrityChecker {
    method constructor (line 48002) | constructor(config) {
    method _getModulesRootFolder (line 48010) | _getModulesRootFolder() {
    method _getIntegrityFileFolder (line 48024) | _getIntegrityFileFolder() {
    method _getIntegrityFileLocation (line 48038) | _getIntegrityFileLocation() {
    method _getModulesFolders (line 48059) | _getModulesFolders({ workspaceLayout } = {}) {
    method _getIntegrityListing (line 48097) | _getIntegrityListing({ workspaceLayout } = {}) {
    method _generateIntegrityFile (line 48162) | _generateIntegrityFile(lockfile, patterns, flags, workspaceLayout, art...
    method _getIntegrityFile (line 48325) | _getIntegrityFile(locationPath) {
    method _compareIntegrityFiles (line 48337) | _compareIntegrityFiles(actual, expected, checkFiles, workspaceLayout) {
    method check (line 48429) | check(patterns, lockfile, flags, workspaceLayout) {
    method getArtifacts (line 48486) | getArtifacts() {
    method save (line 48510) | save(patterns, lockfile, flags, workspaceLayout, artifacts) {
    method removeIntegrityFile (line 48524) | removeIntegrityFile() {
  function _load_errors (line 48554) | function _load_errors() {
  function _load_map (line 48560) | function _load_map() {
  function _load_misc (line 48566) | function _load_misc() {
  function _load_yarnVersion (line 48572) | function _load_yarnVersion() {
  function _load_semver (line 48578) | function _load_semver() {
  function _interopRequireDefault (line 48582) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function isValid (line 48590) | function isValid(items, actual) {
  function testEngine (line 48640) | function testEngine(name, range, versions, looseSemver) {
  function isValidArch (line 48689) | function isValidArch(archs) {
  function isValidPlatform (line 48693) | function isValidPlatform(platforms) {
  function checkOne (line 48697) | function checkOne(info, config, ignoreEngines) {
  function check (line 48771) | function check(infos, config, ignoreEngines) {
  function shouldCheckCpu (line 48790) | function shouldCheckCpu(cpu, ignorePlatform) {
  function shouldCheckPlatform (line 48794) | function shouldCheckPlatform(os, ignorePlatform) {
  function shouldCheckEngines (line 48798) | function shouldCheckEngines(engines, ignoreEngines) {
  function shouldCheck (line 48802) | function shouldCheck(manifest, options) {
  function _load_asyncToGenerator (line 48820) | function _load_asyncToGenerator() {
  function _load_errors (line 48927) | function _load_errors() {
  function _load_index (line 48933) | function _load_index() {
  function _load_fs (line 48939) | function _load_fs() {
  function _load_promise (line 48945) | function _load_promise() {
  function _interopRequireWildcard (line 48949) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 48951) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function fetchOne (line 48955) | function fetchOne(ref, config) {
  function fetch (line 48961) | function fetch(pkgs, config) {
  function _load_asyncToGenerator (line 49046) | function _load_asyncToGenerator() {
  function _load_packageHoister (line 49073) | function _load_packageHoister() {
  function _load_constants (line 49079) | function _load_constants() {
  function _load_promise (line 49085) | function _load_promise() {
  function _load_normalizePattern (line 49091) | function _load_normalizePattern() {
  function _load_misc (line 49097) | function _load_misc() {
  function _load_fs (line 49103) | function _load_fs() {
  function _load_mutex (line 49109) | function _load_mutex() {
  function _load_semver (line 49115) | function _load_semver() {
  function _load_workspaceLayout (line 49121) | function _load_workspaceLayout() {
  function _interopRequireWildcard (line 49125) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 49127) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class PackageLinker (line 49137) | class PackageLinker {
    method constructor (line 49138) | constructor(config, resolver) {
    method setArtifacts (line 49147) | setArtifacts(artifacts) {
    method setTopLevelBinLinking (line 49151) | setTopLevelBinLinking(topLevelBinLinking) {
    method linkSelfDependencies (line 49155) | linkSelfDependencies(pkg, pkgLoc, targetBinLoc, override = false) {
    method linkBinDependencies (line 49190) | linkBinDependencies(pkg, dir) {
    method findNearestInstalledVersionOfPackage (line 49294) | findNearestInstalledVersionOfPackage(pkg, binLoc) {
    method getFlatHoistedTree (line 49357) | getFlatHoistedTree(patterns, workspaceLayout, { ignoreOptional } = {}) {
    method copyModules (line 49366) | copyModules(patterns, workspaceLayout, { linkDuplicates, ignoreOptiona...
    method _buildTreeHash (line 49881) | _buildTreeHash(flatTree) {
    method getParentBinLoc (line 49906) | getParentBinLoc(parts, flatTree) {
    method determineTopLevelBinLinkOrder (line 49921) | determineTopLevelBinLinkOrder(flatTree) {
    method resolvePeerModules (line 49981) | resolvePeerModules() {
    method _satisfiesPeerDependency (line 50085) | _satisfiesPeerDependency(range, version) {
    method _warnForMissingBundledDependencies (line 50089) | _warnForMissingBundledDependencies(pkg) {
    method _isUnplugged (line 50129) | _isUnplugged(pkg, ref) {
    method init (line 50157) | init(patterns, workspaceLayout, { linkDuplicates, ignoreOptional } = {...
  function _load_tty (line 50189) | function _load_tty() {
  function _interopRequireDefault (line 50193) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function clearLine (line 50205) | function clearLine(stdout) {
  function toStartOfLine (line 50220) | function toStartOfLine(stdout) {
  function writeOnNthLine (line 50229) | function writeOnNthLine(stdout, n, msg) {
  function clearNthLine (line 50248) | function clearNthLine(stdout, n) {
  function _load_extends (line 50276) | function _load_extends() {
  function _load_baseReporter (line 50282) | function _load_baseReporter() {
  function _interopRequireDefault (line 50286) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class JSONReporter (line 50288) | class JSONReporter extends (_baseReporter || _load_baseReporter()).defau...
    method constructor (line 50289) | constructor(opts) {
    method _dump (line 50296) | _dump(type, data, error) {
    method _verbose (line 50304) | _verbose(msg) {
    method list (line 50308) | list(type, items, hints) {
    method tree (line 50312) | tree(type, trees) {
    method step (line 50316) | step(current, total, message) {
    method inspect (line 50320) | inspect(value) {
    method footer (line 50324) | footer(showPeakMemory) {
    method log (line 50328) | log(msg) {
    method command (line 50332) | command(msg) {
    method table (line 50336) | table(head, body) {
    method success (line 50340) | success(msg) {
    method error (line 50344) | error(msg) {
    method warn (line 50348) | warn(msg) {
    method info (line 50352) | info(msg) {
    method activitySet (line 50356) | activitySet(total, workers) {
    method activity (line 50396) | activity() {
    method _activity (line 50400) | _activity(data) {
    method progress (line 50422) | progress(total) {
    method auditAction (line 50443) | auditAction(recommendation) {
    method auditAdvisory (line 50447) | auditAdvisory(resolution, auditAdvisory) {
    method auditSummary (line 50451) | auditSummary(auditMetadata) {
  function _load_semver (line 50471) | function _load_semver() {
  function _load_minimatch (line 50477) | function _load_minimatch() {
  function _load_map (line 50483) | function _load_map() {
  function _load_normalizePattern (line 50489) | function _load_normalizePattern() {
  function _load_parsePackagePath (line 50495) | function _load_parsePackagePath() {
  function _load_parsePackagePath2 (line 50501) | function _load_parsePackagePath2() {
  function _load_resolvers (line 50507) | function _load_resolvers() {
  function _interopRequireDefault (line 50511) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class ResolutionMap (line 50516) | class ResolutionMap {
    method constructor (line 50517) | constructor(config) {
    method init (line 50524) | init(resolutions = {}) {
    method addToDelayQueue (line 50535) | addToDelayQueue(req) {
    method parsePatternInfo (line 50539) | parsePatternInfo(globPattern, range) {
    method find (line 50566) | find(reqPattern, parentNames) {
  function _load_asyncToGenerator (line 50619) | function _load_asyncToGenerator() {
  function _load_path (line 50625) | function _load_path() {
  function _load_invariant (line 50631) | function _load_invariant() {
  function _load_uuid (line 50637) | function _load_uuid() {
  function _load_errors (line 50643) | function _load_errors() {
  function _load_exoticResolver (line 50649) | function _load_exoticResolver() {
  function _load_misc (line 50655) | function _load_misc() {
  function _load_fs (line 50661) | function _load_fs() {
  function _interopRequireWildcard (line 50665) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 50667) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class FileResolver (line 50671) | class FileResolver extends (_exoticResolver || _load_exoticResolver()).d...
    method constructor (line 50672) | constructor(request, fragment) {
    method isVersion (line 50677) | static isVersion(pattern) {
    method resolve (line 50681) | resolve() {
  function _load_errors (line 50757) | function _load_errors() {
  function _load_gitResolver (line 50763) | function _load_gitResolver() {
  function _load_exoticResolver (line 50769) | function _load_exoticResolver() {
  function _load_misc (line 50775) | function _load_misc() {
  function _interopRequireWildcard (line 50779) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 50781) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function explodeGistFragment (line 50783) | function explodeGistFragment(fragment, reporter) {
  class GistResolver (line 50798) | class GistResolver extends (_exoticResolver || _load_exoticResolver()).d...
    method constructor (line 50800) | constructor(request, fragment) {
    method resolve (line 50812) | resolve() {
  function _load_asyncToGenerator (line 50832) | function _load_asyncToGenerator() {
  function _load_cache (line 50838) | function _load_cache() {
  function _load_errors (line 50844) | function _load_errors() {
  function _load_registryResolver (line 50850) | function _load_registryResolver() {
  function _load_npmRegistry (line 50856) | function _load_npmRegistry() {
  function _load_map (line 50862) | function _load_map() {
  function _load_fs (line 50868) | function _load_fs() {
  function _load_constants (line 50874) | function _load_constants() {
  function _load_packageNameUtils (line 50880) | function _load_packageNameUtils() {
  function _interopRequireWildcard (line 50884) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 50886) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class NpmResolver (line 50896) | class NpmResolver extends (_registryResolver || _load_registryResolver()...
    method findVersionInRegistryResponse (line 50898) | static findVersionInRegistryResponse(config, name, range, body, reques...
    method resolveRequest (line 50947) | resolveRequest(desiredVersion) {
    method resolveRequestOffline (line 50970) | resolveRequestOffline() {
    method cleanRegistry (line 51027) | cleanRegistry(url) {
    method resolve (line 51035) | resolve() {
  function _load_asyncToGenerator (line 51122) | function _load_asyncToGenerator() {
  function _load_fs (line 51188) | function _load_fs() {
  function _load_promise (line 51194) | function _load_promise() {
  function _load_fs2 (line 51200) | function _load_fs2() {
  function _interopRequireDefault (line 51204) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _load_asyncToGenerator (line 51319) | function _load_asyncToGenerator() {
  function _load_extends (line 51325) | function _load_extends() {
  function _load_invariant (line 51331) | function _load_invariant() {
  function _load_string_decoder (line 51337) | function _load_string_decoder() {
  function _load_tarFs (line 51343) | function _load_tarFs() {
  function _load_tarStream (line 51349) | function _load_tarStream() {
  function _load_url (line 51355) | function _load_url() {
  function _load_fs (line 51361) | function _load_fs() {
  function _load_errors (line 51367) | function _load_errors() {
  function _load_gitSpawn (line 51373) | function _load_gitSpawn() {
  function _load_gitRefResolver (line 51379) | function _load_gitRefResolver() {
  function _load_crypto (line 51385) | function _load_crypto() {
  function _load_fs2 (line 51391) | function _load_fs2() {
  function _load_map (line 51397) | function _load_map() {
  function _load_misc (line 51403) | function _load_misc() {
  function _interopRequireWildcard (line 51407) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 51409) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class Git (line 51451) | class Git {
    method constructor (line 51452) | constructor(config, gitUrl, hash) {
    method npmUrlToGitUrl (line 51467) | static npmUrlToGitUrl(npmUrl) {
    method hasArchiveCapability (line 51509) | static hasArchiveCapability(ref) {
    method repoExists (line 51535) | static repoExists(ref) {
    method replaceProtocol (line 51553) | static replaceProtocol(ref, protocol) {
    method secureGitUrl (line 51564) | static secureGitUrl(ref, hash, reporter) {
    method archive (line 51599) | archive(dest) {
    method _archiveViaRemoteArchive (line 51607) | _archiveViaRemoteArchive(dest) {
    method _archiveViaLocalFetched (line 51628) | _archiveViaLocalFetched(dest) {
    method clone (line 51654) | clone(dest) {
    method _cloneViaRemoteArchive (line 51662) | _cloneViaRemoteArchive(dest) {
    method _cloneViaLocalFetched (line 51682) | _cloneViaLocalFetched(dest) {
    method fetch (line 51707) | fetch() {
    method getFile (line 51730) | getFile(filename) {
    method _getFileFromArchive (line 51738) | _getFileFromArchive(filename) {
    method _getFileFromClone (line 51778) | _getFileFromClone(filename) {
    method init (line 51800) | init() {
    method setRefRemote (line 51819) | setRefRemote() {
    method setRefHosted (line 51837) | setRefHosted(hostedRefsList) {
    method resolveDefaultBranch (line 51846) | resolveDefaultBranch() {
    method resolveCommit (line 51897) | resolveCommit(shaToResolve) {
    method setRef (line 51924) | setRef(refs) {
  function _load_asyncToGenerator (line 51963) | function _load_asyncToGenerator() {
  function _load_resolveRelative (line 51969) | function _load_resolveRelative() {
  function _load_validate (line 51975) | function _load_validate() {
  function _load_fix (line 51981) | function _load_fix() {
  function _interopRequireDefault (line 51985) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function warn (line 52006) | function warn(msg) {
  function isValidLicense (line 52062) | function isValidLicense(license) {
  function isValidBin (line 52066) | function isValidBin(bin) {
  function stringifyPerson (line 52070) | function stringifyPerson(person) {
  function parsePerson (line 52093) | function parsePerson(person) {
  function normalizePerson (line 52122) | function normalizePerson(person) {
  function extractDescription (line 52126) | function extractDescription(readme) {
  function extractRepositoryUrl (line 52159) | function extractRepositoryUrl(repository) {
  function getPlatformSpecificPackageFilename (line 52178) | function getPlatformSpecificPackageFilename(pkg) {
  function getSystemParams (line 52185) | function getSystemParams() {
  function getUid (line 52202) | function getUid() {
  function isFakeRoot (line 52210) | function isFakeRoot() {
  function isRootUser (line 52214) | function isRootUser(uid) {
  function _load_semver (line 52233) | function _load_semver() {
  function _interopRequireDefault (line 52237) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function satisfiesWithPrereleases (line 52244) | function satisfiesWithPrereleases(version, range, loose = false) {
  function diffWithUnstable (line 52300) | function diffWithUnstable(version1, version2) {
  function getDataDir (line 52370) | function getDataDir() {
  function getCacheDir (line 52387) | function getCacheDir() {
  function getConfigDir (line 52400) | function getConfigDir() {
  function getLocalAppDataDir (line 52413) | function getLocalAppDataDir() {
  function explodeHashedUrl (line 52428) | function explodeHashedUrl(url) {
  function balanced (line 52450) | function balanced(a, b, str) {
  function maybeMatch (line 52465) | function maybeMatch(reg, str) {
  function range (line 52471) | function range(a, b, str) {
  function numeric (line 52524) | function numeric(str) {
  function escapeBraces (line 52530) | function escapeBraces(str) {
  function unescapeBraces (line 52538) | function unescapeBraces(str) {
  function parseCommaParts (line 52550) | function parseCommaParts(str) {
  function expandTop (line 52577) | function expandTop(str) {
  function identity (line 52594) | function identity(e) {
  function embrace (line 52598) | function embrace(str) {
  function isPadded (line 52601) | function isPadded(el) {
  function lte (line 52605) | function lte(i, y) {
  function gte (line 52608) | function gte(i, y) {
  function expand (line 52612) | function expand(str, isTop) {
  function preserveCamelCase (line 52723) | function preserveCamelCase(str) {
  function Caseless (line 52791) | function Caseless (dict) {
  function useColors (line 53874) | function useColors() {
  function formatArgs (line 53918) | function formatArgs(args) {
  function log (line 53958) | function log() {
  function save (line 53973) | function save(namespaces) {
  function load (line 53990) | function load() {
  function localstorage (line 54021) | function localstorage() {
  function useColors (line 54120) | function useColors() {
  function formatArgs (line 54153) | function formatArgs(args) {
  function getDate (line 54169) | function getDate() {
  function log (line 54181) | function log() {
  function save (line 54192) | function save(namespaces) {
  function load (line 54209) | function load() {
  function init (line 54220) | function init (debug) {
  function __webpack_require__ (line 54257) | function __webpack_require__(moduleId) {
  function parse (line 54328) | function parse(code, options, delegate) {
  function parseModule (line 54375) | function parseModule(code, options, delegate) {
  function parseScript (line 54381) | function parseScript(code, options, delegate) {
  function tokenize (line 54387) | function tokenize(code, options, delegate) {
  function CommentHandler (line 54426) | function CommentHandler() {
  function __ (line 54661) | function __() { this.constructor = d; }
  function getQualifiedElementName (line 54676) | function getQualifiedElementName(elementName) {
  function JSXParser (line 54701) | function JSXParser(code, options, delegate) {
  function JSXClosingElement (line 55262) | function JSXClosingElement(name) {
  function JSXElement (line 55270) | function JSXElement(openingElement, children, closingElement) {
  function JSXEmptyExpression (line 55280) | function JSXEmptyExpression() {
  function JSXExpressionContainer (line 55287) | function JSXExpressionContainer(expression) {
  function JSXIdentifier (line 55295) | function JSXIdentifier(name) {
  function JSXMemberExpression (line 55303) | function JSXMemberExpression(object, property) {
  function JSXAttribute (line 55312) | function JSXAttribute(name, value) {
  function JSXNamespacedName (line 55321) | function JSXNamespacedName(namespace, name) {
  function JSXOpeningElement (line 55330) | function JSXOpeningElement(name, selfClosing, attributes) {
  function JSXSpreadAttribute (line 55340) | function JSXSpreadAttribute(argument) {
  function JSXText (line 55348) | function JSXText(value, raw) {
  function ArrayExpression (line 55388) | function ArrayExpression(elements) {
  function ArrayPattern (line 55396) | function ArrayPattern(elements) {
  function ArrowFunctionExpression (line 55404) | function ArrowFunctionExpression(params, body, expression) {
  function AssignmentExpression (line 55417) | function AssignmentExpression(operator, left, right) {
  function AssignmentPattern (line 55427) | function AssignmentPattern(left, right) {
  function AsyncArrowFunctionExpression (line 55436) | function AsyncArrowFunctionExpression(params, body, expression) {
  function AsyncFunctionDeclaration (line 55449) | function AsyncFunctionDeclaration(id, params, body) {
  function AsyncFunctionExpression (line 55462) | function AsyncFunctionExpression(id, params, body) {
  function AwaitExpression (line 55475) | function AwaitExpression(argument) {
  function BinaryExpression (line 55483) | function BinaryExpression(operator, left, right) {
  function BlockStatement (line 55494) | function BlockStatement(body) {
  function BreakStatement (line 55502) | function BreakStatement(label) {
  function CallExpression (line 55510) | function CallExpression(callee, args) {
  function CatchClause (line 55519) | function CatchClause(param, body) {
  function ClassBody (line 55528) | function ClassBody(body) {
  function ClassDeclaration (line 55536) | function ClassDeclaration(id, superClass, body) {
  function ClassExpression (line 55546) | function ClassExpression(id, superClass, body) {
  function ComputedMemberExpression (line 55556) | function ComputedMemberExpression(object, property) {
  function ConditionalExpression (line 55566) | function ConditionalExpression(test, consequent, alternate) {
  function ContinueStatement (line 55576) | function ContinueStatement(label) {
  function DebuggerStatement (line 55584) | function DebuggerStatement() {
  function Directive (line 55591) | function Directive(expression, directive) {
  function DoWhileStatement (line 55600) | function DoWhileStatement(body, test) {
  function EmptyStatement (line 55609) | function EmptyStatement() {
  function ExportAllDeclaration (line 55616) | function ExportAllDeclaration(source) {
  function ExportDefaultDeclaration (line 55624) | function ExportDefaultDeclaration(declaration) {
  function ExportNamedDeclaration (line 55632) | function ExportNamedDeclaration(declaration, specifiers, source) {
  function ExportSpecifier (line 55642) | function ExportSpecifier(local, exported) {
  function ExpressionStatement (line 55651) | function ExpressionStatement(expression) {
  function ForInStatement (line 55659) | function ForInStatement(left, right, body) {
  function ForOfStatement (line 55670) | function ForOfStatement(left, right, body) {
  function ForStatement (line 55680) | function ForStatement(init, test, update, body) {
  function FunctionDeclaration (line 55691) | function FunctionDeclaration(id, params, body, generator) {
  function FunctionExpression (line 55704) | function FunctionExpression(id, params, body, generator) {
  function Identifier (line 55717) | function Identifier(name) {
  function IfStatement (line 55725) | function IfStatement(test, consequent, alternate) {
  function ImportDeclaration (line 55735) | function ImportDeclaration(specifiers, source) {
  function ImportDefaultSpecifier (line 55744) | function ImportDefaultSpecifier(local) {
  function ImportNamespaceSpecifier (line 55752) | function ImportNamespaceSpecifier(local) {
  function ImportSpecifier (line 55760) | function ImportSpecifier(local, imported) {
  function LabeledStatement (line 55769) | function LabeledStatement(label, body) {
  function Literal (line 55778) | function Literal(value, raw) {
  function MetaProperty (line 55787) | function MetaProperty(meta, property) {
  function MethodDefinition (line 55796) | function MethodDefinition(key, computed, value, kind, isStatic) {
  function Module (line 55808) | function Module(body) {
  function NewExpression (line 55817) | function NewExpression(callee, args) {
  function ObjectExpression (line 55826) | function ObjectExpression(properties) {
  function ObjectPattern (line 55834) | function ObjectPattern(properties) {
  function Property (line 55842) | function Property(kind, key, computed, value, method, shorthand) {
  function RegexLiteral (line 55855) | function RegexLiteral(value, raw, pattern, flags) {
  function RestElement (line 55865) | function RestElement(argument) {
  function ReturnStatement (line 55873) | function ReturnStatement(argument) {
  function Script (line 55881) | function Script(body) {
  function SequenceExpression (line 55890) | function SequenceExpression(expressions) {
  function SpreadElement (line 55898) | function SpreadElement(argument) {
  function StaticMemberExpression (line 55906) | function StaticMemberExpression(object, property) {
  function Super (line 55916) | function Super() {
  function SwitchCase (line 55923) | function SwitchCase(test, consequent) {
  function SwitchStatement (line 55932) | function SwitchStatement(discriminant, cases) {
  function TaggedTemplateExpression (line 55941) | function TaggedTemplateExpression(tag, quasi) {
  function TemplateElement (line 55950) | function TemplateElement(value, tail) {
  function TemplateLiteral (line 55959) | function TemplateLiteral(quasis, expressions) {
  function ThisExpression (line 55968) | function ThisExpression() {
  function ThrowStatement (line 55975) | function ThrowStatement(argument) {
  function TryStatement (line 55983) | function TryStatement(block, handler, finalizer) {
  function UnaryExpression (line 55993) | function UnaryExpression(operator, argument) {
  function UpdateExpression (line 56003) | function UpdateExpression(operator, argument, prefix) {
  function VariableDeclaration (line 56013) | function VariableDeclaration(declarations, kind) {
  function VariableDeclarator (line 56022) | function VariableDeclarator(id, init) {
  function WhileStatement (line 56031) | function WhileStatement(test, body) {
  function WithStatement (line 56040) | function WithStatement(object, body) {
  function YieldExpression (line 56049) | function YieldExpression(argument, delegate) {
  function Parser (line 56074) | function Parser(code, options, delegate) {
    method constructor (line 34569) | constructor(input, fileLoc = 'lockfile') {
    method onComment (line 34575) | onComment(token) {
    method next (line 34592) | next() {
    method unexpected (line 34609) | unexpected(msg = 'Unexpected token') {
    method expect (line 34613) | expect(tokType) {
    method eat (line 34621) | eat(tokType) {
    method parse (line 34630) | parse(indent = 0) {
  function assert (line 59218) | function assert(condition, message) {
  function ErrorHandler (line 59235) | function ErrorHandler() {
  function hexValue (line 59368) | function hexValue(ch) {
  function octalValue (line 59371) | function octalValue(ch) {
  function Scanner (line 59375) | function Scanner(code, handler) {
  function Reader (line 60802) | function Reader() {
  function Tokenizer (line 60869) | function Tokenizer(code, config) {
  function rethrow (line 61261) | function rethrow() {
  function maybeCallback (line 61296) | function maybeCallback(cb) {
  function start (line 61340) | function start() {
  function start (line 61442) | function start() {
  function LOOP (line 61464) | function LOOP() {
  function gotStat (line 61492) | function gotStat(err, stat) {
  function gotTarget (line 61521) | function gotTarget(err, target, base) {
  function gotResolvedLink (line 61529) | function gotResolvedLink(resolvedLink) {
  function globSync (line 61561) | function globSync (pattern, options) {
  function GlobSync (line 61569) | function GlobSync (pattern, options) {
  function inflight (line 62056) | function inflight (key, cb) {
  function makeres (line 62066) | function makeres (key) {
  function slice (line 62097) | function slice (args) {
  function deprecated (line 62273) | function deprecated(name) {
  function compileStyleMap (line 62370) | function compileStyleMap(schema, map) {
  function encodeHex (line 62397) | function encodeHex(character) {
  function State (line 62418) | function State(options) {
  function indentString (line 62442) | function indentString(string, spaces) {
  function generateNextLine (line 62468) | function generateNextLine(state, level) {
  function testImplicitResolving (line 62472) | function testImplicitResolving(state, str) {
  function isWhitespace (line 62487) | function isWhitespace(c) {
  function isPrintable (line 62495) | function isPrintable(c) {
  function isPlainSafe (line 62503) | function isPlainSafe(c) {
  function isPlainSafeFirst (line 62519) | function isPlainSafeFirst(c) {
  function needIndentIndicator (line 62550) | function needIndentIndicator(string) {
  function chooseScalarStyle (line 62568) | function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineW...
  function writeScalar (line 62636) | function writeScalar(state, string, level, iskey) {
  function blockHeader (line 62685) | function blockHeader(string, indentPerLevel) {
  function dropEndingNewline (line 62697) | function dropEndingNewline(string) {
  function foldString (line 62703) | function foldString(string, width) {
  function foldLine (line 62740) | function foldLine(line, width) {
  function escapeString (line 62780) | function escapeString(string) {
  function writeFlowSequence (line 62806) | function writeFlowSequence(state, level, object) {
  function writeBlockSequence (line 62824) | function writeBlockSequence(state, level, object, compact) {
  function writeFlowMapping (line 62851) | function writeFlowMapping(state, level, object) {
  function writeBlockMapping (line 62891) | function writeBlockMapping(state, level, object, compact) {
  function detectType (line 62965) | function detectType(state, object, explicit) {
  function writeNode (line 63003) | function writeNode(state, level, object, block, compact, iskey) {
  function getDuplicateReferences (line 63078) | function getDuplicateReferences(object, state) {
  function inspectNode (line 63092) | function inspectNode(object, objects, duplicatesIndexes) {
  function dump (line 63121) | function dump(input, options) {
  function safeDump (line 63133) | function safeDump(input, options) {
  function _class (line 63178) | function _class(obj) { return Object.prototype.toString.call(obj); }
  function is_EOL (line 63180) | function is_EOL(c) {
  function is_WHITE_SPACE (line 63184) | function is_WHITE_SPACE(c) {
  function is_WS_OR_EOL (line 63188) | function is_WS_OR_EOL(c) {
  function is_FLOW_INDICATOR (line 63195) | function is_FLOW_INDICATOR(c) {
  function fromHexCode (line 63203) | function fromHexCode(c) {
  function escapedHexLen (line 63220) | function escapedHexLen(c) {
  function fromDecimalCode (line 63227) | function fromDecimalCode(c) {
  function simpleEscapeSequence (line 63235) | function simpleEscapeSequence(c) {
  function charFromCodepoint (line 63257) | function charFromCodepoint(c) {
  function State (line 63277) | function State(input, options) {
  function generateError (line 63311) | function generateError(state, message) {
  function throwError (line 63317) | function throwError(state, message) {
  function throwWarning (line 63321) | function throwWarning(state, message) {
  function captureSegment (line 63391) | function captureSegment(state, start, end, checkJson) {
  function mergeMappings (line 63413) | function mergeMappings(state, destination, source, overridableKeys) {
  function storeMappingPair (line 63432) | function storeMappingPair(state, _result, overridableKeys, keyTag, keyNo...
  function readLineBreak (line 63489) | function readLineBreak(state) {
  function skipSeparationSpace (line 63509) | function skipSeparationSpace(state, allowComments, checkIndent) {
  function testDocumentSeparator (line 63547) | function testDocumentSeparator(state) {
  function writeFoldedLines (line 63571) | function writeFoldedLines(state, count) {
  function readPlainScalar (line 63580) | function readPlainScalar(state, nodeIndent, withinFlowCollection) {
  function readSingleQuotedScalar (line 63689) | function readSingleQuotedScalar(state, nodeIndent) {
  function readDoubleQuotedScalar (line 63734) | function readDoubleQuotedScalar(state, nodeIndent) {
  function readFlowCollection (line 63813) | function readFlowCollection(state, nodeIndent) {
  function readBlockScalar (line 63918) | function readBlockScalar(state, nodeIndent) {
  function readBlockSequence (line 64061) | function readBlockSequence(state, nodeIndent) {
  function readBlockMapping (line 64123) | function readBlockMapping(state, nodeIndent, flowIndent) {
  function readTagProperty (line 64278) | function readTagProperty(state) {
  function readAnchorProperty (line 64372) | function readAnchorProperty(state) {
  function readAlias (line 64399) | function readAlias(state) {
  function composeNode (line 64429) | function composeNode(state, parentIndent, nodeContext, allowToSeek, allo...
  function readDocument (line 64583) | function readDocument(state) {
  function loadDocuments (line 64691) | function loadDocuments(input, options) {
  function loadAll (line 64727) | function loadAll(input, iterator, options) {
  function load (line 64740) | function load(input, options) {
  function safeLoadAll (line 64753) | function safeLoadAll(input, output, options) {
  function safeLoad (line 64762) | function safeLoad(input, options) {
  function Mark (line 64784) | function Mark(name, buffer, position, line, column) {
  function resolveYamlBinary (line 64880) | function resolveYamlBinary(data) {
  function constructYamlBinary (line 64902) | function constructYamlBinary(data) {
  function representYamlBinary (line 64946) | function representYamlBinary(object /*, style*/) {
  function isBinary (line 64988) | function isBinary(object) {
  function resolveYamlBoolean (line 65010) | function resolveYamlBoolean(data) {
  function constructYamlBoolean (line 65019) | function constructYamlBoolean(data) {
  function isBoolean (line 65025) | function isBoolean(object) {
  function resolveYamlFloat (line 65066) | function resolveYamlFloat(data) {
  function constructYamlFloat (line 65079) | function constructYamlFloat(data) {
  function representYamlFloat (line 65118) | function representYamlFloat(object, style) {
  function isFloat (line 65151) | function isFloat(object) {
  function isHexCode (line 65176) | function isHexCode(c) {
  function isOctCode (line 65182) | function isOctCode(c) {
  function isDecCode (line 65186) | function isDecCode(c) {
  function resolveYamlInteger (line 65190) | function resolveYamlInteger(data) {
  function constructYamlInteger (line 65276) | function constructYamlInteger(data) {
  function isInteger (line 65319) | function isInteger(object) {
  function resolveJavascriptFunction (line 65373) | function resolveJavascriptFunction(data) {
  function constructJavascriptFunction (line 65394) | function constructJavascriptFunction(data) {
  function representJavascriptFunction (line 65428) | function representJavascriptFunction(object /*, style*/) {
  function isFunction (line 65432) | function isFunction(object) {
  function resolveJavascriptRegExp (line 65454) | function resolveJavascriptRegExp(data) {
  function constructJavascriptRegExp (line 65475) | function constructJavascriptRegExp(data) {
  function representJavascriptRegExp (line 65489) | function representJavascriptRegExp(object /*, style*/) {
  function isRegExp (line 65499) | function isRegExp(object) {
  function resolveJavascriptUndefined (line 65521) | function resolveJavascriptUndefined() {
  function constructJavascriptUndefined (line 65525) | function constructJavascriptUndefined() {
  function representJavascriptUndefined (line 65530) | function representJavascriptUndefined() {
  function isUndefined (line 65534) | function isUndefined(object) {
  function resolveYamlMerge (line 65571) | function resolveYamlMerge(data) {
  function resolveYamlNull (line 65590) | function resolveYamlNull(data) {
  function constructYamlNull (line 65599) | function constructYamlNull() {
  function isNull (line 65603) | function isNull(object) {
  function resolveYamlOmap (line 65634) | function resolveYamlOmap(data) {
  function constructYamlOmap (line 65662) | function constructYamlOmap(data) {
  function resolveYamlPairs (line 65684) | function resolveYamlPairs(data) {
  function constructYamlPairs (line 65707) | function constructYamlPairs(data) {
  function resolveYamlSet (line 65759) | function resolveYamlSet(data) {
  function constructYamlSet (line 65773) | function constructYamlSet(data) {
  function resolveYamlTimestamp (line 65825) | function resolveYamlTimestamp(data) {
  function constructYamlTimestamp (line 65832) | function constructYamlTimestamp(data) {
  function representYamlTimestamp (line 65881) | function representYamlTimestamp(object /*, style*/) {
  function parse (line 66100) | function parse(str) {
  function fmtShort (line 66161) | function fmtShort(ms) {
  function fmtLong (line 66185) | function fmtLong(ms) {
  function plural (line 66197) | function plural(ms, n, name) {
  function toObject (line 66231) | function toObject(val) {
  function shouldUseNative (line 66239) | function shouldUseNative() {
  function hasOwnProperty (line 66335) | function hasOwnProperty(obj, prop) {
  function isEmpty (line 66343) | function isEmpty(value){
  function toString (line 66360) | function toString(type){
  function isObject (line 66364) | function isObject(obj){
  function isBoolean (line 66373) | function isBoolean(obj){
  function getKey (line 66377) | function getKey(key){
  function factory (line 66385) | function factory(options) {
  function paramsHaveRequestBody (line 66627) | function paramsHaveRequestBody (params) {
  function safeStringify (line 66636) | function safeStringify (obj, replacer) {
  function md5 (line 66646) | function md5 (str) {
  function isReadStream (line 66650) | function isReadStream (rs) {
  function toBase64 (line 66654) | function toBase64 (str) {
  function copy (line 66658) | function copy (obj) {
  function version (line 66666) | function version () {
  function specifierIncluded (line 66691) | function specifierIncluded(specifier) {
  function matchesRange (line 66713) | function matchesRange(range) {
  function versionIncluded (line 66722) | function versionIncluded(specifierValue) {
  function defaults (line 66767) | function defaults (options) {
  function rimraf (line 66791) | function rimraf (p, options, cb) {
  function rimraf_ (line 66875) | function rimraf_ (p, options, cb) {
  function fixWinEPERM (line 66909) | function fixWinEPERM (p, options, er, cb) {
  function fixWinEPERMSync (line 66931) | function fixWinEPERMSync (p, options, er) {
  function rmdir (line 66961) | function rmdir (p, options, originalEr, cb) {
  function rmkids (line 66981) | function rmkids(p, options, cb) {
  function rimrafSync (line 67009) | function rimrafSync (p, options) {
  function rmdirSync (line 67067) | function rmdirSync (p, options, originalEr) {
  function rmkidsSync (line 67085) | function rmkidsSync (p, options) {
  function ReplaySubject (line 67137) | function ReplaySubject(bufferSize, windowTime, scheduler) {
  function ReplayEvent (line 67237) | function ReplayEvent(time, value) {
  function combineLatest (line 67268) | function combineLatest() {
  function CombineLatestOperator (line 67287) | function CombineLatestOperator(resultSelector) {
  function CombineLatestSubscriber (line 67298) | function CombineLatestSubscriber(destination, resultSelector) {
  function defer (line 67376) | function defer(observableFactory) {
  function of (line 67408) | function of() {
  function scalar (line 67441) | function scalar(value) {
  function throwError (line 67462) | function throwError(error, scheduler) {
  function dispatch (line 67470) | function dispatch(_a) {
  function zip (line 67500) | function zip() {
  function ZipOperator (line 67512) | function ZipOperator(resultSelector) {
  function ZipSubscriber (line 67523) | function ZipSubscriber(destination, resultSelector, values) {
  function StaticIterator (line 67621) | function StaticIterator(iterator) {
  function StaticArrayIterator (line 67640) | function StaticArrayIterator(array) {
  function ZipBufferIterator (line 67664) | function ZipBufferIterator(destination, parent, observable) {
  function mergeAll (line 67723) | function mergeAll(concurrent) {
  function refCount (line 67743) | function refCount() {
  function RefCountOperator (line 67749) | function RefCountOperator(connectable) {
  function RefCountSubscriber (line 67766) | function RefCountSubscriber(destination, connectable) {
  function scan (line 67811) | function scan(accumulator, seed) {
  function ScanOperator (line 67821) | function ScanOperator(accumulator, seed, hasSeed) {
  function ScanSubscriber (line 67836) | function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
  function switchMap (line 67900) | function switchMap(project, resultSelector) {
  function SwitchMapOperator (line 67907) | function SwitchMapOperator(project) {
  function SwitchMapSubscriber (line 67917) | function SwitchMapSubscriber(destination, project) {
  function take (line 67986) | function take(count) {
  function TakeOperator (line 67997) | function TakeOperator(total) {
  function TakeSubscriber (line 68010) | function TakeSubscriber(destination, total) {
  function takeLast (line 68047) | function takeLast(count) {
  function TakeLastOperator (line 68058) | function TakeLastOperator(total) {
  function TakeLastSubscriber (line 68071) | function TakeLastSubscriber(destination, total) {
  function canReportError (line 68132) | function canReportError(observer) {
  function hostReportError (line 68157) | function hostReportError(err) {
  function pipe (line 68173) | function pipe() {
  function pipeFromArray (line 68180) | function pipeFromArray(fns) {
  function DiffieHellman (line 68220) | function DiffieHellman(key) {
  function X9ECParameters (line 68481) | function X9ECParameters(name) {
  function ECPublic (line 68503) | function ECPublic(params, buffer) {
  function ECPrivate (line 68510) | function ECPrivate(params, buffer) {
  function generateED25519 (line 68520) | function generateED25519() {
  function generateECDSA (line 68541) | function generateECDSA(curve) {
  function read (line 68651) | function read(buf, options) {
  function readRFC3110 (line 68679) | function readRFC3110(keyString) {
  function elementToBuf (line 68732) | function elementToBuf(e) {
  function readDNSSECRSAPrivateKey (line 68736) | function readDNSSECRSAPrivateKey(elements) {
  function readDNSSECPrivateKey (line 68776) | function readDNSSECPrivateKey(alg, elements) {
  function dnssecTimestamp (line 68807) | function dnssecTimestamp(date) {
  function rsaAlgFromOptions (line 68816) | function rsaAlgFromOptions(opts) {
  function writeRSA (line 68828) | function writeRSA(key, options) {
  function writeECDSA (line 68861) | function writeECDSA(key, options) {
  function write (line 68884) | function write(key, options) {
  function read (line 68933) | function read(buf, options) {
  function write (line 68937) | function write(key, options) {
  function readMPInt (line 68942) | function readMPInt(der, nm) {
  function readPkcs1 (line 68948) | function readPkcs1(alg, type, der) {
  function readPkcs1RSAPublic (line 68979) | function readPkcs1RSAPublic(der) {
  function readPkcs1RSAPrivate (line 68996) | function readPkcs1RSAPrivate(der) {
  function readPkcs1DSAPrivate (line 69028) | function readPkcs1DSAPrivate(der) {
  function readPkcs1EdDSAPrivate (line 69053) | function readPkcs1EdDSAPrivate(der) {
  function readPkcs1DSAPublic (line 69078) | function readPkcs1DSAPublic(der) {
  function readPkcs1ECDSAPublic (line 69097) | function readPkcs1ECDSAPublic(der) {
  function readPkcs1ECDSAPrivate (line 69131) | function readPkcs1ECDSAPrivate(der) {
  function writePkcs1 (line 69158) | function writePkcs1(der, key) {
  function writePkcs1RSAPublic (line 69193) | function writePkcs1RSAPublic(der, key) {
  function writePkcs1RSAPrivate (line 69198) | function writePkcs1RSAPrivate(der, key) {
  function writePkcs1DSAPrivate (line 69214) | function writePkcs1DSAPrivate(der, key) {
  function writePkcs1DSAPublic (line 69225) | function writePkcs1DSAPublic(der, key) {
  function writePkcs1ECDSAPublic (line 69232) | function writePkcs1ECDSAPublic(der, key) {
  function writePkcs1ECDSAPrivate (line 69247) | function writePkcs1ECDSAPrivate(der, key) {
  function writePkcs1EdDSAPrivate (line 69266) | function writePkcs1EdDSAPrivate(der, key) {
  function writePkcs1EdDSAPublic (line 69281) | function writePkcs1EdDSAPublic(der, key) {
  function _load_constants (line 69464) | function _load_constants() {
  function _load_access (line 69470) | function _load_access() {
  function _load_add (line 69476) | function _load_add() {
  function _load_audit (line 69482) | function _load_audit() {
  function _load_autoclean (line 69488) | function _load_autoclean() {
  function _load_bin (line 69494) | function _load_bin() {
  function _load_cache (line 69500) | function _load_cache() {
  function _load_check (line 69506) | function _load_check() {
  function _load_config (line 69512) | function _load_config() {
  function _load_create (line 69518) | function _load_create() {
  function _load_exec (line 69524) | function _load_exec() {
  function _load_generateLockEntry (line 69530) | function _load_generateLockEntry() {
  function _load_global (line 69536) | function _load_global() {
  function _load_help (line 69542) | function _load_help() {
  function _load_import (line 69548) | function _load_import() {
  function _load_info (line 69554) | function _load_info() {
  function _load_init (line 69560) | function _load_init() {
  function _load_install (line 69566) | function _load_install() {
  function _load_licenses (line 69572) | function _load_licenses() {
  function _load_link (line 69578) | function _load_link() {
  function _load_login (line 69584) | function _load_login() {
  function _load_logout (line 69590) | function _load_logout() {
  function _load_list (line 69596) | function _load_list() {
  function _load_node (line 69602) | function _load_node() {
  function _load_outdated (line 69608) | function _load_outdated() {
  function _load_owner (line 69614) | function _load_owner() {
  function _load_pack (line 69620) | function _load_pack() {
  function _load_policies (line 69626) | function _load_policies() {
  function _load_publish (line 69632) | function _load_publish() {
  function _load_remove (line 69638) | function _load_remove() {
  function _load_run (line 69644) | function _load_run() {
  function _load_tag (line 69650) | function _load_tag() {
  function _load_team (line 69656) | function _load_team() {
  function _load_unplug (line 69662) | function _load_unplug() {
  function _load_unlink (line 69668) | function _load_unlink() {
  function _load_upgrade (line 69674) | function _load_upgrade() {
  function _load_version (line 69680) | function _load_version() {
  function _load_versions (line 69686) | function _load_versions() {
  function _load_why (line 69692) | function _load_why() {
  function _load_workspaces (line 69698) | function _load_workspaces() {
  function _load_workspace (line 69704) | function _load_workspace() {
  function _load_upgradeInteractive (line 69710) | function _load_upgradeInteractive() {
  function _load_useless (line 69716) | function _load_useless() {
  function _load_aliases (line 69722) | function _load_aliases() {
  function _interopRequireDefault (line 69726) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireWildcard (line 69728) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _load_fs (line 69810) | function _load_fs() {
  function _load_path (line 69816) | function _load_path() {
  function _load_commander (line 69822) | function _load_commander() {
  function _load_lockfile (line 69828) | function _load_lockfile() {
  function _load_rc (line 69834) | function _load_rc() {
  function _interopRequireWildcard (line 69838) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 69840) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function getRcConfigForCwd (line 69848) | function getRcConfigForCwd(cwd, args) {
  function getRcConfigForFolder (line 69868) | function getRcConfigForFolder(cwd) {
  function loadRcFile (line 69878) | function loadRcFile(fileText, filePath) {
  function buildRcArgs (line 69899) | function buildRcArgs(cwd, args) {
  function extractCwdArg (line 69936) | function extractCwdArg(args) {
  function getRcArgs (line 69949) | function getRcArgs(commandName, args, previousCwds = []) {
  function boolify (line 69988) | function boolify(val) {
  function boolifyWithDefault (line 69992) | function boolifyWithDefault(val, defaultResult) {
  function isOffline (line 70012) | function isOffline() {
  function Option (line 70105) | function Option(flags, description) {
  function Command (line 70160) | function Command(name) {
  function camelcase (line 71229) | function camelcase(flag) {
  function pad (line 71244) | function pad(str, width) {
  function outputHelpIfNecessary (line 71257) | function outputHelpIfNecessary(cmd, options) {
  function humanReadableArgName (line 71275) | function humanReadableArgName(arg) {
  function exists (line 71284) | function exists(file) {
  function SchemaObject (line 71306) | function SchemaObject(obj) {
  function $shouldUseGroup (line 72167) | function $shouldUseGroup($rulesGroup) {
  function $shouldUseRule (line 72173) | function $shouldUseRule($rule) {
  function $ruleImplementsSomeKeyword (line 72177) | function $ruleImplementsSomeKeyword($rule) {
  function abort (line 72205) | function abort(state)
  function clean (line 72219) | function clean(key)
  function async (line 72244) | function async(callback)
  function iterate (line 72287) | function iterate(list, iterator, state, callback)
  function runJob (line 72330) | function runJob(iterator, key, item, callback)
  function state (line 72365) | function state(list, sortMethod)
  function terminator (line 72409) | function terminator(callback)
  function serialOrdered (line 72451) | function serialOrdered(list, iterator, sortMethod, callback)
  function ascending (line 72490) | function ascending(a, b)
  function descending (line 72502) | function descending(a, b)
  function _load_asyncToGenerator (line 72537) | function _load_asyncToGenerator() {
  function _load_promise (line 72591) | function _load_promise() {
  function _load_hoistedTreeBuilder (line 72597) | function _load_hoistedTreeBuilder() {
  function _load_getTransitiveDevDependencies (line 72603) | function _load_getTransitiveDevDependencies() {
  function _load_install (line 72609) | function _load_install() {
  function _load_lockfile (line 72615) | function _load_lockfile() {
  function _load_constants (line 72621) | function _load_constants() {
  function _interopRequireDefault (line 72625) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function setFlags (line 72631) | function setFlags(commander) {
  function hasWrapper (line 72639) | function hasWrapper(commander, args) {
  class Audit (line 72643) | class Audit {
    method constructor (line 72645) | constructor(config, reporter, options) {
    method _mapHoistedNodes (line 72653) | _mapHoistedNodes(auditNode, hoistedNodes, transitiveDevDeps) {
    method _mapHoistedTreesToAuditTree (line 72701) | _mapHoistedTreesToAuditTree(manifest, hoistedTrees, transitiveDevDeps) {
    method _fetchAudit (line 72724) | _fetchAudit(auditTree) {
    method _insertWorkspacePackagesIntoManifest (line 72756) | _insertWorkspacePackagesIntoManifest(manifest, resolver) {
    method performAudit (line 72767) | performAudit(manifest, lockfile, resolver, linker, patterns) {
    method summary (line 72780) | summary() {
    method report (line 72787) | report() {
  function _load_asyncToGenerator (line 72854) | function _load_asyncToGenerator() {
  function _load_index (line 73076) | function _load_index() {
  function _load_filter (line 73082) | function _load_filter() {
  function _load_constants (line 73088) | function _load_constants() {
  function _load_fs (line 73094) | function _load_fs() {
  function _interopRequireWildcard (line 73098) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 73100) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function setFlags (line 73156) | function setFlags(commander) {
  function hasWrapper (line 73163) | function hasWrapper(commander) {
  function _load_asyncToGenerator (line 73181) | function _load_asyncToGenerator() {
  function _load_buildSubCommands (line 73361) | function _load_buildSubCommands() {
  function _load_fs (line 73367) | function _load_fs() {
  function _interopRequireWildcard (line 73371) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 73373) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function hasWrapper (line 73379) | function hasWrapper(flags, args) {
  function _getMetadataWithPath (line 73383) | function _getMetadataWithPath(getMetadataFn, paths) {
  method ls (line 73391) | ls(config, reporter, flags, args) {
  method dir (line 73399) | dir(config, reporter) {
  function setFlags (line 73409) | function setFlags(commander) {
  function _load_asyncToGenerator (line 73429) | function _load_asyncToGenerator() {
  function reportError (line 73436) | function reportError(msg, ...vars) {
  function reportError (line 73559) | function reportError(msg, ...vars) {
  function humaniseLocation (line 73626) | function humaniseLocation(loc) {
  function reportError (line 73642) | function reportError(msg, ...vars) {
  function _load_errors (line 73878) | function _load_errors() {
  function _load_integrityChecker (line 73884) | function _load_integrityChecker() {
  function _load_integrityChecker2 (line 73890) | function _load_integrityChecker2() {
  function _load_lockfile (line 73896) | function _load_lockfile() {
  function _load_fs (line 73902) | function _load_fs() {
  function _load_install (line 73908) | function _load_install() {
  function _load_normalizePattern (line 73914) | function _load_normalizePattern() {
  function _interopRequireWildcard (line 73918) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 73920) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function hasWrapper (line 73928) | function hasWrapper(commander) {
  function setFlags (line 73932) | function setFlags(commander) {
  function _load_asyncToGenerator (line 73952) | function _load_asyncToGenerator() {
  function _load_errors (line 74061) | function _load_errors() {
  function _load_fs (line 74067) | function _load_fs() {
  function _load_global (line 74073) | function _load_global() {
  function _interopRequireWildcard (line 74077) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 74079) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function hasWrapper (line 74086) | function hasWrapper(commander, args) {
  function setFlags (line 74090) | function setFlags(commander) {
  function _load_asyncToGenerator (line 74108) | function _load_asyncToGenerator() {
  function _load_install (line 74354) | function _load_install() {
  function _load_lockfile (line 74360) | function _load_lockfile() {
  function _interopRequireDefault (line 74364) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function buildCount (line 74372) | function buildCount(trees) {
  function getParent (line 74404) | function getParent(key, treesByKey) {
  function hasWrapper (line 74409) | function hasWrapper(commander, args) {
  function setFlags (line 74413) | function setFlags(commander) {
  function getReqDepth (line 74419) | function getReqDepth(inputDepth) {
  function filterTree (line 74423) | function filterTree(tree, filters, pattern = '') {
  function getDevDeps (line 74436) | function getDevDeps(manifest) {
  function _load_extends (line 74458) | function _load_extends() {
  function _load_asyncToGenerator (line 74464) | function _load_asyncToGenerator() {
  function _load_lockfile (line 74605) | function _load_lockfile() {
  function _load_index (line 74611) | function _load_index() {
  function _load_install (line 74617) | function _load_install() {
  function _load_errors (line 74623) | function _load_errors() {
  function _load_index2 (line 74629) | function _load_index2() {
  function _load_fs (line 74635) | function _load_fs() {
  function _load_constants (line 74641) | function _load_constants() {
  function _interopRequireWildcard (line 74645) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 74647) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function setFlags (line 74655) | function setFlags(commander) {
  function hasWrapper (line 74661) | function hasWrapper(commander, args) {
  function _load_asyncToGenerator (line 74679) | function _load_asyncToGenerator() {
  function runCommand (line 74923) | function runCommand([action, ...args]) {
  function _load_executeLifecycleScript (line 74984) | function _load_executeLifecycleScript() {
  function _load_dynamicRequire (line 74990) | function _load_dynamicRequire() {
  function _load_hooks (line 74996) | function _load_hooks() {
  function _load_errors (line 75002) | function _load_errors() {
  function _load_packageCompatibility (line 75008) | function _load_packageCompatibility() {
  function _load_fs (line 75014) | function _load_fs() {
  function _load_constants (line 75020) | function _load_constants() {
  function _interopRequireWildcard (line 75024) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 75026) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function toObject (line 75040) | function toObject(input) {
  function setFlags (line 75065) | function setFlags(commander) {
  function hasWrapper (line 75069) | function hasWrapper(commander, args) {
  function _load_asyncToGenerator (line 75087) | function _load_asyncToGenerator() {
  function _load_buildSubCommands (line 75182) | function _load_buildSubCommands() {
  function _load_login (line 75188) | function _load_login() {
  function _load_npmRegistry (line 75194) | function _load_npmRegistry() {
  function _load_errors (line 75200) | function _load_errors() {
  function _load_normalizePattern (line 75206) | function _load_normalizePattern() {
  function _load_validate (line 75212) | function _load_validate() {
  function _interopRequireDefault (line 75216) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function setFlags (line 75218) | function setFlags(commander) {
  method add (line 75223) | add(config, reporter, flags, args) {
  method rm (line 75270) | rm(config, reporter, flags, args) {
  method remove (line 75277) | remove(config, reporter, flags, args) {
  method ls (line 75283) | ls(config, reporter, flags, args) {
  method list (line 75290) | list(config, reporter, flags, args) {
  function _load_extends (line 75318) | function _load_extends() {
  function _load_asyncToGenerator (line 75324) | function _load_asyncToGenerator() {
  function _load_inquirer (line 75535) | function _load_inquirer() {
  function _load_lockfile (line 75541) | function _load_lockfile() {
  function _load_add (line 75547) | function _load_add() {
  function _load_upgrade (line 75553) | function _load_upgrade() {
  function _load_colorForVersions (line 75559) | function _load_colorForVersions() {
  function _load_colorizeDiff (line 75565) | function _load_colorizeDiff() {
  function _load_install (line 75571) | function _load_install() {
  function _interopRequireDefault (line 75575) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function setFlags (line 75581) | function setFlags(commander) {
  function hasWrapper (line 75591) | function hasWrapper(commander, args) {
  function _load_asyncToGenerator (line 75609) | function _load_asyncToGenerator() {
  function runLifecycle (line 75629) | function runLifecycle(lifecycle) {
  function isCommitHooksDisabled (line 75637) | function isCommitHooksDisabled() {
  function _load_index (line 75815) | function _load_index() {
  function _load_executeLifecycleScript (line 75821) | function _load_executeLifecycleScript() {
  function _load_errors (line 75827) | function _load_errors() {
  function _load_gitSpawn (line 75833) | function _load_gitSpawn() {
  function _load_fs (line 75839) | function _load_fs() {
  function _load_map (line 75845) | function _load_map() {
  function _interopRequireWildcard (line 75849) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 75851) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function isValidNewVersion (line 75858) | function isValidNewVersion(oldVersion, newVersion, looseSemver, identifi...
  function setFlags (line 75862) | function setFlags(commander) {
  function hasWrapper (line 75878) | function hasWrapper(commander, args) {
  function _load_extends (line 75896) | function _load_extends() {
  function _load_asyncToGenerator (line 75902) | function _load_asyncToGenerator() {
  function _load_errors (line 75908) | function _load_errors() {
  function _load_constants (line 75914) | function _load_constants() {
  function _load_baseFetcher (line 75920) | function _load_baseFetcher() {
  function _load_fs (line 75926) | function _load_fs() {
  function _load_misc (line 75932) | function _load_misc() {
  function _load_normalizeUrl (line 75938) | function _load_normalizeUrl() {
  function _interopRequireWildcard (line 75942) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 75944) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class TarballFetcher (line 75978) | class TarballFetcher extends (_baseFetcher || _load_baseFetcher()).defau...
    method constructor (line 75979) | constructor(...args) {
    method setupMirrorFromCache (line 75985) | setupMirrorFromCache() {
    method getTarballCachePath (line 76004) | getTarballCachePath() {
    method getTarballMirrorPath (line 76008) | getTarballMirrorPath() {
    method createExtractor (line 76034) | createExtractor(resolve, reject, tarballPath) {
    method getLocalPaths (line 76128) | getLocalPaths(override) {
    method fetchFromLocal (line 76134) | fetchFromLocal(override) {
    method fetchFromExternal (line 76167) | fetchFromExternal() {
    method requestHeaders (line 76223) | requestHeaders() {
    method _fetch (line 76241) | _fetch() {
    method _findIntegrity (line 76256) | _findIntegrity({ hashOnly }) {
    method _supportedIntegrity (line 76266) | _supportedIntegrity({ hashOnly }) {
  class LocalTarballFetcher (line 76304) | class LocalTarballFetcher extends TarballFetcher {
    method _fetch (line 76305) | _fetch() {
  function urlParts (line 76313) | function urlParts(requestUrl) {
  function _load_misc (line 76334) | function _load_misc() {
  class PackageReference (line 76338) | class PackageReference {
    method constructor (line 76339) | constructor(request, info, remote) {
    method setFresh (line 76368) | setFresh(fresh) {
    method addLocation (line 76372) | addLocation(loc) {
    method addRequest (line 76378) | addRequest(request) {
    method prune (line 76384) | prune() {
    method addDependencies (line 76404) | addDependencies(deps) {
    method setPermission (line 76408) | setPermission(key, val) {
    method hasPermission (line 76412) | hasPermission(key) {
    method addPattern (line 76420) | addPattern(pattern, manifest) {
    method addOptional (line 76448) | addOptional(optional) {
  function _load_asyncToGenerator (line 76474) | function _load_asyncToGenerator() {
  function _load_index (line 76480) | function _load_index() {
  function _load_packageRequest (line 76486) | function _load_packageRequest() {
  function _load_normalizePattern (line 76492) | function _load_normalizePattern() {
  function _load_requestManager (line 76498) | function _load_requestManager() {
  function _load_blockingQueue (line 76504) | function _load_blockingQueue() {
  function _load_lockfile (line 76510) | function _load_lockfile() {
  function _load_map (line 76516) | function _load_map() {
  function _load_workspaceLayou
Condensed preview — 158 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,710K chars).
[
  {
    "path": ".editorconfig",
    "chars": 188,
    "preview": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ni"
  },
  {
    "path": ".eslintignore",
    "chars": 124,
    "preview": "build\napp/renderer\napp/static\napp/bin\napp/dist\napp/node_modules\napp/typings\nassets\nwebsite\nbin\ndist\ntarget\ncache\nschema."
  },
  {
    "path": ".eslintrc.json",
    "chars": 4064,
    "preview": "{\n  \"plugins\": [\n    \"react\",\n    \"prettier\",\n    \"@typescript-eslint\",\n    \"eslint-comments\",\n    \"lodash\",\n    \"import"
  },
  {
    "path": ".gitattributes",
    "chars": 88,
    "preview": "* text=auto\n*.js text eol=lf\n*.ts text eol=lf\n*.tsx text eol=lf\nbin/* linguist-vendored\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 1450,
    "preview": "---\nname: Bug report\nabout: Create a report to help Hyper improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!--\n  Hi the"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 596,
    "preview": "---\nname: Feature request\nabout: Suggest an idea/feature for Hyper\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fe"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 542,
    "preview": "version: 2\nupdates:\n- package-ecosystem: npm\n  directory: \"/\"\n  schedule:\n    interval: weekly\n    time: '11:00'\n  open-"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 542,
    "preview": "<!-- Hi there! Thanks for submitting a PR! We're excited to see what you've got for us.\n\n- To help whoever reviews your "
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 2437,
    "preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
  },
  {
    "path": ".github/workflows/e2e_comment.yml",
    "chars": 2285,
    "preview": "name: Comment e2e test screenshots on PR\non:\n  workflow_run:\n    workflows: ['Node CI']\n    types:\n      - completed\njob"
  },
  {
    "path": ".github/workflows/nodejs.yml",
    "chars": 6636,
    "preview": "name: Node CI\non:\n  push:\n    branches:\n      - master\n      - canary\n  pull_request:\ndefaults:\n  run:\n    shell: bash\ne"
  },
  {
    "path": ".gitignore",
    "chars": 251,
    "preview": "# build output\ndist\napp/renderer\ntarget\nbin/cli.*\ncache\n\n# dependencies\nnode_modules\n\n# logs\nnpm-debug.log\nyarn-error.lo"
  },
  {
    "path": ".husky/.gitignore",
    "chars": 2,
    "preview": "_\n"
  },
  {
    "path": ".husky/pre-push",
    "chars": 52,
    "preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nyarn test\n"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 523,
    "preview": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Laun"
  },
  {
    "path": ".yarnrc",
    "chars": 39,
    "preview": "registry \"https://registry.npmjs.org/\"\n"
  },
  {
    "path": "LICENSE",
    "chars": 1071,
    "preview": "# MIT License\n\nCopyright (c) 2018 Vercel, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "PLUGINS.md",
    "chars": 8578,
    "preview": "# Plugin development\n\n## Workflow\n\n### Run Hyper in dev mode\nHyper can be run in dev mode by cloning this repository and"
  },
  {
    "path": "README.md",
    "chars": 5283,
    "preview": "![](https://assets.vercel.com/image/upload/v1549723846/repositories/hyper/hyper-3-repo-banner.png)\n\n<p align=\"center\">\n "
  },
  {
    "path": "app/.yarnrc",
    "chars": 39,
    "preview": "registry \"https://registry.npmjs.org/\"\n"
  },
  {
    "path": "app/auto-updater-linux.ts",
    "chars": 1414,
    "preview": "import {EventEmitter} from 'events';\n\nimport fetch from 'electron-fetch';\n\nclass AutoUpdater extends EventEmitter implem"
  },
  {
    "path": "app/commands.ts",
    "chars": 5464,
    "preview": "import {app, Menu} from 'electron';\nimport type {BrowserWindow} from 'electron';\n\nimport {openConfig, getConfig} from '."
  },
  {
    "path": "app/config/config-default.json",
    "chars": 1949,
    "preview": "{\n  \"$schema\": \"./schema.json\",\n  \"config\": {\n    \"updateChannel\": \"stable\",\n    \"fontSize\": 12,\n    \"fontFamily\": \"Menl"
  },
  {
    "path": "app/config/import.ts",
    "chars": 1646,
    "preview": "import {readFileSync, mkdirpSync} from 'fs-extra';\n\nimport type {rawConfig} from '../../typings/config';\nimport notify f"
  },
  {
    "path": "app/config/init.ts",
    "chars": 2222,
    "preview": "import vm from 'vm';\n\nimport merge from 'lodash/merge';\n\nimport type {parsedConfig, rawConfig, configOptions} from '../."
  },
  {
    "path": "app/config/migrate.ts",
    "chars": 6712,
    "preview": "import {dirname, resolve} from 'path';\n\nimport {builders, namedTypes} from 'ast-types';\nimport type {ExpressionKind} fro"
  },
  {
    "path": "app/config/open.ts",
    "chars": 2407,
    "preview": "import {exec} from 'child_process';\n\nimport {shell} from 'electron';\n\nimport * as Registry from 'native-reg';\n\nimport {c"
  },
  {
    "path": "app/config/paths.ts",
    "chars": 2435,
    "preview": "// This module exports paths, names, and other metadata that is referenced\nimport {statSync} from 'fs';\nimport {homedir}"
  },
  {
    "path": "app/config/windows.ts",
    "chars": 584,
    "preview": "import type {BrowserWindow} from 'electron';\n\nimport Config from 'electron-store';\n\nexport const defaults = {\n  windowPo"
  },
  {
    "path": "app/config.ts",
    "chars": 4512,
    "preview": "import {app} from 'electron';\n\nimport chokidar from 'chokidar';\n\nimport type {parsedConfig, configOptions} from '../typi"
  },
  {
    "path": "app/index.html",
    "chars": 836,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>Hyper</title>\n\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\""
  },
  {
    "path": "app/index.ts",
    "chars": 7842,
    "preview": "// eslint-disable-next-line import/order\nimport {cfgPath} from './config/paths';\n\n// Print diagnostic information for a "
  },
  {
    "path": "app/keymaps/darwin.json",
    "chars": 1604,
    "preview": "{\n  \"window:devtools\": \"command+alt+i\",\n  \"window:reload\": \"command+shift+r\",\n  \"window:reloadFull\": \"command+shift+f5\","
  },
  {
    "path": "app/keymaps/linux.json",
    "chars": 1561,
    "preview": "{\n  \"window:devtools\": \"ctrl+shift+i\",\n  \"window:reload\": \"ctrl+shift+r\",\n  \"window:reloadFull\": \"ctrl+shift+f5\",\n  \"win"
  },
  {
    "path": "app/keymaps/win32.json",
    "chars": 1436,
    "preview": "{\n  \"window:devtools\": \"ctrl+shift+i\",\n  \"window:reload\": \"ctrl+shift+r\",\n  \"window:reloadFull\": \"ctrl+shift+f5\",\n  \"win"
  },
  {
    "path": "app/menus/menu.ts",
    "chars": 2819,
    "preview": "// Packages\nimport {app, dialog, Menu} from 'electron';\nimport type {BrowserWindow} from 'electron';\n\n// Utilities\nimpor"
  },
  {
    "path": "app/menus/menus/darwin.ts",
    "chars": 1184,
    "preview": "// This menu label is overrided by OSX to be the appName\n// The label is set to appName here so it matches actual behavi"
  },
  {
    "path": "app/menus/menus/edit.ts",
    "chars": 3846,
    "preview": "import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';\n\nconst editMenu = (\n  commandKeys: Record<strin"
  },
  {
    "path": "app/menus/menus/help.ts",
    "chars": 3690,
    "preview": "import {release} from 'os';\n\nimport {app, shell, dialog, clipboard} from 'electron';\nimport type {MenuItemConstructorOpt"
  },
  {
    "path": "app/menus/menus/shell.ts",
    "chars": 2901,
    "preview": "import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';\n\nconst shellMenu = (\n  commandKeys: Record<stri"
  },
  {
    "path": "app/menus/menus/tools.ts",
    "chars": 1205,
    "preview": "import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';\n\nconst toolsMenu = (\n  commands: Record<string,"
  },
  {
    "path": "app/menus/menus/view.ts",
    "chars": 1552,
    "preview": "import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';\n\nconst viewMenu = (\n  commandKeys: Record<strin"
  },
  {
    "path": "app/menus/menus/window.ts",
    "chars": 2463,
    "preview": "import type {BrowserWindow, MenuItemConstructorOptions} from 'electron';\n\nconst windowMenu = (\n  commandKeys: Record<str"
  },
  {
    "path": "app/notifications.ts",
    "chars": 1101,
    "preview": "import type {BrowserWindow} from 'electron';\n\nimport fetch from 'electron-fetch';\nimport ms from 'ms';\n\nimport {version}"
  },
  {
    "path": "app/notify.ts",
    "chars": 591,
    "preview": "import {app, Notification} from 'electron';\n\nimport {icon} from './config/paths';\n\nexport default function notify(title:"
  },
  {
    "path": "app/package.json",
    "chars": 1158,
    "preview": "{\n  \"name\": \"hyper\",\n  \"productName\": \"Hyper\",\n  \"description\": \"A terminal built on web technologies\",\n  \"version\": \"4."
  },
  {
    "path": "app/patches/node-pty+1.0.0.patch",
    "chars": 468,
    "preview": "diff --git a/node_modules/node-pty/src/win/conpty.cc b/node_modules/node-pty/src/win/conpty.cc\nindex 47af75c..884d542 10"
  },
  {
    "path": "app/plugins.ts",
    "chars": 13783,
    "preview": "/* eslint-disable eslint-comments/disable-enable-pair */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* esl"
  },
  {
    "path": "app/rpc.ts",
    "chars": 2229,
    "preview": "import {EventEmitter} from 'events';\n\nimport {ipcMain} from 'electron';\nimport type {BrowserWindow, IpcMainEvent} from '"
  },
  {
    "path": "app/session.ts",
    "chars": 7725,
    "preview": "import {EventEmitter} from 'events';\nimport {dirname} from 'path';\nimport {StringDecoder} from 'string_decoder';\n\nimport"
  },
  {
    "path": "app/tsconfig.json",
    "chars": 298,
    "preview": "{\n  \"extends\": \"../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"declarationDir\": \"../dist/tmp/appdts/\",\n    \"outDir\""
  },
  {
    "path": "app/ui/contextmenu.ts",
    "chars": 1525,
    "preview": "import type {MenuItemConstructorOptions, BrowserWindow} from 'electron';\n\nimport {execCommand} from '../commands';\nimpor"
  },
  {
    "path": "app/ui/window.ts",
    "chars": 11681,
    "preview": "import {existsSync} from 'fs';\nimport {isAbsolute, normalize, sep} from 'path';\nimport {URL, fileURLToPath} from 'url';\n"
  },
  {
    "path": "app/updater.ts",
    "chars": 3314,
    "preview": "// Packages\nimport electron, {app} from 'electron';\nimport type {BrowserWindow, AutoUpdater} from 'electron';\n\nimport re"
  },
  {
    "path": "app/utils/cli-install.ts",
    "chars": 5663,
    "preview": "import {existsSync, readlink, symlink} from 'fs';\nimport path from 'path';\nimport {promisify} from 'util';\n\nimport {clip"
  },
  {
    "path": "app/utils/colors.ts",
    "chars": 732,
    "preview": "const colorList = [\n  'black',\n  'red',\n  'green',\n  'yellow',\n  'blue',\n  'magenta',\n  'cyan',\n  'white',\n  'lightBlack"
  },
  {
    "path": "app/utils/map-keys.ts",
    "chars": 1499,
    "preview": "const generatePrefixedCommand = (command: string, shortcuts: string[]) => {\n  const result: Record<string, string[]> = {"
  },
  {
    "path": "app/utils/renderer-utils.ts",
    "chars": 331,
    "preview": "const rendererTypes: Record<string, string> = {};\n\nfunction getRendererTypes() {\n  return rendererTypes;\n}\n\nfunction set"
  },
  {
    "path": "app/utils/shell-fallback.ts",
    "chars": 415,
    "preview": "export const getFallBackShellConfig = (\n  shell: string,\n  shellArgs: string[],\n  defaultShell: string,\n  defaultShellAr"
  },
  {
    "path": "app/utils/system-context-menu.ts",
    "chars": 1737,
    "preview": "import * as Registry from 'native-reg';\nimport type {HKEY} from 'native-reg';\n\nconst appPath = `\"${process.execPath}\"`;\n"
  },
  {
    "path": "app/utils/to-electron-background-color.ts",
    "chars": 570,
    "preview": "// Packages\nimport Color from 'color';\n\n// returns a background color that's in hex\n// format including the alpha channe"
  },
  {
    "path": "app/utils/window-utils.ts",
    "chars": 346,
    "preview": "import electron from 'electron';\n\nexport function positionIsValid(position: [number, number]) {\n  const displays = elect"
  },
  {
    "path": "ava-e2e.config.js",
    "chars": 130,
    "preview": "module.exports = {\n  files: ['test/*'],\n  extensions: ['ts'],\n  require: ['ts-node/register/transpile-only'],\n  timeout:"
  },
  {
    "path": "ava.config.js",
    "chars": 117,
    "preview": "module.exports = {\n  files: ['test/unit/*'],\n  extensions: ['ts'],\n  require: ['ts-node/register/transpile-only']\n};\n"
  },
  {
    "path": "babel.config.json",
    "chars": 351,
    "preview": "{\n  \"presets\": [\n    \"@babel/react\",\n    \"@babel/typescript\"\n  ],\n  \"plugins\": [\n    [\n      \"styled-jsx/babel\",\n      {"
  },
  {
    "path": "bin/cp-snapshot.js",
    "chars": 1881,
    "preview": "const path = require('path');\nconst fs = require('fs');\nconst {Arch} = require('electron-builder');\n\nfunction copySnapsh"
  },
  {
    "path": "bin/mk-snapshot.js",
    "chars": 1992,
    "preview": "const childProcess = require('child_process');\nconst vm = require('vm');\nconst path = require('path');\nconst fs = requir"
  },
  {
    "path": "bin/notarize.js",
    "chars": 535,
    "preview": "const { notarize } = require(\"@electron/notarize\");\n\nexports.default = async function notarizing(context) {\n  const { el"
  },
  {
    "path": "bin/rimraf-standalone.js",
    "chars": 95733,
    "preview": "function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar "
  },
  {
    "path": "bin/snapshot-libs.js",
    "chars": 762,
    "preview": "require('color-convert');\nrequire('color-string');\nrequire('columnify');\nrequire('lodash');\nrequire('ms');\nrequire('norm"
  },
  {
    "path": "bin/yarn-standalone.js",
    "chars": 4949348,
    "preview": "#!/usr/bin/env node\nmodule.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/**"
  },
  {
    "path": "build/linux/after-install.tpl",
    "chars": 158,
    "preview": "#!/bin/bash\n\nmkdir -p /usr/local/bin\n\n# Link to the CLI bootstrap\nln -sf '/opt/${productFilename}/resources/bin/${execut"
  },
  {
    "path": "build/linux/hyper",
    "chars": 960,
    "preview": "#!/usr/bin/env bash\n# Deeply inspired by https://github.com/Microsoft/vscode/blob/1.17.0/resources/linux/bin/code.sh\n\n# "
  },
  {
    "path": "build/mac/entitlements.plist",
    "chars": 918,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "build/mac/hyper",
    "chars": 832,
    "preview": "#!/usr/bin/env bash\n# Deeply inspired by https://github.com/Microsoft/vscode/blob/1.65.2/resources/darwin/bin/code.sh\n\n#"
  },
  {
    "path": "build/win/hyper",
    "chars": 974,
    "preview": "#!/usr/bin/env bash\n# Deeply inspired by https://github.com/Microsoft/vscode/blob/1.17.0/resources/win/bin/code.sh\n\nNAME"
  },
  {
    "path": "build/win/hyper.cmd",
    "chars": 119,
    "preview": "@echo off\nsetlocal\nset ELECTRON_RUN_AS_NODE=1\ncall \"%~dp0..\\..\\Hyper.exe\" \"%~dp0..\\..\\resources\\bin\\cli.js\" %*\nendlocal"
  },
  {
    "path": "build/win/installer.nsh",
    "chars": 1242,
    "preview": "!macro customInstall\n  WriteRegStr HKCU \"Software\\Classes\\Directory\\Background\\shell\\Hyper\" \"\" \"Open &Hyper here\"\n  Writ"
  },
  {
    "path": "cli/api.ts",
    "chars": 4027,
    "preview": "// eslint-disable-next-line eslint-comments/disable-enable-pair\n/* eslint-disable @typescript-eslint/no-unsafe-return */"
  },
  {
    "path": "cli/index.ts",
    "chars": 6679,
    "preview": "// This is a CLI tool, using console is OK\n/* eslint no-console: 0 */\nimport {spawn, exec} from 'child_process';\nimport "
  },
  {
    "path": "electron-builder-linux-ci.json",
    "chars": 146,
    "preview": "{\n  \"$schema\": \"http://json.schemastore.org/electron-builder\",\n  \"extends\": \"electron-builder.json\",\n  \"afterSign\": null"
  },
  {
    "path": "electron-builder.json",
    "chars": 4302,
    "preview": "{\n  \"$schema\": \"http://json.schemastore.org/electron-builder\",\n  \"appId\": \"co.zeit.hyper\",\n  \"afterSign\": \"./bin/notariz"
  },
  {
    "path": "lib/actions/config.ts",
    "chars": 464,
    "preview": "import type {configOptions} from '../../typings/config';\nimport {CONFIG_LOAD, CONFIG_RELOAD} from '../../typings/constan"
  },
  {
    "path": "lib/actions/header.ts",
    "chars": 1801,
    "preview": "import {CLOSE_TAB, CHANGE_TAB} from '../../typings/constants/tabs';\nimport {\n  UI_WINDOW_MAXIMIZE,\n  UI_WINDOW_UNMAXIMIZ"
  },
  {
    "path": "lib/actions/index.ts",
    "chars": 312,
    "preview": "import {INIT} from '../../typings/constants';\nimport type {HyperDispatch} from '../../typings/hyper';\nimport rpc from '."
  },
  {
    "path": "lib/actions/notifications.ts",
    "chars": 477,
    "preview": "import {NOTIFICATION_MESSAGE, NOTIFICATION_DISMISS} from '../../typings/constants/notifications';\nimport type {HyperActi"
  },
  {
    "path": "lib/actions/sessions.ts",
    "chars": 4487,
    "preview": "import type {Session} from '../../typings/common';\nimport {\n  SESSION_ADD,\n  SESSION_RESIZE,\n  SESSION_REQUEST,\n  SESSIO"
  },
  {
    "path": "lib/actions/term-groups.ts",
    "chars": 6059,
    "preview": "import {SESSION_REQUEST} from '../../typings/constants/sessions';\nimport {\n  DIRECTION,\n  TERM_GROUP_RESIZE,\n  TERM_GROU"
  },
  {
    "path": "lib/actions/ui.ts",
    "chars": 9205,
    "preview": "import {stat} from 'fs';\nimport type {Stats} from 'fs';\n\nimport type parseUrl from 'parse-url';\nimport {php_escapeshellc"
  },
  {
    "path": "lib/actions/updater.ts",
    "chars": 541,
    "preview": "import {UPDATE_INSTALL, UPDATE_AVAILABLE} from '../../typings/constants/updater';\nimport type {HyperActions} from '../.."
  },
  {
    "path": "lib/command-registry.ts",
    "chars": 1372,
    "preview": "import type {HyperDispatch} from '../typings/hyper';\n\nimport {closeSearch} from './actions/sessions';\nimport {ipcRendere"
  },
  {
    "path": "lib/components/header.tsx",
    "chars": 7357,
    "preview": "import React, {forwardRef, useState} from 'react';\n\nimport type {HeaderProps} from '../../typings/hyper';\nimport {decora"
  },
  {
    "path": "lib/components/new-tab.tsx",
    "chars": 3915,
    "preview": "import React, {useRef, useState} from 'react';\n\nimport {VscChevronDown} from '@react-icons/all-files/vsc/VscChevronDown'"
  },
  {
    "path": "lib/components/notification.tsx",
    "chars": 3043,
    "preview": "import React, {forwardRef, useEffect, useRef, useState} from 'react';\n\nimport type {NotificationProps} from '../../typin"
  },
  {
    "path": "lib/components/notifications.tsx",
    "chars": 3746,
    "preview": "import React, {forwardRef} from 'react';\n\nimport type {NotificationsProps} from '../../typings/hyper';\nimport {decorate}"
  },
  {
    "path": "lib/components/searchBox.tsx",
    "chars": 6201,
    "preview": "import React, {useCallback, useRef, useEffect, forwardRef} from 'react';\n\nimport {VscArrowDown} from '@react-icons/all-f"
  },
  {
    "path": "lib/components/split-pane.tsx",
    "chars": 5575,
    "preview": "import React, {useState, useEffect, useRef, forwardRef} from 'react';\n\nimport sum from 'lodash/sum';\n\nimport type {Split"
  },
  {
    "path": "lib/components/style-sheet.tsx",
    "chars": 648,
    "preview": "import React, {forwardRef} from 'react';\n\nimport type {StyleSheetProps} from '../../typings/hyper';\n\nconst StyleSheet = "
  },
  {
    "path": "lib/components/tab.tsx",
    "chars": 4018,
    "preview": "import React, {forwardRef} from 'react';\n\nimport type {TabProps} from '../../typings/hyper';\n\nconst Tab = forwardRef<HTM"
  },
  {
    "path": "lib/components/tabs.tsx",
    "chars": 3154,
    "preview": "import React, {forwardRef} from 'react';\n\nimport type {TabsProps} from '../../typings/hyper';\nimport {decorate, getTabPr"
  },
  {
    "path": "lib/components/term-group.tsx",
    "chars": 5527,
    "preview": "import React from 'react';\n\nimport {connect} from 'react-redux';\n\nimport type {HyperState, HyperDispatch, TermGroupProps"
  },
  {
    "path": "lib/components/term.tsx",
    "chars": 18432,
    "preview": "import {clipboard, shell} from 'electron';\nimport React from 'react';\n\nimport Color from 'color';\nimport isEqual from 'l"
  },
  {
    "path": "lib/components/terms.tsx",
    "chars": 6431,
    "preview": "import React from 'react';\n\nimport type {TermsProps, HyperDispatch} from '../../typings/hyper';\nimport {registerCommandH"
  },
  {
    "path": "lib/containers/header.ts",
    "chars": 2687,
    "preview": "import {createSelector} from 'reselect';\n\nimport type {HyperState, HyperDispatch, ITab} from '../../typings/hyper';\nimpo"
  },
  {
    "path": "lib/containers/hyper.tsx",
    "chars": 4817,
    "preview": "import React, {forwardRef, useEffect, useRef} from 'react';\n\nimport Mousetrap from 'mousetrap';\nimport type {MousetrapIn"
  },
  {
    "path": "lib/containers/notifications.ts",
    "chars": 2518,
    "preview": "import type {HyperState, HyperDispatch} from '../../typings/hyper';\nimport {dismissNotification} from '../actions/notifi"
  },
  {
    "path": "lib/containers/terms.ts",
    "chars": 3148,
    "preview": "import type {HyperState, HyperDispatch} from '../../typings/hyper';\nimport {\n  resizeSession,\n  sendSessionData,\n  setSe"
  },
  {
    "path": "lib/index.tsx",
    "chars": 7397,
    "preview": "import './v8-snapshot-util';\nimport {webFrame} from 'electron';\nimport React from 'react';\n\nimport {createRoot} from 're"
  },
  {
    "path": "lib/reducers/index.ts",
    "chars": 348,
    "preview": "import {combineReducers} from 'redux';\nimport type {Reducer} from 'redux';\n\nimport type {HyperActions, HyperState} from "
  },
  {
    "path": "lib/reducers/sessions.ts",
    "chars": 3341,
    "preview": "import Immutable from 'seamless-immutable';\n\nimport {\n  SESSION_ADD,\n  SESSION_PTY_EXIT,\n  SESSION_USER_EXIT,\n  SESSION_"
  },
  {
    "path": "lib/reducers/term-groups.ts",
    "chars": 8232,
    "preview": "import Immutable from 'seamless-immutable';\nimport type {Immutable as ImmutableType} from 'seamless-immutable';\nimport {"
  },
  {
    "path": "lib/reducers/ui.ts",
    "chars": 13866,
    "preview": "import {release} from 'os';\n\nimport Immutable from 'seamless-immutable';\nimport type {Immutable as ImmutableType} from '"
  },
  {
    "path": "lib/rpc.ts",
    "chars": 76,
    "preview": "import RPC from './utils/rpc';\n\nconst rpc = new RPC();\n\nexport default rpc;\n"
  },
  {
    "path": "lib/selectors.ts",
    "chars": 368,
    "preview": "import {createSelector} from 'reselect';\n\nimport type {HyperState} from '../typings/hyper';\n\nconst getTermGroups = ({ter"
  },
  {
    "path": "lib/store/configure-store.dev.ts",
    "chars": 772,
    "preview": "import {composeWithDevTools} from '@redux-devtools/extension';\nimport {createStore, applyMiddleware} from 'redux';\nimpor"
  },
  {
    "path": "lib/store/configure-store.prod.ts",
    "chars": 632,
    "preview": "import {createStore, applyMiddleware} from 'redux';\nimport _thunk from 'redux-thunk';\nimport type {ThunkMiddleware} from"
  },
  {
    "path": "lib/store/configure-store.ts",
    "chars": 333,
    "preview": "import configureStoreForDevelopment from './configure-store.dev';\nimport configureStoreForProduction from './configure-s"
  },
  {
    "path": "lib/store/write-middleware.ts",
    "chars": 594,
    "preview": "import type {Dispatch, Middleware} from 'redux';\n\nimport type {HyperActions, HyperState} from '../../typings/hyper';\nimp"
  },
  {
    "path": "lib/terms.ts",
    "chars": 344,
    "preview": "import type Term from './components/term';\n\n// react Term components add themselves\n// to this object upon mounting / un"
  },
  {
    "path": "lib/utils/config.ts",
    "chars": 835,
    "preview": "import {require as remoteRequire, getCurrentWindow} from '@electron/remote';\n// TODO: Should be updates to new async API"
  },
  {
    "path": "lib/utils/effects.ts",
    "chars": 792,
    "preview": "import type {Dispatch, Middleware} from 'redux';\n\nimport type {HyperActions, HyperState} from '../../typings/hyper';\n/**"
  },
  {
    "path": "lib/utils/file.ts",
    "chars": 1100,
    "preview": "/*\n * Based on https://github.com/kevva/executable\n * Since this module doesn't expose the function to check stat mode o"
  },
  {
    "path": "lib/utils/ipc-child-process.ts",
    "chars": 1550,
    "preview": "import type {ExecFileOptions, ExecOptions} from 'child_process';\n\nimport {ipcRenderer} from './ipc';\n\nexport function ex"
  },
  {
    "path": "lib/utils/ipc.ts",
    "chars": 175,
    "preview": "import {ipcRenderer as _ipc} from 'electron';\n\nimport type {IpcRendererWithCommands} from '../../typings/common';\n\nexpor"
  },
  {
    "path": "lib/utils/notify.ts",
    "chars": 262,
    "preview": "/* eslint no-new:0 */\nexport default function notify(title: string, body: string, details: {error?: any} = {}) {\n  conso"
  },
  {
    "path": "lib/utils/object.ts",
    "chars": 612,
    "preview": "// eslint-disable-next-line eslint-comments/disable-enable-pair\n/* eslint-disable @typescript-eslint/no-unsafe-return */"
  },
  {
    "path": "lib/utils/paste.ts",
    "chars": 774,
    "preview": "import {clipboard} from 'electron';\n\nimport plist from 'plist';\n\nconst getPath = (platform: string) => {\n  switch (platf"
  },
  {
    "path": "lib/utils/plugins.ts",
    "chars": 17797,
    "preview": "// eslint-disable-next-line eslint-comments/disable-enable-pair\n/* eslint-disable @typescript-eslint/no-unsafe-return */"
  },
  {
    "path": "lib/utils/rpc.ts",
    "chars": 2339,
    "preview": "import {EventEmitter} from 'events';\n\nimport type {IpcRendererEvent} from 'electron';\n\nimport type {\n  FilterNever,\n  Ip"
  },
  {
    "path": "lib/utils/term-groups.ts",
    "chars": 306,
    "preview": "import type {ITermState} from '../../typings/hyper';\n\nexport default function findBySession(termGroupState: ITermState, "
  },
  {
    "path": "lib/v8-snapshot-util.ts",
    "chars": 784,
    "preview": "if (typeof snapshotResult !== 'undefined') {\n  const Module = __non_webpack_require__('module');\n  const originalLoad: ("
  },
  {
    "path": "package.json",
    "chars": 5575,
    "preview": "{\n  \"name\": \"hyper\",\n  \"version\": \"4.0.0-canary.5\",\n  \"repository\": \"zeit/hyper\",\n  \"scripts\": {\n    \"start\": \"echo 'ple"
  },
  {
    "path": "release.js",
    "chars": 377,
    "preview": "// Packages\nconst {prompt} = require('inquirer');\n\nmodule.exports = async (markdown) => {\n  const answers = await prompt"
  },
  {
    "path": "test/index.ts",
    "chars": 1486,
    "preview": "// Native\nimport path from 'path';\n\n// Packages\nimport test from 'ava';\nimport fs from 'fs-extra';\nimport {_electron} fr"
  },
  {
    "path": "test/testUtils/is-hex-color.ts",
    "chars": 147,
    "preview": "function isHexColor(color: string) {\n  return /(^#[0-9A-F]{6,8}$)|(^#[0-9A-F]{3}$)/i.test(color); // https://regex101.co"
  },
  {
    "path": "test/unit/cli-api.test.ts",
    "chars": 1296,
    "preview": "/* eslint-disable eslint-comments/disable-enable-pair */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* esl"
  },
  {
    "path": "test/unit/to-electron-background-color.test.ts",
    "chars": 867,
    "preview": "import test from 'ava';\n\nimport toElectronBackgroundColor from '../../app/utils/to-electron-background-color';\nimport {i"
  },
  {
    "path": "test/unit/window-utils.test.ts",
    "chars": 2085,
    "preview": "// eslint-disable-next-line eslint-comments/disable-enable-pair\n/* eslint-disable @typescript-eslint/no-unsafe-call */\ni"
  },
  {
    "path": "tsconfig.base.json",
    "chars": 418,
    "preview": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"checkJs\": false,\n    \"composite\": true,\n    \"esModuleInterop\": true,\n"
  },
  {
    "path": "tsconfig.eslint.json",
    "chars": 167,
    "preview": "{\n  \"extends\": \"./tsconfig.base.json\",\n  \"include\": [\n    \"./app/\",\n    \"./lib/\",\n    \"./test/\",\n    \"./cli/\",\n    \"./\"\n"
  },
  {
    "path": "tsconfig.json",
    "chars": 266,
    "preview": "{\n  \"extends\": \"./tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"./dist/tmp/root/\"\n  },\n  \"include\": [\n    \""
  },
  {
    "path": "typings/common.d.ts",
    "chars": 4747,
    "preview": "import type {ExecFileOptions, ExecOptions} from 'child_process';\n\nimport type {IpcMain, IpcRenderer} from 'electron';\n\ni"
  },
  {
    "path": "typings/config.d.ts",
    "chars": 7520,
    "preview": "import type {FontWeight} from 'xterm';\n\nexport type ColorMap = {\n  black: string;\n  blue: string;\n  cyan: string;\n  gree"
  },
  {
    "path": "typings/constants/config.d.ts",
    "chars": 422,
    "preview": "import type {configOptions} from '../config';\n\nexport const CONFIG_LOAD = 'CONFIG_LOAD';\nexport const CONFIG_RELOAD = 'C"
  },
  {
    "path": "typings/constants/index.d.ts",
    "chars": 121,
    "preview": "export const INIT = 'INIT';\n\nexport interface InitAction {\n  type: typeof INIT;\n}\n\nexport type InitActions = InitAction;"
  },
  {
    "path": "typings/constants/notifications.d.ts",
    "chars": 455,
    "preview": "export const NOTIFICATION_MESSAGE = 'NOTIFICATION_MESSAGE';\nexport const NOTIFICATION_DISMISS = 'NOTIFICATION_DISMISS';\n"
  },
  {
    "path": "typings/constants/sessions.d.ts",
    "chars": 2511,
    "preview": "export const SESSION_ADD = 'SESSION_ADD';\nexport const SESSION_RESIZE = 'SESSION_RESIZE';\nexport const SESSION_REQUEST ="
  },
  {
    "path": "typings/constants/tabs.d.ts",
    "chars": 265,
    "preview": "export const CLOSE_TAB = 'CLOSE_TAB';\nexport const CHANGE_TAB = 'CHANGE_TAB';\n\nexport interface CloseTabAction {\n  type:"
  },
  {
    "path": "typings/constants/term-groups.d.ts",
    "chars": 808,
    "preview": "export const TERM_GROUP_REQUEST = 'TERM_GROUP_REQUEST';\nexport const TERM_GROUP_EXIT = 'TERM_GROUP_EXIT';\nexport const T"
  },
  {
    "path": "typings/constants/ui.d.ts",
    "chars": 3865,
    "preview": "export const UI_FONT_SIZE_SET = 'UI_FONT_SIZE_SET';\nexport const UI_FONT_SIZE_INCR = 'UI_FONT_SIZE_INCR';\nexport const U"
  },
  {
    "path": "typings/constants/updater.d.ts",
    "chars": 411,
    "preview": "export const UPDATE_INSTALL = 'UPDATE_INSTALL';\nexport const UPDATE_AVAILABLE = 'UPDATE_AVAILABLE';\n\nexport interface Up"
  },
  {
    "path": "typings/ext-modules.d.ts",
    "chars": 517,
    "preview": "declare module 'php-escape-shell' {\n  export function php_escapeshellcmd(path: string): string;\n}\n\ndeclare module 'git-d"
  },
  {
    "path": "typings/extend-electron.d.ts",
    "chars": 827,
    "preview": "import type {Server} from '../app/rpc';\n\ndeclare global {\n  namespace Electron {\n    interface App {\n      config: typeo"
  },
  {
    "path": "typings/hyper.d.ts",
    "chars": 10983,
    "preview": "// eslint-disable-next-line eslint-comments/disable-enable-pair\n/* eslint-disable import/order */\nimport type {Immutable"
  },
  {
    "path": "webpack.config.ts",
    "chars": 6066,
    "preview": "import path from 'path';\n\nimport Copy from 'copy-webpack-plugin';\nimport TerserPlugin from 'terser-webpack-plugin';\nimpo"
  }
]

// ... and 3 more files (download for full content)

About this extraction

This page contains the full source code of the vercel/hyper GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 158 files (5.2 MB), approximately 1.4M tokens, and a symbol index with 5094 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!