{"_id":"@drftgyhuji7npm/qui-eos-molestiae","name":"@drftgyhuji7npm/qui-eos-molestiae","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@drftgyhuji7npm/qui-eos-molestiae","version":"1.0.0","description":"To read & normalize RSS/ATOM/JSON feed data.","main":"index.js","author":{"name":"drftgyhuji7"},"license":"MIT","dependencies":{"@drftgyhuji7npm/adipisci-ad-reiciendis-temporibus":"^1.0.0","@drftgyhuji7npm/aliquid-mollitia-est-illo":"^1.0.0","@drftgyhuji7npm/animi-a-ab-earum":"^1.0.0","@drftgyhuji7npm/aut-dolores-numquam-dolorem":"^1.0.0","@drftgyhuji7npm/corporis-facere-ut-suscipit":"^1.0.0","@drftgyhuji7npm/debitis-error-dolores-sit":"^1.0.0","@drftgyhuji7npm/ea-numquam-maiores-voluptas":"^1.0.0","@drftgyhuji7npm/earum-adipisci-error-est":"^1.0.0","@drftgyhuji7npm/esse-eveniet-nobis-dolores":"^1.0.0","@drftgyhuji7npm/impedit-omnis-molestiae-dolores":"^1.0.0","@drftgyhuji7npm/iure-possimus-nihil-tempore":"^1.0.0","@drftgyhuji7npm/laboriosam-molestias-quo-quia":"^1.0.0","@drftgyhuji7npm/magni-eaque-quo-tempore":"^1.0.0","@drftgyhuji7npm/natus-praesentium-nisi-praesentium":"^1.0.0","@drftgyhuji7npm/necessitatibus-necessitatibus-nulla-ducimus":"^1.0.0","@drftgyhuji7npm/nisi-unde-debitis-porro":"^1.0.0","@drftgyhuji7npm/perspiciatis-quis-ducimus-maiores":"^1.0.0","@drftgyhuji7npm/quasi-reprehenderit-dolore-deserunt":"^1.0.0","@drftgyhuji7npm/rem-sint-necessitatibus-possimus":"^1.0.0","@drftgyhuji7npm/repellendus-eum-et-itaque":"^1.0.0","@drftgyhuji7npm/temporibus-omnis-modi-ipsa":"^1.0.0","@drftgyhuji7npm/vitae-rerum-dignissimos-eos":"^1.0.0","@drftgyhuji7npm/voluptas-temporibus-cupiditate-cum":"^1.0.0","@drftgyhuji7npm/voluptatibus-numquam-neque-veritatis":"^1.0.0","@drftgyhuji7npm/voluptatum-molestiae-aliquid-ullam":"^1.0.0","@omegion1npm/quisquam-maiores-provident":"^1.0.0","@povsicoenpm/non-rerum-sequi":"^1.0.0","@rtyughnnpm/eligendi-enim-voluptate":"^1.0.0"},"keywords":["styleguide","opener","validation","call-bind","react-hook-form","cmd","findLastIndex","es-abstract","gestures","nope","tap","Symbol.toStringTag","nested css","byteLength","trimLeft","ECMAScript 2021","accessor","glob","ava","transpile","electron","fast-clone","typedarrays","js","link","react-hooks","ES2019","drop","search","up","json-schema","once","rfc4122","Symbol","style","robust","utilities","positive","Object.keys","airbnb","awesomesauce","json-schema-validation","connect","Uint32Array","preserve-symlinks","bundler","regex","value","point-free","interrupts","pipe","toArray","view","testing","hasOwn","stream","hookform","mobile","core-js","url","set","io-ts","colour","karma","es2015","length","batch","css","parents","validate","multi-package","ES2017","width","module","shell","assertion","hash","pyyaml","isConcatSpreadable","Object.assign","error-handling","es2017","codes","drag","stylesheet","coercible","remove","traverse","Array.prototype.flatten","command-line","bluebird","writable","jsx","curl","error","whatwg","slice","Array.prototype.flatMap","time","characters","css nesting","Microsoft","rgb","handlers","WebSockets","protobuf","TypeBox","variables in css","callbind","node","deep-copy","input","every","performant","compiler","sequence","regular expression","app","syntax","extend","ponyfill","fsevents","crypt","cjk","debugger","tacit","password","bundling","a11y","forms","wget","loading","package manager","default","BigInt64Array","descriptors","RxJS","events","deterministic","obj","datastructure","wrap","ECMAScript 2017","dependencies","flat","require","character","regular","String.prototype.matchAll","lru","concurrency","macos","rangeerror","busy","patch","query","postcss-plugin","spring","matches","streams","Stream","typeof","language","cache","break","sigint","create","pure","internal slot","throat","TypeScript","wordwrap","core","eventDispatcher","mime","Float64Array","runtime","open","serializer","typeerror","logger","sigterm","es2018","tslib","columns","validator","limited","serialization","efficient","es2016","gdpr","number","ECMAScript 2019","xss","guid","request","Int32Array","RegExp.prototype.flags","fast-deep-clone","form","util.inspect","browserlist","shim","CSSStyleDeclaration","quote","symlinks","scheme-validation","framework","dir","less compiler","eventEmitter","copy","ecmascript","modules","rm -fr","equal","group","descriptor","structuredClone","mixins","install","jQuery","hardlinks","linewrap","reuse","setter","optimist","packages","Array.prototype.filter","joi","sort","RegExp#flags","telephone","environment","Float32Array","argument","inference","http","walking","css-in-js","reducer","real-time","filter","negative","jsonschema","queueMicrotask","promise","getintrinsic","names","dom","sorted","Map","sameValueZero","package","css variable","stringify","make dir","move","extension","URL","yaml","scheme","includes","censor","jsonpath","babel","commander","assign","Object.fromEntries","CSS","shared","fastcopy","Array.prototype.includes","exit-code","intrinsic","typed array","compile less","Int16Array","debug","encryption","WeakSet","ratelimit","opens","reduce","serialize","iteration","jwt","weakmap","flatten","ast","protocol-buffers","libphonenumber","korean","functional","watcher","warning","Underscore","chai","watching","ender","const","preprocessor","fixed-width","redux","ES","JSON-Schema","code points","popmotion","gradients css3","clone","fast-deep-copy","collection.es6","react-testing-library","argparse","settings","0","rm -rf","is","ECMAScript 2016","args","omit","path","ECMAScript 7","less css","three","symbols","readablestream","mkdirp","findLast","middleware","buffer","bound","signals","resolve","dataView","urls","inspect","mkdir","xdg-open","class-validator","RFC-6455","typedarray","ramda","find","ECMAScript 2020","task","prune","es","Promise","concatMap","dom-testing-library","name","-0","iterate","match","emit","types","child","ES6","Set","javascript","trimEnd","defineProperty","_.extend","log","ajax","crypto","regexp","toobject","expression","Observable","check","getPrototypeOf","eslintconfig","ie","offset","rate","push","exe","accessibility","minimal","tools","vest","key","zero","call-bound","functions","lesscss","apollo","limit","user-streams","column","yup","call","Push","Array.prototype.flat","jest","indicator","bcrypt","flag","look-up","ECMAScript 2023","ES2023","Function.prototype.name","progress","shrinkwrap","irq","Array.prototype.findLastIndex","array","immutable","es8","metadata","ECMAScript 2015","ES8","$.extend","plugin","pose","es5","authentication","flatMap","harmony","find-up","3d","eslintplugin","Observables","helpers","linux","typed","ascii","asserts","cors","console","process","await","tape","getopt","ES2021","idle","regular expressions","phone","map","persistent","ajv","picomatch","api","estree","banner","classname","ArrayBuffer.prototype.slice","optimizer","fastclone","babel-core","getOwnPropertyDescriptor","immer","color","some","uninstall","buffers","graphql","full","toolkit","trim","es7","fullwidth"],"repository":{"type":"git","url":"git+https://github.com/drftgyhuji7npm/qui-eos-molestiae.git"},"homepage":"https://github.com/drftgyhuji7npm/qui-eos-molestiae/#readme","bugs":{"url":"https://github.com/drftgyhuji7npm/qui-eos-molestiae/issues"},"packageManager":"yarn@4.1.1","_id":"@drftgyhuji7npm/qui-eos-molestiae@1.0.0","gitHead":"71dccb8964babfbac75e5c74bbc8797cd84e1268","_nodeVersion":"20.12.2","_npmVersion":"10.5.0","dist":{"integrity":"sha512-AvoH1M/c3lgWMzx3ubwkCnhEjEOk4Y5eyzMb73yVTVjsAW8JjZpZegfEvnRhrRx6p7SWwhfnb3NRWp9hpjN8qw==","shasum":"470a00c81b33f3a72c3785feec40526dc157145c","tarball":"https://registry.npmjs.org/@drftgyhuji7npm/qui-eos-molestiae/-/qui-eos-molestiae-1.0.0.tgz","fileCount":10,"unpackedSize":23817,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZRMRZuJbM3oiRhZ8fQcE6qpJaAvG4Ml5AqQ/iQLRX+wIga/K/hneNTeiZ3eLsBvh1Iv1aXsvgVc7aLsyUVte0oD8="}]},"_npmUser":{"name":"thidong8461","email":"thidong8461@gmail.com"},"directories":{},"maintainers":[{"name":"thidong8461","email":"thidong8461@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qui-eos-molestiae_1.0.0_1714042500313_0.17772607260017748"},"_hasShrinkwrap":false}},"time":{"created":"2024-04-25T10:55:00.237Z","1.0.0":"2024-04-25T10:55:00.471Z","modified":"2024-04-25T10:55:00.787Z"},"maintainers":[{"name":"thidong8461","email":"thidong8461@gmail.com"}],"description":"To read & normalize RSS/ATOM/JSON feed data.","homepage":"https://github.com/drftgyhuji7npm/qui-eos-molestiae/#readme","keywords":["styleguide","opener","validation","call-bind","react-hook-form","cmd","findLastIndex","es-abstract","gestures","nope","tap","Symbol.toStringTag","nested css","byteLength","trimLeft","ECMAScript 2021","accessor","glob","ava","transpile","electron","fast-clone","typedarrays","js","link","react-hooks","ES2019","drop","search","up","json-schema","once","rfc4122","Symbol","style","robust","utilities","positive","Object.keys","airbnb","awesomesauce","json-schema-validation","connect","Uint32Array","preserve-symlinks","bundler","regex","value","point-free","interrupts","pipe","toArray","view","testing","hasOwn","stream","hookform","mobile","core-js","url","set","io-ts","colour","karma","es2015","length","batch","css","parents","validate","multi-package","ES2017","width","module","shell","assertion","hash","pyyaml","isConcatSpreadable","Object.assign","error-handling","es2017","codes","drag","stylesheet","coercible","remove","traverse","Array.prototype.flatten","command-line","bluebird","writable","jsx","curl","error","whatwg","slice","Array.prototype.flatMap","time","characters","css nesting","Microsoft","rgb","handlers","WebSockets","protobuf","TypeBox","variables in css","callbind","node","deep-copy","input","every","performant","compiler","sequence","regular expression","app","syntax","extend","ponyfill","fsevents","crypt","cjk","debugger","tacit","password","bundling","a11y","forms","wget","loading","package manager","default","BigInt64Array","descriptors","RxJS","events","deterministic","obj","datastructure","wrap","ECMAScript 2017","dependencies","flat","require","character","regular","String.prototype.matchAll","lru","concurrency","macos","rangeerror","busy","patch","query","postcss-plugin","spring","matches","streams","Stream","typeof","language","cache","break","sigint","create","pure","internal slot","throat","TypeScript","wordwrap","core","eventDispatcher","mime","Float64Array","runtime","open","serializer","typeerror","logger","sigterm","es2018","tslib","columns","validator","limited","serialization","efficient","es2016","gdpr","number","ECMAScript 2019","xss","guid","request","Int32Array","RegExp.prototype.flags","fast-deep-clone","form","util.inspect","browserlist","shim","CSSStyleDeclaration","quote","symlinks","scheme-validation","framework","dir","less compiler","eventEmitter","copy","ecmascript","modules","rm -fr","equal","group","descriptor","structuredClone","mixins","install","jQuery","hardlinks","linewrap","reuse","setter","optimist","packages","Array.prototype.filter","joi","sort","RegExp#flags","telephone","environment","Float32Array","argument","inference","http","walking","css-in-js","reducer","real-time","filter","negative","jsonschema","queueMicrotask","promise","getintrinsic","names","dom","sorted","Map","sameValueZero","package","css variable","stringify","make dir","move","extension","URL","yaml","scheme","includes","censor","jsonpath","babel","commander","assign","Object.fromEntries","CSS","shared","fastcopy","Array.prototype.includes","exit-code","intrinsic","typed array","compile less","Int16Array","debug","encryption","WeakSet","ratelimit","opens","reduce","serialize","iteration","jwt","weakmap","flatten","ast","protocol-buffers","libphonenumber","korean","functional","watcher","warning","Underscore","chai","watching","ender","const","preprocessor","fixed-width","redux","ES","JSON-Schema","code points","popmotion","gradients css3","clone","fast-deep-copy","collection.es6","react-testing-library","argparse","settings","0","rm -rf","is","ECMAScript 2016","args","omit","path","ECMAScript 7","less css","three","symbols","readablestream","mkdirp","findLast","middleware","buffer","bound","signals","resolve","dataView","urls","inspect","mkdir","xdg-open","class-validator","RFC-6455","typedarray","ramda","find","ECMAScript 2020","task","prune","es","Promise","concatMap","dom-testing-library","name","-0","iterate","match","emit","types","child","ES6","Set","javascript","trimEnd","defineProperty","_.extend","log","ajax","crypto","regexp","toobject","expression","Observable","check","getPrototypeOf","eslintconfig","ie","offset","rate","push","exe","accessibility","minimal","tools","vest","key","zero","call-bound","functions","lesscss","apollo","limit","user-streams","column","yup","call","Push","Array.prototype.flat","jest","indicator","bcrypt","flag","look-up","ECMAScript 2023","ES2023","Function.prototype.name","progress","shrinkwrap","irq","Array.prototype.findLastIndex","array","immutable","es8","metadata","ECMAScript 2015","ES8","$.extend","plugin","pose","es5","authentication","flatMap","harmony","find-up","3d","eslintplugin","Observables","helpers","linux","typed","ascii","asserts","cors","console","process","await","tape","getopt","ES2021","idle","regular expressions","phone","map","persistent","ajv","picomatch","api","estree","banner","classname","ArrayBuffer.prototype.slice","optimizer","fastclone","babel-core","getOwnPropertyDescriptor","immer","color","some","uninstall","buffers","graphql","full","toolkit","trim","es7","fullwidth"],"repository":{"type":"git","url":"git+https://github.com/drftgyhuji7npm/qui-eos-molestiae.git"},"author":{"name":"drftgyhuji7"},"bugs":{"url":"https://github.com/drftgyhuji7npm/qui-eos-molestiae/issues"},"license":"MIT","readme":"# feed-extractor\n\nTo read & normalize RSS/ATOM/JSON feed data.\n\n[![npm version](https://badge.fury.io/js/@extractus%2Ffeed-extractor.svg)](https://badge.fury.io/js/@extractus%2Ffeed-extractor)\n![CodeQL](https://github.com/drftgyhuji7npm/qui-eos-molestiae/workflows/CodeQL/badge.svg)\n![CI test](https://github.com/drftgyhuji7npm/qui-eos-molestiae/workflows/ci-test/badge.svg)\n[![Coverage Status](https://img.shields.io/coveralls/github/drftgyhuji7npm/qui-eos-molestiae)](https://coveralls.io/github/drftgyhuji7npm/qui-eos-molestiae?branch=main)\n\n(This library is derived from [feed-reader](https://www.npmjs.com/package/feed-reader) renamed.)\n\n## Demo\n\n- [Give it a try!](https://extractor-demos.pages.dev/feed-extractor)\n- [Example FaaS](https://extractus.deno.dev/extract?apikey=rn0wbHos2e73W6ghQf705bdF&type=feed&url=https://news.google.com/rss)\n\n## Install & Usage\n\n### Node.js\n\n```bash\nnpm i @drftgyhuji7npm/qui-eos-molestiae\n```\n\n```ts\nimport { extract } from '@drftgyhuji7npm/qui-eos-molestiae'\n\n// extract a RSS\nconst result = await extract('https://news.google.com/rss')\nconsole.log(result)\n```\n\n### Deno\n\n```ts\n// deno < 1.28\nimport { extract } from 'https://esm.sh/@drftgyhuji7npm/qui-eos-molestiae'\n\n// deno > 1.28\nimport { extract } from 'npm:@drftgyhuji7npm/qui-eos-molestiae'\n```\n\n### Browser\n\n```ts\nimport { extract } from 'https://esm.sh/@drftgyhuji7npm/qui-eos-molestiae'\n```\n\nPlease check [the examples](https://github.com/drftgyhuji7npm/qui-eos-molestiae/tree/main/examples) for reference.\n\n\n## Automate RSS feed extraction with GitHub Actions\n\n[RSS Feed Fetch Action](https://github.com/Promptly-Technologies-LLC/rss-fetch-action) is a GitHub Action designed to automate the fetching of RSS feeds.\nIt fetches an RSS feed from a given URL and saves it to a specified file in your GitHub repository.\nThis action is particularly useful for populating content on GitHub Pages websites or other static site generators.\n\n\n## CJS Deprecated\n\nCJS is deprecated for this package.  When calling `require('@drftgyhuji7npm/qui-eos-molestiae')` a deprecation warning is now logged.  You should update your code to use the ESM export.\n\n- You can ignore this warning via the environment variable `FEED_EXTRACTOR_CJS_IGNORE_WARNING=true`\n- To see where the warning is coming from you can set the environment variable `FEED_EXTRACTOR_CJS_TRACE_WARNING=true`\n\n\n## APIs\n\n- [extract()](#extract)\n- [extractFromJson()](#extractfromjson)\n- [extractFromXml()](#extractfromxml)\n\n#### Note:\n\n- *Old method `read()` has been marked as deprecated and will be removed in next major release.*\n\n---\n\n### `extract()`\n\nLoad and extract feed data from given RSS/ATOM/JSON source. Return a Promise object.\n\n#### Syntax\n\n```ts\nextract(String url)\nextract(String url, Object parserOptions)\nextract(String url, Object parserOptions, Object fetchOptions)\n```\n\nExample:\n\n```js\nimport { extract } from '@drftgyhuji7npm/qui-eos-molestiae'\n\nconst result = await extract('https://news.google.com/atom')\nconsole.log(result)\n```\n\nWithout any options, the result should have the following structure:\n\n```ts\n{\n  title: String,\n  link: String,\n  description: String,\n  generator: String,\n  language: String,\n  published: ISO Date String,\n  entries: Array[\n    {\n      id: String,\n      title: String,\n      link: String,\n      description: String,\n      published: ISO Datetime String\n    },\n    // ...\n  ]\n}\n```\n\n#### Parameters\n\n##### `url` *required*\n\nURL of a valid feed source\n\nFeed content must be accessible and conform one of the following standards:\n\n  - [RSS Feed](https://www.rssboard.org/rss-specification)\n    - [RDF Feed](https://web.resource.org/rss/1.0/spec)\n  - [ATOM Feed](https://datatracker.ietf.org/doc/html/rfc5023)\n  - [JSON Feed](https://www.jsonfeed.org/version/1.1/)\n\n##### `parserOptions` *optional*\n\nObject with all or several of the following properties:\n\n  - `normalization`: Boolean, normalize feed data or keep original. Default `true`.\n  - `useISODateFormat`: Boolean, convert datetime to ISO format. Default `true`.\n  - `descriptionMaxLen`: Number, to truncate description. Default `250` characters. Set to `0` = no truncation.\n  - `xmlParserOptions`: Object, used by xml parser, view [fast-xml-parser's docs](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md)\n  - `getExtraFeedFields`: Function, to get more fields from feed data\n  - `getExtraEntryFields`: Function, to get more fields from feed entry data\n  - `baseUrl`: URL string, to absolutify the links within feed content\n\nFor example:\n\n```ts\nimport { extract } from '@drftgyhuji7npm/qui-eos-molestiae'\n\nawait extract('https://news.google.com/atom', {\n  useISODateFormat: false\n})\n\nawait extract('https://news.google.com/rss', {\n  useISODateFormat: false,\n  getExtraFeedFields: (feedData) => {\n    return {\n      subtitle: feedData.subtitle || ''\n    }\n  },\n  getExtraEntryFields: (feedEntry) => {\n    const {\n      enclosure,\n      category\n    } = feedEntry\n    return {\n      enclosure: {\n        url: enclosure['@_url'],\n        type: enclosure['@_type'],\n        length: enclosure['@_length']\n      },\n      category: isString(category) ? category : {\n        text: category['@_text'],\n        domain: category['@_domain']\n      }\n    }\n  }\n})\n```\n\n##### `fetchOptions` *optional*\n\n`fetchOptions` is an object that can have the following properties:\n\n- `headers`: to set request headers\n- `proxy`: another endpoint to forward the request to\n- `agent`: a HTTP proxy agent\n- `signal`: AbortController signal or AbortSignal timeout to terminate the request\n\nFor example, you can use this param to set request headers to fetch as below:\n\n```js\nimport { extract } from '@drftgyhuji7npm/qui-eos-molestiae'\n\nconst url = 'https://news.google.com/rss'\nawait extract(url, null, {\n  headers: {\n    'user-agent': 'Opera/9.60 (Windows NT 6.0; U; en) Presto/2.1.1'\n  }\n})\n```\n\nYou can also specify a proxy endpoint to load remote content, instead of fetching directly.\n\nFor example:\n\n```js\nimport { extract } from '@drftgyhuji7npm/qui-eos-molestiae'\n\nconst url = 'https://news.google.com/rss'\n\nawait extract(url, null, {\n  headers: {\n    'user-agent': 'Opera/9.60 (Windows NT 6.0; U; en) Presto/2.1.1'\n  },\n  proxy: {\n    target: 'https://your-secret-proxy.io/loadXml?url=',\n    headers: {\n      'Proxy-Authorization': 'Bearer YWxhZGRpbjpvcGVuc2VzYW1l...'\n    }\n  }\n})\n```\n\nPassing requests to proxy is useful while running `@drftgyhuji7npm/qui-eos-molestiae` on browser.\nView `examples/browser-feed-reader` as reference example.\n\nAnother way to work with proxy is use `agent` option instead of `proxy` as below:\n\n```js\nimport { extract } from '@drftgyhuji7npm/qui-eos-molestiae'\n\nimport { HttpsProxyAgent } from 'https-proxy-agent'\n\nconst proxy = 'http://abc:RaNdoMpasswORd_country-France@proxy.packetstream.io:31113'\n\nconst url = 'https://news.google.com/rss'\n\nconst feed = await extract(url, null, {\n  agent: new HttpsProxyAgent(proxy),\n})\nconsole.log('Run feed-extractor with proxy:', proxy)\nconsole.log(feed)\n```\n\nFor more info about [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent), check [its repo](https://github.com/TooTallNate/proxy-agents).\n\nBy default, there is no request timeout. You can use the option `signal` to cancel request at the right time.\n\nThe common way is to use AbortControler:\n\n```js\nconst controller = new AbortController()\n\n// stop after 5 seconds\nsetTimeout(() => {\n  controller.abort()\n}, 5000)\n\nconst data = await extract(url, null, {\n  signal: controller.signal,\n})\n```\n\nA newer solution is AbortSignal's `timeout()` static method:\n\n```js\n// stop after 5 seconds\nconst data = await extract(url, null, {\n  signal: AbortSignal.timeout(5000),\n})\n```\n\nFor more info:\n\n- [AbortController constructor](https://developer.mozilla.org/en-US/docs/Web/API/AbortController)\n- [AbortSignal: timeout() static method](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static)\n\n\n### `extractFromJson()`\n\nExtract feed data from JSON string.\nReturn an object which contains feed data.\n\n#### Syntax\n\n```ts\nextractFromJson(String json)\nextractFromJson(String json, Object parserOptions)\n```\n\nExample:\n\n```js\nimport { extractFromJson } from '@drftgyhuji7npm/qui-eos-molestiae'\n\nconst url = 'https://www.jsonfeed.org/feed.json'\n// this resource provides data in JSON feed format\n// so we fetch remote content as json\n// then pass to feed-extractor\nconst res = await fetch(url)\nconst json = await res.json()\n\nconst feed = extractFromJson(json)\nconsole.log(feed)\n```\n\n#### Parameters\n\n##### `json` *required*\n\nJSON string loaded from JSON feed resource.\n\n##### `parserOptions` *optional*\n\nSee [parserOptions](#parseroptions-optional) above.\n\n\n### `extractFromXml()`\n\nExtract feed data from XML string.\nReturn an object which contains feed data.\n\n#### Syntax\n\n```ts\nextractFromXml(String xml)\nextractFromXml(String xml, Object parserOptions)\n```\n\nExample:\n\n```js\nimport { extractFromXml } from '@drftgyhuji7npm/qui-eos-molestiae'\n\nconst url = 'https://news.google.com/atom'\n// this resource provides data in ATOM feed format\n// so we fetch remote content as text\n// then pass to feed-extractor\nconst res = await fetch(url)\nconst xml = await res.text()\n\nconst feed = extractFromXml(xml)\nconsole.log(feed)\n```\n\n#### Parameters\n\n##### `xml` *required*\n\nXML string loaded from RSS/ATOM feed resource.\n\n##### `parserOptions` *optional*\n\nSee [parserOptions](#parseroptions-optional) above.\n\n\n## Test\n\n```bash\ngit clone https://github.com/drftgyhuji7npm/qui-eos-molestiae.git\ncd feed-extractor\npnpm i\npnpm test\n```\n\n![feed-extractor-test.png](https://i.imgur.com/2b5xt6S.png)\n\n\n## Quick evaluation\n\n```bash\ngit clone https://github.com/drftgyhuji7npm/qui-eos-molestiae.git\ncd feed-extractor\npnpm i\npnpm eval https://news.google.com/rss\n```\n\n## License\nThe MIT License (MIT)\n\n## Support the project\n\nIf you find value from this open source project, you can support in the following ways:\n\n- Give it a star ⭐\n- Buy me a coffee: https://paypal.me/ndaidong 🍵\n- Subscribe [Feed Reader service](https://rapidapi.com/pwshub-pwshub-default/api/feed-reader1/) on RapidAPI 😉\n\nThank you.\n\n---\n","readmeFilename":"README.md"}