in js/src/xliff-serialize.ts [20:69]
export function xliffSerializePattern(
pattern: Pattern,
onError: (error: SerializeError) => void
): string {
const doc = new DOMParser().parseFromString('<target></target>', 'text/xml')
const root = doc.querySelector('target')!
let node = root
for (const part of pattern) {
if (typeof part === 'string') {
appendText(node, part)
} else if (part.open || part.elem) {
const name = part.open || part.elem!
const child = doc.createElementNS(null, name)
for (const error of setAttributes(child, part.opt)) {
onError(new SerializeError(`xliff: ${error}`))
}
node.appendChild(child)
if (part.open) node = child
} else if (part.close) {
if (part.opt && Object.keys(part.opt).length) {
const error = `xliff: Options on closing markup are not supported: ${JSON.stringify(part)}`
onError(new SerializeError(error))
}
if (node !== root && node.tagName === part.close && node.parentElement) {
node = node.parentElement
} else {
const error = `xliff: Improper element nesting for <${node.tagName}>`
onError(new SerializeError(error))
}
} else if (typeof part.attr?.source === 'string') {
appendText(node, part.attr.source)
} else if (part._ || part.$) {
appendText(node, part._ || part.$!)
} else {
const error = `xliff: Unsupported pattern part ${JSON.stringify(part)}`
onError(new SerializeError(error))
appendText(node, ERROR_RESULT)
}
}
if (node !== root) {
const error = `xliff: Missing closing markup for <${node.tagName}>`
onError(new SerializeError(error))
}
try {
return serialize(root)
} catch (error) {
onError(new SerializeError(`xliff: ${error}`))
return ERROR_RESULT
}
}