35 lines
779 B
TypeScript
35 lines
779 B
TypeScript
import deepmerge from 'deepmerge'
|
|
import Extension from '../Extension'
|
|
import Node from '../Node'
|
|
import Mark from '../Mark'
|
|
|
|
export default function resolveExtensionConfig(
|
|
extension: Extension | Node | Mark,
|
|
name: string,
|
|
props = {},
|
|
): void {
|
|
if (!extension.configs[name]) {
|
|
return
|
|
}
|
|
|
|
extension.config[name] = extension.configs[name]
|
|
.reduce((accumulator, { stategy, value: rawValue }) => {
|
|
const value = typeof rawValue === 'function'
|
|
? rawValue(props)
|
|
: rawValue
|
|
|
|
if (accumulator === undefined) {
|
|
return value
|
|
}
|
|
|
|
if (stategy === 'overwrite') {
|
|
return value
|
|
}
|
|
|
|
if (stategy === 'extend') {
|
|
return deepmerge(accumulator, value)
|
|
}
|
|
|
|
return accumulator
|
|
}, undefined)
|
|
} |