#!/usr/bin/env node

// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var childProcess = require('child_process');
var fs = require('fs');
var path = require('path');
var shell = require('child_process').execSync;

var repoRootPath;
try {
  repoRootPath = shellOutput('git rev-parse --show-toplevel');
} catch (error) {
  console.log('ERROR: cannot use dtrun outside of chromium repo');
  process.exit(1);
}

var devtoolsPath = path.join(repoRootPath, 'third_party', 'devtools-frontend', 'src');

if (!isDir(devtoolsPath)) {
  console.log('ERROR: cannot use dtrun outside of chromium repo');
  process.exit(1);
}

var npmPath = shellOutput('which npm');
var args = ['run'];
if (process.argv.length > 2) {
  args.push(process.argv[2]);
  args.push('--');
  args = args.concat(process.argv.slice(3));
}
var child = childProcess.spawn(npmPath, args, {
  cwd: devtoolsPath,
  stdio: 'inherit',
});

function shellOutput(command) {
  return shell(command).toString().trim();
}

function isDir(path) {
  try {
    return fs.statSync(path).isDirectory();
  } catch (error) {
    return false;
  }
}
