Files
GlModelViewer/modules/mini-st.js
2025-05-01 19:18:04 -07:00

1148 lines
43 KiB
JavaScript

/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ /* webpack/runtime/compat */
/******/
/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";
/******/
/************************************************************************/
var __webpack_exports__ = {};
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/error.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
function getLineColFromPtr(string, ptr) {
let lines = string.slice(0, ptr).split(/\r\n|\n|\r/g);
return [lines.length, lines.pop().length + 1];
}
function makeCodeBlock(string, line, column) {
let lines = string.split(/\r\n|\n|\r/g);
let codeblock = '';
let numberLen = (Math.log10(line + 1) | 0) + 1;
for (let i = line - 1; i <= line + 1; i++) {
let l = lines[i - 1];
if (!l)
continue;
codeblock += i.toString().padEnd(numberLen, ' ');
codeblock += ': ';
codeblock += l;
codeblock += '\n';
if (i === line) {
codeblock += ' '.repeat(numberLen + column + 2);
codeblock += '^\n';
}
}
return codeblock;
}
class TomlError extends Error {
line;
column;
codeblock;
constructor(message, options) {
const [line, column] = getLineColFromPtr(options.toml, options.ptr);
const codeblock = makeCodeBlock(options.toml, line, column);
super(`Invalid TOML document: ${message}\n\n${codeblock}`, options);
this.line = line;
this.column = column;
this.codeblock = codeblock;
}
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/util.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
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 < '\x20' && c !== '\t') || c === '\x7f') {
throw new TomlError('control characters are not allowed in comments', {
toml: str,
ptr: ptr,
});
}
}
return str.length;
}
function skipVoid(str, ptr, banNewLines, banComments) {
let c;
while ((c = str[ptr]) === ' ' || c === '\t' || (!banNewLines && (c === '\n' || c === '\r' && str[ptr + 1] === '\n')))
ptr++;
return banComments || c !== '#'
? ptr
: skipVoid(str, skipComment(str, ptr), banNewLines);
}
function skipUntil(str, ptr, sep, 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 === sep) {
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: 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 !== "'" && str[seek - 1] === '\\' && (str[seek - 2] !== '\\' || str[seek - 3] === '\\'));
if (seek > -1) {
seek += target.length;
if (target.length > 1) {
if (str[seek] === first)
seek++;
if (str[seek] === first)
seek++;
}
}
return seek;
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/date.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
let DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}:\d{2}(?:\.\d+)?)?(Z|[-+]\d{2}:\d{2})?$/i;
class TomlDate extends Date {
#hasDate = false;
#hasTime = false;
#offset = null;
constructor(date) {
let hasDate = true;
let hasTime = true;
let offset = 'Z';
if (typeof date === 'string') {
let match = date.match(DATE_TIME_RE);
if (match) {
if (!match[1]) {
hasDate = false;
date = `0000-01-01T${date}`;
}
hasTime = !!match[2];
// Make sure to use T instead of a space. Breaks in case of extreme values otherwise.
hasTime && date[10] === ' ' && (date = date.replace(' ', 'T'));
// Do not allow rollover hours.
if (match[2] && +match[2] > 23) {
date = '';
}
else {
offset = match[3] || null;
date = date.toUpperCase();
if (!offset && hasTime)
date += 'Z';
}
}
else {
date = '';
}
}
super(date);
if (!isNaN(this.getTime())) {
this.#hasDate = hasDate;
this.#hasTime = hasTime;
this.#offset = offset;
}
}
isDateTime() {
return this.#hasDate && this.#hasTime;
}
isLocal() {
return !this.#hasDate || !this.#hasTime || !this.#offset;
}
isDate() {
return this.#hasDate && !this.#hasTime;
}
isTime() {
return this.#hasTime && !this.#hasDate;
}
isValid() {
return this.#hasDate || this.#hasTime;
}
toISOString() {
let iso = super.toISOString();
// Local Date
if (this.isDate())
return iso.slice(0, 10);
// Local Time
if (this.isTime())
return iso.slice(11, 23);
// Local DateTime
if (this.#offset === null)
return iso.slice(0, -1);
// Offset DateTime
if (this.#offset === 'Z')
return iso;
// This part is quite annoying: JS strips the original timezone from the ISO string representation
// Instead of using a "modified" date and "Z", we restore the representation "as authored"
let offset = (+(this.#offset.slice(1, 3)) * 60) + +(this.#offset.slice(4, 6));
offset = this.#offset[0] === '-' ? offset : -offset;
let offsetDate = new Date(this.getTime() - (offset * 60e3));
return offsetDate.toISOString().slice(0, -1) + this.#offset;
}
static wrapAsOffsetDateTime(jsDate, offset = 'Z') {
let date = new TomlDate(jsDate);
date.#offset = offset;
return date;
}
static wrapAsLocalDateTime(jsDate) {
let date = new TomlDate(jsDate);
date.#offset = null;
return date;
}
static wrapAsLocalDate(jsDate) {
let date = new TomlDate(jsDate);
date.#hasTime = false;
date.#offset = null;
return date;
}
static wrapAsLocalTime(jsDate) {
let date = new TomlDate(jsDate);
date.#hasDate = false;
date.#offset = null;
return date;
}
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/primitive.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
let INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/;
let FLOAT_REGEX = /^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/;
let LEADING_ZERO = /^[+-]?0[0-9_]/;
let ESCAPE_REGEX = /^[0-9a-f]{4,8}$/i;
let ESC_MAP = {
b: '\b',
t: '\t',
n: '\n',
f: '\f',
r: '\r',
'"': '"',
'\\': '\\',
};
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 < '\x20' && c !== '\t') || c === '\x7f') {
throw new TomlError('control characters are not allowed in strings', {
toml: str,
ptr: ptr - 1
});
}
if (isEscape) {
isEscape = false;
if (c === 'u' || c === 'U') {
// Unicode escape
let code = str.slice(ptr, (ptr += (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 === '\t' || c === '\r')) {
// Multiline escape
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) {
// Classic escape
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);
}
function parseValue(value, toml, ptr) {
// Constant values
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 0; // Avoid FP representation of -0
// Numbers
let isInt;
if ((isInt = INT_REGEX.test(value)) || FLOAT_REGEX.test(value)) {
if (LEADING_ZERO.test(value)) {
throw new TomlError('leading zeroes are not allowed', {
toml: toml,
ptr: ptr
});
}
let numeric = +(value.replace(/_/g, ''));
if (isNaN(numeric)) {
throw new TomlError('invalid number', {
toml: toml,
ptr: ptr
});
}
if (isInt && !Number.isSafeInteger(numeric)) {
throw new TomlError('integer value cannot be represented losslessly', {
toml: toml,
ptr: ptr
});
}
return numeric;
}
let date = new TomlDate(value);
if (!date.isValid()) {
throw new TomlError('invalid value', {
toml: toml,
ptr: ptr
});
}
return date;
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/extract.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
function sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {
let value = str.slice(startPtr, endPtr);
let commentIdx = value.indexOf('#');
if (commentIdx > -1) {
// The call to skipComment allows to "validate" the comment
// (absence of control characters)
skipComment(str, commentIdx);
value = value.slice(0, commentIdx);
}
let trimmed = value.trimEnd();
if (!allowNewLines) {
let newlineIdx = value.indexOf('\n', trimmed.length);
if (newlineIdx > -1) {
throw new TomlError('newlines are not allowed in inline tables', {
toml: str,
ptr: startPtr + newlineIdx
});
}
}
return [trimmed, commentIdx];
}
function extractValue(str, ptr, end, depth = -1) {
if (depth === 0) {
throw new TomlError('document contains excessively nested structures. aborting.', {
toml: str,
ptr: ptr
});
}
let c = str[ptr];
if (c === '[' || c === '{') {
let [value, endPtr] = c === '['
? parseArray(str, ptr, depth)
: parseInlineTable(str, ptr, depth);
let newPtr = end ? skipUntil(str, endPtr, ',', end) : endPtr;
if (endPtr - newPtr && end === '}') {
let nextNewLine = indexOfNewline(str, endPtr, newPtr);
if (nextNewLine > -1) {
throw new TomlError('newlines are not allowed in inline tables', {
toml: str,
ptr: nextNewLine
});
}
}
return [value, newPtr];
}
let endPtr;
if (c === '"' || c === "'") {
endPtr = getStringEnd(str, ptr);
let parsed = parseString(str, ptr, endPtr);
if (end) {
endPtr = skipVoid(str, endPtr, end !== ']');
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] === ',')), end === ']');
if (!slice[0]) {
throw new TomlError('incomplete key-value declaration: no value specified', {
toml: str,
ptr: ptr
});
}
if (end && slice[1] > -1) {
endPtr = skipVoid(str, ptr + slice[1]);
endPtr += +(str[endPtr] === ',');
}
return [
parseValue(slice[0], str, ptr),
endPtr,
];
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/struct.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
let KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \t]*$/;
function parseKey(str, ptr, end = '=') {
let dot = ptr - 1;
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: ptr
});
}
do {
let c = str[ptr = ++dot];
// If it's whitespace, ignore
if (c !== ' ' && c !== '\t') {
// If it's a string
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: ptr,
});
}
let eos = getStringEnd(str, ptr);
if (eos < 0) {
throw new TomlError('unfinished string encountered', {
toml: str,
ptr: 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: ptr,
});
}
}
parsed.push(parseString(str, ptr, eos));
}
else {
// Normal raw key part consumption and validation
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: ptr,
});
}
parsed.push(part.trimEnd());
}
}
// Until there's no more dot
} while (dot + 1 && dot < endPtr);
return [parsed, skipVoid(str, endPtr + 1, true, true)];
}
function parseInlineTable(str, ptr, depth = -1) {
let res = {};
let seen = new Set();
let c;
let comma = 0;
ptr++;
while ((c = str[ptr++]) !== '}' && c) {
if (c === '\n') {
throw new TomlError('newlines are not allowed in inline tables', {
toml: str,
ptr: ptr - 1
});
}
else if (c === '#') {
throw new TomlError('inline tables cannot contain comments', {
toml: str,
ptr: ptr - 1
});
}
else if (c === ',') {
throw new TomlError('expected key-value, found comma', {
toml: str,
ptr: ptr - 1
});
}
else if (c !== ' ' && c !== '\t') {
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: 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: ptr
});
}
let [value, valueEndPtr] = extractValue(str, keyEndPtr, '}', depth - 1);
seen.add(value);
t[k] = value;
ptr = valueEndPtr;
comma = str[ptr - 1] === ',' ? ptr - 1 : 0;
}
}
if (comma) {
throw new TomlError('trailing commas are not allowed in inline tables', {
toml: str,
ptr: comma
});
}
if (!c) {
throw new TomlError('unfinished table encountered', {
toml: str,
ptr: ptr
});
}
return [res, ptr];
}
function parseArray(str, ptr, depth = -1) {
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 !== '\t' && c !== '\n' && c !== '\r') {
let e = extractValue(str, ptr - 1, ']', depth - 1);
res.push(e[0]);
ptr = e[1];
}
}
if (!c) {
throw new TomlError('unfinished array encountered', {
toml: str,
ptr: ptr
});
}
return [res, ptr];
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/parse.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
function peekTable(key, table, meta, type) {
let t = table;
let m = meta;
let k;
let hasOwn = false;
let state;
for (let i = 0; i < key.length; i++) {
if (i) {
t = hasOwn ? t[k] : (t[k] = {});
m = (state = m[k]).c;
if (type === 0 /* Type.DOTTED */ && (state.t === 1 /* Type.EXPLICIT */ || state.t === 2 /* Type.ARRAY */)) {
return null;
}
if (state.t === 2 /* Type.ARRAY */) {
let l = t.length - 1;
t = t[l];
m = m[l].c;
}
}
k = key[i];
if ((hasOwn = Object.hasOwn(t, k)) && m[k]?.t === 0 /* Type.DOTTED */ && m[k]?.d) {
return null;
}
if (!hasOwn) {
if (k === '__proto__') {
Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });
Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true });
}
m[k] = {
t: i < key.length - 1 && type === 2 /* Type.ARRAY */
? 3 /* Type.ARRAY_DOTTED */
: type,
d: false,
i: 0,
c: {},
};
}
}
state = m[k];
if (state.t !== type && !(type === 1 /* Type.EXPLICIT */ && state.t === 3 /* Type.ARRAY_DOTTED */)) {
// Bad key type!
return null;
}
if (type === 2 /* Type.ARRAY */) {
if (!state.d) {
state.d = true;
t[k] = [];
}
t[k].push(t = {});
state.c[state.i++] = (state = { t: 1 /* Type.EXPLICIT */, d: false, i: 0, c: {} });
}
if (state.d) {
// Redefining a table!
return null;
}
state.d = true;
if (type === 1 /* Type.EXPLICIT */) {
t = hasOwn ? t[k] : (t[k] = {});
}
else if (type === 0 /* Type.DOTTED */ && hasOwn) {
return null;
}
return [k, t, state.c];
}
function parse(toml, opts) {
let maxDepth = opts?.maxDepth ?? 1000;
let res = {};
let meta = {};
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 (isTableArray) {
if (toml[k[1] - 1] !== ']') {
throw new TomlError('expected end of table declaration', {
toml: toml,
ptr: k[1] - 1,
});
}
k[1]++;
}
let p = peekTable(k[0], res, meta, isTableArray ? 2 /* Type.ARRAY */ : 1 /* Type.EXPLICIT */);
if (!p) {
throw new TomlError('trying to redefine an already defined table or value', {
toml: toml,
ptr: ptr,
});
}
m = p[2];
tbl = p[1];
ptr = k[1];
}
else {
let k = parseKey(toml, ptr);
let p = peekTable(k[0], tbl, m, 0 /* Type.DOTTED */);
if (!p) {
throw new TomlError('trying to redefine an already defined table or value', {
toml: toml,
ptr: ptr,
});
}
let v = extractValue(toml, k[1], void 0, maxDepth);
p[1][p[0]] = v[0];
ptr = v[1];
}
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: toml,
ptr: ptr
});
}
ptr = skipVoid(toml, ptr);
}
return res;
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/stringify.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
let BARE_KEY = /^[a-z0-9-_]+$/i;
function extendedTypeOf(obj) {
let type = typeof obj;
if (type === 'object') {
if (Array.isArray(obj))
return 'array';
if (obj instanceof Date)
return 'date';
}
return type;
}
function isArrayOfTables(obj) {
for (let i = 0; i < obj.length; i++) {
if (extendedTypeOf(obj[i]) !== 'object')
return false;
}
return obj.length != 0;
}
function formatString(s) {
return JSON.stringify(s).replace(/\x7f/g, '\\u007f');
}
function stringifyValue(val, type, depth) {
if (depth === 0) {
throw new Error("Could not stringify the object: maximum object depth exceeded");
}
if (type === 'number') {
if (isNaN(val))
return 'nan';
if (val === Infinity)
return 'inf';
if (val === -Infinity)
return '-inf';
return val.toString();
}
if (type === 'bigint' || type === 'boolean') {
return val.toString();
}
if (type === 'string') {
return formatString(val);
}
if (type === 'date') {
if (isNaN(val.getTime())) {
throw new TypeError('cannot serialize invalid date');
}
return val.toISOString();
}
if (type === 'object') {
return stringifyInlineTable(val, depth);
}
if (type === 'array') {
return stringifyArray(val, depth);
}
}
function stringifyInlineTable(obj, depth) {
let keys = Object.keys(obj);
if (keys.length === 0)
return '{}';
let res = '{ ';
for (let i = 0; i < keys.length; i++) {
let k = keys[i];
if (i)
res += ', ';
res += BARE_KEY.test(k) ? k : formatString(k);
res += ' = ';
res += stringifyValue(obj[k], extendedTypeOf(obj[k]), depth - 1);
}
return res + ' }';
}
function stringifyArray(array, depth) {
if (array.length === 0)
return '[]';
let res = '[ ';
for (let i = 0; i < array.length; i++) {
if (i)
res += ', ';
if (array[i] === null || array[i] === void 0) {
throw new TypeError('arrays cannot contain null or undefined values');
}
res += stringifyValue(array[i], extendedTypeOf(array[i]), depth - 1);
}
return res + ' ]';
}
function stringifyArrayTable(array, key, depth) {
if (depth === 0) {
throw new Error("Could not stringify the object: maximum object depth exceeded");
}
let res = '';
for (let i = 0; i < array.length; i++) {
res += `[[${key}]]\n`;
res += stringifyTable(array[i], key, depth);
res += '\n\n';
}
return res;
}
function stringifyTable(obj, prefix, depth) {
if (depth === 0) {
throw new Error("Could not stringify the object: maximum object depth exceeded");
}
let preamble = '';
let tables = '';
let keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
let k = keys[i];
if (obj[k] !== null && obj[k] !== void 0) {
let type = extendedTypeOf(obj[k]);
if (type === 'symbol' || type === 'function') {
throw new TypeError(`cannot serialize values of type '${type}'`);
}
let key = BARE_KEY.test(k) ? k : formatString(k);
if (type === 'array' && isArrayOfTables(obj[k])) {
tables += stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1);
}
else if (type === 'object') {
let tblKey = prefix ? `${prefix}.${key}` : key;
tables += `[${tblKey}]\n`;
tables += stringifyTable(obj[k], tblKey, depth - 1);
tables += '\n\n';
}
else {
preamble += key;
preamble += ' = ';
preamble += stringifyValue(obj[k], type, depth);
preamble += '\n';
}
}
}
return `${preamble}\n${tables}`.trim();
}
function stringify(obj, opts) {
if (extendedTypeOf(obj) !== 'object') {
throw new TypeError('stringify can only be called with an object');
}
let maxDepth = opts?.maxDepth ?? 1000;
return stringifyTable(obj, '', maxDepth);
}
;// CONCATENATED MODULE: ./node_modules/smol-toml/dist/index.js
/*!
* Copyright (c) Squirrel Chat et al., All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* harmony default export */ const mTOML = ({ parse: parse, stringify: stringify, TomlDate: TomlDate, TomlError: TomlError });
;// CONCATENATED MODULE: ./index.js
module.exports = { mTOML };
/******/ })();