text: #!/usr/bin/env node
  // Copyright 2020 The Bazel Authors. All rights reserved.
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //    http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  'use strict';
  
  // This package inspired by
  // https://github.com/angular/clang-format/blob/master/index.js
  const os = require('os');
  const path = require('path');
  const spawn = require('child_process').spawn;
  
  function getNativeBinary() {
    const arch = {
      'x64' : 'amd64',
    }[os.arch()];
    // Filter the platform based on the platforms that are build/included.
    const platform = {
      'darwin' : 'darwin',
      'linux' : 'linux',
      'win32' : 'windows',
    }[os.platform()];
    const extension = {
      'darwin' : '',
      'linux' : '',
      'win32' : '.exe',
    }[os.platform()];
  
    if (arch == undefined || platform == undefined) {
      console.error(`FATAL: Your platform/architecture combination ${
          os.platform()} - ${os.arch()} is not yet supported.
      You may need to compile Bazelisk yourself, or use the Python version.
      See instructions at https://github.com/bazelbuild/bazelisk/blob/master/README.md.`);
      return Promise.resolve(1);
    }
  
    const binary =
        path.join(__dirname, `bazelisk-${platform}_${arch}${extension}`);
    return binary;
  }
  
  function main(args) {
    const binary = getNativeBinary();
    const ps = spawn(binary, args, {stdio : 'inherit'});
  
    function shutdown() {
      ps.kill("SIGTERM")
      process.exit();
    }
  
    process.on("SIGINT", shutdown);
    process.on("SIGTERM", shutdown);
  
    ps.on('close', e => process.exitCode = e);
  }
  
  if (require.main === module) {
    main(process.argv.slice(2));
  }
  
  module.exports = {
    getNativeBinary,
  };
  