Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 36x 36x 36x 36x 36x 36x 1x 1x 1x | import { pipe, SideEffect2 } from "@reactive-js/core/lib/functions"; import { parseWith } from "@reactive-js/core/lib/internal/parserCombinators"; import { isNone, none, Option } from "@reactive-js/core/lib/option"; import { join } from "@reactive-js/core/lib/readonlyArray"; import { pToken, httpList } from "./httpGrammar"; import { getHeaderValue, HttpStandardHeader } from "./httpHeaders"; import { HttpContentInfo, HttpHeaders, HttpContentEncoding, MediaType, } from "./interfaces"; import { parseMediaType, mediaTypeToString, parseMediaTypeOrThrow, mediaTypeIsCompressible, } from "./mediaType"; const parseTokenList = pipe(pToken, httpList, parseWith); export const parseHttpContentInfoFromHeaders = ( headers: HttpHeaders, ): Option<HttpContentInfo> => { const contentEncodingString = getHeaderValue(headers, HttpStandardHeader.ContentEncoding) ?? ""; const contentEncodings = parseTokenList( contentEncodingString, ) as readonly HttpContentEncoding[]; const contentLengthHeader = getHeaderValue(headers, HttpStandardHeader.ContentLength) ?? "-1"; const contentLength = ~~contentLengthHeader; const contentType = parseMediaType( getHeaderValue(headers, HttpStandardHeader.ContentType) ?? "", ); return isNone(contentType) ? none : { contentEncodings, contentLength, contentType, }; }; export const writeHttpContentInfoHeaders = ( content: HttpContentInfo, writeHeader: SideEffect2<string, string>, ) => { const { contentLength, contentType, contentEncodings } = content; if (contentLength > 0) { writeHeader(HttpStandardHeader.ContentLength, contentLength.toString(10)); } writeHeader(HttpStandardHeader.ContentType, mediaTypeToString(contentType)); if (contentEncodings.length > 0) { writeHeader( HttpStandardHeader.ContentEncoding, pipe(contentEncodings, join(", ")), ); } }; export const createHttpContentInfo = ({ contentEncodings, contentLength, contentType, }: { contentEncodings?: readonly HttpContentEncoding[]; contentLength?: number; contentType: MediaType | string; }): HttpContentInfo => ({ contentEncodings: contentEncodings ?? [], contentLength: contentLength ?? -1, contentType: typeof contentType === "string" ? parseMediaTypeOrThrow(contentType) : contentType, }); export const contentIsCompressible = ( content: HttpContentInfo, db: { [key: string]: { compressible?: boolean; }; }, ): boolean => content.contentEncodings.length === 0 && // Don't double encode mediaTypeIsCompressible(content.contentType, db); |