@miniflare/cache
Advanced tools
Comparing version 2.11.0 to 2.12.0
import { Clock } from '@miniflare/shared'; | ||
import { Headers } from 'undici'; | ||
import { Log } from '@miniflare/shared'; | ||
@@ -65,4 +64,2 @@ import { MiniflareError } from '@miniflare/shared'; | ||
/* Excluded from this release type: _getRangeResponse */ | ||
export declare interface InternalCacheOptions { | ||
@@ -80,4 +77,2 @@ formDataFiles?: boolean; | ||
/* Excluded from this release type: _parseRanges */ | ||
export { } |
@@ -40,5 +40,3 @@ var __create = Object.create; | ||
CacheStorage: () => CacheStorage, | ||
NoOpCache: () => NoOpCache, | ||
_getRangeResponse: () => _getRangeResponse, | ||
_parseRanges: () => _parseRanges | ||
NoOpCache: () => NoOpCache | ||
}); | ||
@@ -48,3 +46,3 @@ | ||
var import_url = __toModule(require("url")); | ||
var import_core2 = __toModule(require("@miniflare/core")); | ||
var import_core = __toModule(require("@miniflare/core")); | ||
var import_shared2 = __toModule(require("@miniflare/shared")); | ||
@@ -59,104 +57,5 @@ var import_http_cache_semantics = __toModule(require("http-cache-semantics")); | ||
// packages/cache/src/range.ts | ||
var import_web = __toModule(require("stream/web")); | ||
var import_util = __toModule(require("util")); | ||
var import_core = __toModule(require("@miniflare/core")); | ||
var encoder = new import_util.TextEncoder(); | ||
var rangePrefixRegexp = /^ *bytes *=/i; | ||
var rangeRegexp = /^ *(?<start>\d+)? *- *(?<end>\d+)? *$/; | ||
function _parseRanges(rangeHeader, length) { | ||
const prefixMatch = rangePrefixRegexp.exec(rangeHeader); | ||
if (prefixMatch === null) | ||
return; | ||
rangeHeader = rangeHeader.substring(prefixMatch[0].length); | ||
if (rangeHeader.trimStart() === "") | ||
return []; | ||
const ranges = rangeHeader.split(","); | ||
const result = []; | ||
for (const range of ranges) { | ||
const match = rangeRegexp.exec(range); | ||
if (match === null) | ||
return; | ||
const { start, end } = match.groups; | ||
if (start !== void 0 && end !== void 0) { | ||
const rangeStart = parseInt(start); | ||
let rangeEnd = parseInt(end); | ||
if (rangeStart > rangeEnd) | ||
return; | ||
if (rangeStart >= length) | ||
return; | ||
if (rangeEnd >= length) | ||
rangeEnd = length - 1; | ||
result.push([rangeStart, rangeEnd]); | ||
} else if (start !== void 0 && end === void 0) { | ||
const rangeStart = parseInt(start); | ||
if (rangeStart >= length) | ||
return; | ||
result.push([rangeStart, length - 1]); | ||
} else if (start === void 0 && end !== void 0) { | ||
const suffix = parseInt(end); | ||
if (suffix >= length) | ||
return []; | ||
if (suffix === 0) | ||
continue; | ||
result.push([length - suffix, length - 1]); | ||
} else { | ||
return; | ||
} | ||
} | ||
return result; | ||
} | ||
function _getRangeResponse(requestRangeHeader, responseStatus, responseHeaders, responseBody) { | ||
const ranges = _parseRanges(requestRangeHeader, responseBody.byteLength); | ||
if (ranges === void 0) { | ||
return new import_core.Response(null, { | ||
status: 416, | ||
headers: { "Content-Range": `bytes */${responseBody.byteLength}` } | ||
}); | ||
} else if (ranges.length === 0) { | ||
return new import_core.Response(responseBody, { | ||
status: responseStatus, | ||
headers: responseHeaders | ||
}); | ||
} else if (ranges.length === 1) { | ||
const [start, end] = ranges[0]; | ||
responseHeaders.set("Content-Range", `bytes ${start}-${end}/${responseBody.byteLength}`); | ||
responseHeaders.set("Content-Length", `${end - start + 1}`); | ||
return new import_core.Response(responseBody.slice(start, end + 1), { | ||
status: 206, | ||
headers: responseHeaders | ||
}); | ||
} else { | ||
const contentType = responseHeaders.get("Content-Type"); | ||
const boundary = "miniflare-boundary-" + Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString().padStart(16, "0"); | ||
const stream = new import_web.ReadableStream({ | ||
type: "bytes", | ||
pull(controller) { | ||
const range = ranges.shift(); | ||
if (range === void 0) { | ||
controller.enqueue(encoder.encode(`--${boundary}--`)); | ||
return controller.close(); | ||
} | ||
const [start, end] = range; | ||
const header = `--${boundary}\r | ||
Content-Type: ${contentType}\r | ||
Content-Range: bytes ${start}-${end}/${responseBody.byteLength}\r | ||
\r | ||
`; | ||
controller.enqueue(encoder.encode(header)); | ||
controller.enqueue(responseBody.slice(start, end + 1)); | ||
controller.enqueue(encoder.encode("\r\n")); | ||
} | ||
}); | ||
responseHeaders.set("Content-Type", `multipart/byteranges; boundary=${boundary}`); | ||
return new import_core.Response(stream, { | ||
status: 206, | ||
headers: responseHeaders | ||
}); | ||
} | ||
} | ||
// packages/cache/src/cache.ts | ||
function normaliseRequest(req) { | ||
return req instanceof import_core2.Request || req instanceof import_undici.Request ? req : new import_core2.Request(req); | ||
return req instanceof import_core.Request || req instanceof import_undici.Request ? req : new import_core.Request(req); | ||
} | ||
@@ -223,7 +122,7 @@ function normaliseHeaders(headers) { | ||
if (reqIfNoneMatchHeader.trim() === "*") { | ||
return new import_core2.Response(null, { status: 304, headers: resHeaders }); | ||
return new import_core.Response(null, { status: 304, headers: resHeaders }); | ||
} | ||
for (const reqIfNoneMatch of reqIfNoneMatchHeader.split(",")) { | ||
if (resETag === parseETag(reqIfNoneMatch)) { | ||
return new import_core2.Response(null, { status: 304, headers: resHeaders }); | ||
return new import_core.Response(null, { status: 304, headers: resHeaders }); | ||
} | ||
@@ -239,3 +138,3 @@ } | ||
if (resLastModified <= reqIfModifiedSince) { | ||
return new import_core2.Response(null, { status: 304, headers: resHeaders }); | ||
return new import_core.Response(null, { status: 304, headers: resHeaders }); | ||
} | ||
@@ -245,5 +144,5 @@ } | ||
if (reqRangeHeader !== null) { | ||
return _getRangeResponse(reqRangeHeader, resStatus, resHeaders, resBody); | ||
return (0, import_core.getRangeResponse)(reqRangeHeader, resStatus, resHeaders, resBody); | ||
} | ||
return new import_core2.Response(resBody, { status: resStatus, headers: resHeaders }); | ||
return new import_core.Response(resBody, { status: resStatus, headers: resHeaders }); | ||
} | ||
@@ -271,3 +170,3 @@ var Cache = class { | ||
req = normaliseRequest(req); | ||
if (res instanceof import_core2.Response && res.webSocket) { | ||
if (res instanceof import_core.Response && res.webSocket) { | ||
throw new TypeError("Cannot cache WebSocket upgrade response."); | ||
@@ -325,4 +224,4 @@ } | ||
if (!this.#formDataFiles) | ||
res = (0, import_core2.withStringFormDataFiles)(res); | ||
return (0, import_core2.withImmutableHeaders)(res); | ||
res = (0, import_core.withStringFormDataFiles)(res); | ||
return (0, import_core.withImmutableHeaders)(res); | ||
} | ||
@@ -469,6 +368,4 @@ async delete(req, options) { | ||
CacheStorage, | ||
NoOpCache, | ||
_getRangeResponse, | ||
_parseRanges | ||
NoOpCache | ||
}); | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@miniflare/cache", | ||
"version": "2.11.0", | ||
"version": "2.12.0", | ||
"description": "Cache module for Miniflare: a fun, full-featured, fully-local simulator for Cloudflare Workers", | ||
@@ -38,12 +38,12 @@ "keywords": [ | ||
"dependencies": { | ||
"@miniflare/core": "2.11.0", | ||
"@miniflare/shared": "2.11.0", | ||
"@miniflare/core": "2.12.0", | ||
"@miniflare/shared": "2.12.0", | ||
"http-cache-semantics": "^4.1.0", | ||
"undici": "5.9.1" | ||
"undici": "5.11.0" | ||
}, | ||
"devDependencies": { | ||
"@miniflare/shared-test": "2.11.0", | ||
"@miniflare/web-sockets": "2.11.0", | ||
"@miniflare/shared-test": "2.12.0", | ||
"@miniflare/web-sockets": "2.12.0", | ||
"@types/http-cache-semantics": "^4.0.1" | ||
} | ||
} |
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
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
23267
420
+ Added@miniflare/core@2.12.0(transitive)
+ Added@miniflare/queues@2.12.0(transitive)
+ Added@miniflare/shared@2.12.0(transitive)
+ Added@miniflare/watcher@2.12.0(transitive)
+ Addedundici@5.11.0(transitive)
- Removed@miniflare/core@2.11.0(transitive)
- Removed@miniflare/queues@2.11.0(transitive)
- Removed@miniflare/shared@2.11.0(transitive)
- Removed@miniflare/watcher@2.11.0(transitive)
- Removedundici@5.9.1(transitive)
Updated@miniflare/core@2.12.0
Updated@miniflare/shared@2.12.0
Updatedundici@5.11.0