| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 | "use strict";Object.defineProperty(exports, "__esModule", {  value: true});exports.readCodePoint = readCodePoint;exports.readInt = readInt;exports.readStringContents = readStringContents;var _isDigit = function isDigit(code) {  return code >= 48 && code <= 57;};const forbiddenNumericSeparatorSiblings = {  decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]),  hex: new Set([46, 88, 95, 120])};const isAllowedNumericSeparatorSibling = {  bin: ch => ch === 48 || ch === 49,  oct: ch => ch >= 48 && ch <= 55,  dec: ch => ch >= 48 && ch <= 57,  hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102};function readStringContents(type, input, pos, lineStart, curLine, errors) {  const initialPos = pos;  const initialLineStart = lineStart;  const initialCurLine = curLine;  let out = "";  let firstInvalidLoc = null;  let chunkStart = pos;  const {    length  } = input;  for (;;) {    if (pos >= length) {      errors.unterminated(initialPos, initialLineStart, initialCurLine);      out += input.slice(chunkStart, pos);      break;    }    const ch = input.charCodeAt(pos);    if (isStringEnd(type, ch, input, pos)) {      out += input.slice(chunkStart, pos);      break;    }    if (ch === 92) {      out += input.slice(chunkStart, pos);      const res = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors);      if (res.ch === null && !firstInvalidLoc) {        firstInvalidLoc = {          pos,          lineStart,          curLine        };      } else {        out += res.ch;      }      ({        pos,        lineStart,        curLine      } = res);      chunkStart = pos;    } else if (ch === 8232 || ch === 8233) {      ++pos;      ++curLine;      lineStart = pos;    } else if (ch === 10 || ch === 13) {      if (type === "template") {        out += input.slice(chunkStart, pos) + "\n";        ++pos;        if (ch === 13 && input.charCodeAt(pos) === 10) {          ++pos;        }        ++curLine;        chunkStart = lineStart = pos;      } else {        errors.unterminated(initialPos, initialLineStart, initialCurLine);      }    } else {      ++pos;    }  }  return {    pos,    str: out,    firstInvalidLoc,    lineStart,    curLine,    containsInvalid: !!firstInvalidLoc  };}function isStringEnd(type, ch, input, pos) {  if (type === "template") {    return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123;  }  return ch === (type === "double" ? 34 : 39);}function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) {  const throwOnInvalid = !inTemplate;  pos++;  const res = ch => ({    pos,    ch,    lineStart,    curLine  });  const ch = input.charCodeAt(pos++);  switch (ch) {    case 110:      return res("\n");    case 114:      return res("\r");    case 120:      {        let code;        ({          code,          pos        } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors));        return res(code === null ? null : String.fromCharCode(code));      }    case 117:      {        let code;        ({          code,          pos        } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors));        return res(code === null ? null : String.fromCodePoint(code));      }    case 116:      return res("\t");    case 98:      return res("\b");    case 118:      return res("\u000b");    case 102:      return res("\f");    case 13:      if (input.charCodeAt(pos) === 10) {        ++pos;      }    case 10:      lineStart = pos;      ++curLine;    case 8232:    case 8233:      return res("");    case 56:    case 57:      if (inTemplate) {        return res(null);      } else {        errors.strictNumericEscape(pos - 1, lineStart, curLine);      }    default:      if (ch >= 48 && ch <= 55) {        const startPos = pos - 1;        const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));        let octalStr = match[0];        let octal = parseInt(octalStr, 8);        if (octal > 255) {          octalStr = octalStr.slice(0, -1);          octal = parseInt(octalStr, 8);        }        pos += octalStr.length - 1;        const next = input.charCodeAt(pos);        if (octalStr !== "0" || next === 56 || next === 57) {          if (inTemplate) {            return res(null);          } else {            errors.strictNumericEscape(startPos, lineStart, curLine);          }        }        return res(String.fromCharCode(octal));      }      return res(String.fromCharCode(ch));  }}function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) {  const initialPos = pos;  let n;  ({    n,    pos  } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid));  if (n === null) {    if (throwOnInvalid) {      errors.invalidEscapeSequence(initialPos, lineStart, curLine);    } else {      pos = initialPos - 1;    }  }  return {    code: n,    pos  };}function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) {  const start = pos;  const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;  const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin;  let invalid = false;  let total = 0;  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {    const code = input.charCodeAt(pos);    let val;    if (code === 95 && allowNumSeparator !== "bail") {      const prev = input.charCodeAt(pos - 1);      const next = input.charCodeAt(pos + 1);      if (!allowNumSeparator) {        if (bailOnError) return {          n: null,          pos        };        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);      } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) {        if (bailOnError) return {          n: null,          pos        };        errors.unexpectedNumericSeparator(pos, lineStart, curLine);      }      ++pos;      continue;    }    if (code >= 97) {      val = code - 97 + 10;    } else if (code >= 65) {      val = code - 65 + 10;    } else if (_isDigit(code)) {      val = code - 48;    } else {      val = Infinity;    }    if (val >= radix) {      if (val <= 9 && bailOnError) {        return {          n: null,          pos        };      } else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) {        val = 0;      } else if (forceLen) {        val = 0;        invalid = true;      } else {        break;      }    }    ++pos;    total = total * radix + val;  }  if (pos === start || len != null && pos - start !== len || invalid) {    return {      n: null,      pos    };  }  return {    n: total,    pos  };}function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {  const ch = input.charCodeAt(pos);  let code;  if (ch === 123) {    ++pos;    ({      code,      pos    } = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors));    ++pos;    if (code !== null && code > 0x10ffff) {      if (throwOnInvalid) {        errors.invalidCodePoint(pos, lineStart, curLine);      } else {        return {          code: null,          pos        };      }    }  } else {    ({      code,      pos    } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors));  }  return {    code,    pos  };}//# sourceMappingURL=index.js.map
 |