/** * @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 }