{"version":3,"sources":["jsdelivr-header.js","/npm/sql-escaper@1.3.3/lib/index.js"],"names":[],"mappings":"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","file":"/npm/sql-escaper@1.3.3/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/sql-escaper@1.3.3/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\n/**\n * Adapted from https://github.com/mysqljs/sqlstring/blob/cd528556b4b6bcf300c3db515026935dedf7cfa1/lib/SqlString.js\n * MIT LICENSE: https://github.com/mysqljs/sqlstring/blob/cd528556b4b6bcf300c3db515026935dedf7cfa1/LICENSE\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.raw = exports.format = exports.escape = exports.arrayToList = exports.bufferToString = exports.objectToValues = exports.escapeId = exports.dateToString = void 0;\nconst node_buffer_1 = require(\"node:buffer\");\nconst regex = {\n    backtick: /`/g,\n    dot: /\\./g,\n    timezone: /([+\\-\\s])(\\d\\d):?(\\d\\d)?/,\n    escapeChars: /[\\0\\b\\t\\n\\r\\x1a\"'\\\\]/g,\n};\nconst CHARS_ESCAPE_MAP = {\n    '\\0': '\\\\0',\n    '\\b': '\\\\b',\n    '\\t': '\\\\t',\n    '\\n': '\\\\n',\n    '\\r': '\\\\r',\n    '\\x1a': '\\\\Z',\n    '\"': '\\\\\"',\n    \"'\": \"\\\\'\",\n    '\\\\': '\\\\\\\\',\n};\nconst charCode = {\n    singleQuote: 39,\n    backtick: 96,\n    backslash: 92,\n    dash: 45,\n    slash: 47,\n    asterisk: 42,\n    questionMark: 63,\n    newline: 10,\n    space: 32,\n    tab: 9,\n    carriageReturn: 13,\n};\nconst isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);\nconst isWordChar = (code) => (code >= 65 && code <= 90) ||\n    (code >= 97 && code <= 122) ||\n    (code >= 48 && code <= 57) ||\n    code === 95;\nconst isWhitespace = (code) => code === charCode.space ||\n    code === charCode.tab ||\n    code === charCode.newline ||\n    code === charCode.carriageReturn;\nconst hasOnlyWhitespaceBetween = (sql, start, end) => {\n    if (start >= end)\n        return true;\n    for (let i = start; i < end; i++) {\n        const code = sql.charCodeAt(i);\n        if (code !== charCode.space &&\n            code !== charCode.tab &&\n            code !== charCode.newline &&\n            code !== charCode.carriageReturn)\n            return false;\n    }\n    return true;\n};\nconst toLower = (code) => code | 32;\nconst matchesWord = (sql, position, word, length) => {\n    for (let offset = 0; offset < word.length; offset++)\n        if (toLower(sql.charCodeAt(position + offset)) !== word.charCodeAt(offset))\n            return false;\n    return ((position === 0 || !isWordChar(sql.charCodeAt(position - 1))) &&\n        (position + word.length >= length ||\n            !isWordChar(sql.charCodeAt(position + word.length))));\n};\nconst skipSqlContext = (sql, position) => {\n    const currentChar = sql.charCodeAt(position);\n    const nextChar = sql.charCodeAt(position + 1);\n    if (currentChar === charCode.singleQuote) {\n        for (let cursor = position + 1; cursor < sql.length; cursor++) {\n            if (sql.charCodeAt(cursor) === charCode.backslash)\n                cursor++;\n            else if (sql.charCodeAt(cursor) === charCode.singleQuote)\n                return cursor + 1;\n        }\n        return sql.length;\n    }\n    if (currentChar === charCode.backtick) {\n        const length = sql.length;\n        for (let cursor = position + 1; cursor < length; cursor++) {\n            if (sql.charCodeAt(cursor) !== charCode.backtick)\n                continue;\n            if (sql.charCodeAt(cursor + 1) === charCode.backtick) {\n                cursor++;\n                continue;\n            }\n            return cursor + 1;\n        }\n        return length;\n    }\n    if (currentChar === charCode.dash && nextChar === charCode.dash) {\n        const lineBreak = sql.indexOf('\\n', position + 2);\n        return lineBreak === -1 ? sql.length : lineBreak + 1;\n    }\n    if (currentChar === charCode.slash && nextChar === charCode.asterisk) {\n        const commentEnd = sql.indexOf('*/', position + 2);\n        return commentEnd === -1 ? sql.length : commentEnd + 2;\n    }\n    return -1;\n};\nconst findNextPlaceholder = (sql, start) => {\n    const sqlLength = sql.length;\n    for (let position = start; position < sqlLength; position++) {\n        const code = sql.charCodeAt(position);\n        if (code === charCode.questionMark)\n            return position;\n        if (code === charCode.singleQuote ||\n            code === charCode.backtick ||\n            code === charCode.dash ||\n            code === charCode.slash) {\n            const contextEnd = skipSqlContext(sql, position);\n            if (contextEnd !== -1)\n                position = contextEnd - 1;\n        }\n    }\n    return -1;\n};\nconst findSetKeyword = (sql, startFrom = 0) => {\n    const length = sql.length;\n    for (let position = startFrom; position < length; position++) {\n        const code = sql.charCodeAt(position);\n        const lower = code | 32;\n        if (code === charCode.singleQuote ||\n            code === charCode.backtick ||\n            code === charCode.dash ||\n            code === charCode.slash) {\n            const contextEnd = skipSqlContext(sql, position);\n            if (contextEnd !== -1) {\n                position = contextEnd - 1;\n                continue;\n            }\n        }\n        if (lower === 115 && matchesWord(sql, position, 'set', length))\n            return position + 3;\n        if (lower === 107 && matchesWord(sql, position, 'key', length)) {\n            let cursor = position + 3;\n            while (cursor < length && isWhitespace(sql.charCodeAt(cursor)))\n                cursor++;\n            if (matchesWord(sql, cursor, 'update', length))\n                return cursor + 6;\n        }\n    }\n    return -1;\n};\nconst isDate = (value) => Object.prototype.toString.call(value) === '[object Date]';\nconst hasSqlString = (value) => typeof value === 'object' &&\n    value !== null &&\n    'toSqlString' in value &&\n    typeof value.toSqlString === 'function';\nconst escapeString = (value) => {\n    regex.escapeChars.lastIndex = 0;\n    let chunkIndex = 0;\n    let escapedValue = '';\n    let match;\n    for (match = regex.escapeChars.exec(value); match !== null; match = regex.escapeChars.exec(value)) {\n        escapedValue += value.slice(chunkIndex, match.index);\n        escapedValue += CHARS_ESCAPE_MAP[match[0]];\n        chunkIndex = regex.escapeChars.lastIndex;\n    }\n    if (chunkIndex === 0)\n        return `'${value}'`;\n    if (chunkIndex < value.length)\n        return `'${escapedValue}${value.slice(chunkIndex)}'`;\n    return `'${escapedValue}'`;\n};\nconst pad2 = (value) => (value < 10 ? '0' + value : '' + value);\nconst pad3 = (value) => value < 10 ? '00' + value : value < 100 ? '0' + value : '' + value;\nconst pad4 = (value) => value < 10\n    ? '000' + value\n    : value < 100\n        ? '00' + value\n        : value < 1000\n            ? '0' + value\n            : '' + value;\nconst convertTimezone = (tz) => {\n    if (tz === 'Z')\n        return 0;\n    const timezoneMatch = tz.match(regex.timezone);\n    if (timezoneMatch)\n        return ((timezoneMatch[1] === '-' ? -1 : 1) *\n            (Number.parseInt(timezoneMatch[2], 10) +\n                (timezoneMatch[3] ? Number.parseInt(timezoneMatch[3], 10) : 0) / 60) *\n            60);\n    return false;\n};\nconst dateToString = (date, timezone) => {\n    if (Number.isNaN(date.getTime()))\n        return 'NULL';\n    let year;\n    let month;\n    let day;\n    let hour;\n    let minute;\n    let second;\n    let millisecond;\n    if (timezone === 'local') {\n        year = date.getFullYear();\n        month = date.getMonth() + 1;\n        day = date.getDate();\n        hour = date.getHours();\n        minute = date.getMinutes();\n        second = date.getSeconds();\n        millisecond = date.getMilliseconds();\n    }\n    else {\n        const timezoneOffsetMinutes = convertTimezone(timezone);\n        let time = date.getTime();\n        if (timezoneOffsetMinutes !== false && timezoneOffsetMinutes !== 0)\n            time += timezoneOffsetMinutes * 60000;\n        const adjustedDate = new Date(time);\n        year = adjustedDate.getUTCFullYear();\n        month = adjustedDate.getUTCMonth() + 1;\n        day = adjustedDate.getUTCDate();\n        hour = adjustedDate.getUTCHours();\n        minute = adjustedDate.getUTCMinutes();\n        second = adjustedDate.getUTCSeconds();\n        millisecond = adjustedDate.getUTCMilliseconds();\n    }\n    // YYYY-MM-DD HH:mm:ss.mmm\n    return escapeString(pad4(year) +\n        '-' +\n        pad2(month) +\n        '-' +\n        pad2(day) +\n        ' ' +\n        pad2(hour) +\n        ':' +\n        pad2(minute) +\n        ':' +\n        pad2(second) +\n        '.' +\n        pad3(millisecond));\n};\nexports.dateToString = dateToString;\nconst escapeId = (value, forbidQualified) => {\n    if (Array.isArray(value)) {\n        const length = value.length;\n        const parts = new Array(length);\n        for (let i = 0; i < length; i++)\n            parts[i] = (0, exports.escapeId)(value[i], forbidQualified);\n        return parts.join(', ');\n    }\n    const identifier = String(value);\n    const hasJsonOperator = identifier.indexOf('->') !== -1;\n    if (forbidQualified || hasJsonOperator) {\n        if (identifier.indexOf('`') === -1)\n            return `\\`${identifier}\\``;\n        return `\\`${identifier.replace(regex.backtick, '``')}\\``;\n    }\n    if (identifier.indexOf('`') === -1 && identifier.indexOf('.') === -1)\n        return `\\`${identifier}\\``;\n    return `\\`${identifier\n        .replace(regex.backtick, '``')\n        .replace(regex.dot, '`.`')}\\``;\n};\nexports.escapeId = escapeId;\nconst objectToValues = (object, timezone) => {\n    const keys = Object.keys(object);\n    const keysLength = keys.length;\n    if (keysLength === 0)\n        return '';\n    let sql = '';\n    for (let i = 0; i < keysLength; i++) {\n        const key = keys[i];\n        const value = object[key];\n        if (typeof value === 'function')\n            continue;\n        if (sql.length > 0)\n            sql += ', ';\n        sql += (0, exports.escapeId)(key);\n        sql += ' = ';\n        sql += (0, exports.escape)(value, true, timezone);\n    }\n    return sql;\n};\nexports.objectToValues = objectToValues;\nconst bufferToString = (buffer) => `X${escapeString(buffer.toString('hex'))}`;\nexports.bufferToString = bufferToString;\nconst arrayToList = (array, timezone) => {\n    const length = array.length;\n    const parts = new Array(length);\n    for (let i = 0; i < length; i++) {\n        const value = array[i];\n        if (Array.isArray(value))\n            parts[i] = `(${(0, exports.arrayToList)(value, timezone)})`;\n        else\n            parts[i] = (0, exports.escape)(value, true, timezone);\n    }\n    return parts.join(', ');\n};\nexports.arrayToList = arrayToList;\nconst escape = (value, stringifyObjects, timezone) => {\n    if (value === undefined || value === null)\n        return 'NULL';\n    switch (typeof value) {\n        case 'boolean':\n            return value ? 'true' : 'false';\n        case 'number':\n        case 'bigint':\n            return value + '';\n        case 'object': {\n            if (isDate(value))\n                return (0, exports.dateToString)(value, timezone || 'local');\n            if (Array.isArray(value))\n                return (0, exports.arrayToList)(value, timezone);\n            if (node_buffer_1.Buffer.isBuffer(value))\n                return (0, exports.bufferToString)(value);\n            if (value instanceof Uint8Array)\n                return (0, exports.bufferToString)(node_buffer_1.Buffer.from(value));\n            if (hasSqlString(value))\n                return String(value.toSqlString());\n            if (!(stringifyObjects === undefined || stringifyObjects === null))\n                return escapeString(String(value));\n            if (isRecord(value))\n                return (0, exports.objectToValues)(value, timezone);\n            return escapeString(String(value));\n        }\n        case 'string':\n            return escapeString(value);\n        default:\n            return escapeString(String(value));\n    }\n};\nexports.escape = escape;\nconst format = (sql, values, stringifyObjects, timezone) => {\n    if (values === undefined || values === null)\n        return sql;\n    const valuesArray = Array.isArray(values) ? values : [values];\n    const length = valuesArray.length;\n    let setIndex = -2; // -2 = not yet computed, -1 = no SET found\n    let result = '';\n    let chunkIndex = 0;\n    let valuesIndex = 0;\n    let placeholderPosition = findNextPlaceholder(sql, 0);\n    while (valuesIndex < length && placeholderPosition !== -1) {\n        // Count consecutive question marks to detect ? vs ?? vs ???+\n        let placeholderEnd = placeholderPosition + 1;\n        let escapedValue;\n        while (sql.charCodeAt(placeholderEnd) === 63)\n            placeholderEnd++;\n        const placeholderLength = placeholderEnd - placeholderPosition;\n        const currentValue = valuesArray[valuesIndex];\n        if (placeholderLength > 2) {\n            placeholderPosition = findNextPlaceholder(sql, placeholderEnd);\n            continue;\n        }\n        if (placeholderLength === 2)\n            escapedValue = (0, exports.escapeId)(currentValue);\n        else if (typeof currentValue === 'number')\n            escapedValue = `${currentValue}`;\n        else if (typeof currentValue === 'object' &&\n            currentValue !== null &&\n            !stringifyObjects) {\n            // Lazy: compute SET position only when we first encounter an object\n            if (setIndex === -2)\n                setIndex = findSetKeyword(sql);\n            if (setIndex !== -1 &&\n                setIndex <= placeholderPosition &&\n                hasOnlyWhitespaceBetween(sql, setIndex, placeholderPosition) &&\n                !hasSqlString(currentValue) &&\n                !Array.isArray(currentValue) &&\n                !node_buffer_1.Buffer.isBuffer(currentValue) &&\n                !(currentValue instanceof Uint8Array) &&\n                !isDate(currentValue) &&\n                isRecord(currentValue)) {\n                escapedValue = (0, exports.objectToValues)(currentValue, timezone);\n                setIndex = findSetKeyword(sql, placeholderEnd);\n            }\n            else\n                escapedValue = (0, exports.escape)(currentValue, true, timezone);\n        }\n        else\n            escapedValue = (0, exports.escape)(currentValue, stringifyObjects, timezone);\n        result += sql.slice(chunkIndex, placeholderPosition);\n        result += escapedValue;\n        chunkIndex = placeholderEnd;\n        valuesIndex++;\n        placeholderPosition = findNextPlaceholder(sql, placeholderEnd);\n    }\n    if (chunkIndex === 0)\n        return sql;\n    if (chunkIndex < sql.length)\n        return result + sql.slice(chunkIndex);\n    return result;\n};\nexports.format = format;\nconst raw = (sql) => {\n    if (typeof sql !== 'string')\n        throw new TypeError('argument sql must be a string');\n    return {\n        toSqlString: () => sql,\n    };\n};\nexports.raw = raw;\n"]}