Compare commits

...
This repository has been archived on 2023-10-27. You can view files and clone it, but cannot push or open issues or pull requests.

8 Commits

Author SHA1 Message Date
360dc102bb ee
All checks were successful
CI Pipeline / build (20.x) (push) Successful in 36s
2023-10-19 12:00:47 +01:00
0c643e9b87 e
Some checks failed
CI Pipeline / build (20.x) (push) Failing after 29s
2023-10-19 11:59:09 +01:00
a9f7d70cd0 fix package name
Some checks failed
CI Pipeline / build (20.x) (push) Failing after 32s
2023-10-19 11:57:40 +01:00
07777a74f2 ci stuff
Some checks failed
CI Pipeline / build (20.x) (push) Failing after 36s
2023-10-19 11:56:09 +01:00
d5382860f3 fix ci
Some checks failed
CI Pipeline / build (20.x) (push) Has been cancelled
2023-10-19 11:55:49 +01:00
73601127b2 7
Some checks failed
CI Pipeline / build (20.x) (push) Failing after 51s
2023-10-19 11:54:02 +01:00
eb86e3e4c5 gitea workflow
Some checks failed
CI Pipeline / build (20.x) (push) Failing after 27s
2023-10-19 11:52:43 +01:00
Randall
51e15ad046 Stop testing on Node v16, start testing on Node v21 2023-10-17 19:00:13 -04:00
4 changed files with 57 additions and 46 deletions

23
.gitea/workflows/ci.yml Normal file

