mirror of
https://github.com/zhigang1992/deployd.git
synced 2026-05-13 21:06:16 +08:00
107 lines
3.4 KiB
JavaScript
107 lines
3.4 KiB
JavaScript
var Resource = require('../resource')
|
|
, util = require('util')
|
|
, path = require('path')
|
|
, fs = require('fs')
|
|
, async = require('async');
|
|
|
|
function ClientLib(name, options) {
|
|
Resource.apply(this, arguments);
|
|
}
|
|
util.inherits(ClientLib, Resource);
|
|
|
|
ClientLib.prototype.load = function(fn) {
|
|
var resource = this;
|
|
|
|
async.parallel({
|
|
dpdJs: function(callback) {
|
|
fs.readFile(path.join(__dirname, '../../clib/dpd.js'), 'utf-8', callback);
|
|
},
|
|
socketIo: function(callback) {
|
|
fs.readFile(path.join(__dirname, '../../clib/socket.io.min.js'), 'utf-8', callback);
|
|
},
|
|
ajax: function(callback) {
|
|
fs.readFile(path.join(__dirname, '../../clib/ajax.js'), 'utf-8', callback);
|
|
}
|
|
}, function(err, results) {
|
|
if (err) return fn(err);
|
|
var file = results.socketIo + "\n\n"
|
|
+ results.ajax + "\n\n"
|
|
+ results.dpdJs;
|
|
resource.clientLib = file;
|
|
fn();
|
|
});
|
|
};
|
|
|
|
ClientLib.prototype.handle = function (ctx, next) {
|
|
var resource = this;
|
|
|
|
if (ctx.url === '/') {
|
|
ctx.res.setHeader('Content-Type', 'text/javascript');
|
|
var lib = resource.clientLib;
|
|
|
|
var host = ctx.req.headers.host;
|
|
if (lib) lib = lib.replace('var root = window.location.origin;', 'var root = "http://' + host + '";');
|
|
|
|
ctx.res.write(lib);
|
|
resource.generate(ctx.res, function() {
|
|
ctx.res.end();
|
|
});
|
|
} else {
|
|
next();
|
|
}
|
|
};
|
|
|
|
ClientLib.prototype.generate = function(res, fn) {
|
|
var clientLib = this;
|
|
|
|
res.write('\n\n// automatically generated code\n\n');
|
|
this.config.resources.forEach(function(r) {
|
|
clientLib.generateResource(r, res);
|
|
});
|
|
fn();
|
|
};
|
|
|
|
ClientLib.prototype.generateResource = function(r, res) {
|
|
var jsName = r.path.replace(/[^A-Za-z0-9]/g, '')
|
|
, i;
|
|
|
|
if (r.clientGeneration && jsName) {
|
|
res.write('dpd.' + jsName + ' = dpd("' + r.path + '");\n');
|
|
if (r.clientGenerationExec) {
|
|
for (i = 0; i < r.clientGenerationExec.length; i++) {
|
|
res.write('dpd.' + jsName + '.' + r.clientGenerationExec[i] + ' = function(path, body, fn) {\n');
|
|
res.write(' return dpd.' + jsName + '.exec("' + r.clientGenerationExec[i] + '", path, body, fn);\n');
|
|
res.write('}\n');
|
|
}
|
|
}
|
|
if (r.clientGenerationGet) {
|
|
for (i = 0; i < r.clientGenerationGet.length; i++) {
|
|
res.write('dpd.' + jsName + '.' + r.clientGenerationGet[i] + ' = function(path, query, fn) {\n');
|
|
res.write(' return dpd.' + jsName + '.get("' + r.clientGenerationGet[i] + '", path, query, fn);\n');
|
|
res.write('}\n');
|
|
}
|
|
}
|
|
// resource event namespacing sugar
|
|
res.write('dpd.' + jsName + '.on = function(ev, fn) {\n');
|
|
res.write(' return dpd.on("' + r.path.replace('/', '') + '" + ":" + ev, fn);\n');
|
|
res.write('}\n');
|
|
res.write('dpd.' + jsName + '.once = function(ev, fn) {\n');
|
|
res.write(' return dpd.once("' + r.path.replace('/', '') + '" + ":" + ev, fn);\n');
|
|
res.write('}\n');
|
|
res.write('dpd.' + jsName + '.off = function(ev, fn) {\n');
|
|
res.write(' return dpd.off("' + r.path.replace('/', '') + '" + ":" + ev, fn);\n');
|
|
res.write('}\n');
|
|
}
|
|
|
|
if(r.external) {
|
|
Object.keys(r.external).forEach(function (name) {
|
|
res.write('dpd.' + jsName + '.' + name + ' = function (path, body, fn) {\n');
|
|
res.write(' dpd.' + jsName + '.exec("' + name + '", path, body, fn);\n');
|
|
res.write('}\n');
|
|
});
|
|
}
|
|
|
|
res.write('\n');
|
|
};
|
|
|
|
module.exports = ClientLib; |