@vercel/edge-config
Advanced tools
Comparing version 1.2.0 to 1.2.1-c7712904-20240625135709
@@ -6,3 +6,3 @@ // src/index.ts | ||
var name = "@vercel/edge-config"; | ||
var version = "1.2.0"; | ||
var version = "1.2.1-c7712904-20240625135709"; | ||
@@ -183,102 +183,4 @@ // src/utils/tracing.ts | ||
// src/utils/fetch-with-cached-response.ts | ||
function createResponse(cachedResponseEntry) { | ||
return new Response(cachedResponseEntry.response, { | ||
headers: { | ||
...cachedResponseEntry.headers, | ||
Age: String( | ||
// age header may not be 0 when serving stale content, must be >= 1 | ||
Math.max(1, Math.floor((Date.now() - cachedResponseEntry.time) / 1e3)) | ||
) | ||
}, | ||
status: cachedResponseEntry.status | ||
}); | ||
} | ||
function createHandleStaleIfError(cachedResponseEntry, staleIfError) { | ||
return function handleStaleIfError(response) { | ||
switch (response.status) { | ||
case 500: | ||
case 502: | ||
case 503: | ||
case 504: | ||
return typeof staleIfError === "number" && cachedResponseEntry.time < Date.now() + staleIfError * 1e3 ? createResponse(cachedResponseEntry) : response; | ||
default: | ||
return response; | ||
} | ||
}; | ||
} | ||
function createHandleStaleIfErrorException(cachedResponseEntry, staleIfError) { | ||
return function handleStaleIfError(reason) { | ||
if (typeof staleIfError === "number" && cachedResponseEntry.time < Date.now() + staleIfError * 1e3) { | ||
return createResponse(cachedResponseEntry); | ||
} | ||
throw reason; | ||
}; | ||
} | ||
var cache = /* @__PURE__ */ new Map(); | ||
function extractStaleIfError(cacheControlHeader) { | ||
if (!cacheControlHeader) | ||
return null; | ||
const matched = /stale-if-error=(?<staleIfError>\d+)/i.exec( | ||
cacheControlHeader | ||
); | ||
return (matched == null ? void 0 : matched.groups) ? Number(matched.groups.staleIfError) : null; | ||
} | ||
var fetchWithCachedResponse = trace( | ||
async function fetchWithCachedResponse2(url, options = {}) { | ||
const { headers: customHeaders = new Headers(), ...customOptions } = options; | ||
const authHeader = customHeaders.get("Authorization"); | ||
const cacheKey = `${url},${authHeader || ""}`; | ||
const cachedResponseEntry = cache.get(cacheKey); | ||
if (cachedResponseEntry) { | ||
const { etag: etag2, response: cachedResponse } = cachedResponseEntry; | ||
const headers = new Headers(customHeaders); | ||
headers.set("If-None-Match", etag2); | ||
const staleIfError = extractStaleIfError(headers.get("Cache-Control")); | ||
const res2 = await fetch(url, { | ||
...customOptions, | ||
headers | ||
}).then( | ||
createHandleStaleIfError(cachedResponseEntry, staleIfError), | ||
createHandleStaleIfErrorException(cachedResponseEntry, staleIfError) | ||
); | ||
if (res2.status === 304) { | ||
res2.cachedResponseBody = JSON.parse(cachedResponse); | ||
return res2; | ||
} | ||
const newETag = res2.headers.get("ETag"); | ||
if (res2.ok && newETag) | ||
cache.set(cacheKey, { | ||
etag: newETag, | ||
response: await res2.clone().text(), | ||
headers: Object.fromEntries(res2.headers.entries()), | ||
status: res2.status, | ||
time: Date.now() | ||
}); | ||
return res2; | ||
} | ||
const res = await fetch(url, options); | ||
const etag = res.headers.get("ETag"); | ||
if (res.ok && etag) { | ||
cache.set(cacheKey, { | ||
etag, | ||
response: await res.clone().text(), | ||
headers: Object.fromEntries(res.headers.entries()), | ||
status: res.status, | ||
time: Date.now() | ||
}); | ||
} | ||
return res; | ||
}, | ||
{ | ||
name: "fetchWithCachedResponse", | ||
attributesSuccess(result) { | ||
return { | ||
status: result.status | ||
}; | ||
} | ||
} | ||
); | ||
// src/index.ts | ||
var fetchWithCachedResponse = fetch; | ||
var jsonParseCache = /* @__PURE__ */ new Map(); | ||
@@ -353,11 +255,3 @@ var readFileTraced = trace(readFile, { name: "readFile" }); | ||
const digest2 = res.headers.get("x-edge-config-digest"); | ||
let body; | ||
if (!res.ok) { | ||
await consumeResponseBody(res); | ||
body = res.cachedResponseBody; | ||
if (!body) | ||
return null; | ||
} else { | ||
body = await res.json(); | ||
} | ||
const body = await res.json(); | ||
return { digest: digest2, items: body }; | ||
@@ -454,4 +348,2 @@ }); | ||
} | ||
if (res.cachedResponseBody !== void 0) | ||
return res.cachedResponseBody; | ||
throw new UnexpectedNetworkError(res); | ||
@@ -520,4 +412,2 @@ }); | ||
throw new Error(ERRORS.EDGE_CONFIG_NOT_FOUND); | ||
if (res.cachedResponseBody !== void 0) | ||
return res.cachedResponseBody; | ||
throw new UnexpectedNetworkError(res); | ||
@@ -544,4 +434,2 @@ }); | ||
await consumeResponseBody(res); | ||
if (res.cachedResponseBody !== void 0) | ||
return res.cachedResponseBody; | ||
throw new UnexpectedNetworkError(res); | ||
@@ -548,0 +436,0 @@ }); |
{ | ||
"name": "@vercel/edge-config", | ||
"version": "1.2.0", | ||
"version": "1.2.1-c7712904-20240625135709", | ||
"description": "Ultra-low latency data at the edge", | ||
@@ -5,0 +5,0 @@ "homepage": "https://vercel.com", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
4
144054
1104
1