HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
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
}