(function ()()

in ci/version.js [6:83]


(function () {
    'use strict';
    var semver = require("semver");
    var exec = require("child_process").exec;

    if (!process.env.npm_package_version) {
        throw "npm_package_version not set; run this via 'npm run'"
    }

    var givenVersion = process.env.npm_package_version;

    if (!semver.valid(givenVersion)) {
        throw "Invalid version " + givenVersion;
    }

    var baseVersion = semver.major(givenVersion) + "." + semver.minor(givenVersion) + "." + semver.patch(givenVersion);
    var prerelease = semver.prerelease(givenVersion) || []

    var buildId = process.env.BUILD_BUILDID || "1"

    var buildType = "dev"
    var inAzureDevOps = false

    if (process.env.SYSTEM_COLLECTIONID === "19422243-19b9-4d85-9ca6-bc961861d287" &&
         process.env.SYSTEM_DEFINITIONID === "7863") {

        inAzureDevOps = true

        if (process.env.BUILD_SOURCEBRANCH.match("^refs/heads/release/")) {
            buildType = "prod"
        } else if (process.env.BUILD_SOURCEBRANCH === "refs/heads/master" &&
            (process.env.BUILD_REASON === "Schedule" ||
             process.env.BUILD_REASON === "Manual")) {
            buildType = "int"
        }
    }

    // Check our version constraints
    if (buildType === "prod") {
        // Full version give in package.json
        if (prerelease.length != 0 &&
            (prerelease.length != 2 ||
            !prerelease[0].match("^(?:alpha|beta|rc)$") ||
            prerelease[1] < 1)) {
            throw "For prod build types, version must have no pre-release tag, or alpha / beta / rc with a positive number."
        }
    } else if (prerelease.length != 3 ||
        (prerelease[0] !== "alpha" || prerelease[1] !== 0 || prerelease[2] !== 1)) {
        throw "For non-prod build types, checked-in version must end in -alpha.0.1"
    }

    var versionToUse

    if (buildType === "dev") {
        versionToUse = baseVersion + "-alpha.0." + buildId
    } else if (buildType === "int") {
        versionToUse = baseVersion + "-beta.0." + buildId
    } else if (buildType === "prod") {
        versionToUse = givenVersion
    } else {
        throw "Internal error. Unexpected build type: " + buildType
    }

    if (inAzureDevOps) {
        console.log("##vso[task.setvariable variable=SPEECHSDK_SEMVER2NOMETA]" + versionToUse);
    }

    if (givenVersion !== versionToUse) {
        console.log("Setting version to " + versionToUse);
        exec("npm version --no-git-tag-version " + versionToUse, { cwd: __dirname + "/.." },
            function (error) {
                if (error) {
                    throw error;
                }
            }
        );
    }
}());