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 }