UNPKG

2.01 kBJavaScriptView Raw
1import { parseFileRedirects } from './line_parser.js'
2import { mergeRedirects } from './merge.js'
3import { parseConfigRedirects } from './netlify_config_parser.js'
4import { normalizeRedirects } from './normalize.js'
5import { splitResults, concatResults } from './results.js'
6
7// Parse all redirects given programmatically via the `configRedirects` property, `netlify.toml` and `_redirects` files, then normalize
8// and validate those.
9export const parseAllRedirects = async function ({
10 redirectsFiles = [],
11 netlifyConfigPath,
12 configRedirects = [],
13 ...opts
14}) {
15 const [
16 { redirects: fileRedirects, errors: fileParseErrors },
17 { redirects: parsedConfigRedirects, errors: configParseErrors },
18 ] = await Promise.all([getFileRedirects(redirectsFiles), getConfigRedirects(netlifyConfigPath)])
19 const { redirects: normalizedFileRedirects, errors: fileNormalizeErrors } = normalizeRedirects(fileRedirects, opts)
20 const { redirects: normalizedParsedConfigRedirects, errors: parsedConfigNormalizeErrors } = normalizeRedirects(
21 parsedConfigRedirects,
22 opts,
23 )
24 const { redirects: normalizedConfigRedirects, errors: configNormalizeErrors } = normalizeRedirects(
25 configRedirects,
26 opts,
27 )
28 const { redirects, errors: mergeErrors } = mergeRedirects({
29 fileRedirects: normalizedFileRedirects,
30 configRedirects: [...normalizedParsedConfigRedirects, ...normalizedConfigRedirects],
31 })
32 const errors = [
33 ...fileParseErrors,
34 ...fileNormalizeErrors,
35 ...configParseErrors,
36 ...parsedConfigNormalizeErrors,
37 ...configNormalizeErrors,
38 ...mergeErrors,
39 ]
40 return { redirects, errors }
41}
42
43const getFileRedirects = async function (redirectsFiles) {
44 const resultsArrays = await Promise.all(redirectsFiles.map(parseFileRedirects))
45 return concatResults(resultsArrays)
46}
47
48const getConfigRedirects = async function (netlifyConfigPath) {
49 if (netlifyConfigPath === undefined) {
50 return splitResults([])
51 }
52
53 return await parseConfigRedirects(netlifyConfigPath)
54}