/*
 * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

def prop(name, defVal) {
    def value = project.properties[name]
    if (value == null) return defVal
    return value
}

def distTag(version) {
    def i = version.indexOf('-')
    if (i > 0) return version.substring(i + 1)
    return "latest"
}

def npmTemplateDir = file("$projectDir/npm")
def npmDeployDir = file("$buildDir/npm")
def npmDeployTag = distTag(version)

def authToken = prop("kotlin.npmjs.auth.token", "")
def dryRun = prop("dryRun", "false")

task preparePublishNpm(type: Copy, dependsOn: [compileKotlin2Js]) {
    from(npmTemplateDir) {
        expand (project.properties + [kotlinDependency: "\"kotlin\": \"$kotlin_version\""])
    }
    from("$buildDir/classes/kotlin/main")
    into npmDeployDir
}

task publishNpm(type: NpmTask, dependsOn: [preparePublishNpm]) {
    workingDir = npmDeployDir
    def deployArgs = ['publish',
                      "--//registry.npmjs.org/:_authToken=$authToken",
                      "--tag=$npmDeployTag"]
    doFirst {
        if (dryRun == "true") {
            println("$npmDeployDir \$ npm arguments: $deployArgs")
            args = ['pack']
        } else {
            args = deployArgs
        }
    }
}
