Skip to content

Commit

Permalink
added caching to require extension
Browse files Browse the repository at this point in the history
  • Loading branch information
sixcircuit committed Oct 7, 2011
1 parent df9e2f6 commit b7db126
Showing 1 changed file with 35 additions and 7 deletions.
42 changes: 35 additions & 7 deletions lib/tamejs.js
Expand Up @@ -2,16 +2,44 @@
"use strict";

var runtime = require ('./runtime').runtime;
var fs = require('fs');
var path = require('path');
var engineVersion = "0.4.3";

exports.runtime = runtime;

//-----------------------------------------------------------------------

function _extension (module, filename) {
var Engine = require ('./engine').Engine;
var engine = new Engine (filename);
engine.readInputSync ();
engine.parse ();
var out = engine.compile ().formatOutput ();

var cachePath = path.join(path.dirname(filename), "." + path.basename(filename) + "." + engineVersion + ".cache");

try{
var cacheStats = fs.statSync(cachePath);
}catch(e){ cacheStats = null; }

var recompile = true;
if(cacheStats){
var tjsStats = fs.statSync(filename);

if(cacheStats.mtime > tjsStats.mtime){
recompile = false;
}
}

var out = "";

if(recompile){
var Engine = require ('./engine').Engine;
var engine = new Engine (filename);
engine.readInputSync ();
engine.parse ();
out = engine.compile ().formatOutput ();
fs.writeFile(cachePath, out);
}else{
out = fs.readFileSync(cachePath, 'utf8');
}

module._compile (out, filename);
};

Expand All @@ -31,14 +59,14 @@ function register (options) {

if (!options) { options = {}; }
else if (typeof (options) == 'string' || options instanceof Array) {
options = { extension : options } ;
options = { extension : options } ;
}

var ext = "tjs";
if (options.extension) { ext = options.extension; }
if (!(ext instanceof Array)) { ext = [ ext ]; }
for (var e in ext) {
require.extensions["." + ext[e]] = _extension;
require.extensions["." + ext[e]] = _extension;
}

if (options.catchExceptions) { runtime.catchExceptions (); }
Expand Down

0 comments on commit b7db126

Please sign in to comment.