Skip to content

Commit fb75425

Browse files
authored
Merge pull request #44 from ndaidong/v6.x.x
v6.0.0rc2
2 parents ae66da5 + 940747f commit fb75425

File tree

6 files changed

+85
-50
lines changed

6 files changed

+85
-50
lines changed

README.md

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,23 +99,27 @@ The following example will explain better than any word:
9999
```js
100100
import { read, onSuccess, onError, onComplete } from 'feed-reader'
101101

102-
onSuccess((feed, url) => {
102+
onSuccess((url, feed) => {
103103
console.log(`Feed data from ${url} has been parsed successfully`)
104104
console.log('`feed` is always an object that contains feed data')
105105
console.log(feed)
106106
})
107107

108-
onError((err, url) => {
108+
onError((url, err) => {
109109
console.log(`Error occurred while processing ${url}`)
110110
console.log('There is a message and reason:')
111111
console.log(err)
112112
})
113113

114-
onComplete((result, url) => {
114+
onComplete((url, result, error) => {
115115
console.log(`Finish processing ${url}`)
116-
console.log('There may or may not be an error')
117116
console.log('`result` may be feed data or null')
118117
console.log(result)
118+
console.log('`error` may be an error object or null')
119+
if (error) {
120+
console.log(error.message)
121+
console.log(error.reason)
122+
}
119123
})
120124

121125
read('https://news.google.com/rss')
@@ -127,7 +131,7 @@ We can mix both style together, for example to handle the error:
127131
```js
128132
import { read, onError } from 'feed-reader'
129133

