@netlify/redirect-parser
Version:
Parses netlify redirects into a js object representation
32 lines (31 loc) • 1.53 kB
JavaScript
// Normalize conditions
export const normalizeConditions = function (rawConditions) {
const caseNormalizedConditions = normalizeConditionCases(rawConditions);
const listNormalizedConditions = normalizeConditionLists(caseNormalizedConditions);
return listNormalizedConditions;
};
// Conditions can optionally be capitalized
const normalizeConditionCases = function (conditions) {
return CONDITION_CAPITALIZED_PROPS.reduce(normalizeConditionCase, conditions);
};
const CONDITION_CAPITALIZED_PROPS = [
{ name: 'role', capitalizedName: 'Role' },
{ name: 'language', capitalizedName: 'Language' },
{ name: 'country', capitalizedName: 'Country' },
];
const normalizeConditionCase = function (conditions, { name, capitalizedName }) {
const { [capitalizedName]: capitalizedProp, [name]: prop = capitalizedProp, ...conditionsA } = conditions;
return prop === undefined ? conditionsA : { ...conditionsA, [capitalizedName]: prop };
};
// Some `conditions` are array of strings.
// In `_redirects`, they are comma-separated lists instead.
const normalizeConditionLists = function (conditions) {
return CONDITION_LIST_PROPS.reduce(normalizeConditionList, conditions);
};
const CONDITION_LIST_PROPS = ['Role', 'Language', 'Country'];
const normalizeConditionList = function (conditions, name) {
return typeof conditions[name] === 'string'
? { ...conditions, [name]: conditions[name].trim().split(CONDITION_LIST_REGEXP) }
: conditions;
};
const CONDITION_LIST_REGEXP = /\s*,\s*/gu;