#
# ============LICENSE_START=======================================================
#  Copyright (C) 2021 Nordix Foundation.
#  ================================================================================
#  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.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================
#

#!/bin/sh

if test -d ui-react/node_modules;
then
  echo "DELETING node_modules inside ui-react"
  rm -rf ui-react/node_modules
fi

if test -f ui-react/package-lock.json;
then
  echo "DELETING package-lock.json inside ui-react"
  rm ui-react/package-lock.json
fi

if test -d ui-react-lib/node_modules;
then
  echo "DELETING node_modules inside ui-react-lib"
  rm -rf ui-react-lib/node_modules
fi

if test -f ui-react-lib/package-lock.json;
then
  echo "DELETING package-lock.json inside ui-react-lib"
  rm ui-react-lib/package-lock.json
fi
