#############################################################################################
#############################################################################################
##
## COMMANDS NODEJS
##
#############################################################################################
#############################################################################################

# path and binaries
NODEJS            ?= node
NODE              ?= node
NPM               ?= pnpm

EXECUTABLES = $(EXECUTABLES:-) $(NPM); 

NODE_PACKAGES := $(shell find $(PROJECT_ROOT) -type f -name 'package.json' -not -path '*/node_modules/*')
NODE_MODULES := $(shell find $(PROJECT_ROOT) -type d -name 'node_modules' -prune)

NODE_MODULES_MODIFIED := $(shell find $(PROJECT_ROOT) -type f -name 'package.json' -not -path '*/node_modules/*' -exec sh -c 'F=$$(dirname {}); echo $${F}/node_modules/.modified'   \;)

$(NODE_MODULES_MODIFIED): $(NODE_PACKAGES)
	$(ECHOMARKER) "Updating node modules..."
	$(QUIET) for p in $(NODE_PACKAGES); do \
  		DIR=$$(dirname $$p); \
		echo "Updating package: $${DIR}" ;\
		$(NPM) install --prefix $${DIR}  ;\
		if [ -d $${DIR}/node_modules/ ]; then \
			touch $${DIR}/node_modules/.modified ;\
		fi ;\
	done
 
## Main Develpoment Node Repos 
NODE_ROOT_DIR          ?= $(DEVELOPMENT_PATH)
NODE_MODULES_DIR       ?= $(NODE_ROOT_DIR)node_modules/
NODE_PACKAGE_PATH      ?= $(NODE_ROOT_DIR)package.json
NODE_MODULES_BIN_DIR   ?= $(NODE_MODULES_DIR).bin/

ESBUILD       ?= $(NODE_MODULES_BIN_DIR)esbuild
WEBPACK       ?= $(NODE_MODULES_BIN_DIR)webpack
BABEL         ?= $(NODE_MODULES_BIN_DIR)babel
UGLIFYJS      ?= $(NODE_MODULES_BIN_DIR)uglifyjs
C8            ?= $(NODE_MODULES_BIN_DIR)c8
MOCHA         ?= $(NODE_MODULES_BIN_DIR)mocha

PACKAGE_JSON ?= $(NODE_ROOT_DIR)package.json

ifneq "$(wildcard $(SOURCE_PATH) )" ""
  MJS_SOURCE_FILES                       := $(shell find $(SOURCE_PATH) -name '*.mjs')
  MJS_RELATIVE_SOURCE_FILES              := $(shell find $(SOURCE_PATH) -name '*.mjs' -exec realpath --relative-to $(PROJECT_ROOT) {} \;   )

  JS_SOURCE_FILES                       := $(shell find $(SOURCE_PATH) -name '*.js')
  JS_RELATIVE_SOURCE_FILES              := $(shell find $(SOURCE_PATH) -name '*.js' -exec realpath --relative-to $(PROJECT_ROOT) {} \;   )
endif