'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'); }