plugins { id "org.implab.gradle-typescript" version "1.0.1-rc3" } // если версия явно не заданы вычисляем ее из тэга ревизии v.{num}*** // результатом будет версия '{num}.{distance}' где distance - расстояние от // текущей ревизии до ревизии с тэгом def tagDistance = 0; ext { packageName = "@$npmScope/$name" lint = project.hasProperty('lint') ? lint : false } if (!version) { def rev = ["hg", "log", "-r", ".", "--template", "{latesttag('re:^v') % '{tag}-{distance}'}"].execute().text.trim(); def tagVersion; def match = (rev =~ /^v(\d+\.\d+\.\d+).*-(\d+)$/); if (match.size()) { tagVersion = match[0][1]; tagDistance = match[0][2].toInteger(); } else { throw new Exception("A version must be specied"); } version = tagVersion; if (tagDistance > 0) version++; } else { println "explicit version: $version"; } if (hasProperty('versionSuffix') && versionSuffix) { version += "-$versionSuffix" } sources { amd { typings { srcDir main.output.typingsDir } } cjs { typings { srcDir main.output.typingsDir } } testAmd { typings { srcDir main.output.typingsDir srcDir amd.output.typingsDir srcDir test.output.typingsDir } } testCjs { typings { srcDir main.output.typingsDir srcDir cjs.output.typingsDir srcDir test.output.typingsDir } } } typescript { compilerOptions { types = [] declaration = true } tscCmd = "$projectDir/node_modules/.bin/tsc" tsLintCmd = "$projectDir/node_modules/.bin/tslint" esLintCmd = "$projectDir/node_modules/.bin/eslint" npmCmd = "npm" } tasks.matching{ it.name =~ /^configureTs/ }.configureEach { dependsOn "prepare" } tasks.matching{ it.name =~ /^lint/ }.configureEach { onlyIf { lint } } task prepare { } task printVersion { dependsOn prepare doLast { println "version: ${-> version}"; println "tagDistance: ${-> tagDistance}"; println "packageName: ${-> packageName}"; println "target: ${-> typescript.compilerOptions.target}"; println "module: ${-> typescript.compilerOptions.module}"; } } task clean { prepare.mustRunAfter it doLast { delete buildDir } } npmPackMeta { meta { name = packageName } } configureTsCjs { dependsOn sources.main.output compilerOptions { types += [ "node" ] } } configureTsAmd { dependsOn sources.main.output compilerOptions { types += [ "requirejs", "dojo-typings" ] } } test { workingDir layout.buildDirectory.dir("test"); commandLine "node", "tests/index.js" } task assembleAmd { dependsOn sources.amd.output assemble.mustRunAfter it doLast { assemble { from(sources.amd.output.compiledDir) } } } task assembleCjs { dependsOn sources.cjs.output assemble.mustRunAfter it doLast { assemble { from(sources.cjs.output.compiledDir) } } } task assembleTestAmd { dependsOn sources.amd.output dependsOn sources.testAmd.output assembleTest.mustRunAfter it doLast { assembleTest { from(sources.amd.output.compiledDir) from(sources.testAmd.output.compiledDir) } } } task assembleTestCjs { dependsOn sources.cjs.output dependsOn sources.testCjs.output assembleTest.mustRunAfter it doLast { assembleTest { from(sources.cjs.output.compiledDir) from(sources.testCjs.output.compiledDir) } } } task prepareTargetEs5 { prepare.mustRunAfter it doLast { typescript { compilerOptions { target = "es5" lib = ["es5", "dom", "scripthost", "es2015.promise", "es2015.symbol", "es2015.iterable"] } } } } task prepareTargetEsNext { prepare.mustRunAfter it doLast { typescript { compilerOptions { target = "es2017" lib = ["es2017", "dom", "scripthost"] } } } } task prepareNode { dependsOn prepareTargetEsNext prepare.mustRunAfter it doLast { typescript { compilerOptions { module = "commonjs" } } } } task prepareBrowser { dependsOn prepareTargetEs5 prepare.mustRunAfter it doLast { packageName = "@$npmScope/$project.name-amd" typescript { compilerOptions { module = "amd" } } } } task assembleBrowser { dependsOn prepareBrowser, assembleAmd, assemble } task assembleNode { dependsOn prepareNode, assembleCjs, assemble } task testBrowser { dependsOn prepareBrowser, assembleTestAmd, test } task testNode { dependsOn prepareNode, assembleTestCjs, test }