Replace dependencies where possible (#14)

* refactor: remove axios, use fetch

* refactor: remove md5

* fix: handle failed fetches
This commit is contained in:
Marc Cataford 2021-08-02 00:52:01 -04:00 committed by GitHub
parent 185f405fe2
commit 5c3da0a2f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 50 deletions

View file

@ -40,9 +40,7 @@
"dependencies": { "dependencies": {
"@material-ui/core": "^4.12.1", "@material-ui/core": "^4.12.1",
"@material-ui/icons": "^4.11.2", "@material-ui/icons": "^4.11.2",
"axios": "^0.21.1",
"htmlparser2": "^6.1.0", "htmlparser2": "^6.1.0",
"md5": "^2.3.0",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2" "react-dom": "^17.0.2"
} }

View file

@ -1,4 +1,3 @@
import axios from 'axios'
import { parseFeed } from 'htmlparser2' import { parseFeed } from 'htmlparser2'
import type { Feed } from '../types' import type { Feed } from '../types'
@ -65,12 +64,16 @@ export default async function fetchFeeds(
if (!forceRefetch && lastPull > getRefetchThreshold()) if (!forceRefetch && lastPull > getRefetchThreshold())
return storedFeedData return storedFeedData
const response = await axios.get('/.netlify/functions/rss-proxy', { const response = await fetch(
params: { url }, `/.netlify/functions/rss-proxy?url=${url}`,
}) )
if (!response.ok) return storedFeedData
const responseData = await response.text()
try { try {
const newFeedData = parseFeed(response.data) const newFeedData = parseFeed(responseData)
const newFeed = processFeedXML(newFeedData) const newFeed = processFeedXML(newFeedData)
const mergedFeeds = storedFeedData const mergedFeeds = storedFeedData
? mergeFeeds(storedFeedData, newFeed) ? mergeFeeds(storedFeedData, newFeed)
@ -87,5 +90,5 @@ export default async function fetchFeeds(
}), }),
) )
return feeds return feeds.filter((feed) => feed)
} }

View file

@ -1,10 +1,12 @@
import md5 from 'md5'
import type { RSSData, Settings } from '../types' import type { RSSData, Settings } from '../types'
const SETTINGS_KEY = 'settings' const SETTINGS_KEY = 'settings'
const RSS_DATA_KEY_PREFIX = 'savedItems_' const RSS_DATA_KEY_PREFIX = 'savedItems_'
function cacheKeyFromURL(url: string): string {
return url.replace(/^https?:\/\//, '').replace(/\/$/, '')
}
function storeToLocal(key: string, data): void { function storeToLocal(key: string, data): void {
window.localStorage.setItem(key, JSON.stringify(data)) window.localStorage.setItem(key, JSON.stringify(data))
} }
@ -26,11 +28,11 @@ export function restoreSettings(): Settings {
} }
export function storeRssData(url: string, items: Item[]): void { export function storeRssData(url: string, items: Item[]): void {
const key = RSS_DATA_KEY_PREFIX + md5(url) const key = RSS_DATA_KEY_PREFIX + cacheKeyFromURL(url)
storeToLocal(key, items) storeToLocal(key, items)
} }
export function restoreRssData(url: string): RSSData { export function restoreRssData(url: string): RSSData {
const key = RSS_DATA_KEY_PREFIX + md5(url) const key = RSS_DATA_KEY_PREFIX + cacheKeyFromURL(url)
return restoreFromLocal(key) return restoreFromLocal(key)
} }

View file

