39 lines
939 B
JavaScript
39 lines
939 B
JavaScript
/**
|
|
* @typedef {import('./types.js').Options} Options
|
|
* @typedef {import('./types.js').State} State
|
|
*/
|
|
|
|
/**
|
|
* @param {State} base
|
|
* @param {Options} extension
|
|
* @returns {State}
|
|
*/
|
|
export function configure(base, extension) {
|
|
let index = -1
|
|
/** @type {keyof Options} */
|
|
let key
|
|
|
|
// First do subextensions.
|
|
if (extension.extensions) {
|
|
while (++index < extension.extensions.length) {
|
|
configure(base, extension.extensions[index])
|
|
}
|
|
}
|
|
|
|
for (key in extension) {
|
|
if (key === 'extensions') {
|
|
// Empty.
|
|
} else if (key === 'unsafe' || key === 'join') {
|
|
/* c8 ignore next 2 */
|
|
// @ts-expect-error: hush.
|
|
base[key] = [...(base[key] || []), ...(extension[key] || [])]
|
|
} else if (key === 'handlers') {
|
|
base[key] = Object.assign(base[key], extension[key] || {})
|
|
} else {
|
|
// @ts-expect-error: hush.
|
|
base.options[key] = extension[key]
|
|
}
|
|
}
|
|
|
|
return base
|
|
}
|