1'use strict'; 2 3var fs = require('fs'); 4var rimraf = require('rimraf'); 5var acorn = require('acorn'); 6var walk = require('acorn/dist/walk'); 7 8var ids = []; 9var names = {}; 10 11function getIdFor(name) { 12 if (name in names) return names[name]; 13 var id; 14 do { 15 id = '_' + Math.floor(Math.random() * 100); 16 } while (ids.indexOf(id) !== -1) 17 ids.push(id); 18 names[name] = id; 19 return id; 20} 21 22function fixup(src) { 23 var ast = acorn.parse(src); 24 src = src.split(''); 25 walk.simple(ast, { 26 MemberExpression: function (node) { 27 if (node.computed) return; 28 if (node.property.type !== 'Identifier') return; 29 if (node.property.name[0] !== '_') return; 30 replace(node.property, getIdFor(node.property.name)); 31 } 32 }); 33 function source(node) { 34 return src.slice(node.start, node.end).join(''); 35 } 36 function replace(node, str) { 37 for (var i = node.start; i < node.end; i++) { 38 src[i] = ''; 39 } 40 src[node.start] = str; 41 } 42 return src.join(''); 43} 44rimraf.sync(__dirname + '/lib/'); 45fs.mkdirSync(__dirname + '/lib/'); 46fs.readdirSync(__dirname + '/src').forEach(function (filename) { 47 var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8'); 48 var out = fixup(src); 49 fs.writeFileSync(__dirname + '/lib/' + filename, out); 50}); 51 52rimraf.sync(__dirname + '/domains/'); 53fs.mkdirSync(__dirname + '/domains/'); 54fs.readdirSync(__dirname + '/src').forEach(function (filename) { 55 var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8'); 56 var out = fixup(src); 57 out = out.replace(/require\(\'asap\/raw\'\)/g, "require('asap')"); 58 fs.writeFileSync(__dirname + '/domains/' + filename, out); 59}); 60 61rimraf.sync(__dirname + '/setimmediate/'); 62fs.mkdirSync(__dirname + '/setimmediate/'); 63fs.readdirSync(__dirname + '/src').forEach(function (filename) { 64 var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8'); 65 var out = fixup(src); 66 out = out.replace(/var asap \= require\(\'([a-z\/]+)\'\);/g, ''); 67 out = out.replace(/asap/g, "setImmediate"); 68 fs.writeFileSync(__dirname + '/setimmediate/' + filename, out); 69}); 70