Skip to content

Instantly share code, notes, and snippets.

@dobe
Created April 30, 2020 23:12
Show Gist options
  • Save dobe/cfb1a793e01058e1e7d36ea1412ed4cd to your computer and use it in GitHub Desktop.
Save dobe/cfb1a793e01058e1e7d36ea1412ed4cd to your computer and use it in GitHub Desktop.
yarn paths in idea
import org.w3c.dom.NodeList
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import javax.xml.xpath.XPath
plugins {
id("com.github.node-gradle.node") version "2.2.3"
}
node {
download = true
version = "12.16.0"
yarnVersion = "1.22.0"
}
fun XPath.replaceText(expression: String, doc: org.w3c.dom.Document, newValue: String): Boolean {
val nodes: NodeList = evaluate(
expression, doc, javax.xml.xpath.XPathConstants.NODESET
) as NodeList
if (nodes.length > 0) {
nodes.item(0).textContent = newValue
return true
}
return false
}
val setupIdeaPaths by tasks.registering {
dependsOn("yarnSetup", "nodeSetup")
val wsFile = file(".idea/workspace.xml")
inputs.file(wsFile)
outputs.file(wsFile)
doLast {
val yarnDir = tasks.getByName<com.moowork.gradle.node.yarn.YarnSetupTask>("yarnSetup").yarnDir
val nodeExecutable = tasks.getByName<com.moowork.gradle.node.task.SetupTask>("nodeSetup").nodeDir
.resolve("bin/node")
val factory = javax.xml.xpath.XPathFactory.newInstance()
val xPath = factory.newXPath()
val doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(wsFile)
xPath.replaceText(
"//property[@name='nodejs_interpreter_path']/@value",
doc, nodeExecutable.absolutePath
)
xPath.replaceText(
"//property[@name='nodejs_package_manager_path']/@value",
doc, yarnDir.absolutePath
)
val xformer = TransformerFactory.newInstance().newTransformer()
xformer.transform(DOMSource(doc), StreamResult(wsFile))
}
}
val yarn_install by tasks.getting {
dependsOn(setupIdeaPaths)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment