diff --git a/packages/core/src/compiler/index.ts b/packages/core/src/compiler/index.ts index be63bebcd..6b2ba12ef 100644 --- a/packages/core/src/compiler/index.ts +++ b/packages/core/src/compiler/index.ts @@ -89,3 +89,5 @@ export { // Asset-path primitives (shared across core, producer, CLI) export { CSS_URL_RE, PATH_ATTRS, isNonRelativeUrl, isPathInside } from "./assetPaths"; + +export { MEDIA_RENDER_ID_ATTR, assignMediaRenderIds } from "./mediaRenderIds"; diff --git a/packages/core/src/compiler/mediaRenderIds.test.ts b/packages/core/src/compiler/mediaRenderIds.test.ts new file mode 100644 index 000000000..465c81604 --- /dev/null +++ b/packages/core/src/compiler/mediaRenderIds.test.ts @@ -0,0 +1,79 @@ +import { describe, it, expect } from "vitest"; +import { parseHTML } from "linkedom"; +import { MEDIA_RENDER_ID_ATTR, assignMediaRenderIds } from "./mediaRenderIds"; + +function stamp(html: string): string[] { + const { document } = parseHTML(html); + assignMediaRenderIds(document as unknown as Parameters[0]); + return Array.from(document.querySelectorAll("video, audio, img")).map( + (el) => el.getAttribute(MEDIA_RENDER_ID_ATTR) ?? "", + ); +} + +describe("assignMediaRenderIds", () => { + it("keeps the element id when it is already unique", () => { + expect(stamp('