#!/usr/bin/env node

// Copyright 2022 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.
'use strict';

const path = require('path');
const fs = require('fs');

const {
  devtoolsRootPath,
} = require('./devtools_paths.js');

function bail(message) {
  console.error(message);
  process.exit(1);
}

function findVersionFromDepsFile() {
  const filePath = path.join(devtoolsRootPath(), 'DEPS');
  const contents = fs.readFileSync(filePath, 'utf8').split('\n');
  const esbuildPackageLine = contents.findIndex(line => line.match(/infra\/3pp\/tools\/esbuild/));
  if (esbuildPackageLine === -1) {
    bail('Could not find ESBuild within DEPS file.');
  }
  const esbuildVersionLine = contents[esbuildPackageLine + 1];
  const result = /@(\d{1,2}\.\d{1,2}\.\d{1,2})/.exec(esbuildVersionLine)?.[1];
  if (!result) {
    bail('Could not parse out ESBuild version from DEPS');
  }
  return result;
}

function findVersionFromNodeDepsFile() {
  const filePath = path.join(devtoolsRootPath(), 'scripts', 'deps', 'manage_node_deps.py');
  const contents = fs.readFileSync(filePath, 'utf8');
  const result = /"esbuild": "([0-9\.]+)"/.exec(contents)?.[1];
  if (!result) {
    bail('Could not parse out ESBuild version from manage_node_deps.py');
  }
  return result;
}

const nodeDepsVersion = findVersionFromNodeDepsFile();
const depsVersion = findVersionFromDepsFile();
if (nodeDepsVersion !== depsVersion) {
  bail(`Found mismatching esbuild versions in DEPS vs manage_node_deps:
    manage_node_deps.py: ${nodeDepsVersion}
    DEPS:                ${depsVersion}\n`);
}
