UNPKG

1.49 kBJavaScriptView Raw
1// Normalize conditions
2export const normalizeConditions = function (rawConditions) {
3 const caseNormalizedConditions = normalizeConditionCases(rawConditions)
4 const listNormalizedConditions = normalizeConditionLists(caseNormalizedConditions)
5 return listNormalizedConditions
6}
7
8// Conditions can optionally be capitalized
9const normalizeConditionCases = function (conditions) {
10 return CONDITION_CAPITALIZED_PROPS.reduce(normalizeConditionCase, conditions)
11}
12
13const CONDITION_CAPITALIZED_PROPS = [
14 { name: 'role', capitalizedName: 'Role' },
15 { name: 'language', capitalizedName: 'Language' },
16 { name: 'country', capitalizedName: 'Country' },
17]
18
19const normalizeConditionCase = function (conditions, { name, capitalizedName }) {
20 const { [capitalizedName]: capitalizedProp, [name]: prop = capitalizedProp, ...conditionsA } = conditions
21 return prop === undefined ? conditionsA : { ...conditionsA, [capitalizedName]: prop }
22}
23
24// Some `conditions` are array of strings.
25// In `_redirects`, they are comma-separated lists instead.
26const normalizeConditionLists = function (conditions) {
27 return CONDITION_LIST_PROPS.reduce(normalizeConditionList, conditions)
28}
29
30const CONDITION_LIST_PROPS = ['Role', 'Language', 'Country']
31
32const normalizeConditionList = function (conditions, name) {
33 return typeof conditions[name] === 'string'
34 ? { ...conditions, [name]: conditions[name].trim().split(CONDITION_LIST_REGEXP) }
35 : conditions
36}
37
38const CONDITION_LIST_REGEXP = /\s*,\s*/gu