21 lines
		
	
	
		
			669 B
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			21 lines
		
	
	
		
			669 B
		
	
	
	
		
			TypeScript
		
	
	
import type MarkdownIt from 'markdown-it';
 | 
						|
import type { MarkdownParsedData } from '../markdown';
 | 
						|
 | 
						|
// hoist <script> and <style> tags out of the returned html
 | 
						|
// so that they can be placed outside as SFC blocks.
 | 
						|
export const hoistPlugin = (md: MarkdownIt) => {
 | 
						|
  const RE = /^<(script|style)(?=(\s|>|$))/i;
 | 
						|
 | 
						|
  md.renderer.rules.html_block = (tokens, idx) => {
 | 
						|
    const content = tokens[idx].content || '';
 | 
						|
    const data = (md as any).__data as MarkdownParsedData;
 | 
						|
    const hoistedTags = data.hoistedTags || (data.hoistedTags = []);
 | 
						|
    if (RE.test(content.trim())) {
 | 
						|
      hoistedTags.push(content);
 | 
						|
      return '';
 | 
						|
    } else {
 | 
						|
      return content;
 | 
						|
    }
 | 
						|
  };
 | 
						|
};
 |