#!/bin/bash
# Copyright (C) 2021 The Android Open Source Project
#
# 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.

set -e -u

# Note: this script is both executed standalone via tools/node and
# sourced by tools/npm.

ROOT_DIR="$(dirname $(cd -P ${BASH_SOURCE[0]%/*}; pwd))"

if [ "$(uname -s)" == "Darwin" ]; then
readonly NODE_DIR="$ROOT_DIR/buildtools/mac/nodejs"
else
readonly NODE_DIR="$ROOT_DIR/buildtools/linux64/nodejs"
fi

if [ ! -e "$NODE_DIR" ]; then
  echo 'Could not find Node.js hermetic installation. Please run:'
  echo 'tools/install-build-deps --ui'
  exit 1
fi

exec_node() {
  # Rationale for adding $ROOT_DIR/tools: some packages (notably protobufjs)
  # have the bad habit of executing "npm install ..." at runtime on the first
  # run. That will pick whatever "npm" is in the PATH which might be strongly
  # different than ours in /buildtools.
  export PATH="$NODE_DIR/bin:$ROOT_DIR/tools:$PATH"
  export NODE_OPTIONS="--max_old_space_size=8192 ${NODE_OPTIONS:-}"
  exec node "$@"
}

# If the script is sourced (from //tools/npm) stop here. Otherwise run node.
if [ "$0" == "${BASH_SOURCE[0]}" ]; then
  exec_node "$@"
fi
