import type { ObserverMiddleware, ObserverRunProps, } from '@jiotranslate/core-beta'; import { GeneralObserver } from './observers/general/GeneralObserver'; import { setNodeText } from './observers/general/helpers'; import { TextWrapper } from './observers/text/TextWrapper'; export const TextObserver = (initialOptions): ObserverMiddleware => () => { const observer = GeneralObserver(initialOptions); const self = Object.freeze({ ...observer, run(props: ObserverRunProps) { const wrapper = TextWrapper({ inputPrefix: props.options.inputPrefix, inputSuffix: props.options.inputSuffix, translate: props.translate, getTranslation: props.getTranslation, dynamicScanningEnabled: initialOptions?.dynamicScanningEnable, }); observer.run({ ...props, wrapper }); }, retranslate() { observer.forEachElement((_, elMeta) => { for (const [node, nodeMeta] of elMeta.nodes.entries()) { if (nodeMeta.keyAttributeOnly) { return; } const result = observer.unwrap(nodeMeta.oldTextContent); if (result) { setNodeText(node, result.text); } } }); }, outputNotFormattable: true, }); return self; };