UNPKG

1.91 kBJavaScriptView Raw
1(function (Prism) {
2
3 Prism.languages.typescript = Prism.languages.extend('javascript', {
4 'class-name': {
5 pattern: /(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,
6 lookbehind: true,
7 greedy: true,
8 inside: null // see below
9 },
10 'builtin': /\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/,
11 });
12
13 // The keywords TypeScript adds to JavaScript
14 Prism.languages.typescript.keyword.push(
15 /\b(?:abstract|as|declare|implements|is|keyof|readonly|require)\b/,
16 // keywords that have to be followed by an identifier
17 /\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,
18 // This is for `import type *, {}`
19 /\btype\b(?=\s*(?:[\{*]|$))/
20 );
21
22 // doesn't work with TS because TS is too complex
23 delete Prism.languages.typescript['parameter'];
24
25 // a version of typescript specifically for highlighting types
26 var typeInside = Prism.languages.extend('typescript', {});
27 delete typeInside['class-name'];
28
29 Prism.languages.typescript['class-name'].inside = typeInside;
30
31 Prism.languages.insertBefore('typescript', 'function', {
32 'decorator': {
33 pattern: /@[$\w\xA0-\uFFFF]+/,
34 inside: {
35 'at': {
36 pattern: /^@/,
37 alias: 'operator'
38 },
39 'function': /^[\s\S]+/
40 }
41 },
42 'generic-function': {
43 // e.g. foo<T extends "bar" | "baz">( ...
44 pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
45 greedy: true,
46 inside: {
47 'function': /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
48 'generic': {
49 pattern: /<[\s\S]+/, // everything after the first <
50 alias: 'class-name',
51 inside: typeInside
52 }
53 }
54 }
55 });
56
57 Prism.languages.ts = Prism.languages.typescript;
58
59}(Prism));