jobs fix, reverted

This commit is contained in:
Martin Donnelly 2017-09-11 11:34:45 +01:00
parent 17166c74a4
commit b61e60cd5e
19 changed files with 1973 additions and 2260 deletions

22
.eslintrc Normal file
View File

@ -0,0 +1,22 @@
{
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"node": true
},
"parserOptions": {
"sourceType": "module"
},
"rules": {
"no-const-assign": "warn",
"no-this-before-super": "warn",
"no-undef": "warn",
"no-unreachable": "warn",
"no-unused-vars": "warn",
"constructor-super": "warn",
"valid-typeof": "warn",
"indent": [2, 2, {SwitchCase: 1}]
}
}

File diff suppressed because it is too large Load Diff

202
fixer.js Normal file
View File

@ -0,0 +1,202 @@
const querystring = require('querystring');
let list = [
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/EDF47BEA6B31EF.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/3CAD044BEF2BFA.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/C7B25D86D0844A.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/64A3EEF615FA4C.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21564698"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21564712"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21942123"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=33166238"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34888173"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/m7dp711z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/pfvf7o7z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/lluqnt8z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/tu33qt8z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/u3btnz8z2r.xml"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=33256062"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=33450169"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34517029"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34888105"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.technojobs.co.uk/rss.php/glasgow/searchtypeand/locationScotland/sortbyrelevant/jobtypeall"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobserve.com/MySearch/6FC7E9ED5F042ECB.rss"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html,%20asp,%20web,%20sql,%20delphi,%20vb,%20vbscript,%20php,%20ajax,%20mysql,%20sqlserver,%20javascript,%20intranet,%20vmware,%20virtulization&location_include=Abu%20Dhabi&compare_resolved=RE_ABUDHABI_UNITEDARABEMIRATES&compare_search=Abu%20Dhabi&jobtype=X&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=London&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=CO_LONDON&compare_search=London&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=Glasgow&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=TO_G1_GLASGOW&compare_search=Glasgow&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&search_emp_mkt_cd=ALL"
} ,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=Germany&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=CY_GERMANY&compare_search=Germany&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/b1d7e6c3a9a11964z3r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/b1d7e6c3a9a11964z3r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobisjob.co.uk/rss?what=web+developer+javascript&where=glasgow&jobType=Contract"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobisjob.co.uk/rss?what=javascript&where=glasgow&jobType=Contract"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobisjob.co.uk/rss?what=asp&where=glasgow&jobType=Contract%2Ftemp"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobserve.com/MySearch/CA49421A86CA3F74.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/ddeded091b6f6d33z3r.xml"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/3eafc1ea20f1ca02z3r.xml"
}
];
let newArray = list.map((item) => {
let encoded = querystring.escape(item.feed_url);
console.log(encoded);
return {count:item.count, 'feed_url' : `http://52.211.105.9:6566/${encoded}`}
});
console.log(JSON.stringify(newArray));

View File

