Spaces:
Running
Running
| ; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| Object.defineProperty(exports, "acceptLanguage", { | |
| enumerable: true, | |
| get: function() { | |
| return acceptLanguage; | |
| } | |
| }); | |
| function parse(raw, preferences, options) { | |
| const lowers = new Map(); | |
| const header = raw.replace(/[ \t]/g, ''); | |
| if (preferences) { | |
| let pos = 0; | |
| for (const preference of preferences){ | |
| const lower = preference.toLowerCase(); | |
| lowers.set(lower, { | |
| orig: preference, | |
| pos: pos++ | |
| }); | |
| if (options.prefixMatch) { | |
| const parts = lower.split('-'); | |
| while(parts.pop(), parts.length > 0){ | |
| const joined = parts.join('-'); | |
| if (!lowers.has(joined)) { | |
| lowers.set(joined, { | |
| orig: preference, | |
| pos: pos++ | |
| }); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| const parts = header.split(','); | |
| const selections = []; | |
| const map = new Set(); | |
| for(let i = 0; i < parts.length; ++i){ | |
| const part = parts[i]; | |
| if (!part) { | |
| continue; | |
| } | |
| const params = part.split(';'); | |
| if (params.length > 2) { | |
| throw Object.defineProperty(new Error(`Invalid ${options.type} header`), "__NEXT_ERROR_CODE", { | |
| value: "E77", | |
| enumerable: false, | |
| configurable: true | |
| }); | |
| } | |
| let token = params[0].toLowerCase(); | |
| if (!token) { | |
| throw Object.defineProperty(new Error(`Invalid ${options.type} header`), "__NEXT_ERROR_CODE", { | |
| value: "E77", | |
| enumerable: false, | |
| configurable: true | |
| }); | |
| } | |
| const selection = { | |
| token, | |
| pos: i, | |
| q: 1 | |
| }; | |
| if (preferences && lowers.has(token)) { | |
| selection.pref = lowers.get(token).pos; | |
| } | |
| map.add(selection.token); | |
| if (params.length === 2) { | |
| const q = params[1]; | |
| const [key, value] = q.split('='); | |
| if (!value || key !== 'q' && key !== 'Q') { | |
| throw Object.defineProperty(new Error(`Invalid ${options.type} header`), "__NEXT_ERROR_CODE", { | |
| value: "E77", | |
| enumerable: false, | |
| configurable: true | |
| }); | |
| } | |
| const score = parseFloat(value); | |
| if (score === 0) { | |
| continue; | |
| } | |
| if (Number.isFinite(score) && score <= 1 && score >= 0.001) { | |
| selection.q = score; | |
| } | |
| } | |
| selections.push(selection); | |
| } | |
| selections.sort((a, b)=>{ | |
| if (b.q !== a.q) { | |
| return b.q - a.q; | |
| } | |
| if (b.pref !== a.pref) { | |
| if (a.pref === undefined) { | |
| return 1; | |
| } | |
| if (b.pref === undefined) { | |
| return -1; | |
| } | |
| return a.pref - b.pref; | |
| } | |
| return a.pos - b.pos; | |
| }); | |
| const values = selections.map((selection)=>selection.token); | |
| if (!preferences || !preferences.length) { | |
| return values; | |
| } | |
| const preferred = []; | |
| for (const selection of values){ | |
| if (selection === '*') { | |
| for (const [preference, value] of lowers){ | |
| if (!map.has(preference)) { | |
| preferred.push(value.orig); | |
| } | |
| } | |
| } else { | |
| const lower = selection.toLowerCase(); | |
| if (lowers.has(lower)) { | |
| preferred.push(lowers.get(lower).orig); | |
| } | |
| } | |
| } | |
| return preferred; | |
| } | |
| function acceptLanguage(header = '', preferences) { | |
| return parse(header, preferences, { | |
| type: 'accept-language', | |
| prefixMatch: true | |
| })[0] || ''; | |
| } | |
| //# sourceMappingURL=accept-header.js.map |