(html: string)
| 768 | } |
| 769 | |
| 770 | export function extractCompositionMetadata(html: string): CompositionMetadata { |
| 771 | const parser = new DOMParser(); |
| 772 | const doc = parser.parseFromString(html, "text/html"); |
| 773 | const htmlEl = doc.documentElement; |
| 774 | if (!htmlEl) { |
| 775 | throw new CompositionHtmlParseError( |
| 776 | "extractCompositionMetadata: input HTML is empty or could not be parsed", |
| 777 | ); |
| 778 | } |
| 779 | |
| 780 | const compositionId = htmlEl.getAttribute("data-composition-id"); |
| 781 | const durationStr = htmlEl.getAttribute("data-composition-duration"); |
| 782 | const compositionDuration = durationStr ? parseFloat(durationStr) : null; |
| 783 | |
| 784 | const variables = parseCompositionVariables(htmlEl); |
| 785 | |
| 786 | return { |
| 787 | compositionId, |
| 788 | compositionDuration: |
| 789 | compositionDuration && isFinite(compositionDuration) ? compositionDuration : null, |
| 790 | variables, |
| 791 | }; |
| 792 | } |
| 793 | |
| 794 | function parseCompositionVariables(htmlEl: Element): CompositionVariable[] { |
| 795 | const variablesAttr = htmlEl.getAttribute("data-composition-variables"); |
no test coverage detected