@ -0,0 +1,23 @@
name: CI Pipeline
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-22.04
strategy:
matrix:
node-version: [20.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: "https://registry.npmjs.org"
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

@ -1,21 +0,0 @@
name: CI Pipeline
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x, 18.x, 20.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run lint
- run: npm run coverage

@ -1,5 +1,7 @@
# node-fetch-cache # node-fetch-cache
Forked from: <https://github.com/mistval/node-fetch-cache>
node-fetch with caching of responses. node-fetch with caching of responses.
The first fetch with any given arguments will result in an HTTP request and any subsequent fetch with the same arguments will read the response from the cache. The first fetch with any given arguments will result in an HTTP request and any subsequent fetch with the same arguments will read the response from the cache.
@ -11,11 +13,11 @@ By default responses are cached in memory, but you can also cache to files on di
Require it and use it the same way you would use node-fetch: Require it and use it the same way you would use node-fetch:
```js ```js
import fetch from 'node-fetch-cache'; import fetch from "node-fetch-cache";
fetch('http://google.com') fetch("http://google.com")
.then(response => response.text()) .then((response) => response.text())
.then(text => console.log(text)); .then((text) => console.log(text));
``` ```
The next time you `fetch('http://google.com')`, the response will be returned from the cache. No HTTP request will be made. The next time you `fetch('http://google.com')`, the response will be returned from the cache. No HTTP request will be made.
@ -33,17 +35,18 @@ This function can be used to eject the response from the cache, so that the next
This module caches ALL responses, even those with 4xx and 5xx response statuses. You can use this function to uncache such responses if desired. For example: This module caches ALL responses, even those with 4xx and 5xx response statuses. You can use this function to uncache such responses if desired. For example:
```js ```js
import fetch from 'node-fetch-cache'; import fetch from "node-fetch-cache";
fetch('http://google.com') fetch("http://google.com")
.then(async response => { .then(async (response) => {
if (!response.ok) { if (!response.ok) {
await response.ejectFromCache(); await response.ejectFromCache();
throw new Error('Non-okay response from google.com'); throw new Error("Non-okay response from google.com");
} else { } else {
return response.text(); return response.text();
} }
}).then(text => console.log(text)); })
.then((text) => console.log(text));
``` ```
## Cache Customization ## Cache Customization
@ -57,7 +60,7 @@ This is the default cache delegate. It caches responses in-process in a POJO.
Usage: Usage:
```js ```js
import { fetchBuilder, MemoryCache } from 'node-fetch-cache'; import { fetchBuilder, MemoryCache } from "node-fetch-cache";
const fetch = fetchBuilder.withCache(new MemoryCache(options)); const fetch = fetchBuilder.withCache(new MemoryCache(options));
``` ```
@ -69,7 +72,7 @@ Options:
} }
``` ```
Note that by default (if you don't use `withCache()`) a **shared** MemoryCache will be used (you can import this module in multiple files and they will all share the same cache). If you instantiate and provide a `new MemoryCache()` as shown above however, the cache is *NOT* shared unless you explicitly pass it around and pass it into `withCache()` in each of your source files. Note that by default (if you don't use `withCache()`) a **shared** MemoryCache will be used (you can import this module in multiple files and they will all share the same cache). If you instantiate and provide a `new MemoryCache()` as shown above however, the cache is _NOT_ shared unless you explicitly pass it around and pass it into `withCache()` in each of your source files.
### FileSystemCache ### FileSystemCache
@ -78,7 +81,7 @@ Cache to a directory on disk. This allows the cache to survive the process exiti
Usage: Usage:
```js ```js
import { fetchBuilder, FileSystemCache } from 'node-fetch-cache'; import { fetchBuilder, FileSystemCache } from "node-fetch-cache";
const fetch = fetchBuilder.withCache(new FileSystemCache(options)); const fetch = fetchBuilder.withCache(new FileSystemCache(options));
``` ```
@ -118,10 +121,12 @@ Streams don't quite play nice with the concept of caching based on request chara
Requests with the same cache key are queued. For example, you might wonder if making the same request 100 times simultaneously would result in 100 HTTP requests: Requests with the same cache key are queued. For example, you might wonder if making the same request 100 times simultaneously would result in 100 HTTP requests:
```js ```js
import fetch from 'node-fetch-cache'; import fetch from "node-fetch-cache";
await Promise.all( await Promise.all(
Array(100).fill().map(() => fetch('https://google.com')), Array(100)
.fill()
.map(() => fetch("https://google.com"))
); );
``` ```
@ -132,10 +137,10 @@ The answer is no. Only one request would be made, and 99 of the `fetch()`s will
The HTTP standard describes a [Cache-Control request header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#request_directives) to control certain aspects of cache behavior. Node-fetch ignores these, but node-fetch-cache respects the `Cache-Control: only-if-cached` directive. When `only-if-cached` is specified, node-fetch-cache will return `undefined` if there is no cached response. No HTTP request will be made. For example: The HTTP standard describes a [Cache-Control request header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#request_directives) to control certain aspects of cache behavior. Node-fetch ignores these, but node-fetch-cache respects the `Cache-Control: only-if-cached` directive. When `only-if-cached` is specified, node-fetch-cache will return `undefined` if there is no cached response. No HTTP request will be made. For example:
```js ```js
import fetch from 'node-fetch-cache'; import fetch from "node-fetch-cache";
const response = await fetch('https://google.com', { const response = await fetch("https://google.com", {
headers: { 'Cache-Control': 'only-if-cached' } headers: { "Cache-Control": "only-if-cached" },
}); });
if (response === undefined) { if (response === undefined) {
@ -150,12 +155,12 @@ Note that this is slightly different from browser fetch, which returns a `504 Ga
This module exports a `getCacheKey()` function to calculate a cache key string from request parameters, which may be useful for enabling some advanced use cases (especially if you want to call cache functions directly). Call `getCacheKey()` exactly like you would call `fetch()`. This module exports a `getCacheKey()` function to calculate a cache key string from request parameters, which may be useful for enabling some advanced use cases (especially if you want to call cache functions directly). Call `getCacheKey()` exactly like you would call `fetch()`.
```js ```js
import { fetchBuilder, MemoryCache, getCacheKey } from 'node-fetch-cache'; import { fetchBuilder, MemoryCache, getCacheKey } from "node-fetch-cache";
const cache = new MemoryCache(); const cache = new MemoryCache();
const fetch = fetchBuilder.withCache(cache); const fetch = fetchBuilder.withCache(cache);
const rawCacheData = await cache.get(getCacheKey('https://google.com')); const rawCacheData = await cache.get(getCacheKey("https://google.com"));
``` ```
## Bugs / Help / Feature Requests / Contributing ## Bugs / Help / Feature Requests / Contributing

@ -1,9 +1,13 @@
{ {
"name": "node-fetch-cache", "name": "@fascinated/node-fetch-cache",
"version": "3.1.3", "version": "3.1.3",
"description": "node-fetch with caching.", "description": "node-fetch with caching.",
"main": "src/index.js", "main": "src/index.js",
"type": "module", "type": "module",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"exports": { "exports": {
"import": "./src/index.js", "import": "./src/index.js",
"require": "./commonjs/wrapper.cjs" "require": "./commonjs/wrapper.cjs"
@ -12,13 +16,13 @@
"buildcjs": "rollup src/index.js --file commonjs/index.cjs --format cjs", "buildcjs": "rollup src/index.js --file commonjs/index.cjs --format cjs",
"test": "npm run lintfix && npm run buildcjs && mocha --timeout 10000 --exit", "test": "npm run lintfix && npm run buildcjs && mocha --timeout 10000 --exit",
"coverage": "nyc --reporter=lcov --reporter=text npm test", "coverage": "nyc --reporter=lcov --reporter=text npm test",
"lint": "./node_modules/.bin/eslint .", "lint": "eslint .",
"lintfix": "./node_modules/.bin/eslint . --fix", "lintfix": "eslint . --fix",
"prepublishOnly": "npm test" "prepublishOnly": "npm test"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/mistval/node-fetch-cache.git" "url": "git+https://git.fascinated.cc/Fascinated/node-fetch-cache.git"
}, },
"keywords": [ "keywords": [
"node", "node",
@ -30,9 +34,9 @@
"author": "mistval", "author": "mistval",
"license": "MIT", "license": "MIT",
"bugs": { "bugs": {
"url": "https://github.com/mistval/node-fetch-cache/issues" "url": "https://git.fascinated.cc/Fascinated/node-fetch-cache/issues"
}, },
"homepage": "https://github.com/mistval/node-fetch-cache#readme", "homepage": "https://git.fascinated.cc/Fascinated/node-fetch-cache#readme",
"devDependencies": { "devDependencies": {
"eslint": "^8.9.0", "eslint": "^8.9.0",
"eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-base": "^15.0.0",