File: //var/packages/Node.js_v20/scripts/common
#!/bin/sh
# Copyright (C) 2000-2022 Synology Inc. All rights reserved.
NODE_JS_PKG="Node.js_v20"
PKG_DIR="/var/packages/${NODE_JS_PKG}/target"
PKG_VAR_DIR="/var/packages/${NODE_JS_PKG}/var"
# fill by install script
NODE_VERSION="20.19.5"
NVM_PREFIX_DIR="/usr/local/node/nvm"
NVM_VERSION_DIR="$NVM_PREFIX_DIR/versions/${NODE_VERSION}"
NODEJS_ETC_DIR="/usr/syno/etc/packages/Node.js"
PREFERENCE_CONF="$NODEJS_ETC_DIR/.version.pref"
GLOBAL_NODE_MODULES="/usr/local/lib/node_modules"
VAR_NODE_MODULES="$PKG_VAR_DIR/node_modules"
PKG_NODE_MODULES="$PKG_DIR/usr/local/lib/node_modules"
NPM_BIN="/usr/local/bin/npm"
_REMOVE_INVALID_VERSIONS()
{
local i;
for i in "$NVM_PREFIX_DIR/versions/"*; do
if [ -e "$i/bin/node" ] && "$i/bin/node" -v | grep -q "v$(basename "$i")"; then
continue;
fi
rm "$i/bin/node"
rmdir "$i/bin" "$i"
done
}
_CHECK_AND_LINK_FILE()
{
local LINK=$NVM_VERSION_DIR/$1
local LINK_TARGET="`realpath ${PKG_DIR}/usr/local/$1`"
local LINK_BASE=`dirname $LINK`
if [ ! -d "$LINK_BASE" ]; then
mkdir -p $LINK_BASE
fi
if [ -e "$LINK" ]; then
rm -rf $LINK
fi
if [ ! -e "$LINK" ]; then
ln -sf $LINK_TARGET $LINK
fi
}
_CHECK_AND_REMOVE()
{
[ -L /usr/local/$1 ] && rm /usr/local/$1
}
DO_LINK()
{
_REMOVE_INVALID_VERSIONS
_CHECK_AND_LINK_FILE "bin/node"
}
DO_REMOVE()
{
_CHECK_AND_REMOVE "bin/node"
_CHECK_AND_REMOVE "lib/node_modules"
}
GET_STATUS()
{
NODE_BIN="${PKG_DIR}/usr/local/bin/node"
[ -x "/usr/local/bin/node" ] && [ -x "$NODE_BIN" ] || return 150
[ "$(stat --printf="%s" $NODE_BIN)" -gt 0 ] || return 150
if ! $NODE_BIN -v ; then
return 150
fi
return 0
}
USE_LATEST_NODE()
{
LATEST_VER=$(/usr/local/bin/nvm latest)
[ -z "$(/usr/local/bin/nvm list | grep $LATEST_VER)" ] && return 1
/usr/local/bin/nvm set $LATEST_VER
return $?
}
USE_STABLE_NODE()
{
STABLE_VER=$(/usr/local/bin/nvm stable)
[ -z "$(/usr/local/bin/nvm list | grep $STABLE_VER)" ] && return 1
/usr/local/bin/nvm set $STABLE_VER
return $?
}
USE_PREFERENCE_NODE()
{
[ -f "$PREFERENCE_CONF" ] && PREFER_VERSION=$(cat $PREFERENCE_CONF) || return 1
/usr/local/bin/nvm set $PREFER_VERSION
return $?
}
IS_NPM_LINK_TO_PACKAGE()
{
if [ -L "$GLOBAL_NODE_MODULES/npm" ]; then
if [ "$(readlink $GLOBAL_NODE_MODULES/npm)" = "$PKG_NODE_MODULES/npm" ]; then
return 0
fi
fi
return 1
}
SETUP_NODE_MODULES()
{
mkdir -p $GLOBAL_NODE_MODULES
if IS_NPM_LINK_TO_PACKAGE; then
:
elif IS_NPM_NEWER "$PKG_NODE_MODULES" "$GLOBAL_NODE_MODULES"; then
rm -rf $GLOBAL_NODE_MODULES/npm
ln -sf $PKG_NODE_MODULES/npm $GLOBAL_NODE_MODULES/npm
fi
if [ ! -e $NPM_BIN ]; then
ln -sf $GLOBAL_NODE_MODULES/npm/bin/npm-cli.js $NPM_BIN
fi
}
SET_DEFAULT_NODE()
{
USE_PREFERENCE_NODE
[ 0 -eq "$?" ] && return
USE_STABLE_NODE
[ 0 -eq "$?" ] && return
USE_LATEST_NODE
return $?
}
IS_NPM_NEWER()
{
local SOURCE="$1/npm/package.json"
local DEST="$2/npm/package.json"
if [ ! -e "$SOURCE" ]; then
return 1
fi
if [ ! -e "$DEST" ]; then
return 0
fi
local SOURCE_NPM_VER=$(jq -r .version $SOURCE)
local DEST_NPM_VER=$(jq -r .version $DEST)
for i in 1 2 3; do
D_V=$(echo $DEST_NPM_VER | cut -d"." -f$i)
S_V=$(echo $SOURCE_NPM_VER | cut -d"." -f$i)
case $(($D_V-$S_V)) in
0) ;;
-[0-9]*) return 0;;
[0-9]*) return 1;;
esac
done
return 1
}