require("ml-random-forest")
var browserify = require('browserify');
function streamToString (stream) {
const chunks = []
return new Promise((resolve, reject) => {
stream.on('data', chunk => chunks.push(chunk))
stream.on('error', reject)
stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')))
})
}
var cache={};
exports.endpoint = async function(request, response) {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
//return response.end('hello')
var name=require('url').parse(request.url).pathname.substr(1)
console.log("requested "+name)
if(name===''){
console.log("empty request")
return response.end("use module name in the url to recive it browserified");
}
if(cache[name]){
response.setHeader('content-type', 'application/javascript');
res.setHeader('Cache-Control', 'public, max-age=345600'); // 4 days
res.setHeader('Expires', new Date(Date.now() + 345600000).toUTCString());
console.log("usign cache")
response.end(cache[name]);
}
else{
console.log("bundling ")
try{
const result = await streamToString( browserify(require.resolve(name)).bundle() )
var id=result.match(/,\{\},\[(\d+)\]\);\s*$/)[1]
cache[name]="(function(){ var require="+result+ "; "+name.replace(/[^a-zA-Z0-9]/g,' ').trim().replace(/ /g,'_')+"=require("+id+")}) ()"
response.setHeader('content-type', 'application/javascript');
response.end(result);
}catch(e){
console.log("bundling error "+e.stack)
response.end(e.stack);
}
console.log("bundling done")
}
}