rss.today 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +702 -0
  3. package/dist/atom1.d.ts +8 -0
  4. package/dist/atom1.d.ts.map +1 -0
  5. package/dist/atom1.js +195 -0
  6. package/dist/atom1.js.map +1 -0
  7. package/dist/config/index.d.ts +2 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +2 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/feed.d.ts +54 -0
  12. package/dist/feed.d.ts.map +1 -0
  13. package/dist/feed.js +58 -0
  14. package/dist/feed.js.map +1 -0
  15. package/dist/index.d.ts +12 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/json.d.ts +8 -0
  20. package/dist/json.d.ts.map +1 -0
  21. package/dist/json.js +97 -0
  22. package/dist/json.js.map +1 -0
  23. package/dist/parser/fields.d.ts +12 -0
  24. package/dist/parser/fields.d.ts.map +1 -0
  25. package/dist/parser/fields.js +72 -0
  26. package/dist/parser/fields.js.map +1 -0
  27. package/dist/parser/parser.d.ts +93 -0
  28. package/dist/parser/parser.d.ts.map +1 -0
  29. package/dist/parser/parser.js +411 -0
  30. package/dist/parser/parser.js.map +1 -0
  31. package/dist/parser/utils.d.ts +9 -0
  32. package/dist/parser/utils.d.ts.map +1 -0
  33. package/dist/parser/utils.js +81 -0
  34. package/dist/parser/utils.js.map +1 -0
  35. package/dist/parser.d.ts +106 -0
  36. package/dist/parser.d.ts.map +1 -0
  37. package/dist/parser.js +458 -0
  38. package/dist/parser.js.map +1 -0
  39. package/dist/rss0_9.d.ts +4 -0
  40. package/dist/rss0_9.d.ts.map +1 -0
  41. package/dist/rss0_9.js +77 -0
  42. package/dist/rss0_9.js.map +1 -0
  43. package/dist/rss1.d.ts +4 -0
  44. package/dist/rss1.d.ts.map +1 -0
  45. package/dist/rss1.js +92 -0
  46. package/dist/rss1.js.map +1 -0
  47. package/dist/rss2.d.ts +7 -0
  48. package/dist/rss2.d.ts.map +1 -0
  49. package/dist/rss2.js +267 -0
  50. package/dist/rss2.js.map +1 -0
  51. package/dist/test/feed-utils.test.d.ts +2 -0
  52. package/dist/test/feed-utils.test.d.ts.map +1 -0
  53. package/dist/test/feed-utils.test.js +279 -0
  54. package/dist/test/feed-utils.test.js.map +1 -0
  55. package/dist/test/feed.test.d.ts +2 -0
  56. package/dist/test/feed.test.d.ts.map +1 -0
  57. package/dist/test/feed.test.js +190 -0
  58. package/dist/test/feed.test.js.map +1 -0
  59. package/dist/test/opml.test.d.ts +2 -0
  60. package/dist/test/opml.test.d.ts.map +1 -0
  61. package/dist/test/opml.test.js +135 -0
  62. package/dist/test/opml.test.js.map +1 -0
  63. package/dist/test/parser-test.cjs +11 -0
  64. package/dist/test/parser-test.cjs.map +1 -0
  65. package/dist/test/parser-test.d.cts +2 -0
  66. package/dist/test/parser-test.d.cts.map +1 -0
  67. package/dist/test/parser-test01.d.ts +2 -0
  68. package/dist/test/parser-test01.d.ts.map +1 -0
  69. package/dist/test/parser-test01.js +19 -0
  70. package/dist/test/parser-test01.js.map +1 -0
  71. package/dist/test/parser.test.d.ts +2 -0
  72. package/dist/test/parser.test.d.ts.map +1 -0
  73. package/dist/test/parser.test.js +244 -0
  74. package/dist/test/parser.test.js.map +1 -0
  75. package/dist/test/test-01.d.ts +2 -0
  76. package/dist/test/test-01.d.ts.map +1 -0
  77. package/dist/test/test-01.js +7 -0
  78. package/dist/test/test-01.js.map +1 -0
  79. package/dist/test/test-xml2js.d.ts +2 -0
  80. package/dist/test/test-xml2js.d.ts.map +1 -0
  81. package/dist/test/test-xml2js.js +43 -0
  82. package/dist/test/test-xml2js.js.map +1 -0
  83. package/dist/test/test.d.ts +2 -0
  84. package/dist/test/test.d.ts.map +1 -0
  85. package/dist/test/test.js +3 -0
  86. package/dist/test/test.js.map +1 -0
  87. package/dist/test/utilities.test.d.ts +2 -0
  88. package/dist/test/utilities.test.d.ts.map +1 -0
  89. package/dist/test/utilities.test.js +258 -0
  90. package/dist/test/utilities.test.js.map +1 -0
  91. package/dist/types/atom-types.d.ts +100 -0
  92. package/dist/types/atom-types.d.ts.map +1 -0
  93. package/dist/types/atom-types.js +2 -0
  94. package/dist/types/atom-types.js.map +1 -0
  95. package/dist/types/index.d.ts +63 -0
  96. package/dist/types/index.d.ts.map +1 -0
  97. package/dist/types/index.js +2 -0
  98. package/dist/types/index.js.map +1 -0
  99. package/dist/types/rss-types.d.ts +504 -0
  100. package/dist/types/rss-types.d.ts.map +1 -0
  101. package/dist/types/rss-types.js +2 -0
  102. package/dist/types/rss-types.js.map +1 -0
  103. package/dist/uitls/format-check.d.ts +7 -0
  104. package/dist/uitls/format-check.d.ts.map +1 -0
  105. package/dist/uitls/format-check.js +28 -0
  106. package/dist/uitls/format-check.js.map +1 -0
  107. package/dist/uitls/util.d.ts +9 -0
  108. package/dist/uitls/util.d.ts.map +1 -0
  109. package/dist/uitls/util.js +81 -0
  110. package/dist/uitls/util.js.map +1 -0
  111. package/dist/util/converter.d.ts +5 -0
  112. package/dist/util/converter.d.ts.map +1 -0
  113. package/dist/util/converter.js +97 -0
  114. package/dist/util/converter.js.map +1 -0
  115. package/dist/util/feed-utils.d.ts +19 -0
  116. package/dist/util/feed-utils.d.ts.map +1 -0
  117. package/dist/util/feed-utils.js +157 -0
  118. package/dist/util/feed-utils.js.map +1 -0
  119. package/dist/util/opml.d.ts +29 -0
  120. package/dist/util/opml.d.ts.map +1 -0
  121. package/dist/util/opml.js +129 -0
  122. package/dist/util/opml.js.map +1 -0
  123. package/dist/util/validator.d.ts +10 -0
  124. package/dist/util/validator.d.ts.map +1 -0
  125. package/dist/util/validator.js +143 -0
  126. package/dist/util/validator.js.map +1 -0
  127. package/dist/util.d.ts +2 -0
  128. package/dist/util.d.ts.map +1 -0
  129. package/dist/util.js +7 -0
  130. package/dist/util.js.map +1 -0
  131. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opml.test.js","sourceRoot":"","sources":["../../src/test/opml.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGzD,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,OAAO,GAAG;;;;;;;;;;;;gBAYN,CAAC;YAEX,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,OAAO,GAAG;;;;;;;;gBAQN,CAAC;YAEX,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,OAAO,GAAG;;;;;gBAKN,CAAC;YAEX,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,UAAU,GAAG,SAAS,CAAC;YAE7B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,UAAU,GAAG,oCAAoC,CAAC;YAExD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,IAAI,GAAiB;gBACzB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;gBAC7C,SAAS,EAAE,UAAU;gBACrB,UAAU,EAAE,kBAAkB;gBAC9B,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,8BAA8B;wBACtC,OAAO,EAAE,wBAAwB;qBAClC;iBACF;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,IAAI,GAAiB;gBACzB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE;4BACR;gCACE,IAAI,EAAE,YAAY;gCAClB,IAAI,EAAE,KAAK;gCACX,MAAM,EAAE,8BAA8B;6BACvC;yBACF;qBACF;iBACF;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,IAAI,GAAiB;gBACzB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,eAAe;wBACrB,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,0BAA0B;qBACnC;iBACF;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ let Parser = require('rss-parser');
