plugins { id "org.implab.gradle-typescript" version "1.0.1-rc3" id "org.implab.gradle-hg" id "ivy-publish" } // если версия явно не заданы вычисляем ее из тэга ревизии v.{num}*** // результатом будет версия '{num}.{distance}' где distance - расстояние от // текущей ревизии до ревизии с тэгом def tagDistance = 0; ext { packageName = "@$npmScope/$name" lint = project.hasProperty('lint') ? lint : false } configurations { } 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 sourceMap = true sourceRoot = "." } 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 "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" } assemble { from sources.amd.output.compiledDir from sources.cjs.output.compiledDir } assembleTest { from sources.amd.output.compiledDir from sources.cjs.output.compiledDir from sources.testAmd.output.compiledDir from sources.testCjs.output.compiledDir } task prepareNode { prepare.mustRunAfter it doLast { typescript { compilerOptions { module = "commonjs" target = "es2017" lib = ["es2017", "dom", "scripthost"] } } } } task prepareBrowser { prepare.mustRunAfter it doLast { packageName = "@$npmScope/$project.name-amd" typescript { compilerOptions { module = "amd" target = "es5" lib = ["es5", "dom", "scripthost", "es2015.promise", "es2015.symbol", "es2015.iterable"] } } } } task npmPackTypingsAmd(type: Copy) { dependsOn sources.main.output dependsOn sources.amd.output npmPack.mustRunAfter it from sources.main.output.typingsDir from sources.amd.output.typingsDir into "${->buildDir}/npm/pack" } task npmPackSourcesAmd(type: Copy) { from sources.main.ts from sources.amd.ts npmPack.mustRunAfter it into "${->buildDir}/npm/pack" } task assembleBrowser { dependsOn prepareBrowser, assemble, sources.amd.output } task assembleNode { dependsOn prepareNode, assemble, sources.cjs.output } task testBrowser { dependsOn prepareBrowser, test, sources.amd.output, sources.testAmd.output } task testNode { dependsOn prepareNode, test, sources.cjs.output, sources.testCjs.output } task npmPackBrowser { dependsOn assembleBrowser, npmPack, npmPackSourcesAmd, npmPackTypingsAmd } task packJsTar(type: Tar) { dependsOn assemble; archiveBaseName = provider { packageName } destinationDirectory = buildDir archiveClassifier = provider { typescript.compilerOptions.module } compression = Compression.GZIP from(assemble.outputs) doLast { println archiveName; } } task packTypingsTar(type: Tar) { } publishing { publications { local(IvyPublication) { artifact(packJsTar) { type = "js" } } } repositories { ivy { url "ivy-repo" } } }