Вход Регистрация
Файл: error-kitty/node_modules/ejs/support/compile.js
Строк: 132
<?php
/**
 * Module dependencies.
 */

var fs = require('fs');

/**
 * Arguments.
 */

var args process.argv.slice(2)
  , 
pending args.length
  
files = {};

console.log('');

// parse arguments

args.forEach(function(file){
  var 
mod file.replace('lib/''');
  
fs.readFile(file'utf8', function(errjs){
    if (
err) throw err;
    
console.log('  33[90mcompile : 33[0m33[36m%s33[0m'file);
    
files[file] = parse(js);
    --
pending || compile();
  });
});

/**
 * Parse the given `js`.
 */

function parse(js) {
  return 
parseInheritance(parseConditionals(js));
}

/**
 * Parse __proto__.
 */

function parseInheritance(js) {
  return 
js
    
.replace(/^ *(w+).prototype.__proto__ * = *(w+).prototype *;?/gm, function(_childparent){
      return 
child '.prototype = new ' parent ';n'
        
child '.prototype.constructor = 'child ';n';
    });
}

/**
 * Parse the given `js`, currently supporting:
 * 
 *    'if' ['node' | 'browser']
 *    'end'
 * 
 */

function parseConditionals(js) {
  var 
lines js.split('n')
    , 
len lines.length
    
buffer true
    
browser false
    
buf = []
    , 
line
    
cond;

  for (var 
0len; ++i) {
    
line lines[i];
    if (/^ *
// *if *(node|browser)/gm.exec(line)) {
      
cond RegExp.$1;
      
buffer browser 'browser' == cond;
    } else if (/^ *
// *end/.test(line)) {
      
buffer true;
      
browser false;
    } else if (
browser) {
      
buf.push(line.replace(/^( *)///, '$1'));
    
} else if (buffer) {
      
buf.push(line);
    }
  }

  return 
buf.join('n');
}

/**
 * Compile the files.
 */

function compile() {
  var 
buf '';
  
buf += 'ejs = (function(){n';
  
buf += 'n// CommonJS require()nn';
  
buf += browser.require + 'nn';
  
buf += 'require.modules = {};nn';
  
buf += 'require.resolve = ' browser.resolve ';nn';
  
buf += 'require.register = ' browser.register ';nn';
  
buf += 'require.relative = ' browser.relative ';nn';
  
args.forEach(function(file){
    var 
js files[file];
    
file file.replace('lib/''');
    
buf += 'nrequire.register("' file '", function(module, exports, require){n';
    
buf += js;
    
buf += 'n}); // module: ' file 'n';
  });
  
buf += 'n return require("ejs");n})();';
  
fs.writeFile('ejs.js'buf, function(err){
    if (
err) throw err;
    
console.log('  33[90m create : 33[0m33[36m%s33[0m''ejs.js');
    
console.log();
  });
}

// refactored version of weepy's
// https://github.com/weepy/brequire/blob/master/browser/brequire.js

var browser = {
  
  
/**
   * Require a module.
   */
  
  
require: function require(p){
    if (
'fs' == p) return {};
    if (
'path' == p) return {};
    var 
path = require.resolve(p)
      , 
mod = require.modules[path];
    if (!
mod) throw new Error('failed to require "' '"');
    if (!
mod.exports) {
      
mod.exports = {};
      
mod.call(mod.exportsmodmod.exports, require.relative(path));
    }
    return 
mod.exports;
  },
  
  
/**
   * Resolve module path.
   */

  
resolve: function(path){
    var 
orig path
      
reg path '.js'
      
index path '/index.js';
    return require.
modules[reg] && reg
      
|| require.modules[index] && index
      
|| orig;
  },
  
  
/**
   * Return relative require().
   */

  
relative: function(parent) {
    return function(
p){
      if (
'.' != p.substr(01)) return require(p);
      
      var 
path parent.split('/')
        , 
segs p.split('/');
      
path.pop();
      
      for (var 
0segs.lengthi++) {
        var 
seg segs[i];
        if (
'..' == segpath.pop();
        else if (
'.' != segpath.push(seg);
      }

      return require(
path.join('/'));
    };
  },
  
  
/**
   * Register a module.
   */

  
register: function(pathfn){
    require.
modules[path] = fn;
  }
};
?>
Онлайн: 1
Реклама