37 lines
818 B
TypeScript
37 lines
818 B
TypeScript
import { parseDocument, DomUtils } from 'htmlparser2';
|
|
import serialize from 'dom-serializer';
|
|
|
|
export function rewriteAssetUrls(
|
|
html: string,
|
|
cmsBase: string,
|
|
proxyBase: string
|
|
) {
|
|
if (!html) return html;
|
|
|
|
const dom = parseDocument(html);
|
|
|
|
const elements = DomUtils.findAll(
|
|
(elem) => elem.type === 'tag',
|
|
dom.children
|
|
);
|
|
|
|
for (const el of elements) {
|
|
// img / video / source -> src
|
|
// a -> href
|
|
const tag = el.name.toLowerCase();
|
|
const attr = tag === 'a' ? 'href' : 'src';
|
|
|
|
if (!el.attribs || !el.attribs[attr]) continue;
|
|
|
|
const url = el.attribs[attr];
|
|
|
|
// 替换cmsBase为proxyBase
|
|
if (url.startsWith(cmsBase)) {
|
|
const uuid = url.replace(`${cmsBase}/assets/`, '');
|
|
el.attribs[attr] = `${proxyBase}/${uuid}`;
|
|
}
|
|
}
|
|
|
|
return serialize(dom);
|
|
}
|