@ -11,212 +11,97 @@ var outputFile = 'jobs-local',
// feeds.simple_test_feed = require("./config/feed").feed;
// Or define in-line
feeds.simple_test_feed = {
"feed_name" : "feed",
"default_count" : 1,
"no_cdata_fields" : [], // Don't wrap these fields in CDATA tags
"plugins" : ['filter_today_only' ],
"meta" : {
"title": "Jobs",
"description": "Combined Jobs Feed",
'feed_name': 'feed',
'default_count': 1,
'no_cdata_fields': [], // Don't wrap these fields in CDATA tags
'plugins': ['filter_today_only'],
'meta': {
'title': 'Jobs',
'description': 'Combined Jobs Feed',
'site_url': 'http://pipes.silvrtree.co.uk/jobs-local.xml'
},
"sources" : [
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/EDF47BEA6B31EF.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/3CAD044BEF2BFA.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/C7B25D86D0844A.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.JobServe.com/MySearch/64A3EEF615FA4C.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21564698"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21564712"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21942123"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=33166238"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34888173"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/m7dp711z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/pfvf7o7z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/lluqnt8z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/tu33qt8z2r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/u3btnz8z2r.xml"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=33256062"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=33450169"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34517029"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34888105"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.technojobs.co.uk/rss.php/glasgow/searchtypeand/locationScotland/sortbyrelevant/jobtypeall"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobserve.com/MySearch/6FC7E9ED5F042ECB.rss"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html,%20asp,%20web,%20sql,%20delphi,%20vb,%20vbscript,%20php,%20ajax,%20mysql,%20sqlserver,%20javascript,%20intranet,%20vmware,%20virtulization&location_include=Abu%20Dhabi&compare_resolved=RE_ABUDHABI_UNITEDARABEMIRATES&compare_search=Abu%20Dhabi&jobtype=X&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=London&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=CO_LONDON&compare_search=London&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=Glasgow&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=TO_G1_GLASGOW&compare_search=Glasgow&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&search_emp_mkt_cd=ALL"
} ,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=Germany&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=CY_GERMANY&compare_search=Germany&search_emp_mkt_cd=ALL"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/b1d7e6c3a9a11964z3r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/b1d7e6c3a9a11964z3r.xml"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobisjob.co.uk/rss?what=web+developer+javascript&where=glasgow&jobType=Contract"
}
,
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobisjob.co.uk/rss?what=javascript&where=glasgow&jobType=Contract"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobisjob.co.uk/rss?what=asp&where=glasgow&jobType=Contract%2Ftemp"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.jobserve.com/MySearch/CA49421A86CA3F74.rss"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/ddeded091b6f6d33z3r.xml"
},
{
/* "name" : "JobServe",*/
"count" : 100,
"feed_url" : "http://www.s1jobs.com/xml/3eafc1ea20f1ca02z3r.xml"
}
]
'sources': [{
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.JobServe.com%2FMySearch%2FEDF47BEA6B31EF.rss'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.JobServe.com%2FMySearch%2F3CAD044BEF2BFA.rss'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.JobServe.com%2FMySearch%2FC7B25D86D0844A.rss'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.JobServe.com%2FMySearch%2F64A3EEF615FA4C.rss'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D21564698'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D21564712'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D21942123'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D33166238'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D34888173'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Fm7dp711z2r.xml'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Fpfvf7o7z2r.xml'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Flluqnt8z2r.xml'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Ftu33qt8z2r.xml'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Fu3btnz8z2r.xml'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.purelyit.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D33256062'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.purelyit.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D33450169'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.purelyit.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D34517029'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.purelyit.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26daysback%3D1%26jbe_id%3D34888105'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.technojobs.co.uk%2Frss.php%2Fglasgow%2Fsearchtypeand%2FlocationScotland%2Fsortbyrelevant%2Fjobtypeall'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobserve.com%2FMySearch%2F6FC7E9ED5F042ECB.rss'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26skill_atleast%3Dhtml%2C%2520asp%2C%2520web%2C%2520sql%2C%2520delphi%2C%2520vb%2C%2520vbscript%2C%2520php%2C%2520ajax%2C%2520mysql%2C%2520sqlserver%2C%2520javascript%2C%2520intranet%2C%2520vmware%2C%2520virtulization%26location_include%3DAbu%2520Dhabi%26compare_resolved%3DRE_ABUDHABI_UNITEDARABEMIRATES%26compare_search%3DAbu%2520Dhabi%26jobtype%3DX%26search_emp_mkt_cd%3DALL'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26skill_atleast%3Dhtml%2520%2C%2520asp%2520%2C%2520web%2520%2C%2520sql%2520%2C%2520delphi%2520%2C%2520vb%2520%2C%2520vbscript%2520%2C%2520php%2520%2C%2520ajax%2520%2C%2520mysql%2520%2C%2520sqlserver%2520%2C%2520javascript%2520%2C%2520intranet%2520%2C%2520vmware%2520%2C%2520virtulization%26location_include%3DLondon%26location_within%3D10%26reqd_salary%3DANY%7C%26daysback%3D7%26scc%3DUK%26compare_resolved%3DCO_LONDON%26compare_search%3DLondon%26search_emp_mkt_cd%3DALL'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26skill_atleast%3Dhtml%2520%2C%2520asp%2520%2C%2520web%2520%2C%2520sql%2520%2C%2520delphi%2520%2C%2520vb%2520%2C%2520vbscript%2520%2C%2520php%2520%2C%2520ajax%2520%2C%2520mysql%2520%2C%2520sqlserver%2520%2C%2520javascript%2520%2C%2520intranet%2520%2C%2520vmware%2520%2C%2520virtulization%26location_include%3DGlasgow%26location_within%3D10%26reqd_salary%3DANY%7C%26daysback%3D7%26scc%3DUK%26compare_resolved%3DTO_G1_GLASGOW%26compare_search%3DGlasgow%26search_emp_mkt_cd%3DALL'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26skill_atleast%3Dhtml%2520%2C%2520asp%2520%2C%2520web%2520%2C%2520sql%2520%2C%2520delphi%2520%2C%2520vb%2520%2C%2520vbscript%2520%2C%2520php%2520%2C%2520ajax%2520%2C%2520mysql%2520%2C%2520sqlserver%2520%2C%2520javascript%2520%2C%2520intranet%2520%2C%2520vmware%2520%2C%2520virtulization%26location_within%3D10%26reqd_salary%3DANY%7C%26daysback%3D7%26scc%3DUK%26search_emp_mkt_cd%3DALL'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobsite.co.uk%2Fcgi-bin%2Fadvsearch%3Frss_feed%3D1%26skill_atleast%3Dhtml%2520%2C%2520asp%2520%2C%2520web%2520%2C%2520sql%2520%2C%2520delphi%2520%2C%2520vb%2520%2C%2520vbscript%2520%2C%2520php%2520%2C%2520ajax%2520%2C%2520mysql%2520%2C%2520sqlserver%2520%2C%2520javascript%2520%2C%2520intranet%2520%2C%2520vmware%2520%2C%2520virtulization%26location_include%3DGermany%26location_within%3D10%26reqd_salary%3DANY%7C%26daysback%3D7%26scc%3DUK%26compare_resolved%3DCY_GERMANY%26compare_search%3DGermany%26search_emp_mkt_cd%3DALL'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Fb1d7e6c3a9a11964z3r.xml'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Fb1d7e6c3a9a11964z3r.xml'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobisjob.co.uk%2Frss%3Fwhat%3Dweb%2Bdeveloper%2Bjavascript%26where%3Dglasgow%26jobType%3DContract'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobisjob.co.uk%2Frss%3Fwhat%3Djavascript%26where%3Dglasgow%26jobType%3DContract'
}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobisjob.co.uk%2Frss%3Fwhat%3Dasp%26where%3Dglasgow%26jobType%3DContract%252Ftemp'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.jobserve.com%2FMySearch%2FCA49421A86CA3F74.rss'}, {
'count': 100,
'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2Fddeded091b6f6d33z3r.xml'
}, {'count': 100, 'feed_url': 'http://52.211.105.9:6566/http%3A%2F%2Fwww.s1jobs.com%2Fxml%2F3eafc1ea20f1ca02z3r.xml'}]
};
var braider_options = {
feeds: feeds,
indent: " ",
date_sort_order: "desc", // Newest first
log_level: "warn",
indent: ' ',
date_sort_order: 'desc', // Newest first
log_level: 'warn',
dedupe_fields: ['link', 'guid'],
plugins_directories : [__dirname + "/plugins/"]
plugins_directories: [__dirname + '/plugins/']
};
var rss_braider = RssBraider.createClient(braider_options);
@ -231,22 +116,22 @@ rss_braider.processFeed('simple_test_feed', 'json', function (err, data) {
var j = JSON.parse(data);
var ejsOutput = ejs.compile(str)(j);
fs.writeFile(__dirname + "/dist/" + outputFile + ".html", ejsOutput, function (err) {
fs.writeFile(__dirname + '/dist/' + outputFile + '.html', ejsOutput, function (err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!");
console.log('The file was saved!');
});
fs.writeFile(__dirname + "/dist/" + outputFile + ".json", data, function (err) {
fs.writeFile(__dirname + '/dist/' + outputFile + '.json', data, function (err) {
if (err) {
logger.error(err);
return console.log(err);
}
console.log("The file was saved!");
console.log('The file was saved!');
});
});
@ -254,11 +139,11 @@ rss_braider.processFeed('simple_test_feed', 'rss', function (err, data) {
if (err) {
return console.log(err);
}
fs.writeFile(__dirname + "/dist/" + outputFile + ".xml", data, function (err) {
fs.writeFile(__dirname + '/dist/' + outputFile + '.xml', data, function (err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!");
console.log('The file was saved!');
});
});

View File

@ -23,6 +23,11 @@ feeds.simple_test_feed = {
'site_url': 'http://pipes.silvrtree.co.uk/jobs-special.xml'
}, "sources": [
/*{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=47820652"
} ,*/
{
@ -49,6 +54,31 @@ feeds.simple_test_feed = {
"count": 100,
"feed_url": "http://www.JobServe.com/MySearch/64A3EEF615FA4C.rss"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21564698"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21564712"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=21942123"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=33166238"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34888173"
},
{
"count": 100,
@ -94,11 +124,41 @@ feeds.simple_test_feed = {
"count": 100,
"feed_url": "http://www.purelyit.co.uk/cgi-bin/advsearch?rss_feed=1&daysback=1&jbe_id=34888105"
},
{
"count": 100,
"feed_url": "http://www.technojobs.co.uk/rss.php/glasgow/searchtypeand/locationScotland/sortbyrelevant/jobtypeall"
},
{
"count": 100,
"feed_url": "http://www.jobserve.com/MySearch/6FC7E9ED5F042ECB.rss"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html,%20asp,%20web,%20sql,%20delphi,%20vb,%20vbscript,%20php,%20ajax,%20mysql,%20sqlserver,%20javascript,%20intranet,%20vmware,%20virtulization&location_include=Abu%20Dhabi&compare_resolved=RE_ABUDHABI_UNITEDARABEMIRATES&compare_search=Abu%20Dhabi&jobtype=X&search_emp_mkt_cd=ALL"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=London&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=CO_LONDON&compare_search=London&search_emp_mkt_cd=ALL"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=Glasgow&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=TO_G1_GLASGOW&compare_search=Glasgow&search_emp_mkt_cd=ALL"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&search_emp_mkt_cd=ALL"
},
{
"count": 100,
"feed_url": "http://www.jobsite.co.uk/cgi-bin/advsearch?rss_feed=1&skill_atleast=html%20,%20asp%20,%20web%20,%20sql%20,%20delphi%20,%20vb%20,%20vbscript%20,%20php%20,%20ajax%20,%20mysql%20,%20sqlserver%20,%20javascript%20,%20intranet%20,%20vmware%20,%20virtulization&location_include=Germany&location_within=10&reqd_salary=ANY|&daysback=7&scc=UK&compare_resolved=CY_GERMANY&compare_search=Germany&search_emp_mkt_cd=ALL"
},
{
"count": 100,
@ -123,7 +183,7 @@ feeds.simple_test_feed = {
"count": 100,
"feed_url": "http://www.s1jobs.com/xml/3eafc1ea20f1ca02z3r.xml"
}
}*/
]
};

71
node_modules/ejs/Jakefile generated vendored
View File

@ -1,12 +1,10 @@
var fs = require('fs');
var execSync = require('child_process').execSync;
var exec = function (cmd) {
execSync(cmd, {stdio: 'inherit'});
var fs = require('fs')
, buildOpts = {
printStdout: true
, printStderr: true
};
/* global jake, task, desc, publishTask */
task('build', ['lint', 'clean', 'browserify', 'minify'], function () {
task('build', ['browserify', 'minify'], function () {
console.log('Build completed.');
});
@ -14,58 +12,35 @@ desc('Cleans browerified/minified files and package files');
task('clean', ['clobber'], function () {
jake.rmRf('./ejs.js');
jake.rmRf('./ejs.min.js');
console.log('Cleaned up compiled files.');
});
desc('Lints the source code');
task('lint', function () {
exec('./node_modules/.bin/eslint \"**/*.js\" Jakefile');
console.log('Linting completed.');
});
task('browserify', function () {
exec('./node_modules/browserify/bin/cmd.js --standalone ejs lib/ejs.js > ejs.js');
task('browserify', {async: true}, function () {
jake.exec('./node_modules/browserify/bin/cmd.js lib/ejs.js > ejs.js',
buildOpts, function () {
console.log('Browserification completed.');
setTimeout(complete, 0);
});
});
task('minify', function () {
exec('./node_modules/uglify-js/bin/uglifyjs ejs.js > ejs.min.js');
task('minify', {async: true}, function () {
jake.exec('./node_modules/uglify-js/bin/uglifyjs ejs.js > ejs.min.js',
buildOpts, function () {
console.log('Minification completed.');
setTimeout(complete, 0);
});
task('doc', function (dev) {
jake.rmRf('out');
var p = dev ? '-p' : '';
exec('./node_modules/.bin/jsdoc ' + p + ' -c jsdoc.json lib/* docs/jsdoc/*');
console.log('Documentation generated.');
});
task('docPublish', ['doc'], function () {
fs.writeFileSync('out/CNAME', 'api.ejs.co');
console.log('Pushing docs to gh-pages...');
exec('./node_modules/.bin/git-directory-deploy --directory out/');
console.log('Docs published to gh-pages.');
});
task('test', ['lint'], function () {
exec('./node_modules/.bin/mocha');
});
publishTask('ejs', ['build'], function () {
this.packageFiles.include([
'Jakefile',
'README.md',
'LICENSE',
'package.json',
'ejs.js',
'ejs.min.js',
'lib/**',
'test/**'
'Jakefile'
, 'README.md'
, 'LICENSE'
, 'package.json'
, 'ejs.js'
, 'ejs.min.js'
, 'lib/**'
, 'test/**'
]);
});
jake.Task.publish.on('complete', function () {
console.log('Updating hosted docs...');
console.log('If this fails, run jake docPublish to re-try.');
jake.Task.docPublish.invoke();
});

25
node_modules/ejs/README.md generated vendored
View File

@ -3,7 +3,7 @@
Embedded JavaScript templates
[![Build Status](https://img.shields.io/travis/mde/ejs/master.svg?style=flat)](https://travis-ci.org/mde/ejs)
[![Developing Dependencies](https://img.shields.io/david/dev/mde/ejs.svg?style=flat)](https://david-dm.org/mde/ejs?type=dev)
[![Developing Dependencies](https://img.shields.io/david/dev/mde/ejs.svg?style=flat)](https://david-dm.org/mde/ejs#info=devDependencies)
## Installation
@ -18,7 +18,7 @@ $ npm install ejs
* Unescaped raw output with `<%- %>`
* Newline-trim mode ('newline slurping') with `-%>` ending tag
* Whitespace-trim mode (slurp all whitespace) for control flow with `<%_ _%>`
* Custom delimiters (e.g., use `<? ?>` instead of `<% %>`)
* Custom delimiters (e.g., use '<? ?>' instead of '<% %>')
* Includes
* Client-side support
* Static caching of intermediate JavaScript
@ -33,8 +33,6 @@ $ npm install ejs
<% } %>
```
Try EJS online at: https://ionicabizau.github.io/ejs-playground/.
## Usage
```javascript
@ -61,7 +59,6 @@ Therefore, we do not recommend using this shortcut.
- `cache` Compiled functions are cached, requires `filename`
- `filename` The name of the file being rendered. Not required if you
are using `renderFile()`. Used by `cache` to key caches, and for includes.
- `root` Set project root for includes with an absolute path (/file.ejs).
- `context` Function execution context
- `compileDebug` When `false` no debug instrumentation is compiled
- `client` When `true`, compiles a function that can be rendered
@ -92,7 +89,6 @@ the both the public & private API docs, run `npm run devdoc` instead.
- `<%-` Outputs the unescaped value into the template
- `<%#` Comment tag, no execution, no output
- `<%%` Outputs a literal '<%'
- `%%>` Outputs a literal '%>'
- `%>` Plain ending tag
- `-%>` Trim-mode ('newline slurp') tag, trims following newline
- `_%>` 'Whitespace Slurping' ending tag, removes all whitespace after it
@ -162,21 +158,6 @@ If you want to clear the EJS cache, call `ejs.clearCache`. If you're using the
LRU cache and need a different limit, simple reset `ejs.cache` to a new instance
of the LRU.
## Custom FileLoader
The default file loader is `fs.readFileSync`, if you want to customize it, you can set ejs.fileLoader.
```javascript
var ejs = require('ejs');
var myFileLoad = function (filePath) {
return 'myFileLoad: ' + fs.readFileSync(filePath);
};
ejs.fileLoader = myFileLoad;
```
With this feature, you can preprocess the template before reading it.
## Layouts
EJS does not specifically support blocks, but layouts can be implemented by
@ -254,3 +235,5 @@ Licensed under the Apache License, Version 2.0
- - -
EJS Embedded JavaScript templates copyright 2112
mde@fleegix.org.

646
node_modules/ejs/ejs.js generated vendored
View File

@ -1,4 +1,4 @@
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ejs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*
* EJS Embedded JavaScript templates
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
@ -20,7 +20,7 @@
'use strict';
/**
* @file Embedded JavaScript templating engine. {@link http://ejs.co}
* @file Embedded JavaScript templating engine.
* @author Matthew Eernisse <mde@fleegix.org>
* @author Tiancheng "Timothy" Gu <timothygu99@gmail.com>
* @project EJS
@ -45,23 +45,19 @@
* @public
*/
var fs = require('fs');
var path = require('path');
var utils = require('./utils');
var scopeOptionWarned = false;
var _VERSION_STRING = require('../package.json').version;
var _DEFAULT_DELIMITER = '%';
var _DEFAULT_LOCALS_NAME = 'locals';
var _NAME = 'ejs';
var _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)';
var _OPTS = ['delimiter', 'scope', 'context', 'debug', 'compileDebug',
'client', '_with', 'rmWhitespace', 'strict', 'filename'];
// We don't allow 'cache' option to be passed in the data obj
// for the normal `render` call, but this is where Express puts it
// so we make an exception for `renderFile`
var _OPTS_EXPRESS = _OPTS.concat('cache');
var _BOM = /^\uFEFF/;
var fs = require('fs')
, utils = require('./utils')
, scopeOptionWarned = false
, _VERSION_STRING = require('../package.json').version
, _DEFAULT_DELIMITER = '%'
, _DEFAULT_LOCALS_NAME = 'locals'
, _REGEX_STRING = '(<%%|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'
, _OPTS = [ 'cache', 'filename', 'delimiter', 'scope', 'context'
, 'debug', 'compileDebug', 'client', '_with', 'rmWhitespace'
, 'strict', 'localsName'
]
, _TRAILING_SEMCOL = /;\s*$/
, _BOM = /^\uFEFF/;
/**
* EJS template function cache. This can be a LRU object from lru-cache NPM
@ -73,19 +69,10 @@ var _BOM = /^\uFEFF/;
exports.cache = utils.cache;
/**
* Custom file loader. Useful for template preprocessing or restricting access
* to a certain part of the filesystem.
*
* @type {fileLoader}
*/
exports.fileLoader = fs.readFileSync;
/**
* Name of the object containing the locals.
*
* This variable is overridden by {@link Options}`.localsName` if it is not
* This variable is overriden by {@link Options}`.localsName` if it is not
* `undefined`.
*
* @type {String}
@ -100,42 +87,22 @@ exports.localsName = _DEFAULT_LOCALS_NAME;
*
* @param {String} name specified path
* @param {String} filename parent file path
* @param {Boolean} isDir parent file path whether is directory
* @return {String}
*/
exports.resolveInclude = function(name, filename, isDir) {
var dirname = path.dirname;
var extname = path.extname;
var resolve = path.resolve;
var includePath = resolve(isDir ? filename : dirname(filename), name);
var ext = extname(name);
exports.resolveInclude = function(name, filename) {
var path = require('path')
, dirname = path.dirname
, extname = path.extname
, resolve = path.resolve
, includePath = resolve(dirname(filename), name)
, ext = extname(name);
if (!ext) {
includePath += '.ejs';
}
return includePath;
};
/**
* Get the path to the included file by Options
*
* @param {String} path specified path
* @param {Options} options compilation options
* @return {String}
*/
function getIncludePath(path, options){
var includePath;
if (path.charAt(0) == '/') {
includePath = exports.resolveInclude(path.replace(/^\/*/,''), options.root || '/', true);
}
else {
if (!options.filename) {
throw new Error('`include` use relative path requires the \'filename\' option.');
}
includePath = exports.resolveInclude(path, options.filename);
}
return includePath;
}
/**
* Get the template from a string or a file, either compiled on-the-fly or
* read from cache (if enabled), and cache the template if needed.
@ -155,70 +122,35 @@ function getIncludePath(path, options){
*/
function handleCache(options, template) {
var func;
var filename = options.filename;
var hasTemplate = arguments.length > 1;
var fn
, path = options.filename
, hasTemplate = arguments.length > 1;
if (options.cache) {
if (!filename) {
if (!path) {
throw new Error('cache option requires a filename');
}
func = exports.cache.get(filename);
if (func) {
return func;
fn = exports.cache.get(path);
if (fn) {
return fn;
}
if (!hasTemplate) {
template = fileLoader(filename).toString().replace(_BOM, '');
template = fs.readFileSync(path).toString().replace(_BOM, '');
}
}
else if (!hasTemplate) {
// istanbul ignore if: should not happen at all
if (!filename) {
if (!path) {
throw new Error('Internal EJS error: no file name or template '
+ 'provided');
}
template = fileLoader(filename).toString().replace(_BOM, '');
template = fs.readFileSync(path).toString().replace(_BOM, '');
}
func = exports.compile(template, options);
fn = exports.compile(template, options);
if (options.cache) {
exports.cache.set(filename, func);
exports.cache.set(path, fn);
}
return func;
}
/**
* Try calling handleCache with the given options and data and call the
* callback with the result. If an error occurs, call the callback with
* the error. Used by renderFile().
*
* @memberof module:ejs-internal
* @param {Options} options compilation options
* @param {Object} data template data
* @param {RenderFileCallback} cb callback
* @static
*/
function tryHandleCache(options, data, cb) {
var result;
try {
result = handleCache(options)(data);
}
catch (err) {
return cb(err);
}
return cb(null, result);
}
/**
* fileLoader is independent
*
* @param {String} filePath ejs file path.
* @return {String} The contents of the specified file.
* @static
*/
function fileLoader(filePath){
return exports.fileLoader(filePath);
return fn;
}
/**
@ -236,7 +168,10 @@ function fileLoader(filePath){
function includeFile(path, options) {
var opts = utils.shallowCopy({}, options);
opts.filename = getIncludePath(path, opts);
if (!opts.filename) {
throw new Error('`include` requires the \'filename\' option.');
}
opts.filename = exports.resolveInclude(path, opts.filename);
return handleCache(opts);
}
@ -246,24 +181,24 @@ function includeFile(path, options) {
* @memberof module:ejs-internal
* @param {String} path path for the specified file
* @param {Options} options compilation options
* @return {Object}
* @return {String}
* @static
*/
function includeSource(path, options) {
var opts = utils.shallowCopy({}, options);
var includePath;
var template;
includePath = getIncludePath(path, opts);
template = fileLoader(includePath).toString().replace(_BOM, '');
var opts = utils.shallowCopy({}, options)
, includePath
, template;
if (!opts.filename) {
throw new Error('`include` requires the \'filename\' option.');
}
includePath = exports.resolveInclude(path, opts.filename);
template = fs.readFileSync(includePath).toString().replace(_BOM, '');
opts.filename = includePath;
var templ = new Template(template, opts);
templ.generateSource();
return {
source: templ.source,
filename: includePath,
template: template
};
return templ.source;
}
/**
@ -279,11 +214,11 @@ function includeSource(path, options) {
* @static
*/
function rethrow(err, str, flnm, lineno, esc){
var lines = str.split('\n');
var start = Math.max(lineno - 3, 0);
var end = Math.min(lines.length, lineno + 3);
var filename = esc(flnm); // eslint-disable-line
function rethrow(err, str, filename, lineno){
var lines = str.split('\n')
, start = Math.max(lineno - 3, 0)
, end = Math.min(lines.length, lineno + 3);
// Error context
var context = lines.slice(start, end).map(function (line, i){
var curr = i + start + 1;
@ -303,8 +238,24 @@ function rethrow(err, str, flnm, lineno, esc){
throw err;
}
function stripSemi(str){
return str.replace(/;(\s*$)/, '$1');
/**
* Copy properties in data object that are recognized as options to an
* options object.
*
* This is used for compatibility with earlier versions of EJS and Express.js.
*
* @memberof module:ejs-internal
* @param {Object} data data object
* @param {Options} opts options object
* @static
*/
function cpOptsInData(data, opts) {
_OPTS.forEach(function (p) {
if (typeof data[p] != 'undefined') {
opts[p] = data[p];
}
});
}
/**
@ -352,14 +303,15 @@ exports.compile = function compile(template, opts) {
* @public
*/
exports.render = function (template, d, o) {
var data = d || {};
var opts = o || {};
exports.render = function (template, data, opts) {
data = data || {};
opts = opts || {};
var fn;
// No options object -- if there are optiony names
// in the data, copy them to options
if (arguments.length == 2) {
utils.shallowCopyFromList(opts, data, _OPTS);
cpOptsInData(data, opts);
}
return handleCache(opts, template)(data);
@ -379,38 +331,37 @@ exports.render = function (template, d, o) {
*/
exports.renderFile = function () {
var filename = arguments[0];
var cb = arguments[arguments.length - 1];
var opts = {filename: filename};
var data;
var args = Array.prototype.slice.call(arguments)
, path = args.shift()
, cb = args.pop()
, data = args.shift() || {}
, opts = args.pop() || {}
, result;
if (arguments.length > 2) {
data = arguments[1];
// Don't pollute passed in opts obj with new vals
opts = utils.shallowCopy({}, opts);
// No options object -- if there are optiony names
// in the data, copy them to options
if (arguments.length === 3) {
if (arguments.length == 3) {
// Express 4
if (data.settings && data.settings['view options']) {
utils.shallowCopyFromList(opts, data.settings['view options'], _OPTS_EXPRESS);
cpOptsInData(data.settings['view options'], opts);
}
// Express 3 and lower
else {
utils.shallowCopyFromList(opts, data, _OPTS_EXPRESS);
cpOptsInData(data, opts);
}
}
else {
// Use shallowCopy so we don't pollute passed in opts obj with new vals
utils.shallowCopy(opts, arguments[2]);
}
opts.filename = path;
opts.filename = filename;
try {
result = handleCache(opts)(data);
}
else {
data = {};
catch(err) {
return cb(err);
}
return tryHandleCache(opts, data, cb);
return cb(null, result);
};
/**
@ -441,7 +392,6 @@ function Template(text, opts) {
options.context = opts.context;
options.cache = opts.cache || false;
options.rmWhitespace = opts.rmWhitespace;
options.root = opts.root;
options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME;
if (options.strict) {
@ -457,28 +407,39 @@ function Template(text, opts) {
}
Template.modes = {
EVAL: 'eval',
ESCAPED: 'escaped',
RAW: 'raw',
COMMENT: 'comment',
LITERAL: 'literal'
EVAL: 'eval'
, ESCAPED: 'escaped'
, RAW: 'raw'
, COMMENT: 'comment'
, LITERAL: 'literal'
};
Template.prototype = {
createRegex: function () {
var str = _REGEX_STRING;
var delim = utils.escapeRegExpChars(this.opts.delimiter);
var str = _REGEX_STRING
, delim = utils.escapeRegExpChars(this.opts.delimiter);
str = str.replace(/%/g, delim);
return new RegExp(str);
},
}
compile: function () {
var src;
var fn;
var opts = this.opts;
var prepended = '';
var appended = '';
var escapeFn = opts.escapeFunction;
, compile: function () {
var src
, fn
, opts = this.opts
, prepended = ''
, appended = ''
, escape = opts.escapeFunction;
if (opts.rmWhitespace) {
// Have to use two separate replace here as `^` and `$` operators don't
// work well with `\r`.
this.templateText =
this.templateText.replace(/\r/g, '').replace(/^\s+|\s+$/gm, '');
}
// Slurp spaces and tabs before <%_ and after _%>
this.templateText =
this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>');
if (!this.source) {
this.generateSource();
@ -499,7 +460,7 @@ Template.prototype = {
+ 'try {' + '\n'
+ this.source
+ '} catch (e) {' + '\n'
+ ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n'
+ ' rethrow(e, __lines, __filename, __line);' + '\n'
+ '}' + '\n';
}
else {
@ -511,7 +472,7 @@ Template.prototype = {
}
if (opts.client) {
src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\n' + src;
src = 'escape = escape || ' + escape.toString() + ';' + '\n' + src;
if (opts.compileDebug) {
src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\n' + src;
}
@ -522,7 +483,7 @@ Template.prototype = {
}
try {
fn = new Function(opts.localsName + ', escapeFn, include, rethrow', src);
fn = new Function(opts.localsName + ', escape, include, rethrow', src);
}
catch(e) {
// istanbul ignore else
@ -530,9 +491,7 @@ Template.prototype = {
if (opts.filename) {
e.message += ' in ' + opts.filename;
}
e.message += ' while compiling ejs\n\n';
e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\n';
e.message += 'https://github.com/RyanZim/EJS-Lint';
e.message += ' while compiling ejs';
}
throw e;
}
@ -553,38 +512,28 @@ Template.prototype = {
}
return includeFile(path, opts)(d);
};
return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]);
return fn.apply(opts.context, [data || {}, escape, include, rethrow]);
};
returnedFn.dependencies = this.dependencies;
return returnedFn;
},
generateSource: function () {
var opts = this.opts;
if (opts.rmWhitespace) {
// Have to use two separate replace here as `^` and `$` operators don't
// work well with `\r`.
this.templateText =
this.templateText.replace(/\r/g, '').replace(/^\s+|\s+$/gm, '');
}
// Slurp spaces and tabs before <%_ and after _%>
this.templateText =
this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>');
var self = this;
var matches = this.parseTemplateText();
var d = this.opts.delimiter;
, generateSource: function () {
var self = this
, matches = this.parseTemplateText()
, d = this.opts.delimiter;
if (matches && matches.length) {
if (this.opts.compileDebug && this.opts.filename) {
this.source = ' ; __lines = ' + JSON.stringify(this.templateText) + '\n';
this.source += ' ; __filename = "' + this.opts.filename.replace(/\\/g, '/') + '"\n';
}
matches.forEach(function (line, index) {
var opening;
var closing;
var include;
var includeOpts;
var includeObj;
var includeSrc;
var opening
, closing
, include
, includeOpts
, includeSrc;
// If this is an opening tag, check for closing tags
// FIXME: May end up with some false positives here
// Better to store modes as k/v with '<' + delimiter as key
@ -602,23 +551,9 @@ Template.prototype = {
// Must be in EVAL or RAW mode
if (opening && (opening == '<' + d || opening == '<' + d + '-' || opening == '<' + d + '_')) {
includeOpts = utils.shallowCopy({}, self.opts);
includeObj = includeSource(include[1], includeOpts);
if (self.opts.compileDebug) {
includeSrc =
' ; (function(){' + '\n'
+ ' var __line = 1' + '\n'
+ ' , __lines = ' + JSON.stringify(includeObj.template) + '\n'
+ ' , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\n'
+ ' try {' + '\n'
+ includeObj.source
+ ' } catch (e) {' + '\n'
+ ' rethrow(e, __lines, __filename, __line);' + '\n'
+ ' }' + '\n'
+ ' ; }).call(this)' + '\n';
}else{
includeSrc = ' ; (function(){' + '\n' + includeObj.source +
' ; }).call(this)' + '\n';
}
includeSrc = includeSource(include[1], includeOpts);
includeSrc = ' ; (function(){' + '\n' + includeSrc +
' ; })()' + '\n';
self.source += includeSrc;
self.dependencies.push(exports.resolveInclude(include[1],
includeOpts.filename));
@ -629,17 +564,19 @@ Template.prototype = {
});
}
},
}
parseTemplateText: function () {
var str = this.templateText;
var pat = this.regex;
var result = pat.exec(str);
var arr = [];
var firstPos;
, parseTemplateText: function () {
var str = this.templateText
, pat = this.regex
, result = pat.exec(str)
, arr = []
, firstPos
, lastPos;
while (result) {
firstPos = result.index;
lastPos = pat.lastIndex;
if (firstPos !== 0) {
arr.push(str.substring(0, firstPos));
@ -656,12 +593,12 @@ Template.prototype = {
}
return arr;
},
}
scanLine: function (line) {
var self = this;
var d = this.opts.delimiter;
var newLineCount = 0;
, scanLine: function (line) {
var self = this
, d = this.opts.delimiter
, newLineCount = 0;
function _addOutput() {
if (self.truncate) {
@ -670,12 +607,13 @@ Template.prototype = {
// after the tag that the truncation mode replaces
// Handle Win / Unix / old Mac linebreaks -- do the \r\n
// combo first in the regex-or
line = line.replace(/^(?:\r\n|\r|\n)/, '');
line = line.replace(/^(?:\r\n|\r|\n)/, '')
self.truncate = false;
}
else if (self.opts.rmWhitespace) {
// rmWhitespace has already removed trailing spaces, just need
// to remove linebreaks
// Gotta be more careful here.
// .replace(/^(\s*)\n/, '$1') might be more appropriate here but as
// rmWhitespace already removes trailing spaces anyway so meh.
line = line.replace(/^\n/, '');
}
if (!line) {
@ -715,10 +653,6 @@ Template.prototype = {
this.mode = Template.modes.LITERAL;
this.source += ' ; __append("' + line.replace('<' + d + d, '<' + d) + '")' + '\n';
break;
case d + d + '>':
this.mode = Template.modes.LITERAL;
this.source += ' ; __append("' + line.replace(d + d + '>', d + '>') + '")' + '\n';
break;
case d + '>':
case '-' + d + '>':
case '_' + d + '>':
@ -748,11 +682,13 @@ Template.prototype = {
break;
// Exec, esc, and output
case Template.modes.ESCAPED:
this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\n';
this.source += ' ; __append(escape(' +
line.replace(_TRAILING_SEMCOL, '').trim() + '))' + '\n';
break;
// Exec and output
case Template.modes.RAW:
this.source += ' ; __append(' + stripSemi(line) + ')' + '\n';
this.source += ' ; __append(' +
line.replace(_TRAILING_SEMCOL, '').trim() + ')' + '\n';
break;
case Template.modes.COMMENT:
// Do nothing
@ -776,17 +712,9 @@ Template.prototype = {
}
};
/**
* Escape characters reserved in XML.
*
* This is simply an export of {@link module:utils.escapeXML}.
*
* If `markup` is `undefined` or `null`, the empty string is returned.
*
* @param {String} markup Input string
* @return {String} Escaped string
* @public
* @func
/*
* Export the internal function for escaping XML so people
* can use for manual escaping if needed
* */
exports.escapeXML = utils.escapeXML;
@ -804,14 +732,14 @@ exports.__express = exports.renderFile;
// Add require support
/* istanbul ignore else */
if (require.extensions) {
require.extensions['.ejs'] = function (module, flnm) {
var filename = flnm || /* istanbul ignore next */ module.filename;
require.extensions['.ejs'] = function (module, filename) {
filename = filename || /* istanbul ignore next */ module.filename;
var options = {
filename: filename,
client: true
};
var template = fileLoader(filename).toString();
var fn = exports.compile(template, options);
filename: filename
, client: true
}
, template = fs.readFileSync(filename).toString()
, fn = exports.compile(template, options);
module._compile('module.exports = ' + fn.toString() + ';', filename);
};
}
@ -826,16 +754,6 @@ if (require.extensions) {
exports.VERSION = _VERSION_STRING;
/**
* Name for detection of EJS.
*
* @readonly
* @type {String}
* @public
*/
exports.name = _NAME;
/* istanbul ignore if */
if (typeof window != 'undefined') {
window.ejs = exports;
@ -889,17 +807,17 @@ exports.escapeRegExpChars = function (string) {
};
var _ENCODE_HTML_RULES = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&#34;',
"'": '&#39;'
};
var _MATCH_HTML = /[&<>\'"]/g;
'&': '&amp;'
, '<': '&lt;'
, '>': '&gt;'
, '"': '&#34;'
, "'": '&#39;'
}
, _MATCH_HTML = /[&<>\'"]/g;
function encode_char(c) {
return _ENCODE_HTML_RULES[c] || c;
}
};
/**
* Stringified version of constants used by {@link module:utils.escapeXML}.
@ -942,13 +860,11 @@ exports.escapeXML = function (markup) {
.replace(_MATCH_HTML, encode_char);
};
exports.escapeXML.toString = function () {
return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr;
return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr
};
/**
* Naive copy of properties from one object to another.
* Does not recurse into non-scalar properties
* Does not check to see if the property has a value before copying
* Copy all properties from one object to another, in a shallow fashion.
*
* @param {Object} to Destination object
* @param {Object} from Source object
@ -964,28 +880,6 @@ exports.shallowCopy = function (to, from) {
return to;
};
/**
* Naive copy of a list of key names, from one object to another.
* Only copies property if it is actually defined
* Does not recurse into non-scalar properties
*
* @param {Object} to Destination object
* @param {Object} from Source object
* @param {Array} list List of properties to copy
* @return {Object} Destination object
* @static
* @private
*/
exports.shallowCopyFromList = function (to, from, list) {
for (var i = 0; i < list.length; i++) {
var p = list[i];
if (typeof from[p] != 'undefined') {
to[p] = from[p];
}
}
return to;
};
/**
* Simple in-process cache implementation. Does not implement limits of any
* sort.
@ -1007,6 +901,7 @@ exports.cache = {
}
};
},{}],3:[function(require,module,exports){
},{}],4:[function(require,module,exports){
@ -1239,159 +1134,36 @@ var substr = 'ab'.substr(-1) === 'b'
}).call(this,require('_process'))
},{"_process":5}],5:[function(require,module,exports){
// shim for using process in browser
var process = module.exports = {};
// cached from whatever global is present so that test runners that stub it
// don't break things. But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals. It's inside a
// function because try/catches deoptimize in certain engines.
var cachedSetTimeout;
var cachedClearTimeout;
function defaultSetTimout() {
throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
throw new Error('clearTimeout has not been defined');
}
(function () {
try {
if (typeof setTimeout === 'function') {
cachedSetTimeout = setTimeout;
} else {
cachedSetTimeout = defaultSetTimout;
}
} catch (e) {
cachedSetTimeout = defaultSetTimout;
}
try {
if (typeof clearTimeout === 'function') {
cachedClearTimeout = clearTimeout;
} else {
cachedClearTimeout = defaultClearTimeout;
}
} catch (e) {
cachedClearTimeout = defaultClearTimeout;
}
} ())
function runTimeout(fun) {
if (cachedSetTimeout === setTimeout) {
//normal enviroments in sane situations
return setTimeout(fun, 0);
}
// if setTimeout wasn't available but was latter defined
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
cachedSetTimeout = setTimeout;
return setTimeout(fun, 0);
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedSetTimeout(fun, 0);
} catch(e){
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedSetTimeout.call(null, fun, 0);
} catch(e){
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
return cachedSetTimeout.call(this, fun, 0);
}
}
}
function runClearTimeout(marker) {
if (cachedClearTimeout === clearTimeout) {
//normal enviroments in sane situations
return clearTimeout(marker);
}
// if clearTimeout wasn't available but was latter defined
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
cachedClearTimeout = clearTimeout;
return clearTimeout(marker);
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedClearTimeout(marker);
} catch (e){
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedClearTimeout.call(null, marker);
} catch (e){
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
return cachedClearTimeout.call(this, marker);
}
}
}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;
function cleanUpNextTick() {
if (!draining || !currentQueue) {
return;
}
draining = false;
if (currentQueue.length) {
queue = currentQueue.concat(queue);
} else {
queueIndex = -1;
}
if (queue.length) {
drainQueue();
}
}
function drainQueue() {
if (draining) {
return;
}
var timeout = runTimeout(cleanUpNextTick);
draining = true;
var currentQueue;
var len = queue.length;
while(len) {
currentQueue = queue;
queue = [];
while (++queueIndex < len) {
if (currentQueue) {
currentQueue[queueIndex].run();
var i = -1;
while (++i < len) {
currentQueue[i]();
}
}
queueIndex = -1;
len = queue.length;
}
currentQueue = null;
draining = false;
runClearTimeout(timeout);
}
process.nextTick = function (fun) {
var args = new Array(arguments.length - 1);
if (arguments.length > 1) {
for (var i = 1; i < arguments.length; i++) {
args[i - 1] = arguments[i];
}
}
queue.push(new Item(fun, args));
if (queue.length === 1 && !draining) {
runTimeout(drainQueue);
queue.push(fun);
if (!draining) {
setTimeout(drainQueue, 0);
}
};
// v8 likes predictible objects
function Item(fun, array) {
this.fun = fun;
this.array = array;
}
Item.prototype.run = function () {
this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
@ -1413,6 +1185,7 @@ process.binding = function (name) {
throw new Error('process.binding is not supported');
};
// TODO(shtylman)
process.cwd = function () { return '/' };
process.chdir = function (dir) {
throw new Error('process.chdir is not supported');
@ -1428,7 +1201,7 @@ module.exports={
"engine",
"ejs"
],
"version": "2.5.5",
"version": "2.4.1",
"author": "Matthew Eernisse <mde@fleegix.org> (http://fleegix.org)",
"contributors": [
"Timothy Gu <timothygu99@gmail.com> (https://timothygu.github.io)"
@ -1443,27 +1216,24 @@ module.exports={
"homepage": "https://github.com/mde/ejs",
"dependencies": {},
"devDependencies": {
"browserify": "^13.0.1",
"eslint": "^3.0.0",
"git-directory-deploy": "^1.5.1",
"istanbul": "~0.4.3",
"browserify": "^8.0.3",
"istanbul": "~0.3.5",
"jake": "^8.0.0",
"jsdoc": "^3.4.0",
"lru-cache": "^4.0.1",
"mocha": "^3.0.2",
"uglify-js": "^2.6.2"
"jsdoc": "^3.3.0-beta1",
"lru-cache": "^2.5.0",
"mocha": "^2.1.0",
"rimraf": "^2.2.8",
"uglify-js": "^2.4.16"
},
"engines": {
"node": ">=0.10.0"
},
"scripts": {
"test": "mocha",
"lint": "eslint \"**/*.js\" Jakefile",
"sample": "npm install express && node sample/index.js",
"coverage": "istanbul cover node_modules/mocha/bin/_mocha",
"doc": "jake doc",
"devdoc": "jake doc[dev]"
"doc": "rimraf out && jsdoc -c jsdoc.json lib/* docs/jsdoc/*",
"devdoc": "rimraf out && jsdoc -p -c jsdoc.json lib/* docs/jsdoc/*"
}
}
},{}]},{},[1])(1)
});
},{}]},{},[1]);

2
node_modules/ejs/ejs.min.js generated vendored

File diff suppressed because one or more lines are too long

432
node_modules/ejs/lib/ejs.js generated vendored
View File

@ -19,7 +19,7 @@
'use strict';
/**
* @file Embedded JavaScript templating engine. {@link http://ejs.co}
* @file Embedded JavaScript templating engine.
* @author Matthew Eernisse <mde@fleegix.org>
* @author Tiancheng "Timothy" Gu <timothygu99@gmail.com>
* @project EJS
@ -44,23 +44,19 @@
* @public
*/
var fs = require('fs');
var path = require('path');
var utils = require('./utils');
var scopeOptionWarned = false;
var _VERSION_STRING = require('../package.json').version;
var _DEFAULT_DELIMITER = '%';
var _DEFAULT_LOCALS_NAME = 'locals';
var _NAME = 'ejs';
var _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)';
var _OPTS = ['delimiter', 'scope', 'context', 'debug', 'compileDebug',
'client', '_with', 'rmWhitespace', 'strict', 'filename'];
// We don't allow 'cache' option to be passed in the data obj
// for the normal `render` call, but this is where Express puts it
// so we make an exception for `renderFile`
var _OPTS_EXPRESS = _OPTS.concat('cache');
var _BOM = /^\uFEFF/;
var fs = require('fs')
, utils = require('./utils')
, scopeOptionWarned = false
, _VERSION_STRING = require('../package.json').version
, _DEFAULT_DELIMITER = '%'
, _DEFAULT_LOCALS_NAME = 'locals'
, _REGEX_STRING = '(<%%|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'
, _OPTS = [ 'cache', 'filename', 'delimiter', 'scope', 'context'
, 'debug', 'compileDebug', 'client', '_with', 'rmWhitespace'
, 'strict', 'localsName'
]
, _TRAILING_SEMCOL = /;\s*$/
, _BOM = /^\uFEFF/;
/**
* EJS template function cache. This can be a LRU object from lru-cache NPM
@ -72,19 +68,10 @@ var _BOM = /^\uFEFF/;
exports.cache = utils.cache;
/**
* Custom file loader. Useful for template preprocessing or restricting access
* to a certain part of the filesystem.
*
* @type {fileLoader}
*/
exports.fileLoader = fs.readFileSync;
/**
* Name of the object containing the locals.
*
* This variable is overridden by {@link Options}`.localsName` if it is not
* This variable is overriden by {@link Options}`.localsName` if it is not
* `undefined`.
*
* @type {String}
@ -99,42 +86,22 @@ exports.localsName = _DEFAULT_LOCALS_NAME;
*
* @param {String} name specified path
* @param {String} filename parent file path
* @param {Boolean} isDir parent file path whether is directory
* @return {String}
*/
exports.resolveInclude = function(name, filename, isDir) {
var dirname = path.dirname;
var extname = path.extname;
var resolve = path.resolve;
var includePath = resolve(isDir ? filename : dirname(filename), name);
var ext = extname(name);
exports.resolveInclude = function(name, filename) {
var path = require('path')
, dirname = path.dirname
, extname = path.extname
, resolve = path.resolve
, includePath = resolve(dirname(filename), name)
, ext = extname(name);
if (!ext) {
includePath += '.ejs';
}
return includePath;
};
/**
* Get the path to the included file by Options
*
* @param {String} path specified path
* @param {Options} options compilation options
* @return {String}
*/
function getIncludePath(path, options){
var includePath;
if (path.charAt(0) == '/') {
includePath = exports.resolveInclude(path.replace(/^\/*/,''), options.root || '/', true);
}
else {
if (!options.filename) {
throw new Error('`include` use relative path requires the \'filename\' option.');
}
includePath = exports.resolveInclude(path, options.filename);
}
return includePath;
}
/**
* Get the template from a string or a file, either compiled on-the-fly or
* read from cache (if enabled), and cache the template if needed.
@ -154,70 +121,35 @@ function getIncludePath(path, options){
*/
function handleCache(options, template) {
var func;
var filename = options.filename;
var hasTemplate = arguments.length > 1;
var fn
, path = options.filename
, hasTemplate = arguments.length > 1;
if (options.cache) {
if (!filename) {
if (!path) {
throw new Error('cache option requires a filename');
}
func = exports.cache.get(filename);
if (func) {
return func;
fn = exports.cache.get(path);
if (fn) {
return fn;
}
if (!hasTemplate) {
template = fileLoader(filename).toString().replace(_BOM, '');
template = fs.readFileSync(path).toString().replace(_BOM, '');
}
}
else if (!hasTemplate) {
// istanbul ignore if: should not happen at all
if (!filename) {
if (!path) {
throw new Error('Internal EJS error: no file name or template '
+ 'provided');
}
template = fileLoader(filename).toString().replace(_BOM, '');
template = fs.readFileSync(path).toString().replace(_BOM, '');
}
func = exports.compile(template, options);
fn = exports.compile(template, options);
if (options.cache) {
exports.cache.set(filename, func);
exports.cache.set(path, fn);
}
return func;
}
/**
* Try calling handleCache with the given options and data and call the
* callback with the result. If an error occurs, call the callback with
* the error. Used by renderFile().
*
* @memberof module:ejs-internal
* @param {Options} options compilation options
* @param {Object} data template data
* @param {RenderFileCallback} cb callback
* @static
*/
function tryHandleCache(options, data, cb) {
var result;
try {
result = handleCache(options)(data);
}
catch (err) {
return cb(err);
}
return cb(null, result);
}
/**
* fileLoader is independent
*
* @param {String} filePath ejs file path.
* @return {String} The contents of the specified file.
* @static
*/
function fileLoader(filePath){
return exports.fileLoader(filePath);
return fn;
}
/**
@ -235,7 +167,10 @@ function fileLoader(filePath){
function includeFile(path, options) {
var opts = utils.shallowCopy({}, options);
opts.filename = getIncludePath(path, opts);
if (!opts.filename) {
throw new Error('`include` requires the \'filename\' option.');
}
opts.filename = exports.resolveInclude(path, opts.filename);
return handleCache(opts);
}
@ -245,24 +180,24 @@ function includeFile(path, options) {
* @memberof module:ejs-internal
* @param {String} path path for the specified file
* @param {Options} options compilation options
* @return {Object}
* @return {String}
* @static
*/
function includeSource(path, options) {
var opts = utils.shallowCopy({}, options);
var includePath;
var template;
includePath = getIncludePath(path, opts);
template = fileLoader(includePath).toString().replace(_BOM, '');
var opts = utils.shallowCopy({}, options)
, includePath
, template;
if (!opts.filename) {
throw new Error('`include` requires the \'filename\' option.');
}
includePath = exports.resolveInclude(path, opts.filename);
template = fs.readFileSync(includePath).toString().replace(_BOM, '');
opts.filename = includePath;
var templ = new Template(template, opts);
templ.generateSource();
return {
source: templ.source,
filename: includePath,
template: template
};
return templ.source;
}
/**
@ -278,11 +213,11 @@ function includeSource(path, options) {
* @static
*/
function rethrow(err, str, flnm, lineno, esc){
var lines = str.split('\n');
var start = Math.max(lineno - 3, 0);
var end = Math.min(lines.length, lineno + 3);
var filename = esc(flnm); // eslint-disable-line
function rethrow(err, str, filename, lineno){
var lines = str.split('\n')
, start = Math.max(lineno - 3, 0)
, end = Math.min(lines.length, lineno + 3);
// Error context
var context = lines.slice(start, end).map(function (line, i){
var curr = i + start + 1;
@ -302,8 +237,24 @@ function rethrow(err, str, flnm, lineno, esc){
throw err;
}
function stripSemi(str){
return str.replace(/;(\s*$)/, '$1');
/**
* Copy properties in data object that are recognized as options to an
* options object.
*
* This is used for compatibility with earlier versions of EJS and Express.js.
*
* @memberof module:ejs-internal
* @param {Object} data data object
* @param {Options} opts options object
* @static
*/
function cpOptsInData(data, opts) {
_OPTS.forEach(function (p) {
if (typeof data[p] != 'undefined') {
opts[p] = data[p];
}
});
}
/**
@ -351,14 +302,15 @@ exports.compile = function compile(template, opts) {
* @public
*/
exports.render = function (template, d, o) {
var data = d || {};
var opts = o || {};
exports.render = function (template, data, opts) {
data = data || {};
opts = opts || {};
var fn;
// No options object -- if there are optiony names
// in the data, copy them to options
if (arguments.length == 2) {
utils.shallowCopyFromList(opts, data, _OPTS);
cpOptsInData(data, opts);
}
return handleCache(opts, template)(data);
@ -378,38 +330,37 @@ exports.render = function (template, d, o) {
*/
exports.renderFile = function () {
var filename = arguments[0];
var cb = arguments[arguments.length - 1];
var opts = {filename: filename};
var data;
var args = Array.prototype.slice.call(arguments)
, path = args.shift()
, cb = args.pop()
, data = args.shift() || {}
, opts = args.pop() || {}
, result;
if (arguments.length > 2) {
data = arguments[1];
// Don't pollute passed in opts obj with new vals
opts = utils.shallowCopy({}, opts);
// No options object -- if there are optiony names
// in the data, copy them to options
if (arguments.length === 3) {
if (arguments.length == 3) {
// Express 4
if (data.settings && data.settings['view options']) {
utils.shallowCopyFromList(opts, data.settings['view options'], _OPTS_EXPRESS);
cpOptsInData(data.settings['view options'], opts);
}
// Express 3 and lower
else {
utils.shallowCopyFromList(opts, data, _OPTS_EXPRESS);
cpOptsInData(data, opts);
}
}
else {
// Use shallowCopy so we don't pollute passed in opts obj with new vals
utils.shallowCopy(opts, arguments[2]);
}
opts.filename = path;
opts.filename = filename;
try {
result = handleCache(opts)(data);
}
else {
data = {};
catch(err) {
return cb(err);
}
return tryHandleCache(opts, data, cb);
return cb(null, result);
};
/**
@ -440,7 +391,6 @@ function Template(text, opts) {
options.context = opts.context;
options.cache = opts.cache || false;
options.rmWhitespace = opts.rmWhitespace;
options.root = opts.root;
options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME;
if (options.strict) {
@ -456,28 +406,39 @@ function Template(text, opts) {
}
Template.modes = {
EVAL: 'eval',
ESCAPED: 'escaped',
RAW: 'raw',
COMMENT: 'comment',
LITERAL: 'literal'
EVAL: 'eval'
, ESCAPED: 'escaped'
, RAW: 'raw'
, COMMENT: 'comment'
, LITERAL: 'literal'
};
Template.prototype = {
createRegex: function () {
var str = _REGEX_STRING;
var delim = utils.escapeRegExpChars(this.opts.delimiter);
var str = _REGEX_STRING
, delim = utils.escapeRegExpChars(this.opts.delimiter);
str = str.replace(/%/g, delim);
return new RegExp(str);
},
}
compile: function () {
var src;
var fn;
var opts = this.opts;
var prepended = '';
var appended = '';
var escapeFn = opts.escapeFunction;
, compile: function () {
var src
, fn
, opts = this.opts
, prepended = ''
, appended = ''
, escape = opts.escapeFunction;
if (opts.rmWhitespace) {
// Have to use two separate replace here as `^` and `$` operators don't
// work well with `\r`.
this.templateText =
this.templateText.replace(/\r/g, '').replace(/^\s+|\s+$/gm, '');
}
// Slurp spaces and tabs before <%_ and after _%>
this.templateText =
this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>');
if (!this.source) {
this.generateSource();
@ -498,7 +459,7 @@ Template.prototype = {
+ 'try {' + '\n'
+ this.source
+ '} catch (e) {' + '\n'
+ ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n'
+ ' rethrow(e, __lines, __filename, __line);' + '\n'
+ '}' + '\n';
}
else {
@ -510,7 +471,7 @@ Template.prototype = {
}
if (opts.client) {
src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\n' + src;
src = 'escape = escape || ' + escape.toString() + ';' + '\n' + src;
if (opts.compileDebug) {
src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\n' + src;
}
@ -521,7 +482,7 @@ Template.prototype = {
}
try {
fn = new Function(opts.localsName + ', escapeFn, include, rethrow', src);
fn = new Function(opts.localsName + ', escape, include, rethrow', src);
}
catch(e) {
// istanbul ignore else
@ -529,9 +490,7 @@ Template.prototype = {
if (opts.filename) {
e.message += ' in ' + opts.filename;
}
e.message += ' while compiling ejs\n\n';
e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\n';
e.message += 'https://github.com/RyanZim/EJS-Lint';
e.message += ' while compiling ejs';
}
throw e;
}
@ -552,38 +511,28 @@ Template.prototype = {
}
return includeFile(path, opts)(d);
};
return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]);
return fn.apply(opts.context, [data || {}, escape, include, rethrow]);
};
returnedFn.dependencies = this.dependencies;
return returnedFn;
},
generateSource: function () {
var opts = this.opts;
if (opts.rmWhitespace) {
// Have to use two separate replace here as `^` and `$` operators don't
// work well with `\r`.
this.templateText =
this.templateText.replace(/\r/g, '').replace(/^\s+|\s+$/gm, '');
}
// Slurp spaces and tabs before <%_ and after _%>
this.templateText =
this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>');
var self = this;
var matches = this.parseTemplateText();
var d = this.opts.delimiter;
, generateSource: function () {
var self = this
, matches = this.parseTemplateText()
, d = this.opts.delimiter;
if (matches && matches.length) {
if (this.opts.compileDebug && this.opts.filename) {
this.source = ' ; __lines = ' + JSON.stringify(this.templateText) + '\n';
this.source += ' ; __filename = "' + this.opts.filename.replace(/\\/g, '/') + '"\n';
}
matches.forEach(function (line, index) {
var opening;
var closing;
var include;
var includeOpts;
var includeObj;
var includeSrc;
var opening
, closing
, include
, includeOpts
, includeSrc;
// If this is an opening tag, check for closing tags
// FIXME: May end up with some false positives here
// Better to store modes as k/v with '<' + delimiter as key
@ -601,23 +550,9 @@ Template.prototype = {
// Must be in EVAL or RAW mode
if (opening && (opening == '<' + d || opening == '<' + d + '-' || opening == '<' + d + '_')) {
includeOpts = utils.shallowCopy({}, self.opts);
includeObj = includeSource(include[1], includeOpts);
if (self.opts.compileDebug) {
includeSrc =
' ; (function(){' + '\n'
+ ' var __line = 1' + '\n'
+ ' , __lines = ' + JSON.stringify(includeObj.template) + '\n'
+ ' , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\n'
+ ' try {' + '\n'
+ includeObj.source
+ ' } catch (e) {' + '\n'
+ ' rethrow(e, __lines, __filename, __line);' + '\n'
+ ' }' + '\n'
+ ' ; }).call(this)' + '\n';
}else{
includeSrc = ' ; (function(){' + '\n' + includeObj.source +
' ; }).call(this)' + '\n';
}
includeSrc = includeSource(include[1], includeOpts);
includeSrc = ' ; (function(){' + '\n' + includeSrc +
' ; })()' + '\n';
self.source += includeSrc;
self.dependencies.push(exports.resolveInclude(include[1],
includeOpts.filename));
@ -628,17 +563,19 @@ Template.prototype = {
});
}
},
}
parseTemplateText: function () {
var str = this.templateText;
var pat = this.regex;
var result = pat.exec(str);
var arr = [];
var firstPos;
, parseTemplateText: function () {
var str = this.templateText
, pat = this.regex
, result = pat.exec(str)
, arr = []
, firstPos
, lastPos;
while (result) {
firstPos = result.index;
lastPos = pat.lastIndex;
if (firstPos !== 0) {
arr.push(str.substring(0, firstPos));
@ -655,12 +592,12 @@ Template.prototype = {
}
return arr;
},
}
scanLine: function (line) {
var self = this;
var d = this.opts.delimiter;
var newLineCount = 0;
, scanLine: function (line) {
var self = this
, d = this.opts.delimiter
, newLineCount = 0;
function _addOutput() {
if (self.truncate) {
@ -669,12 +606,13 @@ Template.prototype = {
// after the tag that the truncation mode replaces
// Handle Win / Unix / old Mac linebreaks -- do the \r\n
// combo first in the regex-or
line = line.replace(/^(?:\r\n|\r|\n)/, '');
line = line.replace(/^(?:\r\n|\r|\n)/, '')
self.truncate = false;
}
else if (self.opts.rmWhitespace) {
// rmWhitespace has already removed trailing spaces, just need
// to remove linebreaks
// Gotta be more careful here.
// .replace(/^(\s*)\n/, '$1') might be more appropriate here but as
// rmWhitespace already removes trailing spaces anyway so meh.
line = line.replace(/^\n/, '');
}
if (!line) {
@ -714,10 +652,6 @@ Template.prototype = {
this.mode = Template.modes.LITERAL;
this.source += ' ; __append("' + line.replace('<' + d + d, '<' + d) + '")' + '\n';
break;
case d + d + '>':
this.mode = Template.modes.LITERAL;
this.source += ' ; __append("' + line.replace(d + d + '>', d + '>') + '")' + '\n';
break;
case d + '>':
case '-' + d + '>':
case '_' + d + '>':
@ -747,11 +681,13 @@ Template.prototype = {
break;
// Exec, esc, and output
case Template.modes.ESCAPED:
this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\n';
this.source += ' ; __append(escape(' +
line.replace(_TRAILING_SEMCOL, '').trim() + '))' + '\n';
break;
// Exec and output
case Template.modes.RAW:
this.source += ' ; __append(' + stripSemi(line) + ')' + '\n';
this.source += ' ; __append(' +
line.replace(_TRAILING_SEMCOL, '').trim() + ')' + '\n';
break;
case Template.modes.COMMENT:
// Do nothing
@ -775,17 +711,9 @@ Template.prototype = {
}
};
/**
* Escape characters reserved in XML.
*
* This is simply an export of {@link module:utils.escapeXML}.
*
* If `markup` is `undefined` or `null`, the empty string is returned.
*
* @param {String} markup Input string
* @return {String} Escaped string
* @public
* @func
/*
* Export the internal function for escaping XML so people
* can use for manual escaping if needed
* */
exports.escapeXML = utils.escapeXML;
@ -803,14 +731,14 @@ exports.__express = exports.renderFile;
// Add require support
/* istanbul ignore else */
if (require.extensions) {
require.extensions['.ejs'] = function (module, flnm) {
var filename = flnm || /* istanbul ignore next */ module.filename;
require.extensions['.ejs'] = function (module, filename) {
filename = filename || /* istanbul ignore next */ module.filename;
var options = {
filename: filename,
client: true
};
var template = fileLoader(filename).toString();
var fn = exports.compile(template, options);
filename: filename
, client: true
}
, template = fs.readFileSync(filename).toString()
, fn = exports.compile(template, options);
module._compile('module.exports = ' + fn.toString() + ';', filename);
};
}
@ -825,16 +753,6 @@ if (require.extensions) {
exports.VERSION = _VERSION_STRING;
/**
* Name for detection of EJS.
*
* @readonly
* @type {String}
* @public
*/
exports.name = _NAME;
/* istanbul ignore if */
if (typeof window != 'undefined') {
window.ejs = exports;

45
node_modules/ejs/lib/utils.js generated vendored
View File

@ -45,17 +45,17 @@ exports.escapeRegExpChars = function (string) {
};
var _ENCODE_HTML_RULES = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&#34;',
"'": '&#39;'
};
var _MATCH_HTML = /[&<>\'"]/g;
'&': '&amp;'
, '<': '&lt;'
, '>': '&gt;'
, '"': '&#34;'
, "'": '&#39;'
}
, _MATCH_HTML = /[&<>\'"]/g;
function encode_char(c) {
return _ENCODE_HTML_RULES[c] || c;
}
};
/**
* Stringified version of constants used by {@link module:utils.escapeXML}.
@ -98,13 +98,11 @@ exports.escapeXML = function (markup) {
.replace(_MATCH_HTML, encode_char);
};
exports.escapeXML.toString = function () {
return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr;
return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr
};
/**
* Naive copy of properties from one object to another.
* Does not recurse into non-scalar properties
* Does not check to see if the property has a value before copying
* Copy all properties from one object to another, in a shallow fashion.
*
* @param {Object} to Destination object
* @param {Object} from Source object
@ -120,28 +118,6 @@ exports.shallowCopy = function (to, from) {
return to;
};
/**
* Naive copy of a list of key names, from one object to another.
* Only copies property if it is actually defined
* Does not recurse into non-scalar properties
*
* @param {Object} to Destination object
* @param {Object} from Source object
* @param {Array} list List of properties to copy
* @return {Object} Destination object
* @static
* @private
*/
exports.shallowCopyFromList = function (to, from, list) {
for (var i = 0; i < list.length; i++) {
var p = list[i];
if (typeof from[p] != 'undefined') {
to[p] = from[p];
}
}
return to;
};
/**
* Simple in-process cache implementation. Does not implement limits of any
* sort.
@ -162,3 +138,4 @@ exports.cache = {
this._data = {};
}
};

87
node_modules/ejs/package.json generated vendored
View File

@ -1,52 +1,33 @@
{
"_args": [
[
{
"name": "ejs",
"raw": "ejs@2.5.6",
"rawSpec": "2.5.6",
"scope": null,
"spec": "2.5.6",
"type": "version"
},
"/home/martind2000/dev/Rinser"
"ejs@http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz",
"/Users/martin/dev/Rinser"
]
],
"_from": "ejs@2.5.6",
"_id": "ejs@2.5.6",
"_inCache": true,
"_installable": true,
"_from": "ejs@http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz",
"_id": "ejs@http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz",
"_inBundle": false,
"_integrity": "sha1-cFfrSBKVj7cxhBzZyjUzQ+/ll7E=",
"_location": "/ejs",
"_nodeVersion": "6.9.1",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/ejs-2.5.6.tgz_1487277787176_0.4875628533773124"
},
"_npmUser": {
"email": "mde@fleegix.org",
"name": "mde"
},
"_npmVersion": "3.10.8",
"_phantomChildren": {},
"_requested": {
"type": "remote",
"raw": "ejs@http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz",
"name": "ejs",
"raw": "ejs@2.5.6",
"rawSpec": "2.5.6",
"scope": null,
"spec": "2.5.6",
"type": "version"
"escapedName": "ejs",
"rawSpec": "http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz",
"saveSpec": "http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz",
"fetchSpec": "http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz"
},
"_requiredBy": [
"/"
],
"_resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz",
"_shasum": "479636bfa3fe3b1debd52087f0acb204b4f19c88",
"_shrinkwrap": null,
"_spec": "ejs@2.5.6",
"_where": "/home/martind2000/dev/Rinser",
"_spec": "http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz",
"_where": "/Users/martin/dev/Rinser",
"author": {
"email": "mde@fleegix.org",
"name": "Matthew Eernisse",
"email": "mde@fleegix.org",
"url": "http://fleegix.org"
},
"bugs": {
@ -54,28 +35,22 @@
},
"contributors": [
{
"email": "timothygu99@gmail.com",
"name": "Timothy Gu",
"email": "timothygu99@gmail.com",
"url": "https://timothygu.github.io"
}
],
"dependencies": {},
"description": "Embedded JavaScript templates",
"devDependencies": {
"browserify": "^13.0.1",
"eslint": "^3.0.0",
"git-directory-deploy": "^1.5.1",
"istanbul": "~0.4.3",
"browserify": "^8.0.3",
"istanbul": "~0.3.5",
"jake": "^8.0.0",
"jsdoc": "^3.4.0",
"lru-cache": "^4.0.1",
"mocha": "^3.0.2",
"uglify-js": "^2.6.2"
},
"directories": {},
"dist": {
"shasum": "479636bfa3fe3b1debd52087f0acb204b4f19c88",
"tarball": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz"
"jsdoc": "^3.3.0-beta1",
"lru-cache": "^2.5.0",
"mocha": "^2.1.0",
"rimraf": "^2.2.8",
"uglify-js": "^2.4.16"
},
"engines": {
"node": ">=0.10.0"
@ -88,25 +63,17 @@
],
"license": "Apache-2.0",
"main": "./lib/ejs.js",
"maintainers": [
{
"email": "mde@fleegix.org",
"name": "mde"
}
],
"name": "ejs",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/mde/ejs.git"
},
"scripts": {
"coverage": "istanbul cover node_modules/mocha/bin/_mocha",
"devdoc": "jake doc[dev]",
"doc": "jake doc",
"lint": "eslint \"**/*.js\" Jakefile",
"devdoc": "rimraf out && jsdoc -p -c jsdoc.json lib/* docs/jsdoc/*",
"doc": "rimraf out && jsdoc -c jsdoc.json lib/* docs/jsdoc/*",
"sample": "npm install express && node sample/index.js",
"test": "mocha"
},
"version": "2.5.6"
"version": "http://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz"
}

339
node_modules/ejs/test/ejs.js generated vendored
View File

@ -1,16 +1,15 @@
/* jshint mocha: true */
/* eslint-env node, mocha */
/**
* Module dependencies.
*/
var ejs = require('..');
var fs = require('fs');
var read = fs.readFileSync;
var assert = require('assert');
var path = require('path');
var LRU = require('lru-cache');
var ejs = require('..')
, fs = require('fs')
, read = fs.readFileSync
, assert = require('assert')
, path = require('path')
, LRU = require('lru-cache');
try {
fs.mkdirSync(__dirname + '/tmp');
@ -104,28 +103,10 @@ suite('ejs.compile(str, options)', function () {
delete ejs.delimiter;
});
test('support custom escape function', function () {
var customEscape;
var fn;
customEscape = function customEscape(str) {
return !str ? '' : str.toUpperCase();
};
fn = ejs.compile('HELLO <%= name %>', {escape: customEscape});
assert.equal(fn({name: 'world'}), 'HELLO WORLD');
});
test('strict mode works', function () {
assert.equal(ejs.render(fixture('strict.ejs'), {}, {strict: true}), 'true');
});
});
suite('client mode', function () {
test('have a working client option', function () {
var fn;
var str;
var preFn;
var fn
, str
, preFn;
fn = ejs.compile('<p><%= foo %></p>', {client: true});
str = fn.toString();
if (!process.env.running_under_istanbul) {
@ -135,9 +116,9 @@ suite('client mode', function () {
});
test('support client mode without locals', function () {
var fn;
var str;
var preFn;
var fn
, str
, preFn;
fn = ejs.compile('<p><%= "foo" %></p>', {client: true});
str = fn.toString();
if (!process.env.running_under_istanbul) {
@ -148,17 +129,27 @@ suite('client mode', function () {
test('not include rethrow() in client mode if compileDebug is false', function () {
var fn = ejs.compile('<p><%= "foo" %></p>', {
client: true,
compileDebug: false
client: true
, compileDebug: false
});
// There could be a `rethrow` in the function declaration
assert((fn.toString().match(/rethrow/g) || []).length <= 1);
});
test('support custom escape function', function () {
var customEscape
, fn;
customEscape = function customEscape(str) {
return !str ? '' : str.toUpperCase();
};
fn = ejs.compile('HELLO <%= name %>', {escape: customEscape});
assert.equal(fn({name: 'world'}), 'HELLO WORLD');
});
test('support custom escape function in client mode', function () {
var customEscape;
var fn;
var str;
var customEscape
, fn
, str;
customEscape = function customEscape(str) {
return !str ? '' : str.toUpperCase();
};
@ -166,31 +157,10 @@ suite('client mode', function () {
str = fn.toString();
if (!process.env.running_under_istanbul) {
eval('var preFn = ' + str);
assert.equal(preFn({name: 'world'}), 'HELLO WORLD'); // eslint-disable-line no-undef
assert.equal(preFn({name: 'world'}), 'HELLO WORLD');
}
});
test('escape filename in errors in client mode', function () {
assert.throws(function () {
var fn = ejs.compile('<% throw new Error("whoops"); %>', {client: true, filename: '<script>'});
fn();
}, /Error: &lt;script&gt;/);
});
});
/* Old API -- remove when this shim goes away */
suite('ejs.render(str, dataAndOpts)', function () {
test('render the template with data/opts passed together', function () {
assert.equal(ejs.render('<p><?= foo ?></p>', {foo: 'yay', delimiter: '?'}),
'<p>yay</p>');
});
test('disallow unsafe opts passed along in data', function () {
assert.equal(ejs.render('<p><?= locals.foo ?></p>',
// localsName should not get reset because it's blacklisted
{_with: false, foo: 'yay', delimiter: '?', localsName: '_'}),
'<p>yay</p>');
});
});
suite('ejs.render(str, data, opts)', function () {
@ -254,10 +224,10 @@ suite('ejs.render(str, data, opts)', function () {
});
test('support caching', function () {
var file = __dirname + '/tmp/render.ejs';
var options = {cache: true, filename: file};
var out = ejs.render('<p>Old</p>', {}, options);
var expected = '<p>Old</p>';
var file = __dirname + '/tmp/render.ejs'
, options = {cache: true, filename: file}
, out = ejs.render('<p>Old</p>', {}, options)
, expected = '<p>Old</p>';
assert.equal(out, expected);
// Assert no change, still in cache
out = ejs.render('<p>New</p>', {}, options);
@ -265,11 +235,11 @@ suite('ejs.render(str, data, opts)', function () {
});
test('support LRU caching', function () {
var oldCache = ejs.cache;
var file = __dirname + '/tmp/render.ejs';
var options = {cache: true, filename: file};
var out;
var expected = '<p>Old</p>';
var oldCache = ejs.cache
, file = __dirname + '/tmp/render.ejs'
, options = {cache: true, filename: file}
, out
, expected = '<p>Old</p>';
// Switch to LRU
ejs.cache = LRU();
@ -285,8 +255,8 @@ suite('ejs.render(str, data, opts)', function () {
});
test('opts.context', function () {
var ctxt = {foo: 'FOO'};
var out = ejs.render('<%= this.foo %>', {}, {context: ctxt});
var ctxt = {foo: 'FOO'}
, out = ejs.render('<%= this.foo %>', {}, {context: ctxt});
assert.equal(out, ctxt.foo);
});
});
@ -303,8 +273,8 @@ suite('ejs.renderFile(path, [data], [options], fn)', function () {
});
test('accept locals', function(done) {
var data = {name: 'fonebone'};
var options = {delimiter: '$'};
var data = {name: 'fonebone'}
, options = {delimiter: '$'};
ejs.renderFile('test/fixtures/user.ejs', data, options, function(err, html) {
if (err) {
return done(err);
@ -315,10 +285,11 @@ suite('ejs.renderFile(path, [data], [options], fn)', function () {
});
test('accept locals without using with() {}', function(done) {
var data = {name: 'fonebone'};
var options = {delimiter: '$', _with: false};
var doneCount = 0;
ejs.renderFile('test/fixtures/user-no-with.ejs', data, options, function(err, html) {
var data = {name: 'fonebone'}
, options = {delimiter: '$', _with: false}
, doneCount = 0;
ejs.renderFile('test/fixtures/user-no-with.ejs', data, options,
function(err, html) {
if (err) {
if (doneCount === 2) {
return;
@ -348,9 +319,9 @@ suite('ejs.renderFile(path, [data], [options], fn)', function () {
});
test('not catch err thrown by callback', function(done) {
var data = {name: 'fonebone'};
var options = {delimiter: '$'};
var counter = 0;
var data = {name: 'fonebone'}
, options = {delimiter: '$'}
, counter = 0;
var d = require('domain').create();
d.on('error', function (err) {
@ -365,7 +336,8 @@ suite('ejs.renderFile(path, [data], [options], fn)', function () {
// domains. Have to make it async. Ticket closed because: "domains are
// deprecated :D"
process.nextTick(function () {
ejs.renderFile('test/fixtures/user.ejs', data, options, function(err) {
ejs.renderFile('test/fixtures/user.ejs', data, options,
function(err) {
counter++;
if (err) {
assert.notEqual(err.message, 'Exception in callback');
@ -378,9 +350,9 @@ suite('ejs.renderFile(path, [data], [options], fn)', function () {
});
test('support caching', function (done) {
var expected = '<p>Old</p>';
var file = __dirname + '/tmp/renderFile.ejs';
var options = {cache: true};
var expected = '<p>Old</p>'
, file = __dirname + '/tmp/renderFile.ejs'
, options = {cache: true};
fs.writeFileSync(file, '<p>Old</p>');
ejs.renderFile(file, {}, options, function (err, out) {
@ -403,7 +375,8 @@ suite('ejs.renderFile(path, [data], [options], fn)', function () {
test('opts.context', function (done) {
var ctxt = {foo: 'FOO'};
ejs.renderFile('test/fixtures/with-context.ejs', {}, {context: ctxt}, function(err, html) {
ejs.renderFile('test/fixtures/with-context.ejs', {},
{context: ctxt}, function(err, html) {
if (err) {
return done(err);
}
@ -416,10 +389,10 @@ suite('ejs.renderFile(path, [data], [options], fn)', function () {
suite('cache specific', function () {
test('`clearCache` work properly', function () {
var expected = '<p>Old</p>';
var file = __dirname + '/tmp/clearCache.ejs';
var options = {cache: true, filename: file};
var out = ejs.render('<p>Old</p>', {}, options);
var expected = '<p>Old</p>'
, file = __dirname + '/tmp/clearCache.ejs'
, options = {cache: true, filename: file}
, out = ejs.render('<p>Old</p>', {}, options);
assert.equal(out, expected);
ejs.clearCache();
@ -430,11 +403,11 @@ suite('cache specific', function () {
});
test('`clearCache` work properly, LRU', function () {
var expected = '<p>Old</p>';
var oldCache = ejs.cache;
var file = __dirname + '/tmp/clearCache.ejs';
var options = {cache: true, filename: file};
var out;
var expected = '<p>Old</p>'
, oldCache = ejs.cache
, file = __dirname + '/tmp/clearCache.ejs'
, options = {cache: true, filename: file}
, out;
ejs.cache = LRU();
@ -449,11 +422,11 @@ suite('cache specific', function () {
});
test('LRU with cache-size 1', function () {
var oldCache = ejs.cache;
var options;
var out;
var expected;
var file;
var oldCache = ejs.cache
, options
, out
, expected
, file;
ejs.cache = LRU(1);
@ -499,11 +472,6 @@ suite('<%', function () {
});
suite('<%=', function () {
test('should not throw an error with a // comment on the final line', function () {
assert.equal(ejs.render('<%=\n// a comment\nname\n// another comment %>', {name: '&nbsp;<script>'}),
'&amp;nbsp;&lt;script&gt;');
});
test('escape &amp;<script>', function () {
assert.equal(ejs.render('<%= name %>', {name: '&nbsp;<script>'}),
'&amp;nbsp;&lt;script&gt;');
@ -533,11 +501,6 @@ suite('<%=', function () {
});
suite('<%-', function () {
test('should not throw an error with a // comment on the final line', function () {
assert.equal(ejs.render('<%-\n// a comment\nname\n// another comment %>', {name: '&nbsp;<script>'}),
'&nbsp;<script>');
});
test('not escape', function () {
assert.equal(ejs.render('<%- name %>', {name: '<script>'}),
'<script>');
@ -588,13 +551,13 @@ suite('-%>', function () {
});
test('works with unix style', function () {
var content = '<ul><% -%>\n'
+ '<% users.forEach(function(user){ -%>\n'
+ '<li><%= user.name -%></li>\n'
+ '<% }) -%>\n'
+ '</ul><% -%>\n';
var content = "<ul><% -%>\n"
+ "<% users.forEach(function(user){ -%>\n"
+ "<li><%= user.name -%></li>\n"
+ "<% }) -%>\n"
+ "</ul><% -%>\n";
var expectedResult = '<ul><li>geddy</li>\n<li>neil</li>\n<li>alex</li>\n</ul>';
var expectedResult = "<ul><li>geddy</li>\n<li>neil</li>\n<li>alex</li>\n</ul>";
var fn;
fn = ejs.compile(content);
assert.equal(fn({users: users}),
@ -602,13 +565,13 @@ suite('-%>', function () {
});
test('works with windows style', function () {
var content = '<ul><% -%>\r\n'
+ '<% users.forEach(function(user){ -%>\r\n'
+ '<li><%= user.name -%></li>\r\n'
+ '<% }) -%>\r\n'
+ '</ul><% -%>\r\n';
var content = "<ul><% -%>\r\n"
+ "<% users.forEach(function(user){ -%>\r\n"
+ "<li><%= user.name -%></li>\r\n"
+ "<% }) -%>\r\n"
+ "</ul><% -%>\r\n";
var expectedResult = '<ul><li>geddy</li>\r\n<li>neil</li>\r\n<li>alex</li>\r\n</ul>';
var expectedResult = "<ul><li>geddy</li>\r\n<li>neil</li>\r\n<li>alex</li>\r\n</ul>";
var fn;
fn = ejs.compile(content);
assert.equal(fn({users: users}),
@ -628,15 +591,6 @@ suite('<%%', function () {
});
});
suite('%%>', function () {
test('produce literal', function () {
assert.equal(ejs.render('%%>'),
'%>');
assert.equal(ejs.render(' >', {}, {delimiter: ' '}),
' >');
});
});
suite('<%_ and _%>', function () {
test('slurps spaces and tabs', function () {
assert.equal(ejs.render(fixture('space-and-tab-slurp.ejs'), {users: users}),
@ -702,8 +656,8 @@ suite('exceptions', function () {
var unhook = null;
test('log JS source when debug is set', function (done) {
var out = '';
var needToExit = false;
var out = ''
, needToExit = false;
unhook = hook_stdio(process.stdout, function (str) {
out += str;
if (needToExit) {
@ -718,22 +672,6 @@ suite('exceptions', function () {
});
ejs.render(fixture('hello-world.ejs'), {}, {debug: true});
});
test('escape filename in errors', function () {
assert.throws(function () {
ejs.render('<% throw new Error("whoops"); %>', {}, {filename: '<script>'});
}, /Error: &lt;script&gt;/);
});
test('filename in errors uses custom escape', function () {
assert.throws(function () {
ejs.render('<% throw new Error("whoops"); %>', {}, {
filename: '<script>',
escape: function () { return 'zooby'; }
});
}, /Error: zooby/);
});
teardown(function() {
if (!unhook) {
return;
@ -789,13 +727,6 @@ suite('include()', function () {
fixture('include.html'));
});
test('include ejs with set root path', function () {
var file = 'test/fixtures/include-root.ejs';
var viewsPath = path.join(__dirname, 'fixtures');
assert.equal(ejs.render(fixture('include-root.ejs'), {pets: users}, {filename: file, delimiter: '@',root:viewsPath}),
fixture('include.html'));
});
test('work when nested', function () {
var file = 'test/fixtures/menu.ejs';
assert.equal(ejs.render(fixture('menu.ejs'), {pets: users}, {filename: file}),
@ -803,8 +734,8 @@ suite('include()', function () {
});
test('work with a variable path', function () {
var file = 'test/fixtures/menu_var.ejs';
var includePath = 'includes/menu-item';
var file = 'test/fixtures/menu_var.ejs',
includePath = 'includes/menu-item';
assert.equal(ejs.render(fixture('menu.ejs'), {pets: users, varPath: includePath}, {filename: file}),
fixture('menu.html'));
});
@ -816,12 +747,12 @@ suite('include()', function () {
});
test('pass compileDebug to include', function () {
var file = 'test/fixtures/include.ejs';
var fn;
var file = 'test/fixtures/include.ejs'
, fn;
fn = ejs.compile(fixture('include.ejs'), {
filename: file,
delimiter: '@',
compileDebug: false
filename: file
, delimiter: '@'
, compileDebug: false
});
try {
// Render without a required variable reference
@ -837,9 +768,9 @@ suite('include()', function () {
test('is dynamic', function () {
fs.writeFileSync(__dirname + '/tmp/include.ejs', '<p>Old</p>');
var file = 'test/fixtures/include_cache.ejs';
var options = {filename: file};
var out = ejs.compile(fixture('include_cache.ejs'), options);
var file = 'test/fixtures/include_cache.ejs'
, options = {filename: file}
, out = ejs.compile(fixture('include_cache.ejs'), options);
assert.equal(out(), '<p>Old</p>\n');
fs.writeFileSync(__dirname + '/tmp/include.ejs', '<p>New</p>');
@ -848,10 +779,10 @@ suite('include()', function () {
test('support caching', function () {
fs.writeFileSync(__dirname + '/tmp/include.ejs', '<p>Old</p>');
var file = 'test/fixtures/include_cache.ejs';
var options = {cache: true, filename: file};
var out = ejs.render(fixture('include_cache.ejs'), {}, options);
var expected = fixture('include_cache.html');
var file = 'test/fixtures/include_cache.ejs'
, options = {cache: true, filename: file}
, out = ejs.render(fixture('include_cache.ejs'), {}, options)
, expected = fixture('include_cache.html');
assert.equal(out, expected);
out = ejs.render(fixture('include_cache.ejs'), {}, options);
// No change, still in cache
@ -899,8 +830,8 @@ suite('preprocessor include', function () {
});
test('tracks dependency correctly', function () {
var file = 'test/fixtures/menu_preprocessor.ejs';
var fn = ejs.compile(fixture('menu_preprocessor.ejs'), {filename: file});
var file = 'test/fixtures/menu_preprocessor.ejs'
, fn = ejs.compile(fixture('menu_preprocessor.ejs'), {filename: file});
assert(fn.dependencies.length);
});
@ -911,12 +842,12 @@ suite('preprocessor include', function () {
});
test('pass compileDebug to include', function () {
var file = 'test/fixtures/include_preprocessor.ejs';
var fn;
var file = 'test/fixtures/include_preprocessor.ejs'
, fn;
fn = ejs.compile(fixture('include_preprocessor.ejs'), {
filename: file,
delimiter: '@',
compileDebug: false
filename: file
, delimiter: '@'
, compileDebug: false
});
try {
// Render without a required variable reference
@ -932,9 +863,9 @@ suite('preprocessor include', function () {
test('is static', function () {
fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>Old</p>');
var file = 'test/fixtures/include_preprocessor_cache.ejs';
var options = {filename: file};
var out = ejs.compile(fixture('include_preprocessor_cache.ejs'), options);
var file = 'test/fixtures/include_preprocessor_cache.ejs'
, options = {filename: file}
, out = ejs.compile(fixture('include_preprocessor_cache.ejs'), options);
assert.equal(out(), '<p>Old</p>\n');
fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>New</p>');
@ -943,25 +874,16 @@ suite('preprocessor include', function () {
test('support caching', function () {
fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>Old</p>');
var file = 'test/fixtures/include_preprocessor_cache.ejs';
var options = {cache: true, filename: file};
var out = ejs.render(fixture('include_preprocessor_cache.ejs'), {}, options);
var expected = fixture('include_preprocessor_cache.html');
var file = 'test/fixtures/include_preprocessor_cache.ejs'
, options = {cache: true, filename: file}
, out = ejs.render(fixture('include_preprocessor_cache.ejs'), {}, options)
, expected = fixture('include_preprocessor_cache.html');
assert.equal(out, expected);
fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>New</p>');
out = ejs.render(fixture('include_preprocessor_cache.ejs'), {}, options);
assert.equal(out, expected);
});
test('whitespace slurp and rmWhitespace work', function() {
var file = 'test/fixtures/include_preprocessor_line_slurp.ejs';
var template = fixture('include_preprocessor_line_slurp.ejs');
var expected = fixture('include_preprocessor_line_slurp.html');
var options = {rmWhitespace: true, filename: file};
assert.equal(ejs.render(template, {}, options),
expected);
});
});
suite('comments', function () {
@ -975,8 +897,8 @@ suite('require', function () {
// Only works with inline/preprocessor includes
test('allow ejs templates to be required as node modules', function () {
var file = 'test/fixtures/include_preprocessor.ejs';
var template = require(__dirname + '/fixtures/menu_preprocessor.ejs');
var file = 'test/fixtures/include_preprocessor.ejs'
, template = require(__dirname + '/fixtures/menu_preprocessor.ejs');
if (!process.env.running_under_istanbul) {
assert.equal(template({filename: file, pets: users}),
fixture('menu_preprocessor.html'));
@ -984,25 +906,6 @@ suite('require', function () {
});
});
suite('test fileloader', function () {
var myFileLoad = function (filePath) {
return 'myFileLoad: ' + fs.readFileSync(filePath);
};
test('test custom fileload', function (done) {
ejs.fileLoader = myFileLoad;
ejs.renderFile('test/fixtures/para.ejs', function(err, html) {
if (err) {
return done(err);
}
assert.equal(html, 'myFileLoad: <p>hey</p>\n');
done();
});
});
});
suite('examples', function () {
function noop () {}
fs.readdirSync('examples').forEach(function (f) {
@ -1011,8 +914,8 @@ suite('examples', function () {
}
suite(f, function () {
test('doesn\'t throw any errors', function () {
var stderr = hook_stdio(process.stderr, noop);
var stdout = hook_stdio(process.stdout, noop);
var stderr = hook_stdio(process.stderr, noop)
, stdout = hook_stdio(process.stdout, noop);
try {
require('../examples/' + f);
}
@ -1027,13 +930,3 @@ suite('examples', function () {
});
});
});
suite('meta information', function () {
test('has a version', function () {
assert.strictEqual(ejs.VERSION, require('../package.json').version);
});
test('had a name', function () {
assert.strictEqual(ejs.name, 'ejs');
});
});

View File

@ -1,5 +1,5 @@
AAA
<% var data = "test"; -%>
<% data = "test"; -%>
BBB
<%= qdata %>
CCC

114
node_modules/express/package.json generated vendored
View File

@ -1,98 +1,77 @@
{
"_args": [
[
{
"name": "express",
"raw": "express@4.15.3",
"rawSpec": "4.15.3",
"scope": null,
"spec": "4.15.3",
"type": "version"
},
"/home/martind2000/dev/Rinser"
]
],
"_from": "express@4.15.3",
"_from": "express@^4.15.3",
"_id": "express@4.15.3",
"_inCache": true,
"_installable": true,
"_inBundle": false,
"_integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=",
"_location": "/express",
"_nodeVersion": "6.10.3",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/express-4.15.3.tgz_1495030658380_0.1599606357049197"
},
"_npmUser": {
"email": "doug@somethingdoug.com",
"name": "dougwilson"
},
"_npmVersion": "4.2.0",
"_phantomChildren": {
"debug": "2.6.7",
"depd": "1.1.0",
"destroy": "1.0.4",
"encodeurl": "1.0.1",
"escape-html": "1.0.3",
"etag": "1.8.0",
"forwarded": "0.1.0",
"fresh": "0.5.0",
"media-typer": "0.3.0",
"http-errors": "1.6.1",
"mime": "1.3.4",
"ms": "2.0.0",
"on-finished": "2.3.0",
"parseurl": "1.3.1",
"range-parser": "1.2.0",
"statuses": "1.3.1",
"unpipe": "1.0.0"
},
"_requested": {
"type": "range",
"registry": true,
"raw": "express@^4.15.3",
"name": "express",
"raw": "express@4.15.3",
"rawSpec": "4.15.3",
"scope": null,
"spec": "4.15.3",
"type": "version"
"escapedName": "express",
"rawSpec": "^4.15.3",
"saveSpec": null,
"fetchSpec": "^4.15.3"
},
"_requiredBy": [
"/"
],
"_resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz",
"_shasum": "bab65d0f03aa80c358408972fc700f916944b662",
"_shrinkwrap": null,
"_spec": "express@4.15.3",
"_where": "/home/martind2000/dev/Rinser",
"_spec": "express@^4.15.3",
"_where": "/Users/martin/dev/Rinser",
"author": {
"email": "tj@vision-media.ca",
"name": "TJ Holowaychuk"
"name": "TJ Holowaychuk",
"email": "tj@vision-media.ca"
},
"bugs": {
"url": "https://github.com/expressjs/express/issues"
},
"bundleDependencies": false,
"contributors": [
{
"email": "aaron.heckmann+github@gmail.com",
"name": "Aaron Heckmann"
"name": "Aaron Heckmann",
"email": "aaron.heckmann+github@gmail.com"
},
{
"email": "ciaranj@gmail.com",
"name": "Ciaran Jessup"
"name": "Ciaran Jessup",
"email": "ciaranj@gmail.com"
},
{
"email": "doug@somethingdoug.com",
"name": "Douglas Christopher Wilson"
"name": "Douglas Christopher Wilson",
"email": "doug@somethingdoug.com"
},
{
"email": "rauchg@gmail.com",
"name": "Guillermo Rauch"
"name": "Guillermo Rauch",
"email": "rauchg@gmail.com"
},
{
"email": "me@jongleberry.com",
"name": "Jonathan Ong"
"name": "Jonathan Ong",
"email": "me@jongleberry.com"
},
{
"email": "shtylman+expressjs@gmail.com",
"name": "Roman Shtylman"
"name": "Roman Shtylman",
"email": "shtylman+expressjs@gmail.com"
},
{
"email": "hanul@hanul.me",
"name": "Young Jae Sim"
"name": "Young Jae Sim",
"email": "hanul@hanul.me"
}
],
"dependencies": {
@ -125,6 +104,7 @@
"utils-merge": "1.0.0",
"vary": "~1.1.1"
},
"deprecated": false,
"description": "Fast, unopinionated, minimalist web framework",
"devDependencies": {
"after": "0.8.2",
@ -146,11 +126,6 @@
"supertest": "1.2.0",
"vhost": "~3.0.2"
},
"directories": {},
"dist": {
"shasum": "bab65d0f03aa80c358408972fc700f916944b662",
"tarball": "https://registry.npmjs.org/express/-/express-4.15.3.tgz"
},
"engines": {
"node": ">= 0.10.0"
},
@ -161,7 +136,6 @@
"index.js",
"lib/"
],
"gitHead": "6da454c7fb37e68ed65ffe0371aa688b89f5bd6e",
"homepage": "http://expressjs.com/",
"keywords": [
"express",
@ -175,27 +149,7 @@
"api"
],
"license": "MIT",
"maintainers": [
{
"email": "doug@somethingdoug.com",
"name": "dougwilson"
},
{
"email": "captain@hacksparrow.com",
"name": "hacksparrow"
},
{
"email": "jasnell@gmail.com",
"name": "jasnell"
},
{
"email": "mikeal.rogers@gmail.com",
"name": "mikeal"
}
],
"name": "express",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/expressjs/express.git"

10
node_modules/lodash/package.json generated vendored
View File

@ -40,13 +40,19 @@
"_requiredBy": [
"#USER",
"/",
"/async",
"/babel-traverse",
"/babel-types",
"/eslint",
"/eslint-plugin-flowtype",
"/gulp-jshint",
"/gulp-uglify",
"/hipchat-notifier",
"/inquirer",
"/mailgun-js/async",
"/requestretry",
"/rss-braider"
"/rss-braider",
"/rss-braider/async",
"/table"
],
"_resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
"_shasum": "78203a4d1c328ae1d86dca6460e369b57f4055ae",

190
node_modules/rss-braider/.npmignore generated vendored
View File

@ -1 +1,191 @@
### Archives template
# It's better to unpack these files and commit the raw source because
# git has its own built in compression methods.
*.7z
*.jar
*.rar
*.zip
*.gz
*.bzip
*.bz2
*.xz
*.lzma
*.cab
#packing-only formats
*.iso
*.tar
#package management formats
*.dmg
*.xpi
*.gem
*.egg
*.deb
*.rpm
*.msi
*.msm
*.msp
### Windows template
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
*.iml
## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
*.ipr
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
### Xcode template
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
## Other
*.xccheckout
*.moved-aside
*.xcuserstate
### OSX template
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### Node template
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
node_modules
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
# dependencies
/node_modules
/bower_components
# misc
/.sass-cache
/connect.lock
/coverage/*
/libpeerconnection.log
npm-debug.log
testem.log
/lib/newdata.json

3
node_modules/rss-braider/README.md generated vendored
View File

@ -1,6 +1,5 @@
[![Build Status](https://travis-ci.org/KQED/rss-braider.svg?branch=master)](https://travis-ci.org/KQED/rss-braider)
[![Dependencies](https://david-dm.org/rKQED/rss-braider.svg?branch=master)](https://david-dm.org/KQED/rss-braider)
[![dependencies Status](https://david-dm.org/KQED/rss-braider/status.svg)](https://david-dm.org/KQED/rss-braider)
## Summary
Braid/aggregate one or more RSS feeds (file or url) into a single feed (RSS or JSON output). Process resulting feed through specified plugins. Automatic deduplication

View File

@ -1,57 +1,34 @@
{
"_args": [
[
{
"name": "rss-braider",
"raw": "rss-braider",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
"/home/martind2000/dev/Rinser"
]
],
"_from": "rss-braider@latest",
"_id": "rss-braider@1.2.0",
"_inCache": true,
"_installable": true,
"_from": "git+https://gitlab.silvrtree.co.uk/martind2000/rss-braider.git",
"_id": "rss-braider@1.2.1",
"_inBundle": false,
"_integrity": "sha1-7O6RZ3ZBafnUvOCGLyGx1kee1mQ=",
"_location": "/rss-braider",
"_nodeVersion": "6.2.1",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/rss-braider-1.2.0.tgz_1487633154488_0.3144866321235895"
},
"_npmUser": {
"email": "kgebhardt23@gmail.com",
"name": "rv-kip"
},
"_npmVersion": "3.9.3",
"_phantomChildren": {},
"_requested": {
"name": "rss-braider",
"raw": "rss-braider",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
"type": "git",
"raw": "git+https://gitlab.silvrtree.co.uk/martind2000/rss-braider.git",
"rawSpec": "git+https://gitlab.silvrtree.co.uk/martind2000/rss-braider.git",
"saveSpec": "git+https://gitlab.silvrtree.co.uk/martind2000/rss-braider.git",
"fetchSpec": "https://gitlab.silvrtree.co.uk/martind2000/rss-braider.git",
"gitCommittish": "master"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/rss-braider/-/rss-braider-1.2.0.tgz",
"_shasum": "ce134542a39b643b916b95dd08a10dbfd7f1c28b",
"_shrinkwrap": null,
"_spec": "rss-braider",
"_where": "/home/martind2000/dev/Rinser",
"_resolved": "git+https://gitlab.silvrtree.co.uk/martind2000/rss-braider.git#436237e6255ea45acd5864ace1cc1a8b183d2954",
"_spec": "git+https://gitlab.silvrtree.co.uk/martind2000/rss-braider.git",
"_where": "/Users/martin/dev/Rinser",
"author": {
"email": "kgebhardt@kqed.org",
"name": "Kip Gebhardt"
"name": "Kip Gebhardt",
"email": "kgebhardt@kqed.org"
},
"bugs": {
"email": "kgebhardt@kqed.org",
"url": "http://github.com/KQED/rss-braider/issues"
"url": "http://github.com/KQED/rss-braider/issues",
"email": "kgebhardt@kqed.org"
},
"bundleDependencies": false,
"dependencies": {
"async": "^2.1.5",
"bunyan": "^1.4.0",
@ -59,19 +36,14 @@
"include-folder": "^1.0.0",
"lodash": "^4.17.4",
"request": "^2.57.0",
"rss": "1.2.0"
"rss": "^1.2.2"
},
"deprecated": false,
"description": "Braid/aggregate/combine RSS feeds into a single RSS (or JSON) document. Optionally process through specified plugins.",
"devDependencies": {
"mockdate": "^2.0.1",
"tape": "^4.0.0"
},
"directories": {},
"dist": {
"shasum": "ce134542a39b643b916b95dd08a10dbfd7f1c28b",
"tarball": "https://registry.npmjs.org/rss-braider/-/rss-braider-1.2.0.tgz"
},
"gitHead": "898ec8743c4ab37c4bf7a8fc925356c351d7df39",
"homepage": "https://github.com/KQED/rss-braider#readme",
"keywords": [
"rss",
@ -93,15 +65,7 @@
],
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"email": "kgebhardt23@gmail.com",
"name": "rv-kip"
}
],
"name": "rss-braider",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/KQED/rss-braider.git"
@ -109,5 +73,5 @@
"scripts": {
"test": "tape test"
},
"version": "1.2.0"
"version": "1.2.1"
}