1
2
mirror of https://github.com/vimagick/dockerfiles synced 2024-06-16 03:48:44 +00:00

update parser

This commit is contained in:
kev 2014-12-25 14:58:24 +08:00
parent 7c64ab927e
commit 7b57d07e34

@ -1,140 +1,110 @@
var utils = require('./utils');
var _ = utils._;
var _s = utils._s;
var setDefaults = function(req) {
/*
- isDebug
- requestId
- targetUrl (required)
- targetContent
- requestType
- timeout
- loadImages
- delayTime
- userAgent
- resourceUrlWhitelist (FIXME)
- resourceUrlBlacklist
- viewportSize
- clipRectangle
- scrollTo (FIXME)
- injectedScripts
- execScripts (FIXME: targetPageLoaded)
*/
if(req.isDebug === undefined) {
req.isDebug = false;
} else if(typeof req.isDebug !== 'boolean') {
throw 'isDebug: type-error';
}
if(req.requestId === undefined) {
req.requestId = utils.guid();
} else if(typeof req.requestId !== 'string') {
throw 'requestId: type-error';
}
if(req.userAgent === undefined) {
req.userAgent = 'Mozilla/5.0 PhantomJS/1.9.8';
} else if(typeof req.userAgent !== 'string') {
throw 'userAgent: type-error';
}
if(req.targetUrl === undefined) {
throw 'targetUrl: missing';
} else if(typeof req.targetUrl !== 'string') {
throw 'targetUrl: type-error';
}
if(req.targetContent === undefined) {
} else if(typeof req.targetContent !== 'string') {
throw 'targetContent: type-error';
}
if(req.requestType === undefined) {
req.requestType = 'text';
} else if(typeof req.requestType !== 'string') {
throw 'targetType: type-error';
}
if(req.delayTime === undefined) {
req.delayTime = 0;
} else if(typeof req.delayTime !== 'number') {
throw 'delayTime: type-error';
} else if(req.delayTime < 0 || req.delayTime > 300000) {
throw 'delayTime: out-of-range';
}
if(req.timeout === undefined) {
req.timeout = 60000;
} else if(typeof req.timeout !== 'number') {
throw 'timeout: type-error';
} else if(req.timeout < 1000 || req.timeout > 300000) {
throw 'timeout: out-of-range';
}
if(req.loadImages === undefined) {
req.loadImages = false;
} else if(typeof req.loadImages !== 'boolean') {
throw 'timeout: type-error';
}
if(req.cookies === undefined) {
req.cookies = [];
} else if(req.cookies.length === undefined) {
throw 'cookies: type-error';
}
if(req.customRequestHeaders === undefined) {
req.customRequestHeaders = [];
} else if(req.customRequestHeaders.length === undefined) {
throw 'customRequestHeaders: type-error';
}
if(req.resourceUrlWhitelist === undefined) {
req.resourceUrlWhitelist = [];
} else if(req.resourceUrlWhitelist.length === undefined) {
throw 'resourceUrlWhitelist: type-error';
}
if(req.resourceUrlBlacklist === undefined) {
req.resourceUrlBlacklist = []; // set it to ['.*\.css.*'] to block stylesheet
} else if(req.resourceUrlBlacklist.length === undefined) {
throw 'resourceUrlBlacklist: type-error';
}
if(req.viewportSize === undefined) {
req.viewportSize = {width: 800, height: 600, zoomFactor: 1};
} else if(typeof req.viewportSize !== 'object') {
throw 'viewportSize: type-error';
}
if(req.clipRectangle === undefined) {
req.clipRectangle = {top: 0, left: 0, width: 0, height: 0};
} else if(typeof req.clipRectangle !== 'object') {
throw 'clipRectangle: type-error';
}
if(req.scrollTo === undefined) {
req.scrollTo = {top: 0, left: 0};
} else if(typeof req.scrollTo !== 'object') {
throw 'scrollTo: type-error';
}
if(req.injectedScripts === undefined) {
req.injectedScripts = [];
} else if(req.injectedScripts.length === undefined) {
throw 'injectedScripts: type-error';
}
if(req.execScripts === undefined) {
req.execScripts = {preInjected: [], postInjected: []};
} else if(typeof req.execScripts !== 'object') {
throw 'execScripts: type-error';
}
req.clipRectangle = checkObject('clipRectangle', req.clipRectangle, {top: 0, left: 0, width: 0, height: 0});
req.cookies = checkArray('cookies', req.cookies, []);
req.customRequestHeaders = checkArray('customRequestHeaders', req.customRequestHeaders, []);
req.delayTime = checkNumber('delayTime', req.delayTime, 0, 300000, 0);
req.execScripts = checkObject('execScripts', req.execScripts, {preInjected: [], postInjected: []});
req.injectedScripts = checkArray('injectedScripts', req.injectedScripts, []);
req.isDebug = checkBoolean('isDebug', req.isDebug, false);
req.loadImages = checkBoolean('loadImages', req.loadImages, false);
req.outputAsJson = checkBoolean('outputAsJson', req.outputAsJson, true); //FIXME: it is ignored
req.requestId = checkString('requestId', req.requestId, utils.guid());
req.requestType = checkString('requestType', req.requestType, 'text');
req.resourceUrlBlacklist = checkArray('resourceUrlBlacklist', req.resourceUrlBlacklist, []); //HINT: set it to ['.*\.css.*'] to block stylesheet
req.resourceUrlWhitelist = checkArray('resourceUrlWhitelist', req.resourceUrlWhitelist, []); //FIXME: not implemented
req.scrollTo = checkObject('scrollTo', req.scrollTo, {top: 0, left: 0}); //FIXME: it doesn't work as expected
req.targetContent = checkString('targetContent', req.targetContent, '');
req.targetUrl = checkString('targetUrl', req.targetUrl); // required
req.timeout = checkNumber('timeout', req.timeout, 1000, 300000, 60000);
req.userAgent = checkString('userAgent', req.userAgent, 'Mozilla/5.0 PhantomJS/1.9.8');
req.viewportSize = checkObject('viewportSize', req.viewportSize, {width: 800, height: 600, zoomFactor: 1});
return req;
}
function checkNumber(name, value, min, max, defaultValue) {
if(_.isUndefined(value)) {
if(_.isUndefined(defaultValue)) {
throw _s.sprintf('ValueError: `%s` is undefined', name);
} else {
return defaultValue;
}
} else if(!_.isNumber(value)) {
throw _s.sprintf('TypeError: `%s` is not a number', name);
} else if(value < min || value > max) {
throw _s.sprintf('ValueError: `%s` is out of range []', name);
} else {
return value;
}
}
function checkBoolean(name, value, defaultValue) {
if(_.isUndefined(value)) {
if(_.isUndefined(defaultValue)) {
throw _s.sprintf('ValueError: `%s` is undefined', name);
} else {
return defaultValue;
}
} else if(!_.isBoolean(value)) {
throw _s.sprintf('TypeError: `%s` is not a boolean', name);
} else {
return value;
}
}
function checkString(name, value, defaultValue) {
if(_.isUndefined(value)) {
if(_.isUndefined(defaultValue)) {
throw _s.sprintf('ValueError: `%s` is undefined', name);
} else {
return defaultValue;
}
} else if(!_.isString(value)) {
throw _s.sprintf('TypeError: `%s` is not a string', name);
} else {
return value;
}
}
function checkArray(name, value, defaultValue) {
if(_.isUndefined(value)) {
if(_.isUndefined(defaultValue)) {
throw _s.sprintf('ValueError: `%s` is undefined', name);
} else {
return defaultValue;
}
} else if(!_.isArray(value)) {
throw _s.sprintf('TypeError: `%s` is not a array', name);
} else {
return value;
}
}
function checkObject(name, value, defaultValue) {
if(_.isUndefined(value)) {
if(_.isUndefined(defaultValue)) {
throw _s.sprintf('ValueError: `%s` is undefined', name);
} else {
return defaultValue;
}
} else if(!_.isObject(value)) {
throw _s.sprintf('TypeError: `%s` is not a object', name);
} else {
_.defaults(value, defaultValue);
return value;
}
}
module.exports.setDefaults = setDefaults;