| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | /** * @param {string} value * @returns {RegExp} * *//** * @param {RegExp | string } re * @returns {string} */function source(re) {  if (!re) return null;  if (typeof re === "string") return re;  return re.source;}/** * @param {...(RegExp | string) } args * @returns {string} */function concat(...args) {  const joined = args.map((x) => source(x)).join("");  return joined;}/** * Any of the passed expresssions may match * * Creates a huge this | this | that | that match * @param {(RegExp | string)[] } args * @returns {string} */function either(...args) {  const joined = '(' + args.map((x) => source(x)).join("|") + ")";  return joined;}/* Language: Apache Access Log Author: Oleg Efimov <efimovov@gmail.com> Description: Apache/Nginx Access Logs Website: https://httpd.apache.org/docs/2.4/logs.html#accesslog Audit: 2020 *//** @type LanguageFn */function accesslog(_hljs) {  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods  const HTTP_VERBS = [    "GET",    "POST",    "HEAD",    "PUT",    "DELETE",    "CONNECT",    "OPTIONS",    "PATCH",    "TRACE"  ];  return {    name: 'Apache Access Log',    contains: [      // IP      {        className: 'number',        begin: /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?\b/,        relevance: 5      },      // Other numbers      {        className: 'number',        begin: /\b\d+\b/,        relevance: 0      },      // Requests      {        className: 'string',        begin: concat(/"/, either(...HTTP_VERBS)),        end: /"/,        keywords: HTTP_VERBS,        illegal: /\n/,        relevance: 5,        contains: [          {            begin: /HTTP\/[12]\.\d'/,            relevance: 5          }        ]      },      // Dates      {        className: 'string',        // dates must have a certain length, this prevents matching        // simple array accesses a[123] and [] and other common patterns        // found in other languages        begin: /\[\d[^\]\n]{8,}\]/,        illegal: /\n/,        relevance: 1      },      {        className: 'string',        begin: /\[/,        end: /\]/,        illegal: /\n/,        relevance: 0      },      // User agent / relevance boost      {        className: 'string',        begin: /"Mozilla\/\d\.\d \(/,        end: /"/,        illegal: /\n/,        relevance: 3      },      // Strings      {        className: 'string',        begin: /"/,        end: /"/,        illegal: /\n/,        relevance: 0      }    ]  };}module.exports = accesslog;
 |