3
+ let parser = new Parser();
4
+ (async () => {
5
+ let feed = await parser.parseURL('https://github.com/bitcoin/bitcoin/releases.atom');
6
+ console.log(feed.title);
7
+ feed.items.forEach(item => {
8
+ console.log(item.title + ':' + item.link);
9
+ });
10
+ })();
11
+ //# sourceMappingURL=parser-test.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-test.cjs","sourceRoot":"","sources":["../../src/test/parser-test.cjs"],"names":[],"mappings":";AAAA,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACnC,IAAI,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAE1B,CAAC,KAAK,IAAI,EAAE;IAEV,IAAI,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parser-test.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-test.d.cts","sourceRoot":"","sources":["../../src/test/parser-test.cjs"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parser-test01.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-test01.d.ts","sourceRoot":"","sources":["../../src/test/parser-test01.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import Parser from 'rss-parser';
2
+ /**
3
+ const parser: Parser<CustomFeed, CustomItem> = new Parser({
4
+ customFields: {
5
+ feed: ['foo', 'baz'],
6
+ // ^ will error because `baz` is not a key of CustomFeed
7
+ item: ['bar']
8
+ }
9
+ });
10
+ */
11
+ (async () => {
12
+ const parser = new Parser();
13
+ const feed = await parser.parseURL('https://www.reddit.com/.rss');
14
+ console.log(feed.title); // feed will have a `foo` property, type as a string
15
+ feed.items.forEach(item => {
16
+ console.log(item.title + ':' + item.link); // item will have a `bar` property type as a number
17
+ });
18
+ })();
19
+ //# sourceMappingURL=parser-test01.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-test01.js","sourceRoot":"","sources":["../../src/test/parser-test01.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,YAAY,CAAC;AAKhC;;;;;;;;EAQE;AAEF,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,oDAAoD;IAE7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,mDAAmD;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.d.ts","sourceRoot":"","sources":["../../src/test/parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,244 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { Parser } from '../parser.js';
3
+ import * as fs from 'fs/promises';
4
+ import * as path from 'path';
5
+ import { Readable } from 'stream';
6
+ describe('Parser', () => {
7
+ let parser;
8
+ beforeEach(() => {
9
+ parser = new Parser();
10
+ });
11
+ describe('parseString', () => {
12
+ it('should parse RSS 2.0 feed from string', async () => {
13
+ const rss2 = `<?xml version="1.0" encoding="UTF-8"?>
14
+ <rss version="2.0">
15
+ <channel>
16
+ <title>Test Feed</title>
17
+ <link>https://example.com</link>
18
+ <description>A test feed</description>
19
+ <item>
20
+ <title>First Item</title>
21
+ <link>https://example.com/1</link>
22
+ <description>First item description</description>
23
+ <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
24
+ </item>
25
+ </channel>
26
+ </rss>`;
27
+ const feed = await parser.parseString(rss2);
28
+ expect(feed.title).toBe('Test Feed');
29
+ expect(feed.link).toBe('https://example.com');
30
+ expect(feed.description).toBe('A test feed');
31
+ expect(feed.items).toHaveLength(1);
32
+ expect(feed.items[0].title).toBe('First Item');
33
+ expect(feed.items[0].link).toBe('https://example.com/1');
34
+ });
35
+ it('should parse Atom 1.0 feed from string', async () => {
36
+ const atom = `<?xml version="1.0" encoding="UTF-8"?>
37
+ <feed xmlns="http://www.w3.org/2005/Atom">
38
+ <title>Test Feed</title>
39
+ <link href="https://example.com"/>
40
+ <link rel="self" href="https://example.com/feed"/>
41
+ <updated>2024-01-01T00:00:00Z</updated>
42
+ <entry>
43
+ <title>First Item</title>
44
+ <link href="https://example.com/1"/>
45
+ <content>First item content</content>
46
+ <published>2024-01-01T00:00:00Z</published>
47
+ </entry>
48
+ </feed>`;
49
+ const feed = await parser.parseString(atom);
50
+ expect(feed.title).toBe('Test Feed');
51
+ expect(feed.link).toBe('https://example.com');
52
+ expect(feed.feedUrl).toBe('https://example.com/feed');
53
+ expect(feed.items).toHaveLength(1);
54
+ expect(feed.items[0].title).toBe('First Item');
55
+ expect(feed.items[0].link).toBe('https://example.com/1');
56
+ });
57
+ it('should parse RSS 1.0 feed from string', async () => {
58
+ const rss1 = `<?xml version="1.0" encoding="UTF-8"?>
59
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
60
+ xmlns="http://purl.org/rss/1.0/">
61
+ <channel rdf:about="https://example.com">
62
+ <title>Test Feed</title>
63
+ <link>https://example.com</link>
64
+ <description>A test feed</description>
65
+ <items>
66
+ <rdf:Seq>
67
+ <rdf:li resource="https://example.com/1"/>
68
+ </rdf:Seq>
69
+ </items>
70
+ </channel>
71
+ <item rdf:about="https://example.com/1">
72
+ <title>First Item</title>
73
+ <link>https://example.com/1</link>
74
+ </item>
75
+ </rdf:RDF>`;
76
+ const feed = await parser.parseString(rss1);
77
+ expect(feed.title).toBe('Test Feed');
78
+ expect(feed.link).toBe('https://example.com');
79
+ });
80
+ it('should throw error for invalid XML', async () => {
81
+ const invalid = 'not valid xml';
82
+ await expect(parser.parseString(invalid)).rejects.toThrow();
83
+ });
84
+ it('should throw error for unrecognized feed format', async () => {
85
+ const unknown = `<?xml version="1.0"?><unknown></unknown>`;
86
+ await expect(parser.parseString(unknown)).rejects.toThrow('Feed not recognized');
87
+ });
88
+ });
89
+ describe('parseBuffer', () => {
90
+ it('should parse RSS feed from Buffer', async () => {
91
+ const rss = `<?xml version="1.0" encoding="UTF-8"?>
92
+ <rss version="2.0">
93
+ <channel>
94
+ <title>Buffer Test</title>
95
+ <item>
96
+ <title>Item from Buffer</title>
97
+ </item>
98
+ </channel>
99
+ </rss>`;
100
+ const buffer = Buffer.from(rss, 'utf-8');
101
+ const feed = await parser.parseBuffer(buffer);
102
+ expect(feed.title).toBe('Buffer Test');
103
+ expect(feed.items[0].title).toBe('Item from Buffer');
104
+ });
105
+ it('should parse with custom encoding', async () => {
106
+ const rss = `<?xml version="1.0" encoding="UTF-8"?>
107
+ <rss version="2.0">
108
+ <channel>
109
+ <title>Encoding Test</title>
110
+ </channel>
111
+ </rss>`;
112
+ const buffer = Buffer.from(rss, 'utf-16le');
113
+ const feed = await parser.parseBuffer(buffer, 'utf-16le');
114
+ expect(feed.title).toBe('Encoding Test');
115
+ });
116
+ it('should throw error for non-Buffer input', async () => {
117
+ await expect(parser.parseBuffer('not a buffer')).rejects.toThrow('Input must be a Buffer');
118
+ });
119
+ });
120
+ describe('parseFile', () => {
121
+ const fixturesDir = path.join(process.cwd(), 'src/test/fixtures');
122
+ it('should parse RSS feed from file', async () => {
123
+ // Create a test fixture file
124
+ const rssContent = `<?xml version="1.0" encoding="UTF-8"?>
125
+ <rss version="2.0">
126
+ <channel>
127
+ <title>File Test Feed</title>
128
+ <link>https://example.com</link>
129
+ <description>Test feed from file</description>
130
+ <item>
131
+ <title>Item from File</title>
132
+ <link>https://example.com/file-item</link>
133
+ </item>
134
+ </channel>
135
+ </rss>`;
136
+ const testFilePath = path.join(fixturesDir, 'test-rss.xml');
137
+ await fs.mkdir(fixturesDir, { recursive: true });
138
+ await fs.writeFile(testFilePath, rssContent, 'utf-8');
139
+ const feed = await parser.parseFile(testFilePath);
140
+ expect(feed.title).toBe('File Test Feed');
141
+ expect(feed.items[0].title).toBe('Item from File');
142
+ // Cleanup
143
+ await fs.unlink(testFilePath);
144
+ });
145
+ it('should throw error for non-existent file', async () => {
146
+ await expect(parser.parseFile('/nonexistent/file.xml')).rejects.toThrow('File not found');
147
+ });
148
+ it('should throw error for directory path', async () => {
149
+ await expect(parser.parseFile(fixturesDir)).rejects.toThrow('directory');
150
+ });
151
+ });
152
+ describe('parseStream', () => {
153
+ it('should parse RSS feed from Readable stream', async () => {
154
+ const rssContent = `<?xml version="1.0" encoding="UTF-8"?>
155
+ <rss version="2.0">
156
+ <channel>
157
+ <title>Stream Test Feed</title>
158
+ <item>
159
+ <title>Item from Stream</title>
160
+ </item>
161
+ </channel>
162
+ </rss>`;
163
+ const buffer = Buffer.from(rssContent, 'utf-8');
164
+ const stream = new Readable({
165
+ read() {
166
+ this.push(buffer);
167
+ this.push(null); // End the stream
168
+ }
169
+ });
170
+ const feed = await parser.parseStream(stream);
171
+ expect(feed.title).toBe('Stream Test Feed');
172
+ expect(feed.items[0].title).toBe('Item from Stream');
173
+ });
174
+ it('should handle stream errors', async () => {
175
+ const stream = new Readable({
176
+ read() {
177
+ this.destroy(new Error('Stream read error'));
178
+ }
179
+ });
180
+ await expect(parser.parseStream(stream)).rejects.toThrow('Stream error');
181
+ });
182
+ it('should enforce max chunk size limit', async () => {
183
+ const largeContent = '<?xml version="1.0"?><x>' + 'a'.repeat(11 * 1024 * 1024) + '</x>';
184
+ const buffer = Buffer.from(largeContent, 'utf-8');
185
+ const stream = new Readable({
186
+ read() {
187
+ this.push(buffer);
188
+ this.push(null);
189
+ }
190
+ });
191
+ await expect(parser.parseStream(stream, 10 * 1024 * 1024)).rejects.toThrow('exceeds maximum limit');
192
+ });
193
+ });
194
+ describe('parseURL', () => {
195
+ it.skip('should parse feed from URL', async () => {
196
+ // Note: This test requires network access or mocking
197
+ // For now, we'll skip it or use a mock
198
+ // In a real scenario, you'd use a library like 'nock' to mock HTTP requests
199
+ });
200
+ });
201
+ describe('customFields option', () => {
202
+ it('should extract custom fields from feed', async () => {
203
+ const customRss = `<?xml version="1.0" encoding="UTF-8"?>
204
+ <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
205
+ <channel>
206
+ <title>Test Feed</title>
207
+ <dc:creator>John Doe</dc:creator>
208
+ <item>
209
+ <dc:date>2024-01-01</dc:date>
210
+ </item>
211
+ </channel>
212
+ </rss>`;
213
+ const parserWithCustom = new Parser({
214
+ customFields: {
215
+ feed: ['dc:creator'],
216
+ item: ['dc:date']
217
+ }
218
+ });
219
+ const feed = await parserWithCustom.parseString(customRss);
220
+ expect(feed.title).toBe('Test Feed');
221
+ // Custom fields are now part of the feed object
222
+ });
223
+ });
224
+ describe('iTunes podcast support', () => {
225
+ it('should parse iTunes podcast metadata', async () => {
226
+ const podcastRss = `<?xml version="1.0" encoding="UTF-8"?>
227
+ <rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
228
+ <channel>
229
+ <title>Test Podcast</title>
230
+ <itunes:author>Podcast Author</itunes:author>
231
+ <itunes:summary>A test podcast</itunes:summary>
232
+ <item>
233
+ <title>Episode 1</title>
234
+ <itunes:duration>30:00</itunes:duration>
235
+ </item>
236
+ </channel>
237
+ </rss>`;
238
+ const feed = await parser.parseString(podcastRss);
239
+ expect(feed.title).toBe('Test Podcast');
240
+ expect(feed.itunes).toBeDefined();
241
+ });
242
+ });
243
+ });
244
+ //# sourceMappingURL=parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../src/test/parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare function greet(name: string): string;
2
+ //# sourceMappingURL=test-01.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-01.d.ts","sourceRoot":"","sources":["../../src/test/test-01.ts"],"names":[],"mappings":"AACA,iBAAS,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ // app.ts
3
+ function greet(name) {
4
+ return `Hello, ${name}! Welcome to TypeScript.`;
5
+ }
6
+ console.log(greet("Developer"));
7
+ //# sourceMappingURL=test-01.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-01.js","sourceRoot":"","sources":["../../src/test/test-01.ts"],"names":[],"mappings":";AAAA,SAAS;AACT,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,UAAU,IAAI,0BAA0B,CAAC;AAClD,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-xml2js.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-xml2js.d.ts","sourceRoot":"","sources":["../../src/test/test-xml2js.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { Parser } from 'xml2js';
2
+ const parser = new Parser();
3
+ const xmlString = `
4
+ <bookstore>
5
+ <book category="科幻">
6
+ <title>2001太空漫游</title>
7
+ <author>Arthur C. Clarke</author>
8
+ <year>1968</year>
9
+ </book>
10
+ <book category="小说">
11
+ <title>了不起的盖茨比</title>
12
+ <author>F. Scott Fitzgerald</author>
13
+ <year>1925</year>
14
+ </book>
15
+ </bookstore>
16
+ `;
17
+ parser.parseString(xmlString, (error, result) => {
18
+ if (error) {
19
+ console.log('解析 XML 失败:', error);
20
+ return;
21
+ }
22
+ console.log('解析 XML 成功:', result);
23
+ // show book info
24
+ if (result && result.bookstore && result.bookstore.book) {
25
+ const books = result.bookstore.book;
26
+ for (const book of books) {
27
+ // xml2js stores attributes under the $ property
28
+ const category = book.$?.category ?? book.category?.[0];
29
+ const title = book.title?.[0];
30
+ const author = book.author?.[0];
31
+ const year = book.year?.[0];
32
+ console.log(`类别:${category}`);
33
+ console.log(`标题:${title}`);
34
+ console.log(`作者:${author}`);
35
+ console.log(`年份:${year}`);
36
+ console.log('--------');
37
+ }
38
+ }
39
+ else {
40
+ console.log('未找到书籍信息');
41
+ }
42
+ });
43
+ //# sourceMappingURL=test-xml2js.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-xml2js.js","sourceRoot":"","sources":["../../src/test/test-xml2js.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE5B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAE5B,MAAM,SAAS,GAAY;;;;;;;;;;;;;CAa9B,CAAC;AAEE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAmB,EAAE,MAAW,EAAQ,EAAE;IACvE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAElC,iBAAiB;IACjB,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,gDAAgD;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE5B,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/test/test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import hello from "rss.today";
2
+ console.log(hello.hello());
3
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/test/test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,WAAW,CAAC;AAE9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utilities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utilities.test.d.ts","sourceRoot":"","sources":["../../src/test/utilities.test.ts"],"names":[],"mappings":""}