File size: 1,711 Bytes
39371ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import './prism-worker-setup.mjs';
import Prism from 'prismjs/components/prism-core.js';
import 'prismjs/components/prism-markup.js';
import 'prismjs/components/prism-css.js';
import 'prismjs/components/prism-clike.js';
import 'prismjs/components/prism-javascript.js';
import 'prismjs/components/prism-typescript.js';
import 'prismjs/components/prism-jsx.js';
import 'prismjs/components/prism-tsx.js';
import 'prismjs/components/prism-json.js';
import 'prismjs/components/prism-yaml.js';
import 'prismjs/components/prism-markdown.js';
import 'prismjs/components/prism-python.js';
import 'prismjs/components/prism-bash.js';
import 'prismjs/components/prism-toml.js';
import 'prismjs/components/prism-sql.js';
import 'prismjs/components/prism-csv.js';
import 'prismjs/components/prism-c.js';
import 'prismjs/components/prism-cpp.js';
import 'prismjs/components/prism-csharp.js';
import 'prismjs/components/prism-java.js';
import 'prismjs/components/prism-go.js';
import 'prismjs/components/prism-rust.js';
import 'prismjs/components/prism-diff.js';
import 'prismjs/components/prism-docker.js';
import { canHighlight } from './editor-language.mjs';

Prism.manual = true;
self.onmessage = ({ data: { id, text, language } }) => {
  let html = null;
  try {
    if (canHighlight(text) && Prism.languages[language]) {
      const highlighted = Prism.highlight(text, Prism.languages[language], language);
      // Avoid building a huge DOM even for short, unusually token-dense files.
      if (highlighted.length < 1_000_000 && (highlighted.match(/<span /g)?.length ?? 0) < 12_000) html = highlighted;
    }
  } catch { /* A grammar failure must never prevent editing a file. */ }
  self.postMessage({ id, html });
};