Skip to content

Commit

Permalink
v2.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
ggkovacs committed Jan 21, 2019
1 parent fdd661f commit b4f72b7
Show file tree
Hide file tree
Showing 20 changed files with 4,537 additions and 5,604 deletions.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ root = true

[*]
indent_style = space
indent_size = 4
indent_size = 2
end_of_line = lf
charset = utf-8
insert_final_newline = true
Expand Down
1 change: 0 additions & 1 deletion .eslintignore

This file was deleted.

10 changes: 10 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": [
"mito/legacy"
],
"rules": {
"indent": [2, 2, {
"SwitchCase": 1
}]
}
}
5 changes: 5 additions & 0 deletions .huskyrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"hooks": {
"pre-commit": "npm test"
}
}
9 changes: 6 additions & 3 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
.DS_Store
.nyc_output
demo
test
.editorconfig
.eslintignore
.eslintrc
.gitignore
.travis.yml
test
.nyc_output
npm-debug.log
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright © 2018 Gergely Kovács (gg.kovacs@gmail.com)
Copyright © 2019 Gergely Kovács (gg.kovacs@gmail.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# RSS Finder [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage Status][coverage-image]][coverage-url]
Version: **2.0.6**
Version: **2.1.0**

## Installation

Expand Down Expand Up @@ -64,7 +64,7 @@ This object is passed to [`feedparser` options](https://github.com/danmactough/n


# License
MIT © 2018 Gergely Kovács (gg.kovacs@gmail.com)
MIT © 2019 Gergely Kovács (gg.kovacs@gmail.com)

[npm-image]: https://badge.fury.io/js/rss-finder.svg
[npm-url]: https://npmjs.org/package/rss-finder
Expand Down
4 changes: 2 additions & 2 deletions demo/demo.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
var rssFinder = require('../index');

rssFinder('http://www.nytimes.com').then(function(res) {
console.log(res);
console.log(res);
}).catch(function(err) {
console.log(err.stack);
console.log(err);
});
168 changes: 84 additions & 84 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,116 +7,116 @@ var url = require('url');
var got = require('got');

var defaults = {
gotOptions: {
timeout: 30000 // 30s
},
feedParserOptions: {}
gotOptions: {
timeout: 30000 // 30s
},
feedParserOptions: {}
};

function isRelativeUrl(str) {
return /^https?:\/\//i.test(str);
return /^https?:\/\//i.test(str);
}

function setError(err) {
if (err instanceof Error) {
return err;
}
if (err instanceof Error) {
return err;
}

return new Error(err);
return new Error(err);
}

function cleanUrl(uri) {
if (uri[uri.length - 1] === '/') {
return uri.substr(0, uri.length - 1);
}
if (uri[uri.length - 1] === '/') {
return uri.substr(0, uri.length - 1);
}

return uri;
return uri;
}

function getFaviconUrl(uri) {
var parsedUrl = url.parse(uri);
var parsedUrl = url.parse(uri);

return url.resolve(parsedUrl.protocol + '//' + parsedUrl.host, 'favicon.ico');
return url.resolve(parsedUrl.protocol + '//' + parsedUrl.host, 'favicon.ico');
}

function fixData(res, uri) {
return new Promise(function(resolve) {
var feedUrl;
var favicon;
var i = res.feedUrls.length;

while (i--) {
feedUrl = res.feedUrls[i];

if (feedUrl.url) {
if (!isRelativeUrl(feedUrl.url)) {
feedUrl.url = url.resolve(uri, feedUrl.url);
}
} else {
feedUrl.url = uri;
}
}
return new Promise(function(resolve) {
var feedUrl;
var favicon;
var i = res.feedUrls.length;

if (!res.site.url) {
res.site.url = cleanUrl(uri);
}
while (i--) {
feedUrl = res.feedUrls[i];

if (res.site.favicon) {
if (!isRelativeUrl(res.site.favicon)) {
res.site.favicon = url.resolve(res.site.url, res.site.favicon);
}

resolve(res);
} else {
favicon = getFaviconUrl(res.site.url);

got(favicon, {
retries: 0
}).then(function() {
res.site.favicon = favicon;
resolve(res);
}).catch(function() {
resolve(res);
});
if (feedUrl.url) {
if (!isRelativeUrl(feedUrl.url)) {
feedUrl.url = url.resolve(uri, feedUrl.url);
}
});
} else {
feedUrl.url = uri;
}
}

if (!res.site.url) {
res.site.url = cleanUrl(uri);
}

if (res.site.favicon) {
if (!isRelativeUrl(res.site.favicon)) {
res.site.favicon = url.resolve(res.site.url, res.site.favicon);
}

resolve(res);
} else {
favicon = getFaviconUrl(res.site.url);

got(favicon, {
retries: 0
}).then(function() {
res.site.favicon = favicon;
resolve(res);
}).catch(function() {
resolve(res);
});
}
});
}

function rssFinder(opts) {
return new Promise(function(resolve, reject) {
var o = extend(true, {}, defaults);

if (typeof opts === 'string') {
o.url = opts;
} else if (typeof opts === 'object' && !Array.isArray(opts)) {
o = extend(true, {}, defaults, opts);
} else {
reject(setError('Parameter `opts` must be a string or object.'));
return;
}
return new Promise(function(resolve, reject) {
var o = extend(true, {}, defaults);

if (typeof opts === 'string') {
o.url = opts;
} else if (typeof opts === 'object' && !Array.isArray(opts)) {
o = extend(true, {}, defaults, opts);
} else {
reject(setError('Parameter `opts` must be a string or object.'));
return;
}

if (!isRelativeUrl(o.url)) {
reject(setError('Not HTTP URL is provided.'));
return;
}
if (!isRelativeUrl(o.url)) {
reject(setError('Not HTTP URL is provided.'));
return;
}

var canonicalUrl;

got(o.url, o.gotOptions)
.then(function(res) {
canonicalUrl = res.url;
return htmlParser(res.body, o.feedParserOptions);
})
.then(function(res) {
return fixData(res, canonicalUrl);
})
.then(function(res) {
resolve(res);
})
.catch(function(err) {
reject(setError(err));
});
});
var canonicalUrl;

got(o.url, o.gotOptions)
.then(function(res) {
canonicalUrl = res.url;
return htmlParser(res.body, o.feedParserOptions);
})
.then(function(res) {
return fixData(res, canonicalUrl);
})
.then(function(res) {
resolve(res);
})
.catch(function(err) {
reject(setError(err));
});
});
}

module.exports = rssFinder;

0 comments on commit b4f72b7

Please sign in to comment.