mirror of
https://github.com/atom/atom.git
synced 2026-01-23 05:48:10 -05:00
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
'use strict'
|
|
|
|
var _ = require('underscore-plus')
|
|
var crypto = require('crypto')
|
|
var path = require('path')
|
|
|
|
var defaultOptions = {
|
|
target: 1,
|
|
module: 'commonjs',
|
|
sourceMap: true
|
|
}
|
|
|
|
var TypeScriptSimple = null
|
|
var typescriptVersionDir = null
|
|
|
|
exports.shouldCompile = function () {
|
|
return true
|
|
}
|
|
|
|
exports.getCachePath = function (sourceCode) {
|
|
if (typescriptVersionDir == null) {
|
|
var version = require('typescript-simple/package.json').version
|
|
typescriptVersionDir = path.join('ts', createVersionAndOptionsDigest(version, defaultOptions))
|
|
}
|
|
|
|
return path.join(
|
|
typescriptVersionDir,
|
|
crypto
|
|
.createHash('sha1')
|
|
.update(sourceCode, 'utf8')
|
|
.digest('hex') + '.js'
|
|
)
|
|
}
|
|
|
|
exports.compile = function (sourceCode, filePath) {
|
|
if (!TypeScriptSimple) {
|
|
TypeScriptSimple = require('typescript-simple').TypeScriptSimple
|
|
}
|
|
|
|
if (process.platform === 'win32') {
|
|
filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/')
|
|
}
|
|
|
|
var options = _.defaults({filename: filePath}, defaultOptions)
|
|
return new TypeScriptSimple(options, false).compile(sourceCode, filePath)
|
|
}
|
|
|
|
function createVersionAndOptionsDigest (version, options) {
|
|
return crypto
|
|
.createHash('sha1')
|
|
.update('typescript', 'utf8')
|
|
.update('\0', 'utf8')
|
|
.update(version, 'utf8')
|
|
.update('\0', 'utf8')
|
|
.update(JSON.stringify(options), 'utf8')
|
|
.digest('hex')
|
|
}
|