1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- * @typedef {import('./types.js').Options} Options
- * @typedef {import('./types.js').State} State
- */
- const own = {}.hasOwnProperty
- /**
- * @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 (own.call(extension, key)) {
- switch (key) {
- case 'extensions': {
- // Empty.
- break
- }
- /* c8 ignore next 4 */
- case 'unsafe': {
- list(base[key], extension[key])
- break
- }
- case 'join': {
- list(base[key], extension[key])
- break
- }
- case 'handlers': {
- map(base[key], extension[key])
- break
- }
- default: {
- // @ts-expect-error: matches.
- base.options[key] = extension[key]
- }
- }
- }
- }
- return base
- }
- /**
- * @template T
- * @param {Array<T>} left
- * @param {Array<T> | null | undefined} right
- */
- function list(left, right) {
- if (right) {
- left.push(...right)
- }
- }
- /**
- * @template T
- * @param {Record<string, T>} left
- * @param {Record<string, T> | null | undefined} right
- */
- function map(left, right) {
- if (right) {
- Object.assign(left, right)
- }
- }
|