hljs_javascript.min.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. export default (() => {
  2. {
  3. let I = "[A-Za-z$_][0-9A-Za-z$_]*",
  4. x = ["as", "in", "of", "if", "for", "while", "finally", "var", "new", "function", "do", "return", "void", "else", "break", "catch", "instanceof", "with", "throw", "case", "default", "try", "switch", "continue", "typeof", "delete", "let", "yield", "const", "class", "debugger", "async", "await", "static", "import", "from", "export", "extends"],
  5. O = ["true", "false", "null", "undefined", "NaN", "Infinity"],
  6. C = ["Object", "Function", "Boolean", "Symbol", "Math", "Date", "Number", "BigInt", "String", "RegExp", "Array", "Float32Array", "Float64Array", "Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Int32Array", "Uint16Array", "Uint32Array", "BigInt64Array", "BigUint64Array", "Set", "Map", "WeakSet", "WeakMap", "ArrayBuffer", "SharedArrayBuffer", "Atomics", "DataView", "JSON", "Promise", "Generator", "GeneratorFunction", "AsyncFunction", "Reflect", "Proxy", "Intl", "WebAssembly"],
  7. M = ["Error", "EvalError", "InternalError", "RangeError", "ReferenceError", "SyntaxError", "TypeError", "URIError"],
  8. T = ["setInterval", "setTimeout", "clearInterval", "clearTimeout", "require", "exports", "eval", "isFinite", "isNaN", "parseFloat", "parseInt", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "escape", "unescape"],
  9. B = ["arguments", "this", "super", "console", "window", "document", "localStorage", "sessionStorage", "module", "global"],
  10. $ = [].concat(T, C, M);
  11. return e => {
  12. const n = e.regex,
  13. a = I,
  14. t = /<[A-Za-z0-9\\._:-]+/,
  15. s = /\/[A-Za-z0-9\\._:-]+>|\/>/,
  16. r = (e, n) => {
  17. var a,
  18. t,
  19. s = e[0].length + e.index,
  20. r = e.input[s];
  21. ("<" === r || "," === r || (">" === r && ([r, a] = [e, {
  22. after: s
  23. }.after], t = "</" + r[0].slice(1), -1 === r.input.indexOf(t, a)) && n.ignoreMatch(), (r = e.input.substring(s)).match(/^\s*=/)) || (t = r.match(/^\s+extends\s+/)) && 0 === t.index) && n.ignoreMatch();
  24. },
  25. c = {
  26. $pattern: I,
  27. keyword: x,
  28. literal: O,
  29. built_in: $,
  30. "variable.language": B
  31. },
  32. i = "[0-9](_?[0-9])*",
  33. o = `\\.(${i})`,
  34. l = "0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",
  35. b = {
  36. className: "number",
  37. variants: [{
  38. begin: `(\\b(${l})((${o})|\\.)?|(${o}))[eE][+-]?(${i})\\b`
  39. }, {
  40. begin: `\\b(${l})\\b((${o})\\b|\\.)?|(${o})\\b`
  41. }, {
  42. begin: "\\b(0|[1-9](_?[0-9])*)n\\b"
  43. }, {
  44. begin: "\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"
  45. }, {
  46. begin: "\\b0[bB][0-1](_?[0-1])*n?\\b"
  47. }, {
  48. begin: "\\b0[oO][0-7](_?[0-7])*n?\\b"
  49. }, {
  50. begin: "\\b0[0-7]+n?\\b"
  51. }],
  52. relevance: 0
  53. },
  54. d = {
  55. className: "subst",
  56. begin: "\\$\\{",
  57. end: "\\}",
  58. keywords: c,
  59. contains: []
  60. },
  61. g = {
  62. begin: "html`",
  63. end: "",
  64. starts: {
  65. end: "`",
  66. returnEnd: !1,
  67. contains: [e.BACKSLASH_ESCAPE, d],
  68. subLanguage: "xml"
  69. }
  70. },
  71. u = {
  72. begin: "css`",
  73. end: "",
  74. starts: {
  75. end: "`",
  76. returnEnd: !1,
  77. contains: [e.BACKSLASH_ESCAPE, d],
  78. subLanguage: "css"
  79. }
  80. },
  81. m = {
  82. begin: "gql`",
  83. end: "",
  84. starts: {
  85. end: "`",
  86. returnEnd: !1,
  87. contains: [e.BACKSLASH_ESCAPE, d],
  88. subLanguage: "graphql"
  89. }
  90. },
  91. E = {
  92. className: "string",
  93. begin: "`",
  94. end: "`",
  95. contains: [e.BACKSLASH_ESCAPE, d]
  96. },
  97. A = {
  98. className: "comment",
  99. variants: [e.COMMENT(/\/\*\*(?!\/)/, "\\*/", {
  100. relevance: 0,
  101. contains: [{
  102. begin: "(?=@[A-Za-z]+)",
  103. relevance: 0,
  104. contains: [{
  105. className: "doctag",
  106. begin: "@[A-Za-z]+"
  107. }, {
  108. className: "type",
  109. begin: "\\{",
  110. end: "\\}",
  111. excludeEnd: !0,
  112. excludeBegin: !0,
  113. relevance: 0
  114. }, {
  115. className: "variable",
  116. begin: a + "(?=\\s*(-)|$)",
  117. endsParent: !0,
  118. relevance: 0
  119. }, {
  120. begin: /(?=[^\n])\s/,
  121. relevance: 0
  122. }]
  123. }]
  124. }), e.C_BLOCK_COMMENT_MODE, e.C_LINE_COMMENT_MODE]
  125. },
  126. y = [e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, g, u, m, E, {
  127. match: /\$\d+/
  128. }, b];
  129. d.contains = y.concat({
  130. begin: /\{/,
  131. end: /\}/,
  132. keywords: c,
  133. contains: ["self"].concat(y)
  134. });
  135. var N = [].concat(A, d.contains),
  136. N = N.concat([{
  137. begin: /\(/,
  138. end: /\)/,
  139. keywords: c,
  140. contains: ["self"].concat(N)
  141. }]),
  142. _ = {
  143. className: "params",
  144. begin: /\(/,
  145. end: /\)/,
  146. excludeBegin: !0,
  147. excludeEnd: !0,
  148. keywords: c,
  149. contains: N
  150. },
  151. h = {
  152. variants: [{
  153. match: [/class/, /\s+/, a, /\s+/, /extends/, /\s+/, n.concat(a, "(", n.concat(/\./, a), ")*")],
  154. scope: {
  155. 1: "keyword",
  156. 3: "title.class",
  157. 5: "keyword",
  158. 7: "title.class.inherited"
  159. }
  160. }, {
  161. match: [/class/, /\s+/, a],
  162. scope: {
  163. 1: "keyword",
  164. 3: "title.class"
  165. }
  166. }]
  167. },
  168. f = {
  169. relevance: 0,
  170. match: n.either(/\bJSON/, /\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/, /\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/, /\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
  171. className: "title.class",
  172. keywords: {
  173. _: [...C, ...M]
  174. }
  175. },
  176. S = {
  177. variants: [{
  178. match: [/function/, /\s+/, a, /(?=\s*\()/]
  179. }, {
  180. match: [/function/, /\s*(?=\()/]
  181. }],
  182. className: {
  183. 1: "keyword",
  184. 3: "title.function"
  185. },
  186. label: "func.def",
  187. contains: [_],
  188. illegal: /%/
  189. },
  190. v = {
  191. match: n.concat(/\b/, (v = [...T, "super", "import"], n.concat("(?!", v.join("|"), ")")), a, n.lookahead(/\(/)),
  192. className: "title.function",
  193. relevance: 0
  194. },
  195. p = {
  196. begin: n.concat(/\./, n.lookahead(n.concat(a, /(?![0-9A-Za-z$_(])/))),
  197. end: a,
  198. excludeBegin: !0,
  199. keywords: "prototype",
  200. className: "property",
  201. relevance: 0
  202. },
  203. w = {
  204. match: [/get|set/, /\s+/, a, /(?=\()/],
  205. className: {
  206. 1: "keyword",
  207. 3: "title.function"
  208. },
  209. contains: [{
  210. begin: /\(\)/
  211. }, _]
  212. },
  213. R = "(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|" + e.UNDERSCORE_IDENT_RE + ")\\s*=>",
  214. k = {
  215. match: [/const|var|let/, /\s+/, a, /\s*/, /=\s*/, /(async\s*)?/, n.lookahead(R)],
  216. keywords: "async",
  217. className: {
  218. 1: "keyword",
  219. 3: "title.function"
  220. },
  221. contains: [_]
  222. };
  223. return {
  224. name: "JavaScript",
  225. aliases: ["js", "jsx", "mjs", "cjs"],
  226. keywords: c,
  227. exports: {
  228. PARAMS_CONTAINS: N,
  229. CLASS_REFERENCE: f
  230. },
  231. illegal: /#(?![$_A-z])/,
  232. contains: [e.SHEBANG({
  233. label: "shebang",
  234. binary: "node",
  235. relevance: 5
  236. }), {
  237. label: "use_strict",
  238. className: "meta",
  239. relevance: 10,
  240. begin: /^\s*['"]use (strict|asm)['"]/
  241. }, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, g, u, m, E, A, {
  242. match: /\$\d+/
  243. }, b, f, {
  244. className: "attr",
  245. begin: a + n.lookahead(":"),
  246. relevance: 0
  247. }, k, {
  248. begin: "(" + e.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*",
  249. keywords: "return throw case",
  250. relevance: 0,
  251. contains: [A, e.REGEXP_MODE, {
  252. className: "function",
  253. begin: R,
  254. returnBegin: !0,
  255. end: "\\s*=>",
  256. contains: [{
  257. className: "params",
  258. variants: [{
  259. begin: e.UNDERSCORE_IDENT_RE,
  260. relevance: 0
  261. }, {
  262. className: null,
  263. begin: /\(\s*\)/,
  264. skip: !0
  265. }, {
  266. begin: /\(/,
  267. end: /\)/,
  268. excludeBegin: !0,
  269. excludeEnd: !0,
  270. keywords: c,
  271. contains: N
  272. }]
  273. }]
  274. }, {
  275. begin: /,/,
  276. relevance: 0
  277. }, {
  278. match: /\s+/,
  279. relevance: 0
  280. }, {
  281. variants: [{
  282. begin: "<>",
  283. end: "</>"
  284. }, {
  285. match: /<[A-Za-z0-9\\._:-]+\s*\/>/
  286. }, {
  287. begin: t,
  288. "on:begin": r,
  289. end: s
  290. }],
  291. subLanguage: "xml",
  292. contains: [{
  293. begin: t,
  294. end: s,
  295. skip: !0,
  296. contains: ["self"]
  297. }]
  298. }]
  299. }, S, {
  300. beginKeywords: "while if switch catch for"
  301. }, {
  302. begin: "\\b(?!function)" + e.UNDERSCORE_IDENT_RE + "\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
  303. returnBegin: !0,
  304. label: "func.def",
  305. contains: [_, e.inherit(e.TITLE_MODE, {
  306. begin: a,
  307. className: "title.function"
  308. })]
  309. }, {
  310. match: /\.\.\./,
  311. relevance: 0
  312. }, p, {
  313. match: "\\$" + a,
  314. relevance: 0
  315. }, {
  316. match: [/\bconstructor(?=\s*\()/],
  317. className: {
  318. 1: "title.function"
  319. },
  320. contains: [_]
  321. }, v, {
  322. relevance: 0,
  323. match: /\b[A-Z][A-Z_0-9]+\b/,
  324. className: "variable.constant"
  325. }, h, w, {
  326. match: /\$[(.]/
  327. }]
  328. };
  329. };
  330. }
  331. });