/ src / typescript.js
typescript.js
 1  'use strict';
 2  
 3  var _ = require('underscore-plus');
 4  var crypto = require('crypto');
 5  var path = require('path');
 6  
 7  var defaultOptions = {
 8    target: 1,
 9    module: 'commonjs',
10    sourceMap: true
11  };
12  
13  var TypeScriptSimple = null;
14  var typescriptVersionDir = null;
15  
16  exports.shouldCompile = function() {
17    return true;
18  };
19  
20  exports.getCachePath = function(sourceCode) {
21    if (typescriptVersionDir == null) {
22      var version = require('typescript-simple/package.json').version;
23      typescriptVersionDir = path.join(
24        'ts',
25        createVersionAndOptionsDigest(version, defaultOptions)
26      );
27    }
28  
29    return path.join(
30      typescriptVersionDir,
31      crypto
32        .createHash('sha1')
33        .update(sourceCode, 'utf8')
34        .digest('hex') + '.js'
35    );
36  };
37  
38  exports.compile = function(sourceCode, filePath) {
39    if (!TypeScriptSimple) {
40      TypeScriptSimple = require('typescript-simple').TypeScriptSimple;
41    }
42  
43    if (process.platform === 'win32') {
44      filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/');
45    }
46  
47    var options = _.defaults({ filename: filePath }, defaultOptions);
48    return new TypeScriptSimple(options, false).compile(sourceCode, filePath);
49  };
50  
51  function createVersionAndOptionsDigest(version, options) {
52    return crypto
53      .createHash('sha1')
54      .update('typescript', 'utf8')
55      .update('\0', 'utf8')
56      .update(version, 'utf8')
57      .update('\0', 'utf8')
58      .update(JSON.stringify(options), 'utf8')
59      .digest('hex');
60  }