130-
onError((err, url) => {
134+
onError((url, err) => {
131135
console.log(`Error occurred while processing ${url}`)
132136
console.log('There is a message and reason:')
133137
console.log(err)
@@ -142,6 +146,26 @@ const getFeedData = async (url) => {
142146
getFeedData('https://news.google.com/rss')
143147
````
144148

149+
In almost cases, using just `onComplete` is enough:
150+
151+
```js
152+
import { read, onComplete } from 'feed-reader'
153+
154+
onComplete((url, result, error) => {
155+
console.log(`Finish processing ${url}`)
156+
if (result) {
157+
// save feed data
158+
console.log(result)
159+
}
160+
if (error) {
161+
// handle error info
162+
console.log(error)
163+
}
164+
})
165+
166+
read('https://news.google.com/rss')
167+
````
168+
145169
#### Reset event listeners
146170
147171
Use method `resetEvents()` when you want to clear registered listeners from all events.

dist/cjs/feed-reader.js

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// feed-reader@6.0.0rc1, by @ndaidong - built with esbuild at 2022-07-12T14:34:09.025Z - published under MIT license
1+
// feed-reader@6.0.0rc2, by @ndaidong - built with esbuild at 2022-07-16T03:09:04.163Z - published under MIT license
22
var __create = Object.create;
33
var __defProp = Object.defineProperty;
44
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -14585,46 +14585,50 @@ var isValidUrl_default = (url = "") => {
1458514585

1458614586
// src/main.js
1458714587
var eventEmitter = new import_events.default();
14588-
var runWhenComplete = (result, url) => {
14589-
eventEmitter.emit("complete", result, url);
14588+
var runWhenComplete = (url, result = null, error2 = null) => {
14589+
eventEmitter.emit("complete", url, result, error2);
1459014590
return result;
1459114591
};
1459214592
var read = async (url) => {
1459314593
try {
1459414594
if (!isValidUrl_default(url)) {
14595-
eventEmitter.emit("error", {
14595+
const erdata = {
1459614596
error: "Error occurred while verifying feed URL",
1459714597
reason: "Invalid URL"
14598-
}, url);
14599-
return runWhenComplete(null, url);
14598+
};
14599+
eventEmitter.emit("error", url, erdata);
14600+
return runWhenComplete(url, null, erdata);
1460014601
}
1460114602
const xml = await retrieve_default(url);
1460214603
if (!validate(xml)) {
14603-
eventEmitter.emit("error", {
14604+
const erdata = {
1460414605
error: "Error occurred while validating XML format",
1460514606
reason: "The XML document is not well-formed"
14606-
}, url);
14607-
return runWhenComplete(null, url);
14607+
};
14608+
eventEmitter.emit("error", url, erdata);
14609+
return runWhenComplete(url, null, erdata);
1460814610
}
1460914611
try {
1461014612
const feed = parse(xml);
1461114613
if (feed) {
14612-
eventEmitter.emit("success", feed, url);
14614+
eventEmitter.emit("success", url, feed);
1461314615
}
14614-
return runWhenComplete(feed, url);
14616+
return runWhenComplete(url, feed);
1461514617
} catch (er) {
14616-
eventEmitter.emit("error", {
14618+
const erdata = {
1461714619
error: "Error occurred while parsing XML structure",
1461814620
reason: er.message
14619-
}, url);
14620-
return runWhenComplete(null, url);
14621+
};
14622+
eventEmitter.emit("error", url, erdata);
14623+
return runWhenComplete(url, null, erdata);
1462114624
}
1462214625
} catch (err) {
14623-
eventEmitter.emit("error", {
14626+
const erdata = {
1462414627
error: "Error occurred while retrieving remote XML data",
1462514628
reason: err.message
14626-
}, url);
14627-
return runWhenComplete(null, url);
14629+
};
14630+
eventEmitter.emit("error", url, erdata);
14631+
return runWhenComplete(url, null, erdata);
1462814632
}
1462914633
};
1463014634
var onComplete = (fn) => {

dist/cjs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"name": "feed-reader-cjs",
3-
"version": "6.0.0rc1",
3+
"version": "6.0.0rc2",
44
"main": "./feed-reader.js"
55
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "6.0.0rc1",
2+
"version": "6.0.0rc2",
33
"name": "feed-reader",
44
"description": "Load and parse ATOM/RSS data from given feed url",
55
"homepage": "https://www.npmjs.com/package/feed-reader",

src/main.js

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,54 +18,55 @@ export {
1818

1919
const eventEmitter = new EventEmitter()
2020

21-
const runWhenComplete = (result, url) => {
22-
eventEmitter.emit('complete', result, url)
21+
const runWhenComplete = (url, result = null, error = null) => {
22+
eventEmitter.emit('complete', url, result, error)
2323
return result
2424
}
2525

2626
export const read = async (url) => {
2727
try {
2828
if (!isValidUrl(url)) {
29-
eventEmitter.emit('error', {
29+
const erdata = {
3030
error: 'Error occurred while verifying feed URL',
3131
reason: 'Invalid URL'
32-
}, url)
33-
34-
return runWhenComplete(null, url)
32+
}
33+
eventEmitter.emit('error', url, erdata)
34+
return runWhenComplete(url, null, erdata)
3535
}
3636
const xml = await getXML(url)
3737

3838
if (!validate(xml)) {
39-
eventEmitter.emit('error', {
39+
const erdata = {
4040
error: 'Error occurred while validating XML format',
4141
reason: 'The XML document is not well-formed'
42-
}, url)
43-
44-
return runWhenComplete(null, url)
42+
}
43+
eventEmitter.emit('error', url, erdata)
44+
return runWhenComplete(url, null, erdata)
4545
}
4646

4747
try {
4848
const feed = parse(xml)
4949
if (feed) {
50-
eventEmitter.emit('success', feed, url)
50+
eventEmitter.emit('success', url, feed)
5151
}
5252

53-
return runWhenComplete(feed, url)
53+
return runWhenComplete(url, feed)
5454
} catch (er) {
55-
eventEmitter.emit('error', {
55+
const erdata = {
5656
error: 'Error occurred while parsing XML structure',
5757
reason: er.message
58-
}, url)
58+
}
59+
eventEmitter.emit('error', url, erdata)
5960

60-
return runWhenComplete(null, url)
61+
return runWhenComplete(url, null, erdata)
6162
}
6263
} catch (err) {
63-
eventEmitter.emit('error', {
64+
const erdata = {
6465
error: 'Error occurred while retrieving remote XML data',
6566
reason: err.message
66-
}, url)
67-
68-
return runWhenComplete(null, url)
67+
}
68+
eventEmitter.emit('error', url, erdata)
69+
return runWhenComplete(url, null, erdata)
6970
}
7071
}
7172

src/main.test.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ const parseUrl = (url) => {
2121

2222
test('test read a non-string link', async () => {
2323
const url = []
24-
onError((err, rss) => {
24+
onError((rss, err) => {
2525
expect(rss).toEqual(url)
2626
expect(err.error).toEqual('Error occurred while verifying feed URL')
2727
expect(err.reason).toEqual('Invalid URL')
2828
})
29-
onComplete((feed, rss) => {
29+
onComplete((rss, feed, err) => {
3030
expect(rss).toEqual(url)
3131
expect(feed).toEqual(null)
32+
expect(err.error).toEqual('Error occurred while verifying feed URL')
33+
expect(err.reason).toEqual('Invalid URL')
3234
})
3335
const re = await read(url)
3436
expect(re).toEqual(null)
@@ -41,14 +43,16 @@ test('test read a fake link', async () => {
4143
nock(baseUrl).head(path).reply(404)
4244
nock(baseUrl).get(path).reply(404)
4345

44-
onError((err, rss) => {
46+
onError((rss, err) => {
4547
expect(rss).toEqual(url)
4648
expect(err.error).toEqual('Error occurred while retrieving remote XML data')
4749
expect(err.reason).toEqual('Request failed with status code 404')
4850
})
49-
onComplete((feed, rss) => {
51+
onComplete((rss, feed, err) => {
5052
expect(rss).toEqual(url)
5153
expect(feed).toEqual(null)
54+
expect(err.error).toEqual('Error occurred while retrieving remote XML data')
55+
expect(err.reason).toEqual('Request failed with status code 404')
5256
})
5357
const re = await read(url)
5458
expect(re).toEqual(null)
@@ -63,14 +67,16 @@ test('test read from invalid xml', async () => {
6367
nock(baseUrl).get(path).reply(200, xml, {
6468
'Content-Type': 'application/xml'
6569
})
66-
onError((err, rss) => {
70+
onError((rss, err) => {
6771
expect(rss).toEqual(url)
6872
expect(err.error).toEqual('Error occurred while validating XML format')
6973
expect(err.reason).toEqual('The XML document is not well-formed')
7074
})
71-
onComplete((feed, rss) => {
75+
onComplete((rss, feed, err) => {
7276
expect(rss).toEqual(url)
7377
expect(feed).toEqual(null)
78+
expect(err.error).toEqual('Error occurred while validating XML format')
79+
expect(err.reason).toEqual('The XML document is not well-formed')
7480
})
7581
const re = await read(url)
7682
expect(re).toEqual(null)
@@ -145,7 +151,7 @@ test('test read from a more complicate atom source', async () => {
145151
'Content-Type': 'application/xml'
146152
})
147153

148-
onSuccess((feed, rss) => {
154+
onSuccess((rss, feed) => {
149155
expect(rss).toEqual(url)
150156
expect(feed).toBeInstanceOf(Object)
151157
feedAttrs.forEach((k) => {

0 commit comments

Comments
 (0)