@ -4793,15 +4793,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"axios@npm:^0.21.1":
version: 0.21.1
resolution: "axios@npm:0.21.1"
dependencies:
follow-redirects: ^1.10.0
checksum: c87915fa0b18c15c63350112b6b3563a3e2ae524d7707de0a73d2e065e0d30c5d3da8563037bc29d4cc1b7424b5a350cb7274fa52525c6c04a615fe561c6ab11
languageName: node
linkType: hard
"axobject-query@npm:^2.2.0": "axobject-query@npm:^2.2.0":
version: 2.2.0 version: 2.2.0
resolution: "axobject-query@npm:2.2.0" resolution: "axobject-query@npm:2.2.0"
@ -5626,13 +5617,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"charenc@npm:0.0.2":
version: 0.0.2
resolution: "charenc@npm:0.0.2"
checksum: 81dcadbe57e861d527faf6dd3855dc857395a1c4d6781f4847288ab23cffb7b3ee80d57c15bba7252ffe3e5e8019db767757ee7975663ad2ca0939bb8fcaf2e5
languageName: node
linkType: hard
"chokidar@npm:^3.0.2": "chokidar@npm:^3.0.2":
version: 3.5.2 version: 3.5.2
resolution: "chokidar@npm:3.5.2" resolution: "chokidar@npm:3.5.2"
@ -6429,13 +6413,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"crypt@npm:0.0.2":
version: 0.0.2
resolution: "crypt@npm:0.0.2"
checksum: baf4c7bbe05df656ec230018af8cf7dbe8c14b36b98726939cef008d473f6fe7a4fad906cfea4062c93af516f1550a3f43ceb4d6615329612c6511378ed9fe34
languageName: node
linkType: hard
"crypto-browserify@npm:^3.12.0": "crypto-browserify@npm:^3.12.0":
version: 3.12.0 version: 3.12.0
resolution: "crypto-browserify@npm:3.12.0" resolution: "crypto-browserify@npm:3.12.0"
@ -8668,7 +8645,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.10.0": "follow-redirects@npm:^1.0.0":
version: 1.14.1 version: 1.14.1
resolution: "follow-redirects@npm:1.14.1" resolution: "follow-redirects@npm:1.14.1"
peerDependenciesMeta: peerDependenciesMeta:
@ -10067,7 +10044,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"is-buffer@npm:^1.1.5, is-buffer@npm:~1.1.6": "is-buffer@npm:^1.1.5":
version: 1.1.6 version: 1.1.6
resolution: "is-buffer@npm:1.1.6" resolution: "is-buffer@npm:1.1.6"
checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707
@ -12317,17 +12294,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"md5@npm:^2.3.0":
version: 2.3.0
resolution: "md5@npm:2.3.0"
dependencies:
charenc: 0.0.2
crypt: 0.0.2
is-buffer: ~1.1.6
checksum: a63cacf4018dc9dee08c36e6f924a64ced735b37826116c905717c41cebeb41a522f7a526ba6ad578f9c80f02cb365033ccd67fe186ffbcc1a1faeb75daa9b6e
languageName: node
linkType: hard
"mdn-data@npm:2.0.14": "mdn-data@npm:2.0.14":
version: 2.0.14 version: 2.0.14
resolution: "mdn-data@npm:2.0.14" resolution: "mdn-data@npm:2.0.14"
@ -15776,7 +15742,6 @@ __metadata:
"@tophat/eslint-import-resolver-require": ^0.1.3 "@tophat/eslint-import-resolver-require": ^0.1.3
"@typescript-eslint/eslint-plugin": ^4.28.3 "@typescript-eslint/eslint-plugin": ^4.28.3
"@typescript-eslint/parser": ^4.28.3 "@typescript-eslint/parser": ^4.28.3
axios: ^0.21.1
eslint: ^7.30.0 eslint: ^7.30.0
eslint-config-prettier: ^8.3.0 eslint-config-prettier: ^8.3.0
eslint-import-resolver-node: ^0.3.4 eslint-import-resolver-node: ^0.3.4
@ -15789,7 +15754,6 @@ __metadata:
eslint-plugin-react-hooks: ^4.2.0 eslint-plugin-react-hooks: ^4.2.0
htmlparser2: ^6.1.0 htmlparser2: ^6.1.0
jest: ^27.0.6 jest: ^27.0.6
md5: ^2.3.0
netlify-cli: ^5.2.3 netlify-cli: ^5.2.3
parcel: ^2.0.0-beta.2 parcel: ^2.0.0-beta.2
prettier: ^2.3.2 prettier: ^2.3.2