UNPKG

1.17 kBJavaScriptView Raw
1import { isDeepStrictEqual } from 'util'
2
3import { splitResults } from './results.js'
4
5// Merge redirects from `_redirects` with the ones from `netlify.toml`.
6// When both are specified, both are used and `_redirects` has priority.
7// Since in both `netlify.toml` and `_redirects`, only the first matching rule
8// is used, it is possible to merge `_redirects` to `netlify.toml` by prepending
9// its rules to `netlify.toml` `redirects` field.
10export const mergeRedirects = function ({ fileRedirects, configRedirects }) {
11 const results = [...fileRedirects, ...configRedirects]
12 const { redirects, errors } = splitResults(results)
13 const mergedRedirects = redirects.filter(isUniqueRedirect)
14 return { redirects: mergedRedirects, errors }
15}
16
17// Remove duplicates. This is especially likely considering `fileRedirects`
18// might have been previously merged to `configRedirects`, which happens when
19// `netlifyConfig.redirects` is modified by plugins.
20// The latest duplicate value is the one kept.
21const isUniqueRedirect = function (redirect, index, redirects) {
22 return !redirects.slice(index + 1).some((otherRedirect) => isDeepStrictEqual(redirect, otherRedirect))
23}