diff --git a/dist/ruff-action/index.cjs b/dist/ruff-action/index.cjs index d3d152c..376960b 100644 --- a/dist/ruff-action/index.cjs +++ b/dist/ruff-action/index.cjs @@ -31823,11 +31823,11 @@ var import_node_fs2 = __toESM(require("node:fs"), 1); // node_modules/smol-toml/dist/error.js function getLineColFromPtr(string, ptr) { - let lines = string.slice(0, ptr).split(/\r\n|\n|\r/g); + let lines = string.slice(0, ptr).split(/\r?\n/); return [lines.length, lines.pop().length + 1]; } function makeCodeBlock(string, line, column) { - let lines = string.split(/\r\n|\n|\r/g); + let lines = string.split(/\r?\n/); let codeblock = ""; let numberLen = (Math.log10(line + 1) | 0) + 1; for (let i = line - 1; i <= line + 1; i++) { @@ -31845,7 +31845,7 @@ function makeCodeBlock(string, line, column) { } return codeblock; } -var TomlError = class extends Error { +var TomlError = class _TomlError extends Error { line; column; codeblock; @@ -31859,116 +31859,165 @@ ${codeblock}`, options); this.column = column; this.codeblock = codeblock; } + /** @internal */ + static x(message, ctx, ptr) { + throw new _TomlError(message, { toml: ctx.s, ptr: ptr ?? ctx.p }); + } }; -// node_modules/smol-toml/dist/util.js -function isEscaped(str, ptr) { - let i = 0; - while (str[ptr - ++i] === "\\") - ; - return --i && i % 2; -} -function indexOfNewline(str, start = 0, end = str.length) { - let idx = str.indexOf("\n", start); - if (str[idx - 1] === "\r") - idx--; - return idx <= end ? idx : -1; -} -function skipComment(str, ptr) { - for (let i = ptr; i < str.length; i++) { - let c = str[i]; - if (c === "\n") - return i; - if (c === "\r" && str[i + 1] === "\n") - return i + 1; - if (c < " " && c !== " " || c === "\x7F") { - throw new TomlError("control characters are not allowed in comments", { - toml: str, - ptr - }); +// node_modules/smol-toml/dist/primitive.js +function parseString(ctx) { + let startPtr = ctx.p; + let c = ctx.s.charCodeAt(ctx.p++); + let first = c; + let isLiteral = c === 39; + let isMultiline = c === ctx.s.charCodeAt(ctx.p) && c === ctx.s.charCodeAt(ctx.p + 1); + if (isMultiline) { + if ((c = ctx.s.charCodeAt(ctx.p += 2)) === 10) + ctx.p++; + else if (c === 13 && ctx.s.charCodeAt(ctx.p + 1) === 10) + ctx.p += 2; + } + let parsed = ""; + let sliceStart = ctx.p; + let state = 0; + for (; ctx.p < ctx.s.length; ctx.p++) { + c = ctx.s.charCodeAt(ctx.p); + if (isMultiline && (c === 10 || c === 13 && ctx.s.charCodeAt(ctx.p + 1) === 10)) { + state = state && 3; + } else if (c < 32 && c !== 9 || c === 127) { + TomlError.x("control characters are not allowed in strings", ctx); + } else if ((!state || state === 3) && c === first && (!isMultiline || ctx.s.charCodeAt(ctx.p + 1) === first && ctx.s.charCodeAt(ctx.p + 2) === first)) { + if (isMultiline) { + if (ctx.s.charCodeAt(ctx.p + 3) === first) + ctx.p++; + if (ctx.s.charCodeAt(ctx.p + 3) === first) + ctx.p++; + } + if (!state) { + let s = ctx.s.slice(sliceStart, ctx.p); + parsed = parsed ? parsed + s : s; + } + ctx.p += isMultiline ? 3 : 1; + return parsed; + } else if (!state) { + if (!isLiteral && c === 92) { + parsed += ctx.s.slice(sliceStart, sliceStart = ctx.p); + state = 1; + } + } else if (state === 1) { + if (c === 120 || c === 117 || c === 85) { + let errPtr = ctx.p++ - 1; + let value = 0; + let len = c === 120 ? 2 : c === 117 ? 4 : 8; + for (let j = 0; j < len; j++, ctx.p++) { + let hex = ctx.s.charCodeAt(ctx.p); + let digit = ( + /* 0-9 */ + hex >= 48 && hex <= 57 ? hex - 48 : ( + /* A-F */ + hex >= 65 && hex <= 70 ? hex - 65 + 10 : ( + /* a-f */ + hex >= 97 && hex <= 102 ? hex - 97 + 10 : -1 + ) + ) + ); + if (digit < 0) + TomlError.x("invalid non-hex character in unicode escape", ctx); + value = value << 4 | digit; + } + if (value < 0 || value > 1114111 || value >= 55296 && value <= 57343) { + TomlError.x("invalid unicode escape", ctx, errPtr); + } + parsed += String.fromCodePoint(value); + sliceStart = ctx.p--; + state = 0; + } else if (isMultiline && (c === 32 || c === 9)) { + state = 2; + } else { + if (c === 98) + parsed += "\b"; + else if (c === 116) + parsed += " "; + else if (c === 110) + parsed += "\n"; + else if (c === 102) + parsed += "\f"; + else if (c === 114) + parsed += "\r"; + else if (c === 101) + parsed += "\x1B"; + else if (c === 34) + parsed += '"'; + else if (c === 92) + parsed += "\\"; + else + TomlError.x("unrecognised escape sequence", ctx); + sliceStart = ctx.p + 1; + state = 0; + } + } else if (c !== 32 && c !== 9) { + if (state === 2) + TomlError.x("invalid escape: only line-ending whitespace may be escaped", ctx, sliceStart); + state = !isLiteral && c === 92 ? 1 : 0; + sliceStart = ctx.p; } } - return str.length; -} -function skipVoid(str, ptr, banNewLines, banComments) { - let c; - while (1) { - while ((c = str[ptr]) === " " || c === " " || !banNewLines && (c === "\n" || c === "\r" && str[ptr + 1] === "\n")) - ptr++; - if (banComments || c !== "#") - break; - ptr = skipComment(str, ptr); - } - return ptr; -} -function skipUntil(str, ptr, sep6, end, banNewLines = false) { - if (!end) { - ptr = indexOfNewline(str, ptr); - return ptr < 0 ? str.length : ptr; - } - for (let i = ptr; i < str.length; i++) { - let c = str[i]; - if (c === "#") { - i = indexOfNewline(str, i); - } else if (c === sep6) { - return i + 1; - } else if (c === end || banNewLines && (c === "\n" || c === "\r" && str[i + 1] === "\n")) { - return i; - } - } - throw new TomlError("cannot find end of structure", { - toml: str, - ptr - }); -} -function getStringEnd(str, seek) { - let first = str[seek]; - let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2] ? str.slice(seek, seek + 3) : first; - seek += target.length - 1; - do - seek = str.indexOf(target, ++seek); - while (seek > -1 && first !== "'" && isEscaped(str, seek)); - if (seek > -1) { - seek += target.length; - if (target.length > 1) { - if (str[seek] === first) - seek++; - if (str[seek] === first) - seek++; - } - } - return seek; + TomlError.x("unfinished string", ctx, startPtr); } // node_modules/smol-toml/dist/date.js -var DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i; +var DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i; var TomlDate = class _TomlDate extends Date { #hasDate = false; #hasTime = false; #offset = null; - constructor(date) { + constructor(date, fasttype, unsafeDelim) { let hasDate = true; let hasTime = true; let offset = "Z"; + let c; if (typeof date === "string") { - let match3 = date.match(DATE_TIME_RE); - if (match3) { - if (!match3[1]) { - hasDate = false; - date = `0000-01-01T${date}`; + if (fasttype) + prep: { + if (fasttype < 3) { + if (+date.slice(11, 13) > 23) { + date = ""; + break prep; + } + if (fasttype === 2) { + offset = null; + date += "Z"; + } else if ((c = date.charCodeAt(date.length - 1)) !== 90 && c !== 122) { + offset = date.slice(date.length - 6); + } + if (unsafeDelim) + date = date.slice(0, 10) + "T" + date.slice(11); + } else if (fasttype === 4) { + date = +date.slice(0, 2) > 23 ? "" : `0000-01-01T${date}Z`; + } + hasDate = fasttype !== 4; + hasTime = fasttype !== 3; } - hasTime = !!match3[2]; - hasTime && date[10] === " " && (date = date.replace(" ", "T")); - if (match3[2] && +match3[2] > 23) { - date = ""; + else { + let match3 = date.match(DATE_TIME_RE); + if (match3) { + if (!match3[1]) { + hasDate = false; + date = `0000-01-01T${date}`; + } + hasTime = !!match3[2]; + hasTime && date[10] === " " && (date = date.replace(" ", "T")); + if (match3[2] && +match3[2] > 23) { + date = ""; + } else { + offset = match3[3] || null; + if (!offset && hasTime) + date += "Z"; + } } else { - offset = match3[3] || null; - date = date.toUpperCase(); - if (!offset && hasTime) - date += "Z"; + date = ""; } - } else { - date = ""; } } super(date); @@ -32001,7 +32050,7 @@ var TomlDate = class _TomlDate extends Date { return iso.slice(11, 23); if (this.#offset === null) return iso.slice(0, -1); - if (this.#offset === "Z") + if (this.#offset === "Z" || this.#offset === "z") return iso; let offset = +this.#offset.slice(1, 3) * 60 + +this.#offset.slice(4, 6); offset = this.#offset[0] === "-" ? offset : -offset; @@ -32032,362 +32081,360 @@ var TomlDate = class _TomlDate extends Date { } }; -// node_modules/smol-toml/dist/primitive.js -var INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/; -var FLOAT_REGEX = /^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/; -var LEADING_ZERO = /^[+-]?0[0-9_]/; -var ESCAPE_REGEX = /^[0-9a-f]{2,8}$/i; -var ESC_MAP = { - b: "\b", - t: " ", - n: "\n", - f: "\f", - r: "\r", - e: "\x1B", - '"': '"', - "\\": "\\" -}; -function parseString(str, ptr = 0, endPtr = str.length) { - let isLiteral = str[ptr] === "'"; - let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1]; - if (isMultiline) { - endPtr -= 2; - if (str[ptr += 2] === "\r") - ptr++; - if (str[ptr] === "\n") - ptr++; - } - let tmp = 0; - let isEscape; - let parsed = ""; - let sliceStart = ptr; - while (ptr < endPtr - 1) { - let c = str[ptr++]; - if (c === "\n" || c === "\r" && str[ptr] === "\n") { - if (!isMultiline) { - throw new TomlError("newlines are not allowed in strings", { - toml: str, - ptr: ptr - 1 - }); - } - } else if (c < " " && c !== " " || c === "\x7F") { - throw new TomlError("control characters are not allowed in strings", { - toml: str, - ptr: ptr - 1 - }); - } - if (isEscape) { - isEscape = false; - if (c === "x" || c === "u" || c === "U") { - let code = str.slice(ptr, ptr += c === "x" ? 2 : c === "u" ? 4 : 8); - if (!ESCAPE_REGEX.test(code)) { - throw new TomlError("invalid unicode escape", { - toml: str, - ptr: tmp - }); - } - try { - parsed += String.fromCodePoint(parseInt(code, 16)); - } catch { - throw new TomlError("invalid unicode escape", { - toml: str, - ptr: tmp - }); - } - } else if (isMultiline && (c === "\n" || c === " " || c === " " || c === "\r")) { - ptr = skipVoid(str, ptr - 1, true); - if (str[ptr] !== "\n" && str[ptr] !== "\r") { - throw new TomlError("invalid escape: only line-ending whitespace may be escaped", { - toml: str, - ptr: tmp - }); - } - ptr = skipVoid(str, ptr); - } else if (c in ESC_MAP) { - parsed += ESC_MAP[c]; - } else { - throw new TomlError("unrecognized escape sequence", { - toml: str, - ptr: tmp - }); - } - sliceStart = ptr; - } else if (!isLiteral && c === "\\") { - tmp = ptr - 1; - isEscape = true; - parsed += str.slice(sliceStart, tmp); - } - } - return parsed + str.slice(sliceStart, endPtr - 1); +// node_modules/smol-toml/dist/extract.js +function isDigit(char, base = 10) { + return base === 16 ? char > 47 && char < 58 || char > 64 && char < 71 || char > 96 && char < 103 : char > 47 && char < 48 + base; } -function parseValue(value, toml, ptr, integersAsBigInt) { - if (value === "true") - return true; - if (value === "false") - return false; - if (value === "-inf") - return -Infinity; - if (value === "inf" || value === "+inf") - return Infinity; - if (value === "nan" || value === "+nan" || value === "-nan") - return NaN; - if (value === "-0") - return integersAsBigInt ? 0n : 0; - let isInt = INT_REGEX.test(value); - if (isInt || FLOAT_REGEX.test(value)) { - if (LEADING_ZERO.test(value)) { - throw new TomlError("leading zeroes are not allowed", { - toml, - ptr - }); +function isEndOfValue(char, delim) { + return char === 32 || char === 9 || char === 10 || char === 13 || // Structure end or next value delimiter + delim && (char === delim || char === 44) || // Comment + char === 35; +} +function extractValue(ctx, end) { + let errPtr = ctx.p; + let c = ctx.s.charCodeAt(ctx.p); + if (c === 91 || c === 123) { + ctx.d-- || TomlError.x("document contains excessively nested structures. aborting.", ctx); + let value = c === 91 ? parseArray(ctx) : parseInlineTable(ctx); + ctx.d++; + return value; + } + if (c === 34 || c === 39) { + return parseString(ctx); + } + if (c === 116) { + if (ctx.s.charCodeAt(++ctx.p) !== 114 || ctx.s.charCodeAt(++ctx.p) !== 117 || ctx.s.charCodeAt(++ctx.p) !== 101) + TomlError.x("invalid value", ctx, errPtr); + return ctx.p++, true; + } + if (c === 102) { + if (ctx.s.charCodeAt(++ctx.p) !== 97 || ctx.s.charCodeAt(++ctx.p) !== 108 || ctx.s.charCodeAt(++ctx.p) !== 115 || ctx.s.charCodeAt(++ctx.p) !== 101) + TomlError.x("invalid value", ctx, errPtr); + return ctx.p++, false; + } + if (c === 43 || c === 45) { + return parseNumber(ctx, ctx.p, ctx.s.charCodeAt(++ctx.p), 44 - c, end); + } + if (ctx.s.charCodeAt(ctx.p + 4) === 45 && ctx.s.charCodeAt(ctx.p + 7) === 45) { + return parseDate(ctx, c, end); + } + if (ctx.s.charCodeAt(ctx.p + 2) === 58) { + return parseTime(ctx, c, end); + } + return parseNumber(ctx, ctx.p, c, 0, end); +} +function parseNumber(ctx, startPtr, startChr, sign, endChr) { + let c = startChr; + let state = 0; + let hasUnderscores = false; + if (c === 105) { + if (ctx.s.charCodeAt(++ctx.p) !== 110 || ctx.s.charCodeAt(++ctx.p) !== 102) + TomlError.x("invalid value", ctx, startPtr); + return ctx.p++, (sign || 1) / 0; + } + if (c === 110) { + if (ctx.s.charCodeAt(++ctx.p) !== 97 || ctx.s.charCodeAt(++ctx.p) !== 110) + TomlError.x("invalid value", ctx, startPtr); + return ctx.p++, NaN; + } + if (c === 48) { + if (++ctx.p >= ctx.s.length || isEndOfValue(c = ctx.s.charCodeAt(ctx.p), endChr)) + return ctx.bi === true ? 0n : 0; + if (!sign) { + if (c === 120) + return parseIntegerBaseN(ctx, startPtr, 16, endChr); + else if (c === 98) + return parseIntegerBaseN(ctx, startPtr, 2, endChr); + else if (c === 111) + return parseIntegerBaseN(ctx, startPtr, 8, endChr); } - value = value.replace(/_/g, ""); - let numeric2 = +value; - if (isNaN(numeric2)) { - throw new TomlError("invalid number", { - toml, - ptr - }); - } - if (isInt) { - if ((isInt = !Number.isSafeInteger(numeric2)) && !integersAsBigInt) { - throw new TomlError("integer value cannot be represented losslessly", { - toml, - ptr - }); + if (c === 46) + state = 2; + else if (c === 101 || c === 69) + state = 4; + else + TomlError.x("illegal leading zero", ctx, startPtr); + } else if (!isDigit(c)) + TomlError.x("invalid value", ctx, startPtr); + while (++ctx.p < ctx.s.length && (c = ctx.s.charCodeAt(ctx.p), !isEndOfValue(c, endChr))) { + if (!state) + state = 1; + if (c === 95) { + if (!(state & 1)) + TomlError.x("illegal underscore", ctx); + state += 11; + hasUnderscores = true; + } else if (state === 1 && c === 46) + state = 2; + else if ((state === 1 || state === 3) && (c === 101 || c === 69)) + state = 4; + else if (state === 4 && (c === 43 || c === 45)) { + state = 6; + } else if (!isDigit(c)) + TomlError.x(`illegal character in numeric literal`, ctx); + else if (state > 9) + state -= 11; + else if (!(state & 1)) + state++; + } + if (!state) { + let val = (startChr - 48) * (sign || 1); + return ctx.bi === true ? BigInt(val) : val; + } + if (!(state & 1)) + TomlError.x("unfinished numeric value", ctx, startPtr); + let str = ctx.s.slice(startPtr, ctx.p); + if (hasUnderscores) + str = str.replaceAll("_", ""); + return state > 1 ? parseFloat(str) : parseInteger(ctx, str, 10, startPtr); +} +function parseIntegerBaseN(ctx, startPtr, base, endChr) { + let c, underscore = 1; + while (++ctx.p < ctx.s.length && (c = ctx.s.charCodeAt(ctx.p), !isEndOfValue(c, endChr))) { + if (c === 95) { + if (underscore & 1) + TomlError.x("illegal underscore", ctx); + underscore = 3; + } else if (!isDigit(c, base)) + TomlError.x(`illegal character in numeric literal`, ctx); + else if (underscore & 1) + underscore--; + } + if (underscore & 1) + TomlError.x("unfinished numeric value", ctx); + let str = ctx.s.slice(startPtr + 2, ctx.p); + if (underscore) + str = str.replaceAll("_", ""); + return parseInteger(ctx, str, base, startPtr); +} +function parseInteger(ctx, str, base, startPtr) { + if (ctx.bi !== true) + int: { + let val = parseInt(str, base); + if (!Number.isSafeInteger(val)) { + if (ctx.bi) + break int; + TomlError.x("integer value cannot be represented losslessly", ctx, startPtr); } - if (isInt || integersAsBigInt === true) - numeric2 = BigInt(value); + return val; } - return numeric2; + return base === 10 ? BigInt(str) : BigInt((base === 2 ? "0b" : base === 8 ? "0o" : "0x") + str); +} +function parseDate(ctx, c, endChr) { + let startPtr = ctx.p++, unsafeSeparator; + if (!isDigit(c) || !isDigit(ctx.s.charCodeAt(ctx.p++)) || !isDigit(ctx.s.charCodeAt(ctx.p++)) || !isDigit(ctx.s.charCodeAt(ctx.p++))) { + return parseNumber(ctx, ctx.p = startPtr, c, 0, endChr); } - const date = new TomlDate(value); - if (!date.isValid()) { - throw new TomlError("invalid value", { - toml, - ptr - }); + ctx.p += 5; + if (!isDigit(ctx.s.charCodeAt(ctx.p++))) + TomlError.x("invalid date-time: date part is malformed", ctx, startPtr); + if (ctx.p >= ctx.s.length || ((c = ctx.s.charCodeAt(ctx.p)) !== 32 || (unsafeSeparator = true, !isDigit(ctx.s.charCodeAt(ctx.p + 1)))) && c !== 84 && c !== 116) { + let t2 = ctx.s.slice(startPtr, ctx.p); + return readDate(ctx, t2, 3, false, startPtr); + } + if (ctx.s.charCodeAt(ctx.p += 3) !== 58) + TomlError.x("invalid date-time: time part is malformed", ctx, startPtr); + if (ctx.s.charCodeAt(ctx.p += 3) === 58) + ctx.p += 3; + if (ctx.s.charCodeAt(ctx.p) === 46) + while (isDigit(ctx.s.charCodeAt(++ctx.p))) + ; + if (c = ctx.s.charCodeAt(ctx.p)) { + if (c === 90 || c === 122) { + let t2 = ctx.s.slice(startPtr, ++ctx.p); + return readDate(ctx, t2, 1, unsafeSeparator, startPtr, "[+00:00]"); + } + if (c === 43 || c === 45) { + let t2 = ctx.s.slice(startPtr, ctx.p += 6); + return readDate(ctx, t2, 1, unsafeSeparator, startPtr, !ctx.ld && "[" + ctx.s.slice(ctx.p - 6, ctx.p) + "]"); + } + } + let t = ctx.s.slice(startPtr, ctx.p); + return readDate(ctx, t, 2, unsafeSeparator, startPtr); +} +function parseTime(ctx, c, endChr) { + let start = ctx.p; + if (!isDigit(c) || !isDigit(ctx.s.charCodeAt(++ctx.p))) { + return parseNumber(ctx, --ctx.p, c, 0, endChr); + } + if (ctx.s.charCodeAt(ctx.p += 4) === 58) + ctx.p += 3; + if (ctx.s.charCodeAt(ctx.p) === 46) + while (isDigit(ctx.s.charCodeAt(++ctx.p))) + ; + let t = ctx.s.slice(start, ctx.p); + return readDate(ctx, t, 4, false, start); +} +function readDate(ctx, str, type, unsafeDelim, errPtr, temporalSuffix) { + if (ctx.ld) { + let date = new TomlDate(str, type, unsafeDelim); + if (!date.isValid()) + TomlError.x("invalid date", ctx, errPtr); + return date; + } + try { + if (temporalSuffix) + str += temporalSuffix; + switch (type) { + case 1: + return Temporal.ZonedDateTime.from(str); + case 2: + return Temporal.PlainDateTime.from(str); + case 3: + return Temporal.PlainDate.from(str); + case 4: + return Temporal.PlainTime.from(str); + } + } catch (e) { + TomlError.x(e instanceof Error ? e.message : "" + e, ctx, errPtr); } - return date; } -// node_modules/smol-toml/dist/extract.js -function sliceAndTrimEndOf(str, startPtr, endPtr) { - let value = str.slice(startPtr, endPtr); - let commentIdx = value.indexOf("#"); - if (commentIdx > -1) { - skipComment(str, commentIdx); - value = value.slice(0, commentIdx); +// node_modules/smol-toml/dist/util.js +function skipComment(ctx) { + for (; ctx.p < ctx.s.length; ctx.p++) { + let c = ctx.s.charCodeAt(ctx.p); + if (c === 10) + break; + if (c === 13 && ctx.s.charCodeAt(ctx.p + 1) === 10) { + ctx.p++; + break; + } + if (c < 32 && c !== 9 || c === 127) { + TomlError.x("control characters are not allowed in comments", ctx); + } } - return [value.trimEnd(), commentIdx]; } -function extractValue(str, ptr, end, depth, integersAsBigInt) { - if (depth === 0) { - throw new TomlError("document contains excessively nested structures. aborting.", { - toml: str, - ptr - }); +function skipVoid(ctx, banNewLines, banComments) { + let c; + while (ctx.p < ctx.s.length) { + while (ctx.p < ctx.s.length && ((c = ctx.s.charCodeAt(ctx.p)) === 32 || c === 9 || !banNewLines && (c === 10 || c === 13 && ctx.s.charCodeAt(ctx.p + 1) === 10))) + ctx.p++; + if (banComments || c !== 35) + break; + skipComment(ctx); } - let c = str[ptr]; - if (c === "[" || c === "{") { - let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth, integersAsBigInt) : parseInlineTable(str, ptr, depth, integersAsBigInt); - if (end) { - endPtr2 = skipVoid(str, endPtr2); - if (str[endPtr2] === ",") - endPtr2++; - else if (str[endPtr2] !== end) { - throw new TomlError("expected comma or end of structure", { - toml: str, - ptr: endPtr2 - }); - } - } - return [value, endPtr2]; - } - let endPtr; - if (c === '"' || c === "'") { - endPtr = getStringEnd(str, ptr); - let parsed = parseString(str, ptr, endPtr); - if (end) { - endPtr = skipVoid(str, endPtr); - if (str[endPtr] && str[endPtr] !== "," && str[endPtr] !== end && str[endPtr] !== "\n" && str[endPtr] !== "\r") { - throw new TomlError("unexpected character encountered", { - toml: str, - ptr: endPtr - }); - } - endPtr += +(str[endPtr] === ","); - } - return [parsed, endPtr]; - } - endPtr = skipUntil(str, ptr, ",", end); - let slice = sliceAndTrimEndOf(str, ptr, endPtr - +(str[endPtr - 1] === ",")); - if (!slice[0]) { - throw new TomlError("incomplete key-value declaration: no value specified", { - toml: str, - ptr - }); - } - if (end && slice[1] > -1) { - endPtr = skipVoid(str, ptr + slice[1]); - endPtr += +(str[endPtr] === ","); - } - return [ - parseValue(slice[0], str, ptr, integersAsBigInt), - endPtr - ]; } // node_modules/smol-toml/dist/struct.js -var KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \t]*$/; -function parseKey(str, ptr, end = "=") { - let dot = ptr - 1; +function parseKey(ctx, end = 61) { + let startPtr; + let state = 0; let parsed = []; - let endPtr = str.indexOf(end, ptr); - if (endPtr < 0) { - throw new TomlError("incomplete key-value: cannot find end of key", { - toml: str, - ptr - }); - } + let sliceStart; + let c = ctx.s.charCodeAt(startPtr = ctx.p); do { - let c = str[ptr = ++dot]; - if (c !== " " && c !== " ") { - if (c === '"' || c === "'") { - if (c === str[ptr + 1] && c === str[ptr + 2]) { - throw new TomlError("multiline strings are not allowed in keys", { - toml: str, - ptr - }); - } - let eos = getStringEnd(str, ptr); - if (eos < 0) { - throw new TomlError("unfinished string encountered", { - toml: str, - ptr - }); - } - dot = str.indexOf(".", eos); - let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot); - let newLine = indexOfNewline(strEnd); - if (newLine > -1) { - throw new TomlError("newlines are not allowed in keys", { - toml: str, - ptr: ptr + dot + newLine - }); - } - if (strEnd.trimStart()) { - throw new TomlError("found extra tokens after the string part", { - toml: str, - ptr: eos - }); - } - if (endPtr < eos) { - endPtr = str.indexOf(end, eos); - if (endPtr < 0) { - throw new TomlError("incomplete key-value: cannot find end of key", { - toml: str, - ptr - }); - } - } - parsed.push(parseString(str, ptr, eos)); - } else { - dot = str.indexOf(".", ptr); - let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot); - if (!KEY_PART_RE.test(part)) { - throw new TomlError("only letter, numbers, dashes and underscores are allowed in keys", { - toml: str, - ptr - }); - } - parsed.push(part.trimEnd()); + if (c === end) { + if (!state) + TomlError.x("unexpected end of key", ctx); + if (state === 1) + parsed.push(ctx.s.slice(sliceStart, ctx.p)); + return ctx.p++, parsed; + } else if (c === 46) { + if (!state) + TomlError.x("illegal empty bare key", ctx); + if (state === 1) + parsed.push(ctx.s.slice(sliceStart, ctx.p)); + state = 0; + } else if (!state && (c === 34 || c === 39)) { + if (c === ctx.s.charCodeAt(ctx.p + 1) && c === ctx.s.charCodeAt(ctx.p + 2)) + TomlError.x("illegal quoted key: multiline strings are not allowed", ctx); + parsed.push(parseString(ctx)); + state = 2; + ctx.p--; + } else if (c === 32 || c === 9) { + if (state === 1) { + parsed.push(ctx.s.slice(sliceStart, ctx.p)); + state = 2; } + } else if (state === 2 || c < 48 && c !== 45 || c > 57 && c < 65 || c > 90 && c < 97 && c !== 95 || c > 122) { + TomlError.x("illegal character in key", ctx); + } else if (!state) { + state = 1; + sliceStart = ctx.p; } - } while (dot + 1 && dot < endPtr); - return [parsed, skipVoid(str, endPtr + 1, true, true)]; + } while (c = ctx.s.charCodeAt(++ctx.p)); + TomlError.x("incomplete key-value: cannot find end of key", ctx, startPtr); } -function parseInlineTable(str, ptr, depth, integersAsBigInt) { - let res = {}; +function parseInlineTable(ctx) { + let startPtr = ctx.p++; + let res = /* @__PURE__ */ Object.create(null); let seen = /* @__PURE__ */ new Set(); let c; - ptr++; - while ((c = str[ptr++]) !== "}" && c) { - if (c === ",") { - throw new TomlError("expected value, found comma", { - toml: str, - ptr: ptr - 1 - }); - } else if (c === "#") - ptr = skipComment(str, ptr); - else if (c !== " " && c !== " " && c !== "\n" && c !== "\r") { - let k; - let t = res; - let hasOwn = false; - let [key, keyEndPtr] = parseKey(str, ptr - 1); - for (let i = 0; i < key.length; i++) { - if (i) - t = hasOwn ? t[k] : t[k] = {}; - k = key[i]; - if ((hasOwn = Object.hasOwn(t, k)) && (typeof t[k] !== "object" || seen.has(t[k]))) { - throw new TomlError("trying to redefine an already defined value", { - toml: str, - ptr - }); - } - if (!hasOwn && k === "__proto__") { - Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true }); - } - } - if (hasOwn) { - throw new TomlError("trying to redefine an already defined value", { - toml: str, - ptr - }); - } - let [value, valueEndPtr] = extractValue(str, keyEndPtr, "}", depth - 1, integersAsBigInt); - seen.add(value); - t[k] = value; - ptr = valueEndPtr; + while (ctx.p < ctx.s.length) { + skipVoid(ctx); + if ((c = ctx.s.charCodeAt(ctx.p)) === 125) { + ctx.p++; + return res; } + let k; + let t = res; + let hasOwn = false; + let errPtr = ctx.p; + let key = parseKey(ctx); + for (let i = 0; i < key.length; i++) { + if (i) + t = hasOwn ? t[k] : t[k] = /* @__PURE__ */ Object.create(null); + k = key[i]; + if ((hasOwn = Object.hasOwn(t, k)) && (typeof t[k] !== "object" || seen.has(t[k]))) { + TomlError.x("trying to redefine an already defined value", ctx, errPtr); + } + let unsafe = k === "__proto__"; + if (ctx.uk && (unsafe || k === "constructor")) { + t = ctx.uk !== 1 && TomlError.x("document contains an unsafe property", ctx, errPtr); + break; + } + if (!hasOwn && unsafe) { + Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true }); + } + } + if (hasOwn) { + TomlError.x("trying to redefine an already defined value", ctx, errPtr); + } + skipVoid(ctx, true, true); + let value = extractValue( + ctx, + 125 + /* } */ + ); + if (t && typeof (t[k] = value) === "object") + seen.add(value); + skipVoid(ctx); + if ((c = ctx.s.charCodeAt(ctx.p++)) === 125) { + return res; + } + if (c !== 44) + TomlError.x("expected comma or end of structure", ctx, ctx.p - 1); } - if (!c) { - throw new TomlError("unfinished table encountered", { - toml: str, - ptr - }); - } - return [res, ptr]; + TomlError.x("unfinished table", ctx, startPtr); } -function parseArray(str, ptr, depth, integersAsBigInt) { +function parseArray(ctx) { + let startPtr = ctx.p++; let res = []; let c; - ptr++; - while ((c = str[ptr++]) !== "]" && c) { - if (c === ",") { - throw new TomlError("expected value, found comma", { - toml: str, - ptr: ptr - 1 - }); - } else if (c === "#") - ptr = skipComment(str, ptr); - else if (c !== " " && c !== " " && c !== "\n" && c !== "\r") { - let e = extractValue(str, ptr - 1, "]", depth - 1, integersAsBigInt); - res.push(e[0]); - ptr = e[1]; + while (ctx.p < ctx.s.length) { + skipVoid(ctx); + if ((c = ctx.s.charCodeAt(ctx.p)) === 93) { + ctx.p++; + return res; } + res.push(extractValue( + ctx, + 93 + /* ] */ + )); + skipVoid(ctx); + if ((c = ctx.s.charCodeAt(ctx.p++)) === 93) { + return res; + } + if (c !== 44) + TomlError.x("expected comma or end of structure", ctx, ctx.p - 1); } - if (!c) { - throw new TomlError("unfinished array encountered", { - toml: str, - ptr - }); - } - return [res, ptr]; + TomlError.x("unfinished array", ctx, startPtr); } // node_modules/smol-toml/dist/parse.js -function peekTable(key, table, meta, type) { +function peekTable(ctx, key, table, meta, type) { let t = table; let m = meta; let k; @@ -32395,7 +32442,7 @@ function peekTable(key, table, meta, type) { let state; for (let i = 0; i < key.length; i++) { if (i) { - t = hasOwn ? t[k] : t[k] = {}; + t = hasOwn ? t[k] : t[k] = /* @__PURE__ */ Object.create(null); m = (state = m[k]).c; if (type === 0 && (state.t === 1 || state.t === 2)) { return null; @@ -32411,7 +32458,10 @@ function peekTable(key, table, meta, type) { return null; } if (!hasOwn) { - if (k === "__proto__") { + let unsafe = k === "__proto__"; + if (ctx.uk && (unsafe || k === "constructor")) + return false; + if (unsafe) { Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true }); Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true }); } @@ -32419,7 +32469,7 @@ function peekTable(key, table, meta, type) { t: i < key.length - 1 && type === 2 ? 3 : type, d: false, i: 0, - c: {} + c: /* @__PURE__ */ Object.create(null) }; } } @@ -32432,85 +32482,103 @@ function peekTable(key, table, meta, type) { state.d = true; t[k] = []; } - t[k].push(t = {}); - state.c[state.i++] = state = { t: 1, d: false, i: 0, c: {} }; + t[k].push(t = /* @__PURE__ */ Object.create(null)); + state.c[state.i++] = state = { t: 1, d: false, i: 0, c: /* @__PURE__ */ Object.create(null) }; } if (state.d) { return null; } state.d = true; if (type === 1) { - t = hasOwn ? t[k] : t[k] = {}; + t = hasOwn ? t[k] : t[k] = /* @__PURE__ */ Object.create(null); } else if (type === 0 && hasOwn) { return null; } return [k, t, state.c]; } -function parse2(toml, { maxDepth = 1e3, integersAsBigInt } = {}) { - let res = {}; - let meta = {}; +function validateTablePeek(ctx, peek, ptr) { + if (peek === null || ctx.uk === 2) + TomlError.x(peek === null ? "trying to redefine an already defined table or value" : "document contains an unsafe property", ctx, ptr); +} +function parse2(toml, options = {}) { + let ctx = { + s: toml, + p: 0, + d: options.maxDepth ?? 1e3, + bi: options.integersAsBigInt ?? false, + ld: options.useLegacyDate ?? true, + uk: options.unsafeKeyBehaviour === "throw" ? 2 : options.unsafeKeyBehaviour === "drop" ? 1 : 0 + }; + let res = /* @__PURE__ */ Object.create(null); + let meta = /* @__PURE__ */ Object.create(null); + let tmp; + let skipping = false; let tbl = res; let m = meta; - for (let ptr = skipVoid(toml, 0); ptr < toml.length; ) { - if (toml[ptr] === "[") { - let isTableArray = toml[++ptr] === "["; - let k = parseKey(toml, ptr += +isTableArray, "]"); + if (toml.charCodeAt(0) === 65279) + ctx.p++; + skipVoid(ctx); + while (ctx.p < toml.length) { + if (toml.charCodeAt(ctx.p) === 91) { + let isTableArray = toml.charCodeAt(++ctx.p) === 91; + tmp = ctx.p += +isTableArray; + skipping = false; + let k = parseKey( + ctx, + 93 + /* ] */ + ); if (isTableArray) { - if (toml[k[1] - 1] !== "]") { - throw new TomlError("expected end of table declaration", { - toml, - ptr: k[1] - 1 - }); + if (toml.charCodeAt(ctx.p) !== 93) { + TomlError.x("expected end of table array declaration", ctx); } - k[1]++; + ctx.p++; } let p = peekTable( - k[0], + ctx, + k, res, meta, isTableArray ? 2 : 1 /* Type.EXPLICIT */ ); if (!p) { - throw new TomlError("trying to redefine an already defined table or value", { - toml, - ptr - }); + validateTablePeek(ctx, p, tmp); + skipping = true; + } else { + m = p[2]; + tbl = p[1]; } - m = p[2]; - tbl = p[1]; - ptr = k[1]; } else { - let k = parseKey(toml, ptr); + tmp = ctx.p; + let k = parseKey(ctx); let p = peekTable( - k[0], + ctx, + k, tbl, m, 0 /* Type.DOTTED */ ); - if (!p) { - throw new TomlError("trying to redefine an already defined table or value", { - toml, - ptr - }); - } - let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt); - p[1][p[0]] = v[0]; - ptr = v[1]; + if (!p && !skipping) + validateTablePeek(ctx, p, tmp); + skipVoid(ctx, true, true); + let v = extractValue(ctx, void 0); + if (p && !skipping) + p[1][p[0]] = v; } - ptr = skipVoid(toml, ptr, true); - if (toml[ptr] && toml[ptr] !== "\n" && toml[ptr] !== "\r") { - throw new TomlError("each key-value declaration must be followed by an end-of-line", { - toml, - ptr - }); + skipVoid(ctx, true); + if (ctx.p < toml.length && (tmp = toml.charCodeAt(ctx.p)) !== 10 && (tmp !== 13 || toml.charCodeAt(ctx.p + 1) !== 10)) { + TomlError.x("each key-value declaration must be followed by an end-of-line", ctx); } - ptr = skipVoid(toml, ptr); + skipVoid(ctx); } return res; } +// node_modules/smol-toml/dist/stringify.js +var HAS_WELLFORMED = !!"".isWellFormed; + // src/version/file-parser.ts var VERSION_FILE_PARSERS = [ { @@ -32942,10 +33010,10 @@ undici/lib/web/websocket/frame.js: (*! ws. MIT License. Einar Otto Stangvik *) smol-toml/dist/error.js: -smol-toml/dist/util.js: -smol-toml/dist/date.js: smol-toml/dist/primitive.js: +smol-toml/dist/date.js: smol-toml/dist/extract.js: +smol-toml/dist/util.js: smol-toml/dist/struct.js: smol-toml/dist/parse.js: smol-toml/dist/stringify.js: diff --git a/package-lock.json b/package-lock.json index 49fbb5c..7f43c17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7561,9 +7561,9 @@ } }, "node_modules/smol-toml": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", - "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.1.tgz", + "integrity": "sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==", "license": "BSD-3-Clause", "engines": { "node": ">= 18"