@dillonkearns/elm-graphql
Version:
<img src="https://cdn.rawgit.com/martimatix/logo-graphqelm/master/logo.svg" alt="dillonearns/elm-graphql logo" width="40%" align="right">
60 lines (49 loc) • 1.41 kB
text/typescript
import { spawn } from 'child_process'
import * as fs from 'fs-extra'
const globalInstallPath = `${__dirname}/../node_modules/.bin/elm-format`
const localInstallPath = `${__dirname}/../../.bin/elm-format`
export const writeFile = (path: string, value: string): void => {
const elmFormatPath = findElmFormatPath()
if (elmFormatPath) {
writeWithElmFormat(path, value, elmFormatPath)
} else {
writeWithoutFormatting(path, value)
}
}
const writeWithElmFormat = (
path: string,
value: string,
elmFormatPath: string
): void => {
const elmFormat = spawn(elmFormatPath, ['--stdin', '--output', path], {
shell: true
})
elmFormat.stdin.write(value)
elmFormat.stdin.end()
elmFormat.stdout.on('data', data => {
console.log(data.toString())
})
elmFormat.stderr.on('data', data => {
console.log(data.toString())
})
elmFormat.on('close', code => {
if (code !== 0) {
console.log(`elm-format process exited with code ${code}.
Was attempting to write to path ${path} with contents:
${value}`)
process.exit(code)
}
})
}
const writeWithoutFormatting = (path: string, value: string) => {
fs.writeFileSync(path, value)
}
const findElmFormatPath = (): string | null => {
if (fs.existsSync(globalInstallPath)) {
return globalInstallPath
} else if (fs.existsSync(localInstallPath)) {
return localInstallPath
} else {
return null
}
}