import com.sonymusic.*
import groovy.json.JsonSlurper

def call(Map args){
    def params = Utils.validateParams('npmRun', args, [
        scriptNames: [type: List, itemType: String, required: true],
        nodeVersion: [type: String, required: false],
        envVars: [type: Map, required: false, defaultValue: [:]]
    ])

    // Parse package.json to get available scripts
    def packageJsonContent = readFile('package.json')
    def availableScripts = new JsonSlurper().parseText(packageJsonContent).scripts?.keySet()?.toList() ?: []

    def npmRunString = params.scriptNames.collect{ cmd ->
        def scriptName = cmd.split(' ')[0]  // Get first word (script/binary name)

        if (availableScripts.contains(scriptName)) {
            "npm run ${cmd}"
        } else {
            "npm exec -- ${cmd}"
        }
    }.join("\n")

    nodeSh(
        envVars: params.envVars,
        nodeVersion: params.nodeVersion,
        script: """
            set -e
            npm ci
            ${npmRunString}
        """
    )
}
