{"version":3,"file":"check-sql.worker.mjs","sources":["../../../generate/dist/index.mjs","../../../connection-manager/dist/index.mjs","../../src/utils/watch-manager.ts","../../src/workers/check-sql.worker.ts"],"sourcesContent":["import 'path';\nimport postgres from 'postgres';\nimport { either } from 'fp-ts';\nimport { createRequire } from 'node:module';\n\nconst balanced = (a, b, str) => {\n    const ma = a instanceof RegExp ? maybeMatch(a, str) : a;\n    const mb = b instanceof RegExp ? maybeMatch(b, str) : b;\n    const r = ma !== null && mb != null && range(ma, mb, str);\n    return (r && {\n        start: r[0],\n        end: r[1],\n        pre: str.slice(0, r[0]),\n        body: str.slice(r[0] + ma.length, r[1]),\n        post: str.slice(r[1] + mb.length),\n    });\n};\nconst maybeMatch = (reg, str) => {\n    const m = str.match(reg);\n    return m ? m[0] : null;\n};\nconst range = (a, b, str) => {\n    let begs, beg, left, right = undefined, result;\n    let ai = str.indexOf(a);\n    let bi = str.indexOf(b, ai + 1);\n    let i = ai;\n    if (ai >= 0 && bi > 0) {\n        if (a === b) {\n            return [ai, bi];\n        }\n        begs = [];\n        left = str.length;\n        while (i >= 0 && !result) {\n            if (i === ai) {\n                begs.push(i);\n                ai = str.indexOf(a, i + 1);\n            }\n            else if (begs.length === 1) {\n                const r = begs.pop();\n                if (r !== undefined)\n                    result = [r, bi];\n            }\n            else {\n                beg = begs.pop();\n                if (beg !== undefined && beg < left) {\n                    left = beg;\n                    right = bi;\n                }\n                bi = str.indexOf(b, i + 1);\n            }\n            i = ai < bi && ai >= 0 ? ai : bi;\n        }\n        if (begs.length && right !== undefined) {\n            result = [left, right];\n        }\n    }\n    return result;\n};\n\nconst escSlash = '\\0SLASH' + Math.random() + '\\0';\nconst escOpen = '\\0OPEN' + Math.random() + '\\0';\nconst escClose = '\\0CLOSE' + Math.random() + '\\0';\nconst escComma = '\\0COMMA' + Math.random() + '\\0';\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0';\nconst escSlashPattern = new RegExp(escSlash, 'g');\nconst escOpenPattern = new RegExp(escOpen, 'g');\nconst escClosePattern = new RegExp(escClose, 'g');\nconst escCommaPattern = new RegExp(escComma, 'g');\nconst escPeriodPattern = new RegExp(escPeriod, 'g');\nconst slashPattern = /\\\\\\\\/g;\nconst openPattern = /\\\\{/g;\nconst closePattern = /\\\\}/g;\nconst commaPattern = /\\\\,/g;\nconst periodPattern = /\\\\\\./g;\nconst EXPANSION_MAX = 100_000;\nfunction numeric(str) {\n    return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);\n}\nfunction escapeBraces(str) {\n    return str\n        .replace(slashPattern, escSlash)\n        .replace(openPattern, escOpen)\n        .replace(closePattern, escClose)\n        .replace(commaPattern, escComma)\n        .replace(periodPattern, escPeriod);\n}\nfunction unescapeBraces(str) {\n    return str\n        .replace(escSlashPattern, '\\\\')\n        .replace(escOpenPattern, '{')\n        .replace(escClosePattern, '}')\n        .replace(escCommaPattern, ',')\n        .replace(escPeriodPattern, '.');\n}\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str) {\n    if (!str) {\n        return [''];\n    }\n    const parts = [];\n    const m = balanced('{', '}', str);\n    if (!m) {\n        return str.split(',');\n    }\n    const { pre, body, post } = m;\n    const p = pre.split(',');\n    p[p.length - 1] += '{' + body + '}';\n    const postParts = parseCommaParts(post);\n    if (post.length) {\n        p[p.length - 1] += postParts.shift();\n        p.push.apply(p, postParts);\n    }\n    parts.push.apply(parts, p);\n    return parts;\n}\nfunction expand(str, options = {}) {\n    if (!str) {\n        return [];\n    }\n    const { max = EXPANSION_MAX } = options;\n    // I don't know why Bash 4.3 does this, but it does.\n    // Anything starting with {} will have the first two bytes preserved\n    // but *only* at the top level, so {},a}b will not expand to anything,\n    // but a{},b}c will be expanded to [a}c,abc].\n    // One could argue that this is a bug in Bash, but since the goal of\n    // this module is to match Bash's rules, we escape a leading {}\n    if (str.slice(0, 2) === '{}') {\n        str = '\\\\{\\\\}' + str.slice(2);\n    }\n    return expand_(escapeBraces(str), max, true).map(unescapeBraces);\n}\nfunction embrace(str) {\n    return '{' + str + '}';\n}\nfunction isPadded(el) {\n    return /^-?0\\d/.test(el);\n}\nfunction lte(i, y) {\n    return i <= y;\n}\nfunction gte(i, y) {\n    return i >= y;\n}\nfunction expand_(str, max, isTop) {\n    /** @type {string[]} */\n    const expansions = [];\n    const m = balanced('{', '}', str);\n    if (!m)\n        return [str];\n    // no need to expand pre, since it is guaranteed to be free of brace-sets\n    const pre = m.pre;\n    const post = m.post.length ? expand_(m.post, max, false) : [''];\n    if (/\\$$/.test(m.pre)) {\n        for (let k = 0; k < post.length && k < max; k++) {\n            const expansion = pre + '{' + m.body + '}' + post[k];\n            expansions.push(expansion);\n        }\n    }\n    else {\n        const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n        const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n        const isSequence = isNumericSequence || isAlphaSequence;\n        const isOptions = m.body.indexOf(',') >= 0;\n        if (!isSequence && !isOptions) {\n            // {a},b}\n            if (m.post.match(/,(?!,).*\\}/)) {\n                str = m.pre + '{' + m.body + escClose + m.post;\n                return expand_(str, max, true);\n            }\n            return [str];\n        }\n        let n;\n        if (isSequence) {\n            n = m.body.split(/\\.\\./);\n        }\n        else {\n            n = parseCommaParts(m.body);\n            if (n.length === 1 && n[0] !== undefined) {\n                // x{{a,b}}y ==> x{a}y x{b}y\n                n = expand_(n[0], max, false).map(embrace);\n                //XXX is this necessary? Can't seem to hit it in tests.\n                /* c8 ignore start */\n                if (n.length === 1) {\n                    return post.map(p => m.pre + n[0] + p);\n                }\n                /* c8 ignore stop */\n            }\n        }\n        // at this point, n is the parts, and we know it's not a comma set\n        // with a single entry.\n        let N;\n        if (isSequence && n[0] !== undefined && n[1] !== undefined) {\n            const x = numeric(n[0]);\n            const y = numeric(n[1]);\n            const width = Math.max(n[0].length, n[1].length);\n            let incr = n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1;\n            let test = lte;\n            const reverse = y < x;\n            if (reverse) {\n                incr *= -1;\n                test = gte;\n            }\n            const pad = n.some(isPadded);\n            N = [];\n            for (let i = x; test(i, y); i += incr) {\n                let c;\n                if (isAlphaSequence) {\n                    c = String.fromCharCode(i);\n                    if (c === '\\\\') {\n                        c = '';\n                    }\n                }\n                else {\n                    c = String(i);\n                    if (pad) {\n                        const need = width - c.length;\n                        if (need > 0) {\n                            const z = new Array(need + 1).join('0');\n                            if (i < 0) {\n                                c = '-' + z + c.slice(1);\n                            }\n                            else {\n                                c = z + c;\n                            }\n                        }\n                    }\n                }\n                N.push(c);\n            }\n        }\n        else {\n            N = [];\n            for (let j = 0; j < n.length; j++) {\n                N.push.apply(N, expand_(n[j], max, false));\n            }\n        }\n        for (let j = 0; j < N.length; j++) {\n            for (let k = 0; k < post.length && expansions.length < max; k++) {\n                const expansion = pre + N[j] + post[k];\n                if (!isTop || isSequence || expansion) {\n                    expansions.push(expansion);\n                }\n            }\n        }\n    }\n    return expansions;\n}\n\nconst MAX_PATTERN_LENGTH = 1024 * 64;\nconst assertValidPattern = (pattern) => {\n    if (typeof pattern !== 'string') {\n        throw new TypeError('invalid pattern');\n    }\n    if (pattern.length > MAX_PATTERN_LENGTH) {\n        throw new TypeError('pattern is too long');\n    }\n};\n\n// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n    '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n    '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n    '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n    '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n    '[:cntrl:]': ['\\\\p{Cc}', true],\n    '[:digit:]': ['\\\\p{Nd}', true],\n    '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n    '[:lower:]': ['\\\\p{Ll}', true],\n    '[:print:]': ['\\\\p{C}', true],\n    '[:punct:]': ['\\\\p{P}', true],\n    '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n    '[:upper:]': ['\\\\p{Lu}', true],\n    '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n    '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nconst parseClass = (glob, position) => {\n    const pos = position;\n    /* c8 ignore start */\n    if (glob.charAt(pos) !== '[') {\n        throw new Error('not in a brace expression');\n    }\n    /* c8 ignore stop */\n    const ranges = [];\n    const negs = [];\n    let i = pos + 1;\n    let sawStart = false;\n    let uflag = false;\n    let escaping = false;\n    let negate = false;\n    let endPos = pos;\n    let rangeStart = '';\n    WHILE: while (i < glob.length) {\n        const c = glob.charAt(i);\n        if ((c === '!' || c === '^') && i === pos + 1) {\n            negate = true;\n            i++;\n            continue;\n        }\n        if (c === ']' && sawStart && !escaping) {\n            endPos = i + 1;\n            break;\n        }\n        sawStart = true;\n        if (c === '\\\\') {\n            if (!escaping) {\n                escaping = true;\n                i++;\n                continue;\n            }\n            // escaped \\ char, fall through and treat like normal char\n        }\n        if (c === '[' && !escaping) {\n            // either a posix class, a collation equivalent, or just a [\n            for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n                if (glob.startsWith(cls, i)) {\n                    // invalid, [a-[] is fine, but not [a-[:alpha]]\n                    if (rangeStart) {\n                        return ['$.', false, glob.length - pos, true];\n                    }\n                    i += cls.length;\n                    if (neg)\n                        negs.push(unip);\n                    else\n                        ranges.push(unip);\n                    uflag = uflag || u;\n                    continue WHILE;\n                }\n            }\n        }\n        // now it's just a normal character, effectively\n        escaping = false;\n        if (rangeStart) {\n            // throw this range away if it's not valid, but others\n            // can still match.\n            if (c > rangeStart) {\n                ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n            }\n            else if (c === rangeStart) {\n                ranges.push(braceEscape(c));\n            }\n            rangeStart = '';\n            i++;\n            continue;\n        }\n        // now might be the start of a range.\n        // can be either c-d or c-] or c<more...>] or c] at this point\n        if (glob.startsWith('-]', i + 1)) {\n            ranges.push(braceEscape(c + '-'));\n            i += 2;\n            continue;\n        }\n        if (glob.startsWith('-', i + 1)) {\n            rangeStart = c;\n            i += 2;\n            continue;\n        }\n        // not the start of a range, just a single character\n        ranges.push(braceEscape(c));\n        i++;\n    }\n    if (endPos < i) {\n        // didn't see the end of the class, not a valid class,\n        // but might still be valid as a literal match.\n        return ['', false, 0, false];\n    }\n    // if we got no ranges and no negates, then we have a range that\n    // cannot possibly match anything, and that poisons the whole glob\n    if (!ranges.length && !negs.length) {\n        return ['$.', false, glob.length - pos, true];\n    }\n    // if we got one positive range, and it's a single character, then that's\n    // not actually a magic pattern, it's just that one literal character.\n    // we should not treat that as \"magic\", we should just return the literal\n    // character. [_] is a perfectly valid way to escape glob magic chars.\n    if (negs.length === 0 &&\n        ranges.length === 1 &&\n        /^\\\\?.$/.test(ranges[0]) &&\n        !negate) {\n        const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n        return [regexpEscape(r), false, endPos - pos, false];\n    }\n    const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n    const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n    const comb = ranges.length && negs.length ? '(' + sranges + '|' + snegs + ')'\n        : ranges.length ? sranges\n            : snegs;\n    return [comb, uflag, endPos - pos, true];\n};\n\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link MinimatchOptions.windowsPathsNoEscape} option is used, then\n * square-bracket escapes are removed, but not backslash escapes.\n *\n * For example, it will turn the string `'[*]'` into `*`, but it will not\n * turn `'\\\\*'` into `'*'`, because `\\` is a path separator in\n * `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both square-bracket escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n *\n * When `magicalBraces` is not set, escapes of braces (`{` and `}`) will not be\n * unescaped.\n */\nconst unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true, } = {}) => {\n    if (magicalBraces) {\n        return windowsPathsNoEscape ?\n            s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n            : s\n                .replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2')\n                .replace(/\\\\([^\\/])/g, '$1');\n    }\n    return windowsPathsNoEscape ?\n        s.replace(/\\[([^\\/\\\\{}])\\]/g, '$1')\n        : s\n            .replace(/((?!\\\\).|^)\\[([^\\/\\\\{}])\\]/g, '$1$2')\n            .replace(/\\\\([^\\/{}])/g, '$1');\n};\n\n// parse a single path portion\nvar _a;\nconst types = new Set(['!', '?', '+', '*', '@']);\nconst isExtglobType = (c) => types.has(c);\nconst isExtglobAST = (c) => isExtglobType(c.type);\n// Map of which extglob types can adopt the children of a nested extglob\n//\n// anything but ! can adopt a matching type:\n// +(a|+(b|c)|d) => +(a|b|c|d)\n// *(a|*(b|c)|d) => *(a|b|c|d)\n// @(a|@(b|c)|d) => @(a|b|c|d)\n// ?(a|?(b|c)|d) => ?(a|b|c|d)\n//\n// * can adopt anything, because 0 or repetition is allowed\n// *(a|?(b|c)|d) => *(a|b|c|d)\n// *(a|+(b|c)|d) => *(a|b|c|d)\n// *(a|@(b|c)|d) => *(a|b|c|d)\n//\n// + can adopt @, because 1 or repetition is allowed\n// +(a|@(b|c)|d) => +(a|b|c|d)\n//\n// + and @ CANNOT adopt *, because 0 would be allowed\n// +(a|*(b|c)|d) => would match \"\", on *(b|c)\n// @(a|*(b|c)|d) => would match \"\", on *(b|c)\n//\n// + and @ CANNOT adopt ?, because 0 would be allowed\n// +(a|?(b|c)|d) => would match \"\", on ?(b|c)\n// @(a|?(b|c)|d) => would match \"\", on ?(b|c)\n//\n// ? can adopt @, because 0 or 1 is allowed\n// ?(a|@(b|c)|d) => ?(a|b|c|d)\n//\n// ? and @ CANNOT adopt * or +, because >1 would be allowed\n// ?(a|*(b|c)|d) => would match bbb on *(b|c)\n// @(a|*(b|c)|d) => would match bbb on *(b|c)\n// ?(a|+(b|c)|d) => would match bbb on +(b|c)\n// @(a|+(b|c)|d) => would match bbb on +(b|c)\n//\n// ! CANNOT adopt ! (nothing else can either)\n// !(a|!(b|c)|d) => !(a|b|c|d) would fail to match on b (not not b|c)\n//\n// ! can adopt @\n// !(a|@(b|c)|d) => !(a|b|c|d)\n//\n// ! CANNOT adopt *\n// !(a|*(b|c)|d) => !(a|b|c|d) would match on bbb, not allowed\n//\n// ! CANNOT adopt +\n// !(a|+(b|c)|d) => !(a|b|c|d) would match on bbb, not allowed\n//\n// ! CANNOT adopt ?\n// x!(a|?(b|c)|d) => x!(a|b|c|d) would fail to match \"x\"\nconst adoptionMap = new Map([\n    ['!', ['@']],\n    ['?', ['?', '@']],\n    ['@', ['@']],\n    ['*', ['*', '+', '?', '@']],\n    ['+', ['+', '@']],\n]);\n// nested extglobs that can be adopted in, but with the addition of\n// a blank '' element.\nconst adoptionWithSpaceMap = new Map([\n    ['!', ['?']],\n    ['@', ['?']],\n    ['+', ['?', '*']],\n]);\n// union of the previous two maps\nconst adoptionAnyMap = new Map([\n    ['!', ['?', '@']],\n    ['?', ['?', '@']],\n    ['@', ['?', '@']],\n    ['*', ['*', '+', '?', '@']],\n    ['+', ['+', '@', '?', '*']],\n]);\n// Extglobs that can take over their parent if they are the only child\n// the key is parent, value maps child to resulting extglob parent type\n// '@' is omitted because it's a special case. An `@` extglob with a single\n// member can always be usurped by that subpattern.\nconst usurpMap = new Map([\n    ['!', new Map([['!', '@']])],\n    [\n        '?',\n        new Map([\n            ['*', '*'],\n            ['+', '*'],\n        ]),\n    ],\n    [\n        '@',\n        new Map([\n            ['!', '!'],\n            ['?', '?'],\n            ['@', '@'],\n            ['*', '*'],\n            ['+', '+'],\n        ]),\n    ],\n    [\n        '+',\n        new Map([\n            ['?', '*'],\n            ['*', '*'],\n        ]),\n    ],\n]);\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))';\nconst startNoDot = '(?!\\\\.)';\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.']);\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.']);\nconst reSpecials = new Set('().*{}+?[]^$\\\\!');\nconst regExpEscape$1 = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// any single thing other than /\nconst qmark$1 = '[^/]';\n// * => any number of characters\nconst star$1 = qmark$1 + '*?';\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark$1 + '+?';\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\nlet ID = 0;\nclass AST {\n    type;\n    #root;\n    #hasMagic;\n    #uflag = false;\n    #parts = [];\n    #parent;\n    #parentIndex;\n    #negs;\n    #filledNegs = false;\n    #options;\n    #toString;\n    // set to true if it's an extglob with no children\n    // (which really means one child of '')\n    #emptyExt = false;\n    id = ++ID;\n    get depth() {\n        return (this.#parent?.depth ?? -1) + 1;\n    }\n    [Symbol.for('nodejs.util.inspect.custom')]() {\n        return {\n            '@@type': 'AST',\n            id: this.id,\n            type: this.type,\n            root: this.#root.id,\n            parent: this.#parent?.id,\n            depth: this.depth,\n            partsLength: this.#parts.length,\n            parts: this.#parts,\n        };\n    }\n    constructor(type, parent, options = {}) {\n        this.type = type;\n        // extglobs are inherently magical\n        if (type)\n            this.#hasMagic = true;\n        this.#parent = parent;\n        this.#root = this.#parent ? this.#parent.#root : this;\n        this.#options = this.#root === this ? options : this.#root.#options;\n        this.#negs = this.#root === this ? [] : this.#root.#negs;\n        if (type === '!' && !this.#root.#filledNegs)\n            this.#negs.push(this);\n        this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;\n    }\n    get hasMagic() {\n        /* c8 ignore start */\n        if (this.#hasMagic !== undefined)\n            return this.#hasMagic;\n        /* c8 ignore stop */\n        for (const p of this.#parts) {\n            if (typeof p === 'string')\n                continue;\n            if (p.type || p.hasMagic)\n                return (this.#hasMagic = true);\n        }\n        // note: will be undefined until we generate the regexp src and find out\n        return this.#hasMagic;\n    }\n    // reconstructs the pattern\n    toString() {\n        if (this.#toString !== undefined)\n            return this.#toString;\n        if (!this.type) {\n            return (this.#toString = this.#parts.map(p => String(p)).join(''));\n        }\n        else {\n            return (this.#toString =\n                this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');\n        }\n    }\n    #fillNegs() {\n        /* c8 ignore start */\n        if (this !== this.#root)\n            throw new Error('should only call on root');\n        if (this.#filledNegs)\n            return this;\n        /* c8 ignore stop */\n        // call toString() once to fill this out\n        this.toString();\n        this.#filledNegs = true;\n        let n;\n        while ((n = this.#negs.pop())) {\n            if (n.type !== '!')\n                continue;\n            // walk up the tree, appending everthing that comes AFTER parentIndex\n            let p = n;\n            let pp = p.#parent;\n            while (pp) {\n                for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {\n                    for (const part of n.#parts) {\n                        /* c8 ignore start */\n                        if (typeof part === 'string') {\n                            throw new Error('string part in extglob AST??');\n                        }\n                        /* c8 ignore stop */\n                        part.copyIn(pp.#parts[i]);\n                    }\n                }\n                p = pp;\n                pp = p.#parent;\n            }\n        }\n        return this;\n    }\n    push(...parts) {\n        for (const p of parts) {\n            if (p === '')\n                continue;\n            /* c8 ignore start */\n            if (typeof p !== 'string' &&\n                !(p instanceof _a && p.#parent === this)) {\n                throw new Error('invalid part: ' + p);\n            }\n            /* c8 ignore stop */\n            this.#parts.push(p);\n        }\n    }\n    toJSON() {\n        const ret = this.type === null ?\n            this.#parts\n                .slice()\n                .map(p => (typeof p === 'string' ? p : p.toJSON()))\n            : [this.type, ...this.#parts.map(p => p.toJSON())];\n        if (this.isStart() && !this.type)\n            ret.unshift([]);\n        if (this.isEnd() &&\n            (this === this.#root ||\n                (this.#root.#filledNegs && this.#parent?.type === '!'))) {\n            ret.push({});\n        }\n        return ret;\n    }\n    isStart() {\n        if (this.#root === this)\n            return true;\n        // if (this.type) return !!this.#parent?.isStart()\n        if (!this.#parent?.isStart())\n            return false;\n        if (this.#parentIndex === 0)\n            return true;\n        // if everything AHEAD of this is a negation, then it's still the \"start\"\n        const p = this.#parent;\n        for (let i = 0; i < this.#parentIndex; i++) {\n            const pp = p.#parts[i];\n            if (!(pp instanceof _a && pp.type === '!')) {\n                return false;\n            }\n        }\n        return true;\n    }\n    isEnd() {\n        if (this.#root === this)\n            return true;\n        if (this.#parent?.type === '!')\n            return true;\n        if (!this.#parent?.isEnd())\n            return false;\n        if (!this.type)\n            return this.#parent?.isEnd();\n        // if not root, it'll always have a parent\n        /* c8 ignore start */\n        const pl = this.#parent ? this.#parent.#parts.length : 0;\n        /* c8 ignore stop */\n        return this.#parentIndex === pl - 1;\n    }\n    copyIn(part) {\n        if (typeof part === 'string')\n            this.push(part);\n        else\n            this.push(part.clone(this));\n    }\n    clone(parent) {\n        const c = new _a(this.type, parent);\n        for (const p of this.#parts) {\n            c.copyIn(p);\n        }\n        return c;\n    }\n    static #parseAST(str, ast, pos, opt, extDepth) {\n        const maxDepth = opt.maxExtglobRecursion ?? 2;\n        let escaping = false;\n        let inBrace = false;\n        let braceStart = -1;\n        let braceNeg = false;\n        if (ast.type === null) {\n            // outside of a extglob, append until we find a start\n            let i = pos;\n            let acc = '';\n            while (i < str.length) {\n                const c = str.charAt(i++);\n                // still accumulate escapes at this point, but we do ignore\n                // starts that are escaped\n                if (escaping || c === '\\\\') {\n                    escaping = !escaping;\n                    acc += c;\n                    continue;\n                }\n                if (inBrace) {\n                    if (i === braceStart + 1) {\n                        if (c === '^' || c === '!') {\n                            braceNeg = true;\n                        }\n                    }\n                    else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n                        inBrace = false;\n                    }\n                    acc += c;\n                    continue;\n                }\n                else if (c === '[') {\n                    inBrace = true;\n                    braceStart = i;\n                    braceNeg = false;\n                    acc += c;\n                    continue;\n                }\n                // we don't have to check for adoption here, because that's\n                // done at the other recursion point.\n                const doRecurse = !opt.noext &&\n                    isExtglobType(c) &&\n                    str.charAt(i) === '(' &&\n                    extDepth <= maxDepth;\n                if (doRecurse) {\n                    ast.push(acc);\n                    acc = '';\n                    const ext = new _a(c, ast);\n                    i = _a.#parseAST(str, ext, i, opt, extDepth + 1);\n                    ast.push(ext);\n                    continue;\n                }\n                acc += c;\n            }\n            ast.push(acc);\n            return i;\n        }\n        // some kind of extglob, pos is at the (\n        // find the next | or )\n        let i = pos + 1;\n        let part = new _a(null, ast);\n        const parts = [];\n        let acc = '';\n        while (i < str.length) {\n            const c = str.charAt(i++);\n            // still accumulate escapes at this point, but we do ignore\n            // starts that are escaped\n            if (escaping || c === '\\\\') {\n                escaping = !escaping;\n                acc += c;\n                continue;\n            }\n            if (inBrace) {\n                if (i === braceStart + 1) {\n                    if (c === '^' || c === '!') {\n                        braceNeg = true;\n                    }\n                }\n                else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n                    inBrace = false;\n                }\n                acc += c;\n                continue;\n            }\n            else if (c === '[') {\n                inBrace = true;\n                braceStart = i;\n                braceNeg = false;\n                acc += c;\n                continue;\n            }\n            const doRecurse = !opt.noext &&\n                isExtglobType(c) &&\n                str.charAt(i) === '(' &&\n                /* c8 ignore start - the maxDepth is sufficient here */\n                (extDepth <= maxDepth || (ast && ast.#canAdoptType(c)));\n            /* c8 ignore stop */\n            if (doRecurse) {\n                const depthAdd = ast && ast.#canAdoptType(c) ? 0 : 1;\n                part.push(acc);\n                acc = '';\n                const ext = new _a(c, part);\n                part.push(ext);\n                i = _a.#parseAST(str, ext, i, opt, extDepth + depthAdd);\n                continue;\n            }\n            if (c === '|') {\n                part.push(acc);\n                acc = '';\n                parts.push(part);\n                part = new _a(null, ast);\n                continue;\n            }\n            if (c === ')') {\n                if (acc === '' && ast.#parts.length === 0) {\n                    ast.#emptyExt = true;\n                }\n                part.push(acc);\n                acc = '';\n                ast.push(...parts, part);\n                return i;\n            }\n            acc += c;\n        }\n        // unfinished extglob\n        // if we got here, it was a malformed extglob! not an extglob, but\n        // maybe something else in there.\n        ast.type = null;\n        ast.#hasMagic = undefined;\n        ast.#parts = [str.substring(pos - 1)];\n        return i;\n    }\n    #canAdoptWithSpace(child) {\n        return this.#canAdopt(child, adoptionWithSpaceMap);\n    }\n    #canAdopt(child, map = adoptionMap) {\n        if (!child ||\n            typeof child !== 'object' ||\n            child.type !== null ||\n            child.#parts.length !== 1 ||\n            this.type === null) {\n            return false;\n        }\n        const gc = child.#parts[0];\n        if (!gc || typeof gc !== 'object' || gc.type === null) {\n            return false;\n        }\n        return this.#canAdoptType(gc.type, map);\n    }\n    #canAdoptType(c, map = adoptionAnyMap) {\n        return !!map.get(this.type)?.includes(c);\n    }\n    #adoptWithSpace(child, index) {\n        const gc = child.#parts[0];\n        const blank = new _a(null, gc, this.options);\n        blank.#parts.push('');\n        gc.push(blank);\n        this.#adopt(child, index);\n    }\n    #adopt(child, index) {\n        const gc = child.#parts[0];\n        this.#parts.splice(index, 1, ...gc.#parts);\n        for (const p of gc.#parts) {\n            if (typeof p === 'object')\n                p.#parent = this;\n        }\n        this.#toString = undefined;\n    }\n    #canUsurpType(c) {\n        const m = usurpMap.get(this.type);\n        return !!(m?.has(c));\n    }\n    #canUsurp(child) {\n        if (!child ||\n            typeof child !== 'object' ||\n            child.type !== null ||\n            child.#parts.length !== 1 ||\n            this.type === null ||\n            this.#parts.length !== 1) {\n            return false;\n        }\n        const gc = child.#parts[0];\n        if (!gc || typeof gc !== 'object' || gc.type === null) {\n            return false;\n        }\n        return this.#canUsurpType(gc.type);\n    }\n    #usurp(child) {\n        const m = usurpMap.get(this.type);\n        const gc = child.#parts[0];\n        const nt = m?.get(gc.type);\n        /* c8 ignore start - impossible */\n        if (!nt)\n            return false;\n        /* c8 ignore stop */\n        this.#parts = gc.#parts;\n        for (const p of this.#parts) {\n            if (typeof p === 'object') {\n                p.#parent = this;\n            }\n        }\n        this.type = nt;\n        this.#toString = undefined;\n        this.#emptyExt = false;\n    }\n    static fromGlob(pattern, options = {}) {\n        const ast = new _a(null, undefined, options);\n        _a.#parseAST(pattern, ast, 0, options, 0);\n        return ast;\n    }\n    // returns the regular expression if there's magic, or the unescaped\n    // string if not.\n    toMMPattern() {\n        // should only be called on root\n        /* c8 ignore start */\n        if (this !== this.#root)\n            return this.#root.toMMPattern();\n        /* c8 ignore stop */\n        const glob = this.toString();\n        const [re, body, hasMagic, uflag] = this.toRegExpSource();\n        // if we're in nocase mode, and not nocaseMagicOnly, then we do\n        // still need a regular expression if we have to case-insensitively\n        // match capital/lowercase characters.\n        const anyMagic = hasMagic ||\n            this.#hasMagic ||\n            (this.#options.nocase &&\n                !this.#options.nocaseMagicOnly &&\n                glob.toUpperCase() !== glob.toLowerCase());\n        if (!anyMagic) {\n            return body;\n        }\n        const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n        return Object.assign(new RegExp(`^${re}$`, flags), {\n            _src: re,\n            _glob: glob,\n        });\n    }\n    get options() {\n        return this.#options;\n    }\n    // returns the string match, the regexp source, whether there's magic\n    // in the regexp (so a regular expression is required) and whether or\n    // not the uflag is needed for the regular expression (for posix classes)\n    // TODO: instead of injecting the start/end at this point, just return\n    // the BODY of the regexp, along with the start/end portions suitable\n    // for binding the start/end in either a joined full-path makeRe context\n    // (where we bind to (^|/), or a standalone matchPart context (where\n    // we bind to ^, and not /).  Otherwise slashes get duped!\n    //\n    // In part-matching mode, the start is:\n    // - if not isStart: nothing\n    // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n    // - if dots allowed or not possible: ^\n    // - if dots possible and not allowed: ^(?!\\.)\n    // end is:\n    // - if not isEnd(): nothing\n    // - else: $\n    //\n    // In full-path matching mode, we put the slash at the START of the\n    // pattern, so start is:\n    // - if first pattern: same as part-matching mode\n    // - if not isStart(): nothing\n    // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n    // - if dots allowed or not possible: /\n    // - if dots possible and not allowed: /(?!\\.)\n    // end is:\n    // - if last pattern, same as part-matching mode\n    // - else nothing\n    //\n    // Always put the (?:$|/) on negated tails, though, because that has to be\n    // there to bind the end of the negated pattern portion, and it's easier to\n    // just stick it in now rather than try to inject it later in the middle of\n    // the pattern.\n    //\n    // We can just always return the same end, and leave it up to the caller\n    // to know whether it's going to be used joined or in parts.\n    // And, if the start is adjusted slightly, can do the same there:\n    // - if not isStart: nothing\n    // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n    // - if dots allowed or not possible: (?:/|^)\n    // - if dots possible and not allowed: (?:/|^)(?!\\.)\n    //\n    // But it's better to have a simpler binding without a conditional, for\n    // performance, so probably better to return both start options.\n    //\n    // Then the caller just ignores the end if it's not the first pattern,\n    // and the start always gets applied.\n    //\n    // But that's always going to be $ if it's the ending pattern, or nothing,\n    // so the caller can just attach $ at the end of the pattern when building.\n    //\n    // So the todo is:\n    // - better detect what kind of start is needed\n    // - return both flavors of starting pattern\n    // - attach $ at the end of the pattern when creating the actual RegExp\n    //\n    // Ah, but wait, no, that all only applies to the root when the first pattern\n    // is not an extglob. If the first pattern IS an extglob, then we need all\n    // that dot prevention biz to live in the extglob portions, because eg\n    // +(*|.x*) can match .xy but not .yx.\n    //\n    // So, return the two flavors if it's #root and the first child is not an\n    // AST, otherwise leave it to the child AST to handle it, and there,\n    // use the (?:^|/) style of start binding.\n    //\n    // Even simplified further:\n    // - Since the start for a join is eg /(?!\\.) and the start for a part\n    // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n    // or start or whatever) and prepend ^ or / at the Regexp construction.\n    toRegExpSource(allowDot) {\n        const dot = allowDot ?? !!this.#options.dot;\n        if (this.#root === this) {\n            this.#flatten();\n            this.#fillNegs();\n        }\n        if (!isExtglobAST(this)) {\n            const noEmpty = this.isStart() &&\n                this.isEnd() &&\n                !this.#parts.some(s => typeof s !== 'string');\n            const src = this.#parts\n                .map(p => {\n                const [re, _, hasMagic, uflag] = typeof p === 'string' ?\n                    _a.#parseGlob(p, this.#hasMagic, noEmpty)\n                    : p.toRegExpSource(allowDot);\n                this.#hasMagic = this.#hasMagic || hasMagic;\n                this.#uflag = this.#uflag || uflag;\n                return re;\n            })\n                .join('');\n            let start = '';\n            if (this.isStart()) {\n                if (typeof this.#parts[0] === 'string') {\n                    // this is the string that will match the start of the pattern,\n                    // so we need to protect against dots and such.\n                    // '.' and '..' cannot match unless the pattern is that exactly,\n                    // even if it starts with . or dot:true is set.\n                    const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);\n                    if (!dotTravAllowed) {\n                        const aps = addPatternStart;\n                        // check if we have a possibility of matching . or ..,\n                        // and prevent that.\n                        const needNoTrav = \n                        // dots are allowed, and the pattern starts with [ or .\n                        (dot && aps.has(src.charAt(0))) ||\n                            // the pattern starts with \\., and then [ or .\n                            (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n                            // the pattern starts with \\.\\., and then [ or .\n                            (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)));\n                        // no need to prevent dots if it can't match a dot, or if a\n                        // sub-pattern will be preventing it anyway.\n                        const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));\n                        start =\n                            needNoTrav ? startNoTraversal\n                                : needNoDot ? startNoDot\n                                    : '';\n                    }\n                }\n            }\n            // append the \"end of path portion\" pattern to negation tails\n            let end = '';\n            if (this.isEnd() &&\n                this.#root.#filledNegs &&\n                this.#parent?.type === '!') {\n                end = '(?:$|\\\\/)';\n            }\n            const final = start + src + end;\n            return [\n                final,\n                unescape(src),\n                (this.#hasMagic = !!this.#hasMagic),\n                this.#uflag,\n            ];\n        }\n        // We need to calculate the body *twice* if it's a repeat pattern\n        // at the start, once in nodot mode, then again in dot mode, so a\n        // pattern like *(?) can match 'x.y'\n        const repeated = this.type === '*' || this.type === '+';\n        // some kind of extglob\n        const start = this.type === '!' ? '(?:(?!(?:' : '(?:';\n        let body = this.#partsToRegExp(dot);\n        if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n            // invalid extglob, has to at least be *something* present, if it's\n            // the entire path portion.\n            const s = this.toString();\n            const me = this;\n            me.#parts = [s];\n            me.type = null;\n            me.#hasMagic = undefined;\n            return [s, unescape(this.toString()), false, false];\n        }\n        let bodyDotAllowed = !repeated || allowDot || dot || false ?\n            ''\n            : this.#partsToRegExp(true);\n        if (bodyDotAllowed === body) {\n            bodyDotAllowed = '';\n        }\n        if (bodyDotAllowed) {\n            body = `(?:${body})(?:${bodyDotAllowed})*?`;\n        }\n        // an empty !() is exactly equivalent to a starNoEmpty\n        let final = '';\n        if (this.type === '!' && this.#emptyExt) {\n            final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;\n        }\n        else {\n            const close = this.type === '!' ?\n                // !() must match something,but !(x) can match ''\n                '))' +\n                    (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n                    star$1 +\n                    ')'\n                : this.type === '@' ? ')'\n                    : this.type === '?' ? ')?'\n                        : this.type === '+' && bodyDotAllowed ? ')'\n                            : this.type === '*' && bodyDotAllowed ? `)?`\n                                : `)${this.type}`;\n            final = start + body + close;\n        }\n        return [\n            final,\n            unescape(body),\n            (this.#hasMagic = !!this.#hasMagic),\n            this.#uflag,\n        ];\n    }\n    #flatten() {\n        if (!isExtglobAST(this)) {\n            for (const p of this.#parts) {\n                if (typeof p === 'object') {\n                    p.#flatten();\n                }\n            }\n        }\n        else {\n            // do up to 10 passes to flatten as much as possible\n            let iterations = 0;\n            let done = false;\n            do {\n                done = true;\n                for (let i = 0; i < this.#parts.length; i++) {\n                    const c = this.#parts[i];\n                    if (typeof c === 'object') {\n                        c.#flatten();\n                        if (this.#canAdopt(c)) {\n                            done = false;\n                            this.#adopt(c, i);\n                        }\n                        else if (this.#canAdoptWithSpace(c)) {\n                            done = false;\n                            this.#adoptWithSpace(c, i);\n                        }\n                        else if (this.#canUsurp(c)) {\n                            done = false;\n                            this.#usurp(c);\n                        }\n                    }\n                }\n            } while (!done && ++iterations < 10);\n        }\n        this.#toString = undefined;\n    }\n    #partsToRegExp(dot) {\n        return this.#parts\n            .map(p => {\n            // extglob ASTs should only contain parent ASTs\n            /* c8 ignore start */\n            if (typeof p === 'string') {\n                throw new Error('string type in extglob ast??');\n            }\n            /* c8 ignore stop */\n            // can ignore hasMagic, because extglobs are already always magic\n            const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);\n            this.#uflag = this.#uflag || uflag;\n            return re;\n        })\n            .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n            .join('|');\n    }\n    static #parseGlob(glob, hasMagic, noEmpty = false) {\n        let escaping = false;\n        let re = '';\n        let uflag = false;\n        // multiple stars that aren't globstars coalesce into one *\n        let inStar = false;\n        for (let i = 0; i < glob.length; i++) {\n            const c = glob.charAt(i);\n            if (escaping) {\n                escaping = false;\n                re += (reSpecials.has(c) ? '\\\\' : '') + c;\n                continue;\n            }\n            if (c === '*') {\n                if (inStar)\n                    continue;\n                inStar = true;\n                re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star$1;\n                hasMagic = true;\n                continue;\n            }\n            else {\n                inStar = false;\n            }\n            if (c === '\\\\') {\n                if (i === glob.length - 1) {\n                    re += '\\\\\\\\';\n                }\n                else {\n                    escaping = true;\n                }\n                continue;\n            }\n            if (c === '[') {\n                const [src, needUflag, consumed, magic] = parseClass(glob, i);\n                if (consumed) {\n                    re += src;\n                    uflag = uflag || needUflag;\n                    i += consumed - 1;\n                    hasMagic = hasMagic || magic;\n                    continue;\n                }\n            }\n            if (c === '?') {\n                re += qmark$1;\n                hasMagic = true;\n                continue;\n            }\n            re += regExpEscape$1(c);\n        }\n        return [re, unescape(glob), !!hasMagic, uflag];\n    }\n}\n_a = AST;\n\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link MinimatchOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character.  In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n *\n * If the {@link MinimatchOptions.magicalBraces} option is used,\n * then braces (`{` and `}`) will be escaped.\n */\nconst escape = (s, { windowsPathsNoEscape = false, magicalBraces = false, } = {}) => {\n    // don't need to escape +@! because we escape the parens\n    // that make those magic, and escaping ! as [!] isn't valid,\n    // because [!]] is a valid glob class meaning not ']'.\n    if (magicalBraces) {\n        return windowsPathsNoEscape ?\n            s.replace(/[?*()[\\]{}]/g, '[$&]')\n            : s.replace(/[?*()[\\]\\\\{}]/g, '\\\\$&');\n    }\n    return windowsPathsNoEscape ?\n        s.replace(/[?*()[\\]]/g, '[$&]')\n        : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n\nconst minimatch = (p, pattern, options = {}) => {\n    assertValidPattern(pattern);\n    // shortcut: comments match nothing.\n    if (!options.nocomment && pattern.charAt(0) === '#') {\n        return false;\n    }\n    return new Minimatch(pattern, options).match(p);\n};\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n    ext = ext.toLowerCase();\n    return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n    ext = ext.toLowerCase();\n    return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n    const noext = qmarksTestNoExt([$0]);\n    if (!ext)\n        return noext;\n    ext = ext.toLowerCase();\n    return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n    const noext = qmarksTestNoExtDot([$0]);\n    if (!ext)\n        return noext;\n    ext = ext.toLowerCase();\n    return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n    const noext = qmarksTestNoExtDot([$0]);\n    return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n    const noext = qmarksTestNoExt([$0]);\n    return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n    const len = $0.length;\n    return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n    const len = $0.length;\n    return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process ?\n    (typeof process.env === 'object' &&\n        process.env &&\n        process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n        process.platform\n    : 'posix');\nconst path = {\n    win32: { sep: '\\\\' },\n    posix: { sep: '/' },\n};\n/* c8 ignore stop */\nconst sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nconst GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\nconst filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nconst defaults = (def) => {\n    if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n        return minimatch;\n    }\n    const orig = minimatch;\n    const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n    return Object.assign(m, {\n        Minimatch: class Minimatch extends orig.Minimatch {\n            constructor(pattern, options = {}) {\n                super(pattern, ext(def, options));\n            }\n            static defaults(options) {\n                return orig.defaults(ext(def, options)).Minimatch;\n            }\n        },\n        AST: class AST extends orig.AST {\n            /* c8 ignore start */\n            constructor(type, parent, options = {}) {\n                super(type, parent, ext(def, options));\n            }\n            /* c8 ignore stop */\n            static fromGlob(pattern, options = {}) {\n                return orig.AST.fromGlob(pattern, ext(def, options));\n            }\n        },\n        unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n        escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n        filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n        defaults: (options) => orig.defaults(ext(def, options)),\n        makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n        braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n        match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n        sep: orig.sep,\n        GLOBSTAR: GLOBSTAR,\n    });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nconst braceExpand = (pattern, options = {}) => {\n    assertValidPattern(pattern);\n    // Thanks to Yeting Li <https://github.com/yetingli> for\n    // improving this regexp to avoid a ReDOS vulnerability.\n    if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n        // shortcut. no need to expand.\n        return [pattern];\n    }\n    return expand(pattern, { max: options.braceExpandMax });\n};\nminimatch.braceExpand = braceExpand;\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nconst makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nconst match = (list, pattern, options = {}) => {\n    const mm = new Minimatch(pattern, options);\n    list = list.filter(f => mm.match(f));\n    if (mm.options.nonull && !list.length) {\n        list.push(pattern);\n    }\n    return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nclass Minimatch {\n    options;\n    set;\n    pattern;\n    windowsPathsNoEscape;\n    nonegate;\n    negate;\n    comment;\n    empty;\n    preserveMultipleSlashes;\n    partial;\n    globSet;\n    globParts;\n    nocase;\n    isWindows;\n    platform;\n    windowsNoMagicRoot;\n    maxGlobstarRecursion;\n    regexp;\n    constructor(pattern, options = {}) {\n        assertValidPattern(pattern);\n        options = options || {};\n        this.options = options;\n        this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200;\n        this.pattern = pattern;\n        this.platform = options.platform || defaultPlatform;\n        this.isWindows = this.platform === 'win32';\n        // avoid the annoying deprecation flag lol\n        const awe = ('allowWindow' + 'sEscape');\n        this.windowsPathsNoEscape =\n            !!options.windowsPathsNoEscape || options[awe] === false;\n        if (this.windowsPathsNoEscape) {\n            this.pattern = this.pattern.replace(/\\\\/g, '/');\n        }\n        this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n        this.regexp = null;\n        this.negate = false;\n        this.nonegate = !!options.nonegate;\n        this.comment = false;\n        this.empty = false;\n        this.partial = !!options.partial;\n        this.nocase = !!this.options.nocase;\n        this.windowsNoMagicRoot =\n            options.windowsNoMagicRoot !== undefined ?\n                options.windowsNoMagicRoot\n                : !!(this.isWindows && this.nocase);\n        this.globSet = [];\n        this.globParts = [];\n        this.set = [];\n        // make the set of regexps etc.\n        this.make();\n    }\n    hasMagic() {\n        if (this.options.magicalBraces && this.set.length > 1) {\n            return true;\n        }\n        for (const pattern of this.set) {\n            for (const part of pattern) {\n                if (typeof part !== 'string')\n                    return true;\n            }\n        }\n        return false;\n    }\n    debug(..._) { }\n    make() {\n        const pattern = this.pattern;\n        const options = this.options;\n        // empty patterns and comments match nothing.\n        if (!options.nocomment && pattern.charAt(0) === '#') {\n            this.comment = true;\n            return;\n        }\n        if (!pattern) {\n            this.empty = true;\n            return;\n        }\n        // step 1: figure out negation, etc.\n        this.parseNegate();\n        // step 2: expand braces\n        this.globSet = [...new Set(this.braceExpand())];\n        if (options.debug) {\n            this.debug = (...args) => console.error(...args);\n        }\n        this.debug(this.pattern, this.globSet);\n        // step 3: now we have a set, so turn each one into a series of\n        // path-portion matching patterns.\n        // These will be regexps, except in the case of \"**\", which is\n        // set to the GLOBSTAR object for globstar behavior,\n        // and will not contain any / characters\n        //\n        // First, we preprocess to make the glob pattern sets a bit simpler\n        // and deduped.  There are some perf-killing patterns that can cause\n        // problems with a glob walk, but we can simplify them down a bit.\n        const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n        this.globParts = this.preprocess(rawGlobParts);\n        this.debug(this.pattern, this.globParts);\n        // glob --> regexps\n        let set = this.globParts.map((s, _, __) => {\n            if (this.isWindows && this.windowsNoMagicRoot) {\n                // check if it's a drive or unc path.\n                const isUNC = s[0] === '' &&\n                    s[1] === '' &&\n                    (s[2] === '?' || !globMagic.test(s[2])) &&\n                    !globMagic.test(s[3]);\n                const isDrive = /^[a-z]:/i.test(s[0]);\n                if (isUNC) {\n                    return [\n                        ...s.slice(0, 4),\n                        ...s.slice(4).map(ss => this.parse(ss)),\n                    ];\n                }\n                else if (isDrive) {\n                    return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n                }\n            }\n            return s.map(ss => this.parse(ss));\n        });\n        this.debug(this.pattern, set);\n        // filter out everything that didn't compile properly.\n        this.set = set.filter(s => s.indexOf(false) === -1);\n        // do not treat the ? in UNC paths as magic\n        if (this.isWindows) {\n            for (let i = 0; i < this.set.length; i++) {\n                const p = this.set[i];\n                if (p[0] === '' &&\n                    p[1] === '' &&\n                    this.globParts[i][2] === '?' &&\n                    typeof p[3] === 'string' &&\n                    /^[a-z]:$/i.test(p[3])) {\n                    p[2] = '?';\n                }\n            }\n        }\n        this.debug(this.pattern, this.set);\n    }\n    // various transforms to equivalent pattern sets that are\n    // faster to process in a filesystem walk.  The goal is to\n    // eliminate what we can, and push all ** patterns as far\n    // to the right as possible, even if it increases the number\n    // of patterns that we have to process.\n    preprocess(globParts) {\n        // if we're not in globstar mode, then turn ** into *\n        if (this.options.noglobstar) {\n            for (let i = 0; i < globParts.length; i++) {\n                for (let j = 0; j < globParts[i].length; j++) {\n                    if (globParts[i][j] === '**') {\n                        globParts[i][j] = '*';\n                    }\n                }\n            }\n        }\n        const { optimizationLevel = 1 } = this.options;\n        if (optimizationLevel >= 2) {\n            // aggressive optimization for the purpose of fs walking\n            globParts = this.firstPhasePreProcess(globParts);\n            globParts = this.secondPhasePreProcess(globParts);\n        }\n        else if (optimizationLevel >= 1) {\n            // just basic optimizations to remove some .. parts\n            globParts = this.levelOneOptimize(globParts);\n        }\n        else {\n            // just collapse multiple ** portions into one\n            globParts = this.adjascentGlobstarOptimize(globParts);\n        }\n        return globParts;\n    }\n    // just get rid of adjascent ** portions\n    adjascentGlobstarOptimize(globParts) {\n        return globParts.map(parts => {\n            let gs = -1;\n            while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n                let i = gs;\n                while (parts[i + 1] === '**') {\n                    i++;\n                }\n                if (i !== gs) {\n                    parts.splice(gs, i - gs);\n                }\n            }\n            return parts;\n        });\n    }\n    // get rid of adjascent ** and resolve .. portions\n    levelOneOptimize(globParts) {\n        return globParts.map(parts => {\n            parts = parts.reduce((set, part) => {\n                const prev = set[set.length - 1];\n                if (part === '**' && prev === '**') {\n                    return set;\n                }\n                if (part === '..') {\n                    if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n                        set.pop();\n                        return set;\n                    }\n                }\n                set.push(part);\n                return set;\n            }, []);\n            return parts.length === 0 ? [''] : parts;\n        });\n    }\n    levelTwoFileOptimize(parts) {\n        if (!Array.isArray(parts)) {\n            parts = this.slashSplit(parts);\n        }\n        let didSomething = false;\n        do {\n            didSomething = false;\n            // <pre>/<e>/<rest> -> <pre>/<rest>\n            if (!this.preserveMultipleSlashes) {\n                for (let i = 1; i < parts.length - 1; i++) {\n                    const p = parts[i];\n                    // don't squeeze out UNC patterns\n                    if (i === 1 && p === '' && parts[0] === '')\n                        continue;\n                    if (p === '.' || p === '') {\n                        didSomething = true;\n                        parts.splice(i, 1);\n                        i--;\n                    }\n                }\n                if (parts[0] === '.' &&\n                    parts.length === 2 &&\n                    (parts[1] === '.' || parts[1] === '')) {\n                    didSomething = true;\n                    parts.pop();\n                }\n            }\n            // <pre>/<p>/../<rest> -> <pre>/<rest>\n            let dd = 0;\n            while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n                const p = parts[dd - 1];\n                if (p && p !== '.' && p !== '..' && p !== '**') {\n                    didSomething = true;\n                    parts.splice(dd - 1, 2);\n                    dd -= 2;\n                }\n            }\n        } while (didSomething);\n        return parts.length === 0 ? [''] : parts;\n    }\n    // First phase: single-pattern processing\n    // <pre> is 1 or more portions\n    // <rest> is 1 or more portions\n    // <p> is any portion other than ., .., '', or **\n    // <e> is . or ''\n    //\n    // **/.. is *brutal* for filesystem walking performance, because\n    // it effectively resets the recursive walk each time it occurs,\n    // and ** cannot be reduced out by a .. pattern part like a regexp\n    // or most strings (other than .., ., and '') can be.\n    //\n    // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n    // <pre>/<e>/<rest> -> <pre>/<rest>\n    // <pre>/<p>/../<rest> -> <pre>/<rest>\n    // **/**/<rest> -> **/<rest>\n    //\n    // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n    // this WOULD be allowed if ** did follow symlinks, or * didn't\n    firstPhasePreProcess(globParts) {\n        let didSomething = false;\n        do {\n            didSomething = false;\n            // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n            for (let parts of globParts) {\n                let gs = -1;\n                while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n                    let gss = gs;\n                    while (parts[gss + 1] === '**') {\n                        // <pre>/**/**/<rest> -> <pre>/**/<rest>\n                        gss++;\n                    }\n                    // eg, if gs is 2 and gss is 4, that means we have 3 **\n                    // parts, and can remove 2 of them.\n                    if (gss > gs) {\n                        parts.splice(gs + 1, gss - gs);\n                    }\n                    let next = parts[gs + 1];\n                    const p = parts[gs + 2];\n                    const p2 = parts[gs + 3];\n                    if (next !== '..')\n                        continue;\n                    if (!p ||\n                        p === '.' ||\n                        p === '..' ||\n                        !p2 ||\n                        p2 === '.' ||\n                        p2 === '..') {\n                        continue;\n                    }\n                    didSomething = true;\n                    // edit parts in place, and push the new one\n                    parts.splice(gs, 1);\n                    const other = parts.slice(0);\n                    other[gs] = '**';\n                    globParts.push(other);\n                    gs--;\n                }\n                // <pre>/<e>/<rest> -> <pre>/<rest>\n                if (!this.preserveMultipleSlashes) {\n                    for (let i = 1; i < parts.length - 1; i++) {\n                        const p = parts[i];\n                        // don't squeeze out UNC patterns\n                        if (i === 1 && p === '' && parts[0] === '')\n                            continue;\n                        if (p === '.' || p === '') {\n                            didSomething = true;\n                            parts.splice(i, 1);\n                            i--;\n                        }\n                    }\n                    if (parts[0] === '.' &&\n                        parts.length === 2 &&\n                        (parts[1] === '.' || parts[1] === '')) {\n                        didSomething = true;\n                        parts.pop();\n                    }\n                }\n                // <pre>/<p>/../<rest> -> <pre>/<rest>\n                let dd = 0;\n                while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n                    const p = parts[dd - 1];\n                    if (p && p !== '.' && p !== '..' && p !== '**') {\n                        didSomething = true;\n                        const needDot = dd === 1 && parts[dd + 1] === '**';\n                        const splin = needDot ? ['.'] : [];\n                        parts.splice(dd - 1, 2, ...splin);\n                        if (parts.length === 0)\n                            parts.push('');\n                        dd -= 2;\n                    }\n                }\n            }\n        } while (didSomething);\n        return globParts;\n    }\n    // second phase: multi-pattern dedupes\n    // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n    // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n    // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n    //\n    // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n    // ^-- not valid because ** doens't follow symlinks\n    secondPhasePreProcess(globParts) {\n        for (let i = 0; i < globParts.length - 1; i++) {\n            for (let j = i + 1; j < globParts.length; j++) {\n                const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n                if (matched) {\n                    globParts[i] = [];\n                    globParts[j] = matched;\n                    break;\n                }\n            }\n        }\n        return globParts.filter(gs => gs.length);\n    }\n    partsMatch(a, b, emptyGSMatch = false) {\n        let ai = 0;\n        let bi = 0;\n        let result = [];\n        let which = '';\n        while (ai < a.length && bi < b.length) {\n            if (a[ai] === b[bi]) {\n                result.push(which === 'b' ? b[bi] : a[ai]);\n                ai++;\n                bi++;\n            }\n            else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n                result.push(a[ai]);\n                ai++;\n            }\n            else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n                result.push(b[bi]);\n                bi++;\n            }\n            else if (a[ai] === '*' &&\n                b[bi] &&\n                (this.options.dot || !b[bi].startsWith('.')) &&\n                b[bi] !== '**') {\n                if (which === 'b')\n                    return false;\n                which = 'a';\n                result.push(a[ai]);\n                ai++;\n                bi++;\n            }\n            else if (b[bi] === '*' &&\n                a[ai] &&\n                (this.options.dot || !a[ai].startsWith('.')) &&\n                a[ai] !== '**') {\n                if (which === 'a')\n                    return false;\n                which = 'b';\n                result.push(b[bi]);\n                ai++;\n                bi++;\n            }\n            else {\n                return false;\n            }\n        }\n        // if we fall out of the loop, it means they two are identical\n        // as long as their lengths match\n        return a.length === b.length && result;\n    }\n    parseNegate() {\n        if (this.nonegate)\n            return;\n        const pattern = this.pattern;\n        let negate = false;\n        let negateOffset = 0;\n        for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n            negate = !negate;\n            negateOffset++;\n        }\n        if (negateOffset)\n            this.pattern = pattern.slice(negateOffset);\n        this.negate = negate;\n    }\n    // set partial to true to test if, for example,\n    // \"/a/b\" matches the start of \"/*/b/*/d\"\n    // Partial means, if you run out of file before you run\n    // out of pattern, then that's fine, as long as all\n    // the parts match.\n    matchOne(file, pattern, partial = false) {\n        let fileStartIndex = 0;\n        let patternStartIndex = 0;\n        // UNC paths like //?/X:/... can match X:/... and vice versa\n        // Drive letters in absolute drive or unc paths are always compared\n        // case-insensitively.\n        if (this.isWindows) {\n            const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);\n            const fileUNC = !fileDrive &&\n                file[0] === '' &&\n                file[1] === '' &&\n                file[2] === '?' &&\n                /^[a-z]:$/i.test(file[3]);\n            const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);\n            const patternUNC = !patternDrive &&\n                pattern[0] === '' &&\n                pattern[1] === '' &&\n                pattern[2] === '?' &&\n                typeof pattern[3] === 'string' &&\n                /^[a-z]:$/i.test(pattern[3]);\n            const fdi = fileUNC ? 3\n                : fileDrive ? 0\n                    : undefined;\n            const pdi = patternUNC ? 3\n                : patternDrive ? 0\n                    : undefined;\n            if (typeof fdi === 'number' && typeof pdi === 'number') {\n                const [fd, pd] = [\n                    file[fdi],\n                    pattern[pdi],\n                ];\n                // start matching at the drive letter index of each\n                if (fd.toLowerCase() === pd.toLowerCase()) {\n                    pattern[pdi] = fd;\n                    patternStartIndex = pdi;\n                    fileStartIndex = fdi;\n                }\n            }\n        }\n        // resolve and reduce . and .. portions in the file as well.\n        // don't need to do the second phase, because it's only one string[]\n        const { optimizationLevel = 1 } = this.options;\n        if (optimizationLevel >= 2) {\n            file = this.levelTwoFileOptimize(file);\n        }\n        if (pattern.includes(GLOBSTAR)) {\n            return this.#matchGlobstar(file, pattern, partial, fileStartIndex, patternStartIndex);\n        }\n        return this.#matchOne(file, pattern, partial, fileStartIndex, patternStartIndex);\n    }\n    #matchGlobstar(file, pattern, partial, fileIndex, patternIndex) {\n        // split the pattern into head, tail, and middle of ** delimited parts\n        const firstgs = pattern.indexOf(GLOBSTAR, patternIndex);\n        const lastgs = pattern.lastIndexOf(GLOBSTAR);\n        // split the pattern up into globstar-delimited sections\n        // the tail has to be at the end, and the others just have\n        // to be found in order from the head.\n        const [head, body, tail] = partial ? [\n            pattern.slice(patternIndex, firstgs),\n            pattern.slice(firstgs + 1),\n            [],\n        ] : [\n            pattern.slice(patternIndex, firstgs),\n            pattern.slice(firstgs + 1, lastgs),\n            pattern.slice(lastgs + 1),\n        ];\n        // check the head, from the current file/pattern index.\n        if (head.length) {\n            const fileHead = file.slice(fileIndex, fileIndex + head.length);\n            if (!this.#matchOne(fileHead, head, partial, 0, 0)) {\n                return false;\n            }\n            fileIndex += head.length;\n            patternIndex += head.length;\n        }\n        // now we know the head matches!\n        // if the last portion is not empty, it MUST match the end\n        // check the tail\n        let fileTailMatch = 0;\n        if (tail.length) {\n            // if head + tail > file, then we cannot possibly match\n            if (tail.length + fileIndex > file.length)\n                return false;\n            // try to match the tail\n            let tailStart = file.length - tail.length;\n            if (this.#matchOne(file, tail, partial, tailStart, 0)) {\n                fileTailMatch = tail.length;\n            }\n            else {\n                // affordance for stuff like a/**/* matching a/b/\n                // if the last file portion is '', and there's more to the pattern\n                // then try without the '' bit.\n                if (file[file.length - 1] !== '' ||\n                    fileIndex + tail.length === file.length) {\n                    return false;\n                }\n                tailStart--;\n                if (!this.#matchOne(file, tail, partial, tailStart, 0)) {\n                    return false;\n                }\n                fileTailMatch = tail.length + 1;\n            }\n        }\n        // now we know the tail matches!\n        // the middle is zero or more portions wrapped in **, possibly\n        // containing more ** sections.\n        // so a/**/b/**/c/**/d has become **/b/**/c/**\n        // if it's empty, it means a/**/b, just verify we have no bad dots\n        // if there's no tail, so it ends on /**, then we must have *something*\n        // after the head, or it's not a matc\n        if (!body.length) {\n            let sawSome = !!fileTailMatch;\n            for (let i = fileIndex; i < file.length - fileTailMatch; i++) {\n                const f = String(file[i]);\n                sawSome = true;\n                if (f === '.' ||\n                    f === '..' ||\n                    (!this.options.dot && f.startsWith('.'))) {\n                    return false;\n                }\n            }\n            // in partial mode, we just need to get past all file parts\n            return partial || sawSome;\n        }\n        // now we know that there's one or more body sections, which can\n        // be matched anywhere from the 0 index (because the head was pruned)\n        // through to the length-fileTailMatch index.\n        // split the body up into sections, and note the minimum index it can\n        // be found at (start with the length of all previous segments)\n        // [section, before, after]\n        const bodySegments = [[[], 0]];\n        let currentBody = bodySegments[0];\n        let nonGsParts = 0;\n        const nonGsPartsSums = [0];\n        for (const b of body) {\n            if (b === GLOBSTAR) {\n                nonGsPartsSums.push(nonGsParts);\n                currentBody = [[], 0];\n                bodySegments.push(currentBody);\n            }\n            else {\n                currentBody[0].push(b);\n                nonGsParts++;\n            }\n        }\n        let i = bodySegments.length - 1;\n        const fileLength = file.length - fileTailMatch;\n        for (const b of bodySegments) {\n            b[1] = fileLength - (nonGsPartsSums[i--] + b[0].length);\n        }\n        return !!this.#matchGlobStarBodySections(file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch);\n    }\n    // return false for \"nope, not matching\"\n    // return null for \"not matching, cannot keep trying\"\n    #matchGlobStarBodySections(file, \n    // pattern section, last possible position for it\n    bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail) {\n        // take the first body segment, and walk from fileIndex to its \"after\"\n        // value at the end\n        // If it doesn't match at that position, we increment, until we hit\n        // that final possible position, and give up.\n        // If it does match, then advance and try to rest.\n        // If any of them fail we keep walking forward.\n        // this is still a bit recursively painful, but it's more constrained\n        // than previous implementations, because we never test something that\n        // can't possibly be a valid matching condition.\n        const bs = bodySegments[bodyIndex];\n        if (!bs) {\n            // just make sure that there's no bad dots\n            for (let i = fileIndex; i < file.length; i++) {\n                sawTail = true;\n                const f = file[i];\n                if (f === '.' ||\n                    f === '..' ||\n                    (!this.options.dot && f.startsWith('.'))) {\n                    return false;\n                }\n            }\n            return sawTail;\n        }\n        // have a non-globstar body section to test\n        const [body, after] = bs;\n        while (fileIndex <= after) {\n            const m = this.#matchOne(file.slice(0, fileIndex + body.length), body, partial, fileIndex, 0);\n            // if limit exceeded, no match. intentional false negative,\n            // acceptable break in correctness for security.\n            if (m && globStarDepth < this.maxGlobstarRecursion) {\n                // match! see if the rest match. if so, we're done!\n                const sub = this.#matchGlobStarBodySections(file, bodySegments, fileIndex + body.length, bodyIndex + 1, partial, globStarDepth + 1, sawTail);\n                if (sub !== false) {\n                    return sub;\n                }\n            }\n            const f = file[fileIndex];\n            if (f === '.' ||\n                f === '..' ||\n                (!this.options.dot && f.startsWith('.'))) {\n                return false;\n            }\n            fileIndex++;\n        }\n        // walked off. no point continuing\n        return partial || null;\n    }\n    #matchOne(file, pattern, partial, fileIndex, patternIndex) {\n        let fi;\n        let pi;\n        let pl;\n        let fl;\n        for (fi = fileIndex,\n            pi = patternIndex,\n            fl = file.length,\n            pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n            this.debug('matchOne loop');\n            let p = pattern[pi];\n            let f = file[fi];\n            this.debug(pattern, p, f);\n            // should be impossible.\n            // some invalid regexp stuff in the set.\n            /* c8 ignore start */\n            if (p === false || p === GLOBSTAR) {\n                return false;\n            }\n            /* c8 ignore stop */\n            // something other than **\n            // non-magic patterns just have to match exactly\n            // patterns with magic have been turned into regexps.\n            let hit;\n            if (typeof p === 'string') {\n                hit = f === p;\n                this.debug('string match', p, f, hit);\n            }\n            else {\n                hit = p.test(f);\n                this.debug('pattern match', p, f, hit);\n            }\n            if (!hit)\n                return false;\n        }\n        // Note: ending in / means that we'll get a final \"\"\n        // at the end of the pattern.  This can only match a\n        // corresponding \"\" at the end of the file.\n        // If the file ends in /, then it can only match a\n        // a pattern that ends in /, unless the pattern just\n        // doesn't have any more for it. But, a/b/ should *not*\n        // match \"a/b/*\", even though \"\" matches against the\n        // [^/]*? pattern, except in partial mode, where it might\n        // simply not be reached yet.\n        // However, a/b/ should still satisfy a/*\n        // now either we fell off the end of the pattern, or we're done.\n        if (fi === fl && pi === pl) {\n            // ran out of pattern and filename at the same time.\n            // an exact hit!\n            return true;\n        }\n        else if (fi === fl) {\n            // ran out of file, but still had pattern left.\n            // this is ok if we're doing the match as part of\n            // a glob fs traversal.\n            return partial;\n        }\n        else if (pi === pl) {\n            // ran out of pattern, still have file left.\n            // this is only acceptable if we're on the very last\n            // empty segment of a file with a trailing slash.\n            // a/* should match a/b/\n            return fi === fl - 1 && file[fi] === '';\n            /* c8 ignore start */\n        }\n        else {\n            // should be unreachable.\n            throw new Error('wtf?');\n        }\n        /* c8 ignore stop */\n    }\n    braceExpand() {\n        return braceExpand(this.pattern, this.options);\n    }\n    parse(pattern) {\n        assertValidPattern(pattern);\n        const options = this.options;\n        // shortcuts\n        if (pattern === '**')\n            return GLOBSTAR;\n        if (pattern === '')\n            return '';\n        // far and away, the most common glob pattern parts are\n        // *, *.*, and *.<ext>  Add a fast check method for those.\n        let m;\n        let fastTest = null;\n        if ((m = pattern.match(starRE))) {\n            fastTest = options.dot ? starTestDot : starTest;\n        }\n        else if ((m = pattern.match(starDotExtRE))) {\n            fastTest = (options.nocase ?\n                options.dot ?\n                    starDotExtTestNocaseDot\n                    : starDotExtTestNocase\n                : options.dot ? starDotExtTestDot\n                    : starDotExtTest)(m[1]);\n        }\n        else if ((m = pattern.match(qmarksRE))) {\n            fastTest = (options.nocase ?\n                options.dot ?\n                    qmarksTestNocaseDot\n                    : qmarksTestNocase\n                : options.dot ? qmarksTestDot\n                    : qmarksTest)(m);\n        }\n        else if ((m = pattern.match(starDotStarRE))) {\n            fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n        }\n        else if ((m = pattern.match(dotStarRE))) {\n            fastTest = dotStarTest;\n        }\n        const re = AST.fromGlob(pattern, this.options).toMMPattern();\n        if (fastTest && typeof re === 'object') {\n            // Avoids overriding in frozen environments\n            Reflect.defineProperty(re, 'test', { value: fastTest });\n        }\n        return re;\n    }\n    makeRe() {\n        if (this.regexp || this.regexp === false)\n            return this.regexp;\n        // at this point, this.set is a 2d array of partial\n        // pattern strings, or \"**\".\n        //\n        // It's better to use .match().  This function shouldn't\n        // be used, really, but it's pretty convenient sometimes,\n        // when you just want to work with a regex.\n        const set = this.set;\n        if (!set.length) {\n            this.regexp = false;\n            return this.regexp;\n        }\n        const options = this.options;\n        const twoStar = options.noglobstar ? star\n            : options.dot ? twoStarDot\n                : twoStarNoDot;\n        const flags = new Set(options.nocase ? ['i'] : []);\n        // regexpify non-globstar patterns\n        // if ** is only item, then we just do one twoStar\n        // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n        // if ** is last, append (\\/twoStar|) to previous\n        // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n        // then filter out GLOBSTAR symbols\n        let re = set\n            .map(pattern => {\n            const pp = pattern.map(p => {\n                if (p instanceof RegExp) {\n                    for (const f of p.flags.split(''))\n                        flags.add(f);\n                }\n                return (typeof p === 'string' ? regExpEscape(p)\n                    : p === GLOBSTAR ? GLOBSTAR\n                        : p._src);\n            });\n            pp.forEach((p, i) => {\n                const next = pp[i + 1];\n                const prev = pp[i - 1];\n                if (p !== GLOBSTAR || prev === GLOBSTAR) {\n                    return;\n                }\n                if (prev === undefined) {\n                    if (next !== undefined && next !== GLOBSTAR) {\n                        pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n                    }\n                    else {\n                        pp[i] = twoStar;\n                    }\n                }\n                else if (next === undefined) {\n                    pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + ')?';\n                }\n                else if (next !== GLOBSTAR) {\n                    pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n                    pp[i + 1] = GLOBSTAR;\n                }\n            });\n            const filtered = pp.filter(p => p !== GLOBSTAR);\n            // For partial matches, we need to make the pattern match\n            // any prefix of the full path. We do this by generating\n            // alternative patterns that match progressively longer prefixes.\n            if (this.partial && filtered.length >= 1) {\n                const prefixes = [];\n                for (let i = 1; i <= filtered.length; i++) {\n                    prefixes.push(filtered.slice(0, i).join('/'));\n                }\n                return '(?:' + prefixes.join('|') + ')';\n            }\n            return filtered.join('/');\n        })\n            .join('|');\n        // need to wrap in parens if we had more than one thing with |,\n        // otherwise only the first will be anchored to ^ and the last to $\n        const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];\n        // must match entire pattern\n        // ending in a * or ** will make it less strict.\n        re = '^' + open + re + close + '$';\n        // In partial mode, '/' should always match as it's a valid prefix for any pattern\n        if (this.partial) {\n            re = '^(?:\\\\/|' + open + re.slice(1, -1) + close + ')$';\n        }\n        // can match anything, as long as it's not this.\n        if (this.negate)\n            re = '^(?!' + re + ').+$';\n        try {\n            this.regexp = new RegExp(re, [...flags].join(''));\n            /* c8 ignore start */\n        }\n        catch (ex) {\n            // should be impossible\n            this.regexp = false;\n        }\n        /* c8 ignore stop */\n        return this.regexp;\n    }\n    slashSplit(p) {\n        // if p starts with // on windows, we preserve that\n        // so that UNC paths aren't broken.  Otherwise, any number of\n        // / characters are coalesced into one, unless\n        // preserveMultipleSlashes is set to true.\n        if (this.preserveMultipleSlashes) {\n            return p.split('/');\n        }\n        else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n            // add an extra '' for the one we lose\n            return ['', ...p.split(/\\/+/)];\n        }\n        else {\n            return p.split(/\\/+/);\n        }\n    }\n    match(f, partial = this.partial) {\n        this.debug('match', f, this.pattern);\n        // short-circuit in the case of busted things.\n        // comments, etc.\n        if (this.comment) {\n            return false;\n        }\n        if (this.empty) {\n            return f === '';\n        }\n        if (f === '/' && partial) {\n            return true;\n        }\n        const options = this.options;\n        // windows: need to use /, not \\\n        if (this.isWindows) {\n            f = f.split('\\\\').join('/');\n        }\n        // treat the test path as a set of pathparts.\n        const ff = this.slashSplit(f);\n        this.debug(this.pattern, 'split', ff);\n        // just ONE of the pattern sets in this.set needs to match\n        // in order for it to be valid.  If negating, then just one\n        // match means that we have failed.\n        // Either way, return on the first hit.\n        const set = this.set;\n        this.debug(this.pattern, 'set', set);\n        // Find the basename of the path by looking for the last non-empty segment\n        let filename = ff[ff.length - 1];\n        if (!filename) {\n            for (let i = ff.length - 2; !filename && i >= 0; i--) {\n                filename = ff[i];\n            }\n        }\n        for (let i = 0; i < set.length; i++) {\n            const pattern = set[i];\n            let file = ff;\n            if (options.matchBase && pattern.length === 1) {\n                file = [filename];\n            }\n            const hit = this.matchOne(file, pattern, partial);\n            if (hit) {\n                if (options.flipNegate) {\n                    return true;\n                }\n                return !this.negate;\n            }\n        }\n        // didn't get any hits.  this is success if it's a negative\n        // pattern, failure otherwise.\n        if (options.flipNegate) {\n            return false;\n        }\n        return this.negate;\n    }\n    static defaults(def) {\n        return minimatch.defaults(def).Minimatch;\n    }\n}\n/* c8 ignore stop */\nminimatch.AST = AST;\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n\nfunction isDefined(value) {\n  return value !== void 0 && value !== null;\n}\nfunction fmap(v, predicate) {\n  if (!isDefined(v)) {\n    return null;\n  }\n  return predicate(v);\n}\nfunction groupBy(objects, ...by) {\n  if (by.length === 0) {\n    return objects;\n  }\n  const [k0, ...kr] = by;\n  const topLevelGroups = /* @__PURE__ */ new Map();\n  for (const obj of objects) {\n    const k = obj[k0];\n    let arr = topLevelGroups.get(k);\n    if (!arr) {\n      arr = [];\n      topLevelGroups.set(k, arr);\n    }\n    arr.push(obj);\n  }\n  return new Map(Array.from(topLevelGroups, ([k, v]) => [k, groupBy(v, ...kr)]));\n}\nfunction assertNever(caseType) {\n  throw new Error(`assertNever: ${caseType}`);\n}\nasync function getOrSetFromMapWithEnabled(params) {\n  return params.shouldCache ? getOrSetFromMap(params) : params.value();\n}\nasync function getOrSetFromMap(params) {\n  const { map, key, value } = params;\n  if (map.has(key)) {\n    return map.get(key);\n  }\n  const val = await value();\n  map.set(key, val);\n  return val;\n}\nfunction normalizeIndent(template, ...args) {\n  const fullString = template.reduce((accumulator, str, i) => {\n    return accumulator + str + (args[i] || \"\");\n  }, \"\");\n  const lines = fullString.split(\"\\n\");\n  const nonEmptyLines = lines.filter((line) => line.trim() !== \"\");\n  if (nonEmptyLines.length === 0) {\n    return \"\";\n  }\n  const indent = nonEmptyLines[0].match(/^\\s*/)?.[0];\n  const normalized = nonEmptyLines.map((line) => line.replace(indent, \"\")).join(\"\\n\");\n  return normalized;\n}\nfunction toCase(str, caseType) {\n  switch (caseType) {\n    case void 0:\n      return str;\n    case \"snake\":\n      return toSnakeCase(str);\n    case \"camel\":\n      return toCamelCase(str);\n    case \"pascal\":\n      return toPascalCase(str);\n    case \"screaming snake\":\n      return toScreamingSnakeCase(str);\n    default:\n      assertNever(caseType);\n  }\n}\nfunction toCamelCase(str) {\n  return str.replace(/([-_][a-z])/gi, ($1) => {\n    return $1.toUpperCase().replace(\"-\", \"\").replace(\"_\", \"\");\n  });\n}\nfunction toPascalCase(str) {\n  return toCamelCase(str).replace(/^[a-z]/, (val) => val.toUpperCase());\n}\nfunction toSnakeCase(str) {\n  return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").replace(/([A-Z])([A-Z][a-z])/g, \"$1_$2\").toLowerCase();\n}\nfunction toScreamingSnakeCase(str) {\n  return toSnakeCase(str).toUpperCase();\n}\nclass DuplicateColumnsError extends Error {\n  _tag = \"DuplicateColumnsError\";\n  columns;\n  queryText;\n  position;\n  sourcemaps;\n  constructor(params) {\n    super(`Duplicate columns: ${params.columns.join(\", \")}`);\n    this.columns = params.columns;\n    this.queryText = params.queryText;\n    this.position = params.position;\n    this.sourcemaps = params.sourcemaps;\n  }\n  static of(params) {\n    return new DuplicateColumnsError(params);\n  }\n  toJSON() {\n    return {\n      _tag: this._tag,\n      message: this.message,\n      columns: this.columns,\n      queryText: this.queryText,\n      position: this.position,\n      sourcemaps: this.sourcemaps\n    };\n  }\n}\nclass PostgresError extends Error {\n  _tag = \"PostgresError\";\n  queryText;\n  message;\n  line;\n  position;\n  sourcemaps;\n  constructor(params) {\n    super(params.message);\n    this.name = \"PostgresError\";\n    this.queryText = params.queryText;\n    this.message = params.message;\n    this.line = params.line;\n    this.position = Number(params.position);\n    this.sourcemaps = params.sourcemaps;\n  }\n  static of(params) {\n    return new PostgresError(params);\n  }\n  static to(query, error, sourcemaps) {\n    if (isPostgresError(error)) {\n      return PostgresError.of({\n        queryText: query,\n        message: error.message,\n        line: error.line,\n        position: error.position,\n        sourcemaps\n      });\n    }\n    return PostgresError.of({\n      queryText: query,\n      message: `${error}`,\n      line: \"1\",\n      position: isPgParserError(error) ? error.cursorPosition : 0,\n      sourcemaps\n    });\n  }\n  toJSON() {\n    return {\n      _tag: this._tag,\n      queryText: this.queryText,\n      message: this.message,\n      line: this.line,\n      position: this.position,\n      sourcemaps: this.sourcemaps\n    };\n  }\n}\nfunction isPostgresError(e) {\n  if (e instanceof postgres.PostgresError) {\n    return true;\n  }\n  if (e instanceof Error && e.name === \"PostgresError\") {\n    return true;\n  }\n  return false;\n}\nfunction isPgParserError(error) {\n  return error instanceof Error && \"cursorPosition\" in error;\n}\nconst defaultTypeMapping = {\n  // Integer types\n  int2: \"number\",\n  int4: \"number\",\n  int8: \"string\",\n  smallint: \"number\",\n  int: \"number\",\n  bigint: \"string\",\n  // Precision types\n  real: \"number\",\n  float4: \"number\",\n  float: \"number\",\n  float8: \"number\",\n  numeric: \"string\",\n  decimal: \"number\",\n  // Serial types\n  smallserial: \"number\",\n  serial: \"number\",\n  bigserial: \"string\",\n  // Common string types\n  uuid: \"string\",\n  text: \"string\",\n  varchar: \"string\",\n  char: \"string\",\n  bpchar: \"string\",\n  citext: \"string\",\n  // Bool types\n  bit: \"boolean\",\n  bool: \"boolean\",\n  boolean: \"boolean\",\n  // Dates and times\n  date: \"Date\",\n  timestamp: \"Date\",\n  timestamptz: \"Date\",\n  time: \"string\",\n  timetz: \"string\",\n  interval: \"string\",\n  // Network address types\n  inet: \"string\",\n  cidr: \"string\",\n  macaddr: \"string\",\n  macaddr8: \"string\",\n  // Extra types\n  money: \"number\",\n  void: \"void\",\n  // JSON types\n  json: \"any\",\n  jsonb: \"any\",\n  // Bytes\n  bytea: \"any\",\n  // null\n  null: \"null\"\n};\nconst defaultTypesMap = new Map(Object.entries(defaultTypeMapping));\n\nvar AExprKind = /* @__PURE__ */ ((AExprKind2) => {\n  AExprKind2[\"A_EXPR_KIND_UNDEFINED\"] = \"A_EXPR_KIND_UNDEFINED\";\n  AExprKind2[\"AEXPR_OP\"] = \"AEXPR_OP\";\n  AExprKind2[\"AEXPR_OP_ANY\"] = \"AEXPR_OP_ANY\";\n  AExprKind2[\"AEXPR_OP_ALL\"] = \"AEXPR_OP_ALL\";\n  AExprKind2[\"AEXPR_DISTINCT\"] = \"AEXPR_DISTINCT\";\n  AExprKind2[\"AEXPR_NOT_DISTINCT\"] = \"AEXPR_NOT_DISTINCT\";\n  AExprKind2[\"AEXPR_NULLIF\"] = \"AEXPR_NULLIF\";\n  AExprKind2[\"AEXPR_IN\"] = \"AEXPR_IN\";\n  AExprKind2[\"AEXPR_LIKE\"] = \"AEXPR_LIKE\";\n  AExprKind2[\"AEXPR_ILIKE\"] = \"AEXPR_ILIKE\";\n  AExprKind2[\"AEXPR_SIMILAR\"] = \"AEXPR_SIMILAR\";\n  AExprKind2[\"AEXPR_BETWEEN\"] = \"AEXPR_BETWEEN\";\n  AExprKind2[\"AEXPR_NOT_BETWEEN\"] = \"AEXPR_NOT_BETWEEN\";\n  AExprKind2[\"AEXPR_BETWEEN_SYM\"] = \"AEXPR_BETWEEN_SYM\";\n  AExprKind2[\"AEXPR_NOT_BETWEEN_SYM\"] = \"AEXPR_NOT_BETWEEN_SYM\";\n  AExprKind2[\"UNRECOGNIZED\"] = \"UNRECOGNIZED\";\n  return AExprKind2;\n})(AExprKind || {});\nvar SetOperation = /* @__PURE__ */ ((SetOperation2) => {\n  SetOperation2[\"SET_OPERATION_UNDEFINED\"] = \"SET_OPERATION_UNDEFINED\";\n  SetOperation2[\"SETOP_NONE\"] = \"SETOP_NONE\";\n  SetOperation2[\"SETOP_UNION\"] = \"SETOP_UNION\";\n  SetOperation2[\"SETOP_INTERSECT\"] = \"SETOP_INTERSECT\";\n  SetOperation2[\"SETOP_EXCEPT\"] = \"SETOP_EXCEPT\";\n  SetOperation2[\"UNRECOGNIZED\"] = \"UNRECOGNIZED\";\n  return SetOperation2;\n})(SetOperation || {});\nvar BoolExprType = /* @__PURE__ */ ((BoolExprType2) => {\n  BoolExprType2[\"BOOL_EXPR_TYPE_UNDEFINED\"] = \"BOOL_EXPR_TYPE_UNDEFINED\";\n  BoolExprType2[\"AND_EXPR\"] = \"AND_EXPR\";\n  BoolExprType2[\"OR_EXPR\"] = \"OR_EXPR\";\n  BoolExprType2[\"NOT_EXPR\"] = \"NOT_EXPR\";\n  BoolExprType2[\"UNRECOGNIZED\"] = \"UNRECOGNIZED\";\n  return BoolExprType2;\n})(BoolExprType || {});\nvar SubLinkType = /* @__PURE__ */ ((SubLinkType2) => {\n  SubLinkType2[\"SUB_LINK_TYPE_UNDEFINED\"] = \"SUB_LINK_TYPE_UNDEFINED\";\n  SubLinkType2[\"EXISTS_SUBLINK\"] = \"EXISTS_SUBLINK\";\n  SubLinkType2[\"ALL_SUBLINK\"] = \"ALL_SUBLINK\";\n  SubLinkType2[\"ANY_SUBLINK\"] = \"ANY_SUBLINK\";\n  SubLinkType2[\"ROWCOMPARE_SUBLINK\"] = \"ROWCOMPARE_SUBLINK\";\n  SubLinkType2[\"EXPR_SUBLINK\"] = \"EXPR_SUBLINK\";\n  SubLinkType2[\"MULTIEXPR_SUBLINK\"] = \"MULTIEXPR_SUBLINK\";\n  SubLinkType2[\"ARRAY_SUBLINK\"] = \"ARRAY_SUBLINK\";\n  SubLinkType2[\"CTE_SUBLINK\"] = \"CTE_SUBLINK\";\n  SubLinkType2[\"UNRECOGNIZED\"] = \"UNRECOGNIZED\";\n  return SubLinkType2;\n})(SubLinkType || {});\nvar NullTestType = /* @__PURE__ */ ((NullTestType2) => {\n  NullTestType2[\"NULL_TEST_TYPE_UNDEFINED\"] = \"NULL_TEST_TYPE_UNDEFINED\";\n  NullTestType2[\"IS_NULL\"] = \"IS_NULL\";\n  NullTestType2[\"IS_NOT_NULL\"] = \"IS_NOT_NULL\";\n  NullTestType2[\"UNRECOGNIZED\"] = \"UNRECOGNIZED\";\n  return NullTestType2;\n})(NullTestType || {});\nvar JoinType = /* @__PURE__ */ ((JoinType2) => {\n  JoinType2[\"JOIN_TYPE_UNDEFINED\"] = \"JOIN_TYPE_UNDEFINED\";\n  JoinType2[\"JOIN_INNER\"] = \"JOIN_INNER\";\n  JoinType2[\"JOIN_LEFT\"] = \"JOIN_LEFT\";\n  JoinType2[\"JOIN_FULL\"] = \"JOIN_FULL\";\n  JoinType2[\"JOIN_RIGHT\"] = \"JOIN_RIGHT\";\n  JoinType2[\"JOIN_SEMI\"] = \"JOIN_SEMI\";\n  JoinType2[\"JOIN_ANTI\"] = \"JOIN_ANTI\";\n  JoinType2[\"JOIN_UNIQUE_OUTER\"] = \"JOIN_UNIQUE_OUTER\";\n  JoinType2[\"JOIN_UNIQUE_INNER\"] = \"JOIN_UNIQUE_INNER\";\n  JoinType2[\"UNRECOGNIZED\"] = \"UNRECOGNIZED\";\n  return JoinType2;\n})(JoinType || {});\n\nfunction isColumnStarRef(fields) {\n  return isSingleCell(fields) && fields[0]?.A_Star !== void 0;\n}\nfunction isColumnTableStarRef(fields) {\n  return isTuple(fields) && fields[0].String !== void 0 && fields[1].A_Star !== void 0;\n}\nfunction isColumnUnknownRef(fields) {\n  return isSingleCell(fields) && fields[0].String !== void 0;\n}\nfunction isColumnTableColumnRef(fields) {\n  return isTuple(fields) && fields[0].String !== void 0 && fields[1].String !== void 0;\n}\nfunction isSingleCell(arr) {\n  return arr.length === 1;\n}\nfunction isTuple(arr) {\n  return arr.length === 2;\n}\n\nfunction getConstantInteger(node) {\n  if (node?.A_Const?.ival !== void 0) {\n    const ival = node.A_Const.ival;\n    if (typeof ival === \"number\") {\n      return ival;\n    }\n    if (ival.ival !== void 0) {\n      return ival.ival;\n    }\n    return 0;\n  }\n  if (node?.TypeCast?.arg !== void 0) {\n    return getConstantInteger(node.TypeCast.arg);\n  }\n  return void 0;\n}\nfunction hasZeroRowLimit(select) {\n  const limit = getConstantInteger(select.limitCount);\n  return limit !== void 0 && limit <= 0;\n}\nfunction expressionContainsAggregate(node, aggregateNames) {\n  if (node.TypeCast?.arg !== void 0) {\n    return expressionContainsAggregate(node.TypeCast.arg, aggregateNames);\n  }\n  if (node.FuncCall !== void 0) {\n    if (node.FuncCall.over !== void 0) {\n      return false;\n    }\n    const funcName = node.FuncCall.funcname.at(-1)?.String?.sval?.toLowerCase();\n    return funcName !== void 0 && aggregateNames.has(funcName);\n  }\n  if (node.A_Expr !== void 0) {\n    return node.A_Expr.lexpr !== void 0 && expressionContainsAggregate(node.A_Expr.lexpr, aggregateNames) || node.A_Expr.rexpr !== void 0 && expressionContainsAggregate(node.A_Expr.rexpr, aggregateNames);\n  }\n  if (node.CoalesceExpr !== void 0) {\n    return node.CoalesceExpr.args.some((arg) => expressionContainsAggregate(arg, aggregateNames));\n  }\n  if (node.CaseExpr !== void 0) {\n    if (node.CaseExpr.defresult !== void 0 && expressionContainsAggregate(node.CaseExpr.defresult, aggregateNames)) {\n      return true;\n    }\n    return node.CaseExpr.args.some(\n      (arg) => arg.CaseWhen?.expr !== void 0 && expressionContainsAggregate(arg.CaseWhen.expr, aggregateNames) || arg.CaseWhen?.result !== void 0 && expressionContainsAggregate(arg.CaseWhen.result, aggregateNames)\n    );\n  }\n  return false;\n}\nfunction expressionIsConstant(node) {\n  if (node.A_Const !== void 0) {\n    return node.A_Const.isnull !== true;\n  }\n  if (node.TypeCast?.arg !== void 0) {\n    return expressionIsConstant(node.TypeCast.arg);\n  }\n  if (node.A_Expr !== void 0) {\n    const { lexpr, rexpr } = node.A_Expr;\n    return (lexpr === void 0 || expressionIsConstant(lexpr)) && (rexpr === void 0 || expressionIsConstant(rexpr));\n  }\n  return false;\n}\nfunction caseExpressionAlwaysOneRow(caseExpr, aggregateNames) {\n  if (caseExpr.defresult === void 0) {\n    return false;\n  }\n  const branches = [...caseExpr.args.map((arg) => arg.CaseWhen?.result), caseExpr.defresult].filter(\n    (node) => node !== void 0\n  );\n  return branches.every(\n    (branch) => expressionContainsAggregate(branch, aggregateNames) || expressionIsConstant(branch)\n  );\n}\nfunction selectReturnsExactlyOneRow(select, aggregateNames) {\n  if ((select.groupClause?.length ?? 0) > 0 || select.havingClause !== void 0 || select.limitOffset !== void 0) {\n    return false;\n  }\n  const target = select.targetList?.[0]?.ResTarget?.val;\n  if ((select.targetList?.length ?? 0) !== 1 || target === void 0) {\n    return false;\n  }\n  if (expressionContainsAggregate(target, aggregateNames)) {\n    return !hasZeroRowLimit(select);\n  }\n  if (select.limitCount !== void 0) {\n    return false;\n  }\n  if ((select.fromClause?.length ?? 0) > 0 || select.whereClause !== void 0) {\n    return false;\n  }\n  return expressionIsConstant(target) || target.CaseExpr !== void 0 && caseExpressionAlwaysOneRow(target.CaseExpr, aggregateNames);\n}\n\nconst nonNullFunctions = /* @__PURE__ */ new Set([\n  \"count\",\n  \"now\",\n  \"abs\",\n  \"ceil\",\n  \"floor\",\n  \"round\",\n  \"sqrt\",\n  \"cbrt\",\n  \"exp\",\n  \"log\",\n  \"log10\",\n  \"sin\",\n  \"cos\",\n  \"tan\",\n  \"asin\",\n  \"acos\",\n  \"atan\",\n  \"radians\",\n  \"degrees\",\n  \"length\",\n  \"trim\",\n  \"lower\",\n  \"upper\",\n  \"ascii\",\n  \"concat\",\n  \"concat_ws\",\n  \"lpad\",\n  \"rpad\",\n  \"initcap\",\n  \"left\",\n  \"right\",\n  \"cdat\",\n  \"chr\",\n  \"strpos\",\n  \"substr\",\n  \"translate\",\n  \"current_date\",\n  \"current_time\",\n  \"current_timestamp\",\n  \"localtime\",\n  \"localtimestamp\",\n  \"uuid_generate_v1\",\n  \"uuid_generate_v4\",\n  \"pi\",\n  \"random\",\n  \"exists\",\n  \"row_number\",\n  \"current_schema\",\n  \"current_schemas\",\n  \"inet_server_addr\",\n  \"inet_server_port\",\n  \"isfinite\",\n  \"isnan\",\n  \"pg_backend_pid\",\n  \"pg_blocking_pids\",\n  \"pg_cancel_backend\",\n  \"pg_is_in_recovery\",\n  \"pg_postmaster_start_time\",\n  \"pg_relation_size\",\n  \"pg_total_relation_size\",\n  \"timeofday\",\n  \"similar_to_escape\"\n]);\nfunction concatStringNodes$1(nodes) {\n  return nodes?.map((x) => x.String?.sval).filter(Boolean).join(\".\") ?? \"\";\n}\nfunction isColumnNonNullable(params) {\n  const { val, root, aggregateNames, resolveColumnRefNonNull } = params;\n  if (val === void 0) {\n    return false;\n  }\n  if (val.NullTest) {\n    return true;\n  }\n  if (val.BoolExpr?.boolop === BoolExprType.NOT_EXPR) {\n    return true;\n  }\n  if (val.A_Const) {\n    return val.A_Const.isnull !== true;\n  }\n  if (val.FuncCall) {\n    const functionName = concatStringNodes$1(val.FuncCall.funcname);\n    return nonNullFunctions.has(functionName.toLowerCase());\n  }\n  if (val.TypeCast?.arg) {\n    return isColumnNonNullable({\n      val: val.TypeCast.arg,\n      root,\n      aggregateNames,\n      resolveColumnRefNonNull\n    });\n  }\n  if (val.SubLink) {\n    switch (val.SubLink.subLinkType) {\n      case SubLinkType.EXISTS_SUBLINK:\n        return true;\n      case SubLinkType.ARRAY_SUBLINK:\n        return true;\n      // while the array itself can be non-nullable, the elements can be nullable\n      case SubLinkType.ALL_SUBLINK:\n      case SubLinkType.ANY_SUBLINK:\n      case SubLinkType.ROWCOMPARE_SUBLINK:\n      case SubLinkType.EXPR_SUBLINK: {\n        const innerSelect = val.SubLink.subselect?.SelectStmt;\n        if (innerSelect === void 0 || aggregateNames === void 0 || !selectReturnsExactlyOneRow(innerSelect, aggregateNames)) {\n          return false;\n        }\n        const expression = innerSelect.targetList?.[0]?.ResTarget?.val;\n        return expression !== void 0 && isColumnNonNullable({\n          val: expression,\n          root,\n          aggregateNames,\n          resolveColumnRefNonNull: void 0\n        });\n      }\n      case SubLinkType.MULTIEXPR_SUBLINK:\n      case SubLinkType.CTE_SUBLINK:\n        return isColumnNonNullable({\n          val: val.SubLink.subselect,\n          root,\n          aggregateNames,\n          resolveColumnRefNonNull: void 0\n        });\n      case SubLinkType.SUB_LINK_TYPE_UNDEFINED:\n      case SubLinkType.UNRECOGNIZED:\n        return false;\n      default:\n        assertNever(val.SubLink.subLinkType);\n    }\n  }\n  if (val.A_Expr?.kind === AExprKind.AEXPR_SIMILAR) {\n    return true;\n  }\n  if (val.A_Expr?.kind === AExprKind.AEXPR_LIKE) {\n    return true;\n  }\n  if (val.A_Expr?.kind === AExprKind.AEXPR_OP) {\n    return isColumnNonNullable({\n      val: val.A_Expr.lexpr,\n      root,\n      aggregateNames,\n      resolveColumnRefNonNull\n    }) && isColumnNonNullable({ val: val.A_Expr.rexpr, root, aggregateNames, resolveColumnRefNonNull });\n  }\n  if (val.CaseExpr) {\n    if (val.CaseExpr.defresult === void 0) {\n      return false;\n    }\n    for (const when of val.CaseExpr.args) {\n      if (!isColumnNonNullable({\n        val: when.CaseWhen?.result,\n        root,\n        aggregateNames,\n        resolveColumnRefNonNull\n      })) {\n        return false;\n      }\n    }\n    return isColumnNonNullable({\n      val: val.CaseExpr.defresult,\n      root,\n      aggregateNames,\n      resolveColumnRefNonNull\n    });\n  }\n  if (val.ColumnRef) {\n    if (resolveColumnRefNonNull?.(val.ColumnRef)) {\n      return true;\n    }\n    const refColumnName = concatStringNodes$1(val.ColumnRef.fields);\n    for (const stmt of root.stmts) {\n      if (stmt?.stmt?.SelectStmt?.whereClause) {\n        const whereClause = stmt.stmt.SelectStmt.whereClause;\n        const whereClauseColumnName = concatStringNodes$1(\n          whereClause.NullTest?.arg?.ColumnRef?.fields\n        );\n        if (whereClause.NullTest?.nulltesttype === NullTestType.IS_NOT_NULL && whereClauseColumnName === refColumnName) {\n          return true;\n        }\n      }\n    }\n  }\n  if (val.CoalesceExpr) {\n    for (const arg of val.CoalesceExpr.args) {\n      if (isColumnNonNullable({ val: arg, root, aggregateNames, resolveColumnRefNonNull })) {\n        return true;\n      }\n    }\n  }\n  if (val.A_ArrayExpr) {\n    return true;\n  }\n  if (val.SelectStmt) {\n    const nonNullableColumnsInSubStmt = getNonNullableColumnsInSelectStmt(\n      val.SelectStmt,\n      root,\n      aggregateNames\n    );\n    return nonNullableColumnsInSubStmt.size > 0;\n  }\n  return false;\n}\nfunction getNodeName(node) {\n  if (node?.ColumnRef !== void 0) {\n    return concatStringNodes$1(node.ColumnRef.fields);\n  }\n  if (node?.NullTest) {\n    return getNodeName(node.NullTest.arg);\n  }\n  if (node?.A_Const?.boolval !== void 0) {\n    return \"bool\";\n  }\n  if (node?.TypeCast !== void 0) {\n    const typeName = concatStringNodes$1(node.TypeCast.typeName?.names);\n    if (typeName === \"pg_catalog.interval\") {\n      return \"interval\";\n    }\n    if (node.TypeCast.arg) {\n      return getNodeName(node.TypeCast.arg);\n    }\n    return typeName.replace(/^pg_catalog\\./, \"\");\n  }\n  if (node?.FuncCall?.funcname !== void 0) {\n    return concatStringNodes$1(node.FuncCall.funcname);\n  }\n  if (node?.SubLink?.subLinkType === SubLinkType.EXISTS_SUBLINK) {\n    return \"exists\";\n  }\n  if (node?.SubLink?.subLinkType === SubLinkType.ARRAY_SUBLINK) {\n    return \"array\";\n  }\n  if (node?.SubLink?.subselect?.SelectStmt?.targetList !== void 0) {\n    const subSelectTargetList = node.SubLink.subselect.SelectStmt.targetList;\n    if (subSelectTargetList?.[0].ResTarget !== void 0) {\n      return getTargetName(subSelectTargetList[0].ResTarget);\n    }\n  }\n  if (node?.A_ArrayExpr !== void 0) {\n    return \"array\";\n  }\n  if (node?.CaseExpr !== void 0) {\n    return \"case\";\n  }\n  if (node?.CoalesceExpr !== void 0) {\n    return \"coalesce\";\n  }\n  return \"?column?\";\n}\nfunction getTargetName(target) {\n  return target.name ?? getNodeName(target.val);\n}\nfunction getOutputColumnKey(alias, value) {\n  if (alias !== void 0) {\n    return alias;\n  }\n  return getNodeName(value);\n}\nfunction addColumnRef(nonNullableColumns, node) {\n  if (node?.ColumnRef?.fields !== void 0) {\n    nonNullableColumns.add(concatStringNodes$1(node.ColumnRef.fields));\n  }\n}\nfunction addColumnRefsFromEqualityExpr(nonNullableColumns, node) {\n  if (node?.BoolExpr?.boolop === BoolExprType.AND_EXPR) {\n    for (const arg of node.BoolExpr.args) {\n      addColumnRefsFromEqualityExpr(nonNullableColumns, arg);\n    }\n    return;\n  }\n  if (node?.A_Expr?.kind !== AExprKind.AEXPR_OP) {\n    return;\n  }\n  if (concatStringNodes$1(node.A_Expr.name) !== \"=\") {\n    return;\n  }\n  addColumnRef(nonNullableColumns, node.A_Expr.lexpr);\n  addColumnRef(nonNullableColumns, node.A_Expr.rexpr);\n}\nfunction addNonNullableColumnsFromSubselect(nonNullableColumns, node, root, aggregateNames) {\n  const select = node.RangeSubselect?.subquery?.SelectStmt;\n  if (select === void 0) {\n    return;\n  }\n  for (const name of getNonNullableColumnsInSelectStmt(select, root, aggregateNames)) {\n    nonNullableColumns.add(name);\n  }\n}\nfunction addNonNullableColumnsFromFromNode(nonNullableColumns, node, root, isNullable, aggregateNames) {\n  if (!isNullable) {\n    addNonNullableColumnsFromSubselect(nonNullableColumns, node, root, aggregateNames);\n  }\n  const joinExpr = node.JoinExpr;\n  if (joinExpr === void 0) {\n    return;\n  }\n  switch (joinExpr.jointype) {\n    case JoinType.JOIN_TYPE_UNDEFINED:\n    case JoinType.JOIN_INNER:\n    case JoinType.JOIN_SEMI:\n    case JoinType.JOIN_UNIQUE_INNER:\n      if (!isNullable) {\n        addColumnRefsFromEqualityExpr(nonNullableColumns, joinExpr.quals);\n      }\n      if (joinExpr.larg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.larg,\n          root,\n          isNullable,\n          aggregateNames\n        );\n      }\n      if (joinExpr.rarg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.rarg,\n          root,\n          isNullable,\n          aggregateNames\n        );\n      }\n      break;\n    case JoinType.JOIN_LEFT:\n    case JoinType.JOIN_ANTI:\n    case JoinType.JOIN_UNIQUE_OUTER:\n      if (joinExpr.larg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.larg,\n          root,\n          isNullable,\n          aggregateNames\n        );\n      }\n      if (joinExpr.rarg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.rarg,\n          root,\n          true,\n          aggregateNames\n        );\n      }\n      break;\n    case JoinType.JOIN_RIGHT:\n      if (joinExpr.larg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.larg,\n          root,\n          true,\n          aggregateNames\n        );\n      }\n      if (joinExpr.rarg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.rarg,\n          root,\n          isNullable,\n          aggregateNames\n        );\n      }\n      break;\n    case JoinType.JOIN_FULL:\n    case JoinType.UNRECOGNIZED:\n      if (joinExpr.larg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.larg,\n          root,\n          true,\n          aggregateNames\n        );\n      }\n      if (joinExpr.rarg !== void 0) {\n        addNonNullableColumnsFromFromNode(\n          nonNullableColumns,\n          joinExpr.rarg,\n          root,\n          true,\n          aggregateNames\n        );\n      }\n      break;\n    default:\n      assertNever(joinExpr.jointype);\n  }\n}\nfunction addNonNullableTargetAliases(nonNullableColumns, targetList) {\n  for (const target of targetList) {\n    const colRef = target.ResTarget?.val?.ColumnRef;\n    if (colRef?.fields === void 0 || target.ResTarget === void 0) {\n      continue;\n    }\n    const columnName = concatStringNodes$1(colRef.fields);\n    if (nonNullableColumns.has(columnName)) {\n      nonNullableColumns.add(getTargetName(target.ResTarget));\n    }\n  }\n}\nfunction getNonNullableColumnsInSelectStmt(stmt, root, aggregateNames) {\n  const nonNullableColumns = /* @__PURE__ */ new Set();\n  const targetList = [\n    ...stmt.targetList ?? [],\n    ...stmt.larg?.targetList ?? [],\n    ...stmt.rarg?.targetList ?? []\n  ];\n  const targetNames = /* @__PURE__ */ new Set();\n  for (const target of targetList) {\n    if (target.ResTarget) {\n      targetNames.add(getTargetName(target.ResTarget));\n    }\n    if (target.ResTarget && isColumnNonNullable({\n      val: target.ResTarget.val,\n      root,\n      aggregateNames,\n      resolveColumnRefNonNull: void 0\n    })) {\n      nonNullableColumns.add(getTargetName(target.ResTarget));\n    }\n  }\n  if (stmt.whereClause) {\n    if (stmt.whereClause.NullTest?.nulltesttype === NullTestType.IS_NOT_NULL) {\n      const colRef = stmt.whereClause.NullTest.arg?.ColumnRef;\n      const whereClauseName = concatStringNodes$1(colRef?.fields);\n      switch (true) {\n        case targetNames.has(whereClauseName):\n          nonNullableColumns.add(whereClauseName);\n          break;\n        case targetNames.has(colRef?.fields?.at(-1)?.String?.sval ?? \"\"):\n          nonNullableColumns.add(colRef?.fields?.at(-1)?.String?.sval ?? \"\");\n          break;\n        default:\n          nonNullableColumns.add(whereClauseName);\n          break;\n      }\n    }\n    if (stmt.whereClause.BoolExpr?.boolop === BoolExprType.AND_EXPR) {\n      for (const arg of stmt.whereClause.BoolExpr.args) {\n        if (arg.NullTest?.nulltesttype === NullTestType.IS_NOT_NULL && arg.NullTest.arg?.ColumnRef?.fields) {\n          nonNullableColumns.add(concatStringNodes$1(arg.NullTest.arg.ColumnRef.fields));\n        }\n      }\n    }\n    addColumnRefsFromEqualityExpr(nonNullableColumns, stmt.whereClause);\n  }\n  for (const from of stmt.fromClause ?? []) {\n    addNonNullableColumnsFromFromNode(nonNullableColumns, from, root, false, aggregateNames);\n  }\n  addNonNullableTargetAliases(nonNullableColumns, targetList);\n  return nonNullableColumns;\n}\nfunction getNonNullableColumns(root, options) {\n  const aggregateNames = options?.aggregateNames;\n  for (const stmt of root.stmts) {\n    if (stmt.stmt?.SelectStmt) {\n      return getNonNullableColumnsInSelectStmt(stmt.stmt.SelectStmt, root, aggregateNames);\n    }\n  }\n  return /* @__PURE__ */ new Set();\n}\n\nfunction getRelationsWithJoins(parsed) {\n  const results = /* @__PURE__ */ new Map();\n  const stmt = parsed.stmts[0];\n  if (stmt === void 0 || stmt?.stmt?.SelectStmt?.fromClause === void 0) {\n    return results;\n  }\n  for (const fromClause of stmt.stmt.SelectStmt.fromClause) {\n    if (fromClause.JoinExpr !== void 0) {\n      const { relName, relAlias, joins } = recursiveTraverseJoins([], fromClause.JoinExpr);\n      results.set(relName, { relAlias, joins });\n    }\n  }\n  return results;\n}\nfunction recursiveGetJoinName(joinExpr) {\n  if (joinExpr.rarg?.JoinExpr !== void 0) {\n    return recursiveGetJoinName(joinExpr.rarg.JoinExpr);\n  }\n  return joinExpr.rarg?.RangeVar?.relname ?? joinExpr.rarg?.RangeSubselect?.alias?.aliasname ?? joinExpr.rarg?.RangeFunction?.alias?.aliasname;\n}\nfunction recursiveTraverseJoins(joins, joinExpr) {\n  const joinName = recursiveGetJoinName(joinExpr);\n  const aliasName = joinExpr.rarg?.RangeVar?.alias?.aliasname;\n  if (joinName === void 0) {\n    throw new Error(\"joinName is undefined\");\n  }\n  const join = { type: joinExpr.jointype, name: joinName, alias: aliasName };\n  if (joinExpr.larg?.JoinExpr !== void 0) {\n    return recursiveTraverseJoins([join, ...joins], joinExpr.larg?.JoinExpr);\n  }\n  if (joinExpr.rarg?.JoinExpr !== void 0) {\n    return recursiveTraverseJoins([join, ...joins], joinExpr.rarg?.JoinExpr);\n  }\n  const relName = joinExpr.larg?.RangeVar?.relname ?? joinExpr.larg?.RangeSubselect?.alias?.aliasname ?? joinExpr.larg?.RangeFunction?.alias?.aliasname ?? joinExpr.rarg?.RangeVar?.relname ?? joinExpr.rarg?.RangeSubselect?.alias?.aliasname ?? joinExpr.rarg?.RangeFunction?.alias?.aliasname;\n  const relAlias = joinExpr.larg?.RangeVar?.alias?.aliasname;\n  if (relName === void 0) {\n    throw new Error(\"relName is undefined\");\n  }\n  return { relName, relAlias, joins: [join, ...joins] };\n}\nfunction flattenRelationsWithJoinsMap(relationsWithJoinsMap) {\n  const result = [];\n  relationsWithJoinsMap.forEach(({ relAlias, joins }, relName) => {\n    joins.forEach((join) => {\n      result.push({\n        relName,\n        relAlias,\n        joinType: join.type,\n        joinRelName: join.name,\n        alias: join.alias\n      });\n    });\n  });\n  return result;\n}\nfunction isNullableJoinedRelation(joinType) {\n  switch (joinType) {\n    case JoinType.JOIN_LEFT:\n    case JoinType.JOIN_FULL:\n      return true;\n    case JoinType.JOIN_TYPE_UNDEFINED:\n    case JoinType.JOIN_INNER:\n    case JoinType.JOIN_RIGHT:\n    case JoinType.JOIN_SEMI:\n    case JoinType.JOIN_ANTI:\n    case JoinType.JOIN_UNIQUE_OUTER:\n    case JoinType.JOIN_UNIQUE_INNER:\n    case JoinType.UNRECOGNIZED:\n      return false;\n    default:\n      return assertNever(joinType);\n  }\n}\nfunction isNullableBaseRelation(joinType) {\n  switch (joinType) {\n    case JoinType.JOIN_RIGHT:\n    case JoinType.JOIN_FULL:\n      return true;\n    case JoinType.JOIN_TYPE_UNDEFINED:\n    case JoinType.JOIN_INNER:\n    case JoinType.JOIN_LEFT:\n    case JoinType.JOIN_SEMI:\n    case JoinType.JOIN_ANTI:\n    case JoinType.JOIN_UNIQUE_OUTER:\n    case JoinType.JOIN_UNIQUE_INNER:\n    case JoinType.UNRECOGNIZED:\n      return false;\n    default:\n      return assertNever(joinType);\n  }\n}\nfunction hasNullableBaseRelation(relations, relationName) {\n  return relations.some(\n    (relation) => (relation.relName === relationName || relation.relAlias === relationName) && isNullableBaseRelation(relation.joinType)\n  );\n}\nfunction isRelationNullableDueToJoin(relations, relationName) {\n  const joinedRelation = relations.find(\n    (relation) => (relation.alias ?? relation.joinRelName) === relationName\n  );\n  if (joinedRelation !== void 0) {\n    return isNullableJoinedRelation(joinedRelation.joinType);\n  }\n  return hasNullableBaseRelation(relations, relationName);\n}\nfunction isTableNullableDueToJoin(relations, tableName) {\n  const joinedRelation = relations.find((relation) => relation.joinRelName === tableName);\n  if (joinedRelation !== void 0) {\n    return isNullableJoinedRelation(joinedRelation.joinType);\n  }\n  return hasNullableBaseRelation(relations, tableName);\n}\n\nfunction getSources({\n  select,\n  prevSources,\n  nonNullableColumns,\n  pgColsBySchemaAndTableName,\n  pgViewsBySchemaAndName,\n  pgAggregateNames,\n  relations,\n  visitedViews\n}) {\n  const nonNullableViewColumnsCache = /* @__PURE__ */ new Map();\n  function getSelectAnalysis(select2) {\n    const parsed = {\n      version: 0,\n      stmts: [{ stmt: { SelectStmt: select2 }, stmtLocation: 0, stmtLen: 0 }]\n    };\n    return {\n      relations: flattenRelationsWithJoinsMap(getRelationsWithJoins(parsed)),\n      nonNullableColumns: getNonNullableColumns(parsed, { aggregateNames: pgAggregateNames })\n    };\n  }\n  function getColumnCTEs(ctes2) {\n    const map = /* @__PURE__ */ new Map();\n    for (const cte of ctes2) {\n      if (cte.CommonTableExpr?.ctequery?.SelectStmt === void 0) continue;\n      if (cte.CommonTableExpr?.ctename === void 0) continue;\n      const cteSelect = cte.CommonTableExpr.ctequery.SelectStmt;\n      const analysis = getSelectAnalysis(cteSelect);\n      const resolver = getSources({\n        pgColsBySchemaAndTableName,\n        pgViewsBySchemaAndName,\n        pgAggregateNames,\n        prevSources,\n        nonNullableColumns: analysis.nonNullableColumns,\n        relations: analysis.relations,\n        visitedViews,\n        select: cteSelect\n      });\n      map.set(cte.CommonTableExpr.ctename, resolver);\n    }\n    return map;\n  }\n  const ctes = getColumnCTEs(select.withClause?.ctes ?? []);\n  const cteSources = new Map(\n    Array.from(ctes.entries()).map(([name, resolver]) => [\n      name,\n      { kind: \"cte\", name, sources: resolver }\n    ])\n  );\n  function resolveRangeVarSchema(node) {\n    switch (true) {\n      case node.schemaname !== void 0:\n        return node.schemaname;\n      case pgColsBySchemaAndTableName.get(\"public\")?.has(node.relname):\n        return \"public\";\n      default:\n        for (const [schemaName, cols] of pgColsBySchemaAndTableName) {\n          if (cols.has(node.relname)) {\n            return schemaName;\n          }\n        }\n        return \"public\";\n    }\n  }\n  function getNodeColumnAndSources(node) {\n    if (node.RangeVar !== void 0) {\n      const cteResolver = ctes.get(node.RangeVar.relname);\n      if (cteResolver !== void 0) {\n        return [{ kind: \"cte\", name: node.RangeVar.relname, sources: cteResolver }];\n      }\n      const inheritedSource = prevSources?.get(node.RangeVar.relname);\n      if (inheritedSource?.kind === \"cte\" || inheritedSource?.kind === \"subselect\") {\n        return [inheritedSource];\n      }\n      const schemaName = resolveRangeVarSchema(node.RangeVar);\n      const realTableName = node.RangeVar.relname;\n      const tableName = node.RangeVar.alias?.aliasname ?? realTableName;\n      const tableColsArray = pgColsBySchemaAndTableName.get(schemaName)?.get(realTableName) ?? [];\n      const tableSource = {\n        kind: \"table\",\n        schemaName,\n        original: realTableName,\n        name: tableName,\n        alias: node.RangeVar.alias?.aliasname,\n        columns: /* @__PURE__ */ new Map(),\n        nonNullableViewColumns: getNonNullableViewColumns({ schemaName, viewName: realTableName })\n      };\n      for (const col of tableColsArray) {\n        tableSource.columns.set(col.colName, resolveColumn(col, tableSource));\n      }\n      return [tableSource];\n    }\n    const sourcesArr = [];\n    if (node.JoinExpr?.larg !== void 0) {\n      sourcesArr.push(...getNodeColumnAndSources(node.JoinExpr.larg));\n    }\n    if (node.JoinExpr?.rarg !== void 0) {\n      sourcesArr.push(...getNodeColumnAndSources(node.JoinExpr.rarg));\n    }\n    if (node.RangeSubselect?.subquery?.SelectStmt !== void 0) {\n      const subselect = node.RangeSubselect.subquery.SelectStmt;\n      const analysis = getSelectAnalysis(subselect);\n      const combinedPrevSources = new Map([\n        ...prevSources?.entries() ?? [],\n        ...sourcesArr.map((x) => [x.name, x])\n      ]);\n      sourcesArr.push({\n        kind: \"subselect\",\n        name: node.RangeSubselect.alias?.aliasname ?? \"subselect\",\n        sources: getSources({\n          pgColsBySchemaAndTableName,\n          pgViewsBySchemaAndName,\n          pgAggregateNames,\n          relations: analysis.relations,\n          visitedViews,\n          prevSources: combinedPrevSources,\n          nonNullableColumns: analysis.nonNullableColumns,\n          select: subselect\n        })\n      });\n    }\n    return sourcesArr;\n  }\n  function getColumnSources(stmt) {\n    const fromClauseSources = [];\n    for (const node of stmt.fromClause ?? []) {\n      const nodes = getNodeColumnAndSources(node);\n      for (const nodeSource of nodes) {\n        fromClauseSources.push([nodeSource.name, nodeSource]);\n      }\n    }\n    return new Map(fromClauseSources);\n  }\n  const sources = new Map([\n    ...prevSources?.entries() ?? [],\n    ...getColumnSources(select).entries(),\n    ...cteSources.entries()\n  ]);\n  const cachedColumnsMap = /* @__PURE__ */ new WeakMap();\n  function getSourceColumns(source) {\n    if (cachedColumnsMap.has(source)) {\n      return cachedColumnsMap.get(source);\n    }\n    let result = [];\n    switch (source.kind) {\n      case \"table\":\n        result = Array.from(source.columns.values()).map((col) => ({\n          column: col,\n          source\n        }));\n        break;\n      case \"cte\":\n      case \"subselect\":\n        result = [];\n        break;\n    }\n    cachedColumnsMap.set(source, result);\n    return result;\n  }\n  function getAllResolvedColumns() {\n    const all = [];\n    for (const source of sources.values()) {\n      all.push(...getSourceColumns(source));\n    }\n    return all;\n  }\n  const allResolved = getAllResolvedColumns();\n  const columnIndex = /* @__PURE__ */ new Map();\n  const unknownColumnIndex = /* @__PURE__ */ new Map();\n  for (const entry of allResolved) {\n    const key = `${entry.source.name}.${entry.column.column.colName}`;\n    columnIndex.set(key, entry);\n    const unknownKey = entry.column.column.colName;\n    if (!unknownColumnIndex.has(unknownKey)) {\n      unknownColumnIndex.set(unknownKey, []);\n    }\n    unknownColumnIndex.get(unknownKey).push(entry);\n  }\n  function getColumnByTableAndColumnName(p) {\n    const source = sources.get(p.table);\n    if (!source) return null;\n    switch (source.kind) {\n      case \"table\":\n        return source.columns.get(p.column) || null;\n      default:\n        return null;\n    }\n  }\n  function getResolvedColumnsInTable(sourceName) {\n    const source = sources.get(sourceName);\n    if (!source) return [];\n    return getSourceColumns(source).map((x) => x.column);\n  }\n  function getNestedResolvedTargetField(field) {\n    switch (field.kind) {\n      case \"column\": {\n        const key = `${field.table}.${field.column}`;\n        if (columnIndex.has(key)) {\n          return columnIndex.get(key)?.column ?? null;\n        }\n        break;\n      }\n      case \"unknown\": {\n        if (unknownColumnIndex.has(field.field)) {\n          const candidates = unknownColumnIndex.get(field.field);\n          if (candidates.length > 0) return candidates[0]?.column ?? null;\n        }\n        break;\n      }\n    }\n    for (const source of sources.values()) {\n      switch (source.kind) {\n        case \"cte\":\n        case \"subselect\": {\n          const nested = source.sources.getNestedResolvedTargetField(field);\n          if (nested) {\n            return {\n              ...nested,\n              isNotNull: nested.isNotNull && !isRelationNullableDueToJoin(relations, source.name)\n            };\n          }\n          break;\n        }\n        case \"table\": {\n          const key = field.kind === \"column\" ? field.column : field.field;\n          const column = source.columns.get(key);\n          if (column) return column;\n          break;\n        }\n      }\n    }\n    return null;\n  }\n  function getColumnsByTargetField(field) {\n    switch (field.kind) {\n      case \"column\": {\n        const result = getColumnByTableAndColumnName(field);\n        if (result !== null) {\n          return [result];\n        }\n        for (const source of sources.values()) {\n          switch (source.kind) {\n            case \"subselect\": {\n              const column = source.sources.getNestedResolvedTargetField(field);\n              if (column) {\n                const isNullableDueToRelation = isRelationNullableDueToJoin(relations, source.name);\n                if (isNullableDueToRelation && column.isNotNull) {\n                  return [{ ...column, isNotNull: false }];\n                }\n                return [column];\n              }\n              break;\n            }\n          }\n        }\n        return null;\n      }\n      case \"unknown\": {\n        const source = sources.get(field.field);\n        if (source !== void 0) {\n          return getSourceColumns(source).map((x) => x.column);\n        }\n        const foundColumn = getNestedResolvedTargetField(field);\n        if (foundColumn) {\n          return [foundColumn];\n        }\n        for (const source2 of sources.values()) {\n          switch (source2.kind) {\n            case \"subselect\": {\n              const columns = source2.sources.getColumnsByTargetField(field);\n              if (columns) {\n                const isNullableDueToRelation = isRelationNullableDueToJoin(relations, source2.name);\n                if (isNullableDueToRelation) {\n                  return columns.map((col) => col.isNotNull ? { ...col, isNotNull: false } : col);\n                }\n                return columns;\n              }\n              break;\n            }\n          }\n        }\n        return null;\n      }\n    }\n  }\n  function resolveColumn(col, source) {\n    const keyForNullability = source.alias ? source.alias : source.original;\n    const isNullableDueToRelation = isRelationNullableDueToJoin(relations, keyForNullability);\n    const isNotNullBasedOnAST = nonNullableColumns.has(col.colName) || nonNullableColumns.has(`${source.name}.${col.colName}`);\n    const isNotNullInTable = col.colNotNull;\n    const isNotNullInView = source.nonNullableViewColumns?.has(col.colName) ?? false;\n    const isNonNullable = isNotNullBasedOnAST || (isNotNullInTable || isNotNullInView) && !isNullableDueToRelation;\n    return { column: col, isNotNull: isNonNullable };\n  }\n  function computeNonNullableViewColumns(viewKey, schemaName, viewName) {\n    const viewSelect = pgViewsBySchemaAndName.get(schemaName)?.get(viewName);\n    if (viewSelect === void 0 || visitedViews?.has(viewKey)) {\n      return void 0;\n    }\n    const childVisited = /* @__PURE__ */ new Set([...visitedViews ?? [], viewKey]);\n    const nonNullable = /* @__PURE__ */ new Set();\n    for (const { name, isNotNull } of analyzeSelectNonNull(viewSelect, childVisited)) {\n      if (isNotNull && name !== void 0) {\n        nonNullable.add(name);\n      }\n    }\n    return nonNullable;\n  }\n  function getNonNullableViewColumns(params) {\n    const viewKey = `${params.schemaName}.${params.viewName}`;\n    if (nonNullableViewColumnsCache.has(viewKey)) {\n      return nonNullableViewColumnsCache.get(viewKey);\n    }\n    const result = computeNonNullableViewColumns(viewKey, params.schemaName, params.viewName);\n    nonNullableViewColumnsCache.set(viewKey, result);\n    return result;\n  }\n  function analyzeSelectNonNull(select2, visited) {\n    const { op, larg, rarg } = select2;\n    if (op !== void 0 && op !== SetOperation.SETOP_NONE && larg !== void 0 && rarg !== void 0) {\n      const left = analyzeSelectNonNull(larg, visited);\n      const right = analyzeSelectNonNull(rarg, visited);\n      return left.map((column, index) => ({\n        name: column.name,\n        isNotNull: column.isNotNull && (right[index]?.isNotNull ?? false)\n      }));\n    }\n    return analyzePlainSelectNonNull(select2, visited);\n  }\n  function analyzePlainSelectNonNull(select2, visited) {\n    const parsed = {\n      version: 0,\n      stmts: [{ stmt: { SelectStmt: select2 }, stmtLocation: 0, stmtLen: 0 }]\n    };\n    const resolver = getSources({\n      pgColsBySchemaAndTableName,\n      pgViewsBySchemaAndName,\n      pgAggregateNames,\n      select: select2,\n      prevSources: void 0,\n      nonNullableColumns: getNonNullableColumns(parsed, { aggregateNames: pgAggregateNames }),\n      relations: flattenRelationsWithJoinsMap(getRelationsWithJoins(parsed)),\n      visitedViews: visited\n    });\n    const resolveColumnRefNonNull = (columnRef) => {\n      const fields = columnRef.fields ?? [];\n      const names = fields.map((f) => f.String?.sval).filter((s) => s !== void 0);\n      if (names.length === 0 || names.length !== fields.length) {\n        return false;\n      }\n      const resolved = names.length === 1 ? resolver.getNestedResolvedTargetField({ kind: \"unknown\", field: names[0] }) : resolver.getNestedResolvedTargetField({\n        kind: \"column\",\n        table: names[names.length - 2],\n        column: names[names.length - 1]\n      });\n      return resolved?.isNotNull ?? false;\n    };\n    return (select2.targetList ?? []).map((target) => {\n      const resTarget = target.ResTarget;\n      if (resTarget === void 0) {\n        return { name: void 0, isNotNull: false };\n      }\n      const columnRef = resTarget.val?.ColumnRef;\n      if (columnRef !== void 0) {\n        const names = (columnRef.fields ?? []).map((f) => f.String?.sval).filter((s) => s !== void 0);\n        return {\n          name: resTarget.name ?? names[names.length - 1],\n          isNotNull: resolveColumnRefNonNull(columnRef)\n        };\n      }\n      return {\n        name: getOutputColumnKey(resTarget.name, resTarget.val),\n        isNotNull: isColumnNonNullable({\n          val: resTarget.val,\n          root: parsed,\n          aggregateNames: pgAggregateNames,\n          resolveColumnRefNonNull\n        })\n      };\n    });\n  }\n  return {\n    getNodeColumnAndSources,\n    getResolvedColumnsInTable,\n    getAllResolvedColumns,\n    getColumnsByTargetField,\n    getNestedResolvedTargetField,\n    sources\n  };\n}\n\nconst booleanAExprOperators = /* @__PURE__ */ new Set([\n  \"=\",\n  \"<>\",\n  \"!=\",\n  \"<\",\n  \">\",\n  \"<=\",\n  \">=\",\n  \"~~\",\n  \"!~~\",\n  \"~~*\",\n  \"!~~*\",\n  \"~\",\n  \"!~\",\n  \"~*\",\n  \"!~*\"\n]);\nfunction getASTDescription(params) {\n  const select = params.parsed.stmts[0]?.stmt?.SelectStmt;\n  if (select === void 0) {\n    return {\n      map: /* @__PURE__ */ new Map(),\n      meta: {\n        relations: [],\n        nonNullableColumns: /* @__PURE__ */ new Set()\n      }\n    };\n  }\n  const nonNullableColumns = getNonNullableColumns(params.parsed, {\n    aggregateNames: params.pgAggregateNames\n  });\n  const relations = flattenRelationsWithJoinsMap(getRelationsWithJoins(params.parsed));\n  function getTypeByOid(oid) {\n    const name = params.pgTypes.get(oid)?.name;\n    if (name === void 0) {\n      return { isArray: false, override: false, value: \"unknown\" };\n    }\n    const { isArray, typeName } = name.startsWith(\"_\") ? { isArray: true, typeName: name.slice(1) } : { isArray: false, typeName: name };\n    const resolvedTypeName = params.typesMap.get(typeName) ?? { override: false, value: \"unknown\" };\n    return {\n      isArray,\n      override: resolvedTypeName.override,\n      value: resolvedTypeName.value\n    };\n  }\n  const cteSelects = new Map(params.cteSelects);\n  for (const cte of select.withClause?.ctes ?? []) {\n    if (cte.CommonTableExpr?.ctequery?.SelectStmt && cte.CommonTableExpr?.ctename) {\n      cteSelects.set(cte.CommonTableExpr.ctename, cte.CommonTableExpr.ctequery.SelectStmt);\n    }\n  }\n  const context = {\n    ...params,\n    cteSelects,\n    nonNullableColumns,\n    relations,\n    resolver: getSources({\n      relations,\n      select,\n      prevSources: params.prevSources,\n      nonNullableColumns,\n      pgColsBySchemaAndTableName: params.pgColsBySchemaAndTableName,\n      pgViewsBySchemaAndName: params.pgViewsBySchemaAndName,\n      pgAggregateNames: params.pgAggregateNames\n    }),\n    select,\n    resolved: /* @__PURE__ */ new WeakMap(),\n    toTypeScriptType: (p) => {\n      if (\"name\" in p) {\n        return {\n          kind: \"type\",\n          value: params.typesMap.get(p.name)?.value ?? \"unknown\",\n          type: p.name\n        };\n      }\n      const pgType = params.pgTypes.get(p.oid);\n      const typeByOid = getTypeByOid(p.oid);\n      if (typeByOid.override) {\n        const baseType = {\n          kind: \"type\",\n          value: typeByOid.value,\n          type: pgType?.name ?? \"unknown\"\n        };\n        return typeByOid.isArray ? { kind: \"array\", value: baseType } : baseType;\n      }\n      const typeByBaseOid = fmap(p.baseOid, getTypeByOid);\n      if (typeByBaseOid?.override === true) {\n        const baseType = {\n          kind: \"type\",\n          value: typeByBaseOid.value,\n          type: params.pgTypes.get(p.baseOid)?.name ?? \"unknown\"\n        };\n        return typeByBaseOid.isArray ? { kind: \"array\", value: baseType } : baseType;\n      }\n      const getEnumByOid = (oid) => {\n        const pgEnum = params.pgEnums.get(oid);\n        if (pgEnum === void 0) {\n          return void 0;\n        }\n        return {\n          kind: \"union\",\n          value: pgEnum.values.map((value2) => ({\n            kind: \"type\",\n            value: `'${value2}'`,\n            type: pgEnum.name\n          }))\n        };\n      };\n      const valueAsEnum = (() => {\n        const enumType = getEnumByOid(p.oid);\n        if (enumType !== void 0) {\n          return enumType;\n        }\n        if (pgType?.typelem !== void 0 && pgType.typelem !== 0) {\n          const arrayEnumValue = getEnumByOid(pgType.typelem);\n          if (arrayEnumValue !== void 0) {\n            return {\n              kind: \"array\",\n              value: arrayEnumValue\n            };\n          }\n        }\n        return void 0;\n      })();\n      if (valueAsEnum !== void 0) {\n        return valueAsEnum;\n      }\n      const { isArray, value } = typeByBaseOid ?? typeByOid;\n      const type = {\n        kind: \"type\",\n        value,\n        type: pgType?.name ?? \"unknown\"\n      };\n      if (p.baseOid !== null) {\n        type.base = params.pgTypes.get(p.baseOid)?.name;\n      }\n      return isArray ? { kind: \"array\", value: type } : type;\n    }\n  };\n  const targetLists = [select.targetList, select.larg?.targetList, select.rarg?.targetList].filter(\n    (x) => x !== void 0\n  );\n  const resolvedColumnsList = [];\n  for (const [targetListIdx, targetList] of targetLists.entries()) {\n    resolvedColumnsList[targetListIdx] = targetList.map((target) => {\n      const described = getDescribedNode({\n        alias: void 0,\n        node: target,\n        context\n      });\n      if (described.length === 0) {\n        return [void 0];\n      }\n      return described;\n    }).flat();\n  }\n  const columnsLength = resolvedColumnsList.reduce((acc, x) => Math.max(acc, x.length), 0);\n  const final = /* @__PURE__ */ new Map();\n  for (let i = 0; i < columnsLength; i++) {\n    const result = mergeColumns(resolvedColumnsList.map((x) => x[i]));\n    final.set(i, result);\n  }\n  return {\n    map: final,\n    meta: {\n      relations,\n      nonNullableColumns\n    }\n  };\n}\nfunction mergeColumns(columns) {\n  const definedColumns = columns.filter((x) => x !== void 0);\n  if (definedColumns.length === 0) {\n    return void 0;\n  }\n  const name = definedColumns[0].name;\n  const type = mergeDescribedColumnTypes(definedColumns.map((x) => x.type));\n  return { name, type };\n}\nfunction getDescribedNode(params) {\n  const { alias, node, context } = params;\n  if (node.ResTarget !== void 0) {\n    return getDescribedResTarget({ node: node.ResTarget, context });\n  }\n  if (node.A_Const !== void 0) {\n    return getDescribedAConst({ alias, node: node.A_Const, context });\n  }\n  if (node.ColumnRef !== void 0) {\n    return getDescribedColumnRef({ alias, node: node.ColumnRef, context });\n  }\n  if (node.FuncCall !== void 0) {\n    return getDescribedFuncCall({ alias, node: node.FuncCall, context });\n  }\n  if (node.TypeCast !== void 0) {\n    return getDescribedTypeCast({ alias, node: node.TypeCast, context });\n  }\n  if (node.A_ArrayExpr !== void 0) {\n    return getDescribedArrayExpr({ alias, node: node.A_ArrayExpr, context });\n  }\n  if (node.CoalesceExpr !== void 0) {\n    return getDescribedCoalesceExpr({ alias, node: node.CoalesceExpr, context });\n  }\n  if (node.SubLink !== void 0) {\n    return getDescribedSubLink({ alias, node: node.SubLink, context });\n  }\n  if (node.BoolExpr !== void 0) {\n    return getDescribedBoolExpr({ alias, node: node.BoolExpr, context });\n  }\n  if (node.CaseExpr !== void 0) {\n    return getDescribedCaseExpr({ alias, node: node.CaseExpr, context });\n  }\n  if (node.NullTest !== void 0) {\n    return getDescribedNullTest({ alias, node: node.NullTest, context });\n  }\n  if (node.A_Expr !== void 0) {\n    return getDescribedAExpr({ alias, node: node.A_Expr, context });\n  }\n  if (node.SelectStmt !== void 0) {\n    return getDescribedSelectStmt({ alias, node: node.SelectStmt, context });\n  }\n  return [];\n}\nfunction getDescribedAExpr({\n  alias,\n  node,\n  context\n}) {\n  const name = alias ?? \"?column?\";\n  if (node.lexpr === void 0 && node.rexpr !== void 0) {\n    const prefixOperator = concatStringNodes(node.name);\n    if (prefixOperator === \"|/\" || prefixOperator === \"||/\") {\n      const operandType = getDescribedNode({ alias, node: node.rexpr, context }).at(0)?.type;\n      const operandIsNullable = operandType !== void 0 && (operandType.kind === \"type\" && operandType.value === \"null\" || operandType.kind === \"union\" && operandType.value.some((member) => member.kind === \"type\" && member.value === \"null\"));\n      return [\n        {\n          name,\n          type: resolveType({\n            context,\n            nullable: !context.nonNullableColumns.has(name) && operandIsNullable,\n            type: context.toTypeScriptType({ name: \"float8\" })\n          })\n        }\n      ];\n    }\n    const described = getDescribedNode({ alias, node: node.rexpr, context }).at(0);\n    const type2 = fmap(described, (x) => getBaseType(x.type));\n    if (type2 === null) return [];\n    return [{ name, type: type2 }];\n  }\n  if (node.lexpr === void 0 || node.rexpr === void 0) {\n    return [];\n  }\n  const getResolvedNullableValueOrNull = (node2) => {\n    const column = getDescribedNode({ alias: void 0, node: node2, context }).at(0);\n    if (column === void 0) return null;\n    const getFromType = (type2) => {\n      switch (true) {\n        case type2.kind === \"type\":\n          return { value: type2.base ?? type2.type, array: false, nullable: false };\n        case (type2.kind === \"literal\" && type2.base.kind === \"type\"):\n          return { value: type2.base.type, array: false, nullable: false };\n        case (type2.kind === \"union\" && type2.value.every((x) => x.kind === \"literal\")): {\n          const resolved = getFromType(type2.value[0].base);\n          if (resolved === null) return null;\n          return { value: resolved.value, nullable: false, array: false };\n        }\n        case (type2.kind === \"union\" && isTuple(type2.value)): {\n          let nullable = false;\n          let value = void 0;\n          for (const valueType of type2.value) {\n            if (valueType.kind !== \"type\") return null;\n            if (valueType.value === \"null\") nullable = true;\n            if (valueType.value !== \"null\") value = valueType.type;\n          }\n          if (value === void 0) return null;\n          return { value, nullable, array: false };\n        }\n        case type2.kind === \"object\":\n          return { value: \"jsonb\", array: false, nullable: false };\n        default:\n          return null;\n      }\n    };\n    if (column.type.kind === \"array\") {\n      const resolved = getFromType(column.type.value);\n      if (!resolved) return null;\n      return { value: resolved.value, nullable: resolved.nullable, array: true };\n    }\n    return getFromType(column.type);\n  };\n  const lnode = getResolvedNullableValueOrNull(node.lexpr);\n  const rnode = getResolvedNullableValueOrNull(node.rexpr);\n  const operator = concatStringNodes(node.name);\n  if (lnode === null || rnode === null) {\n    if (isBooleanAExprOperator(operator)) {\n      return [\n        {\n          name,\n          type: resolveType({\n            context,\n            nullable: !context.nonNullableColumns.has(name),\n            type: context.toTypeScriptType({ name: \"bool\" })\n          })\n        }\n      ];\n    }\n    return [];\n  }\n  const downcast = () => {\n    const left = lnode.array ? `_${lnode.value}` : lnode.value;\n    const right = rnode.array ? `_${rnode.value}` : rnode.value;\n    const overrides = {\n      \"int4 ^ int4\": [\"float8\", \"^\", \"float8\"]\n    };\n    if (overrides[`${left} ${operator} ${right}`]) {\n      return overrides[`${left} ${operator} ${right}`];\n    }\n    const adjust = (value) => value === \"varchar\" ? \"text\" : value;\n    return [adjust(left), operator, adjust(right)];\n  };\n  const getNullable = () => {\n    if (context.nonNullableColumns.has(name)) {\n      return false;\n    }\n    if (lnode.nullable || rnode.nullable) {\n      return true;\n    }\n    const operatorForcesNullable = [\"->>\", \"#>>\"].includes(operator) && hasColumnReference(node.lexpr);\n    return operatorForcesNullable;\n  };\n  const getType = () => {\n    const nullable = getNullable();\n    if (operator === \"->>\" || operator === \"#>>\") {\n      return resolveType({ context, nullable, type: context.toTypeScriptType({ name: \"text\" }) });\n    }\n    const [dleft, doperator, dright] = downcast();\n    const type2 = context.typeExprMap.get(dleft)?.get(doperator)?.get(dright) ?? context.typeExprMap.get(\"anycompatiblearray\")?.get(operator)?.get(\"anycompatiblearray\") ?? context.typeExprMap.get(\"anyarray\")?.get(operator)?.get(\"anyarray\") ?? context.typeExprMap.get(lnode.value)?.get(operator)?.values().next().value;\n    if (type2 === void 0) {\n      return;\n    }\n    if (type2 === \"anycompatiblearray\") {\n      return {\n        kind: \"array\",\n        value: resolveType({\n          context,\n          nullable,\n          type: context.toTypeScriptType({ name: lnode.value })\n        })\n      };\n    }\n    return resolveType({\n      context,\n      nullable,\n      type: context.toTypeScriptType({ name: type2 })\n    });\n  };\n  const type = getType();\n  if (type === void 0) {\n    return [];\n  }\n  return [{ name, type }];\n}\nfunction getDescribedNullTest({\n  alias,\n  context\n}) {\n  return [\n    {\n      name: alias ?? \"?column?\",\n      type: resolveType({\n        context,\n        nullable: false,\n        type: context.toTypeScriptType({ name: \"bool\" })\n      })\n    }\n  ];\n}\nfunction getDescribedCaseExpr({\n  alias,\n  node,\n  context\n}) {\n  const results = [];\n  for (const arg of node.args) {\n    if (arg.CaseWhen?.result !== void 0) {\n      results.push(getDescribedNode({ alias: void 0, node: arg.CaseWhen.result, context }));\n    }\n  }\n  results.push(\n    node.defresult !== void 0 ? getDescribedNode({ alias: void 0, node: node.defresult, context }) : [{ name: \"?column?\", type: context.toTypeScriptType({ name: \"null\" }) }]\n  );\n  const types = results.flat().map((x) => x.type);\n  const literalsOnly = types.some((x) => x.kind !== \"literal\" && x.value !== \"null\");\n  const value = mergeDescribedColumnTypes(literalsOnly ? types.map(getBaseType) : types);\n  return [\n    {\n      name: alias ?? \"case\",\n      type: value\n    }\n  ];\n}\nfunction getBaseType(type) {\n  switch (type.kind) {\n    case \"object\":\n    case \"union\":\n    case \"array\":\n    case \"type\":\n      return type;\n    case \"literal\":\n      return type.base;\n  }\n}\nfunction getDescribedBoolExpr({\n  alias,\n  context\n}) {\n  return [\n    {\n      name: alias ?? \"?column?\",\n      type: resolveType({\n        context,\n        nullable: false,\n        type: context.toTypeScriptType({ name: \"bool\" })\n      })\n    }\n  ];\n}\nfunction getDescribedSubLink({\n  alias,\n  context,\n  node\n}) {\n  const getSubLinkType = () => {\n    if (node.subLinkType === SubLinkType.EXISTS_SUBLINK) {\n      return context.toTypeScriptType({ name: \"bool\" });\n    }\n    if (node.subLinkType === SubLinkType.EXPR_SUBLINK) {\n      const described = node.subselect?.SelectStmt ? getDescribedNode({\n        alias: void 0,\n        node: { SelectStmt: node.subselect.SelectStmt },\n        context\n      }) : [];\n      return described.length > 0 ? described[0].type : context.toTypeScriptType({ name: \"unknown\" });\n    }\n    return context.toTypeScriptType({ name: \"unknown\" });\n  };\n  const name = getOutputColumnKey(alias, { SubLink: node });\n  const subLinkType = getSubLinkType();\n  const nullable = node.subLinkType === SubLinkType.EXPR_SUBLINK && !context.nonNullableColumns.has(name);\n  return [\n    {\n      name,\n      type: resolveType({\n        context,\n        nullable,\n        type: nullable ? subLinkType : asNonNullableType(subLinkType)\n      })\n    }\n  ];\n}\nfunction getDescribedSelectStmt({\n  alias,\n  context,\n  node\n}) {\n  const subParsed = {\n    version: 0,\n    stmts: [{ stmt: { SelectStmt: node }, stmtLocation: 0, stmtLen: 0 }]\n  };\n  const subDescription = getASTDescription({\n    parsed: subParsed,\n    typesMap: context.typesMap,\n    typeExprMap: context.typeExprMap,\n    overridenColumnTypesMap: context.overridenColumnTypesMap,\n    pgColsBySchemaAndTableName: context.pgColsBySchemaAndTableName,\n    pgViewsBySchemaAndName: context.pgViewsBySchemaAndName,\n    pgTypes: context.pgTypes,\n    pgEnums: context.pgEnums,\n    pgFns: context.pgFns,\n    pgAggregateNames: context.pgAggregateNames,\n    fieldTransform: context.fieldTransform,\n    prevSources: context.resolver.sources,\n    cteSelects: context.cteSelects\n  });\n  const firstColumn = subDescription.map.get(0);\n  if (firstColumn) {\n    return [\n      {\n        name: alias ?? firstColumn.name,\n        type: firstColumn.type\n      }\n    ];\n  }\n  return [];\n}\nfunction getDescribedCoalesceExpr({\n  alias,\n  context,\n  node\n}) {\n  const firstArg = node.args.at(0);\n  const unknownCoalesce = {\n    name: alias ?? \"coalesce\",\n    type: context.toTypeScriptType({ name: \"unknown\" })\n  };\n  if (firstArg === void 0) {\n    return [unknownCoalesce];\n  }\n  const type = getDescribedNode({ alias: void 0, node: firstArg, context }).map((x) => asNonNullableType(x.type)).at(0);\n  if (type === void 0) {\n    return [];\n  }\n  return [\n    {\n      name: alias ?? \"coalesce\",\n      type\n    }\n  ];\n}\nfunction getDescribedArrayExpr({\n  alias,\n  context,\n  node\n}) {\n  const elements = node.elements ?? [];\n  const types = elements.length === 0 ? context.toTypeScriptType({ name: \"unknown\" }) : mergeDescribedColumnTypes(\n    elements.flatMap((node2) => getDescribedNode({ alias: void 0, node: node2, context })).map((x) => x.type)\n  );\n  return [\n    {\n      name: alias ?? \"?column?\",\n      type: {\n        kind: \"array\",\n        value: types\n      }\n    }\n  ];\n}\nfunction mergeDescribedColumnTypes(types) {\n  const result = [];\n  const seenSymbols = /* @__PURE__ */ new Set();\n  function processType(type) {\n    switch (type.kind) {\n      case \"union\":\n        type.value.forEach((subtype) => processType(subtype));\n        break;\n      case \"type\":\n      case \"literal\":\n        if (!seenSymbols.has(type.value)) {\n          seenSymbols.add(type.value);\n          result.push(type);\n        }\n        break;\n      case \"object\":\n      case \"array\":\n        result.push(type);\n        break;\n    }\n  }\n  for (const t of types) {\n    processType(t);\n  }\n  if (!seenSymbols.has(\"boolean\") && seenSymbols.has(\"true\") && seenSymbols.has(\"false\")) {\n    seenSymbols.add(\"boolean\");\n    result.push({ kind: \"type\", value: \"boolean\", type: \"bool\" });\n  }\n  if (seenSymbols.has(\"boolean\") && (seenSymbols.has(\"true\") || seenSymbols.has(\"false\"))) {\n    const filtered = result.filter(\n      (t) => !(t.kind === \"literal\" && (t.value === \"true\" || t.value === \"false\"))\n    );\n    return isSingleCell(filtered) ? filtered[0] : { kind: \"union\", value: filtered };\n  }\n  return isSingleCell(result) ? result[0] : { kind: \"union\", value: result };\n}\nfunction getDescribedTypeCast({\n  alias,\n  context,\n  node\n}) {\n  let typeName = node.typeName?.names.at(-1)?.String?.sval;\n  if (typeName === \"int\") {\n    typeName = \"int4\";\n  }\n  if (typeName === void 0 || node.arg === void 0) {\n    return [];\n  }\n  const isArrayCast = (node.typeName?.arrayBounds?.length ?? 0) > 0;\n  const baseType = context.toTypeScriptType({ name: typeName });\n  const type = isArrayCast ? { kind: \"array\", value: baseType } : baseType;\n  const innerDescribed = getDescribedNode({ alias, node: node.arg, context }).at(0);\n  const nullable = fmap(innerDescribed, (x) => isDescribedColumnNullable(x.type)) ?? true;\n  switch (true) {\n    case node.arg.FuncCall !== void 0: {\n      return [\n        {\n          name: alias ?? node.arg.FuncCall?.funcname.at(-1)?.String?.sval ?? \"?column?\",\n          type: resolveType({ context, nullable, type })\n        }\n      ];\n    }\n    case node.arg.ColumnRef !== void 0: {\n      return [\n        {\n          name: alias ?? concatStringNodes(node.arg.ColumnRef.fields),\n          type: resolveType({ context, nullable, type })\n        }\n      ];\n    }\n    default: {\n      return [\n        {\n          name: alias ?? typeName ?? \"?column?\",\n          type: resolveType({ context, nullable, type })\n        }\n      ];\n    }\n  }\n}\nfunction getDescribedResTarget(params) {\n  const { node, context } = params;\n  if (node.val === void 0) {\n    return [];\n  }\n  return getDescribedNode({\n    alias: node.name,\n    context,\n    node: node.val\n  });\n}\nfunction getDescribedFuncCall(params) {\n  const functionName = params.node.funcname.at(-1)?.String?.sval;\n  if (functionName === void 0) {\n    return [];\n  }\n  switch (true) {\n    case functionName === \"json_build_object\":\n    case functionName === \"jsonb_build_object\":\n      return getDescribedJsonBuildObjectFunCall(params);\n    case functionName === \"json_agg\":\n    case functionName === \"jsonb_agg\":\n      return getDescribedJsonAggFunCall(params);\n    case functionName === \"array_agg\":\n      return getDescribedArrayAggFunCall(params);\n    case functionName === \"unnest\":\n      return getDescribedUnnestFunCall(params);\n    default:\n      return getDescribedFuncCallByPgFn(params);\n  }\n}\nfunction getDescribedUnnestFunCall({\n  alias,\n  context,\n  node\n}) {\n  const functionName = node.funcname.at(-1)?.String?.sval ?? \"\";\n  const name = alias ?? functionName;\n  const firstArg = node.args?.at(0);\n  if (firstArg === void 0) {\n    return [{ name, type: context.toTypeScriptType({ name: \"unknown\" }) }];\n  }\n  const described = getDescribedNode({ alias: void 0, node: firstArg, context }).at(0);\n  if (described === void 0) {\n    return [{ name, type: context.toTypeScriptType({ name: \"unknown\" }) }];\n  }\n  function unwrap(type) {\n    if (type.kind === \"array\") {\n      return unwrap(type.value);\n    }\n    if (type.kind === \"union\") {\n      const hasArray = type.value.some((t) => t.kind === \"array\");\n      const unwrapped = type.value.filter((t) => !hasArray || !(t.kind === \"type\" && t.value === \"null\")).map(unwrap);\n      return mergeDescribedColumnTypes(unwrapped);\n    }\n    if (type.kind === \"type\" && type.type.startsWith(\"_\")) {\n      return { ...type, type: type.type.slice(1) };\n    }\n    return type;\n  }\n  return [{ name, type: unwrap(described.type) }];\n}\nconst pgFnArgAliases = {\n  int4: \"integer\",\n  int8: \"bigint\",\n  float4: \"real\",\n  float8: \"double precision\"\n};\nfunction unwrapNullableUnionType(type) {\n  if (type.kind !== \"union\") {\n    return void 0;\n  }\n  const nonNull = type.value.filter(\n    (member) => member.kind === \"type\" && member.value !== \"null\"\n  );\n  if (nonNull.length !== 1) {\n    return void 0;\n  }\n  return nonNull[0];\n}\nfunction getDescribedFuncCallByPgFn({\n  alias,\n  context,\n  node\n}) {\n  const functionName = node.funcname.at(-1)?.String?.sval;\n  const name = alias ?? functionName ?? \"?column?\";\n  const pgArgs = (node.args ?? []).flatMap((argNode) => {\n    const described = getDescribedNode({ alias: void 0, node: argNode, context }).at(0);\n    if (described === void 0) {\n      return [];\n    }\n    const unwrapped = described.type.kind === \"union\" ? unwrapNullableUnionType(described.type) : described.type.kind === \"type\" ? described.type : described.type.kind === \"literal\" && described.type.base.kind === \"type\" ? described.type.base : void 0;\n    return unwrapped?.kind === \"type\" ? [unwrapped.type] : [];\n  });\n  if (functionName === void 0) {\n    return [{ name, type: context.toTypeScriptType({ name: \"unknown\" }) }];\n  }\n  const pgFnLookupArgs = pgArgs.map((pgArg) => pgFnArgAliases[pgArg] ?? pgArg);\n  const tsArgs = pgArgs.map((pgArg) => context.typesMap.get(pgArg)?.value ?? \"unknown\");\n  const pgFnValue = pgArgs.length === 0 ? context.pgFns.get(functionName) ?? context.pgFns.get(`${functionName}(string)`) : context.pgFns.get(`${functionName}(${pgFnLookupArgs.join(\", \")})`) ?? context.pgFns.get(`${functionName}(${pgArgs.join(\", \")})`) ?? context.pgFns.get(`${functionName}(${tsArgs.join(\", \")})`) ?? context.pgFns.get(`${functionName}(any)`) ?? context.pgFns.get(`${functionName}(unknown)`);\n  const tsReturnType = pgFnValue?.pg ? context.typesMap.get(pgFnValue.pg)?.value ?? pgFnValue.ts : pgFnValue?.ts ?? \"unknown\";\n  const type = resolveType({\n    context,\n    nullable: !context.nonNullableColumns.has(name),\n    type: { kind: \"type\", value: tsReturnType, type: pgFnValue?.pg ?? \"unknown\" }\n  });\n  return [{ name, type }];\n}\nfunction getDescribedArrayAggFunCall({\n  alias,\n  context,\n  node\n}) {\n  const name = alias ?? concatStringNodes(node.funcname);\n  const firstArg = fmap(node.args?.at(0), (node2) => {\n    return {\n      node: node2,\n      described: getDescribedNode({ alias: void 0, node: node2, context })\n    };\n  });\n  if (firstArg === null) {\n    return [\n      {\n        name,\n        type: context.toTypeScriptType({ name: \"unknown\" })\n      }\n    ];\n  }\n  if (firstArg.described.length === 0) {\n    const type2 = resolveType({\n      context,\n      nullable: !context.nonNullableColumns.has(name),\n      type: {\n        kind: \"array\",\n        value: context.toTypeScriptType({ name: \"unknown\" })\n      }\n    });\n    return [{ name, type: type2 }];\n  }\n  const isSourceRef = context.resolver.sources.get(concatStringNodes(firstArg.node.ColumnRef?.fields)) !== void 0;\n  const type = resolveType({\n    context,\n    nullable: !context.nonNullableColumns.has(name),\n    type: {\n      kind: \"array\",\n      value: isSourceRef || firstArg.described.length > 1 ? {\n        kind: \"object\",\n        value: firstArg.described.map((x) => [x.name, x.type])\n      } : normalizeLiteralUnion(firstArg.described[0].type)\n    }\n  });\n  return [{ name, type }];\n}\nfunction getDescribedJsonAggFunCall({\n  alias,\n  context,\n  node\n}) {\n  const name = alias ?? concatStringNodes(node.funcname);\n  if (node.args === void 0 || !isSingleCell(node.args)) {\n    return [];\n  }\n  const argNode = node.args[0];\n  const cellType = getDescribedNode({ alias: void 0, node: argNode, context });\n  if (cellType.length === 0) {\n    return [];\n  }\n  const isSourceRef = context.resolver.sources.get(concatStringNodes(argNode.ColumnRef?.fields)) !== void 0;\n  const type = resolveType({\n    context,\n    nullable: !context.nonNullableColumns.has(name),\n    type: {\n      kind: \"array\",\n      value: isSourceRef || cellType.length > 1 ? {\n        kind: \"object\",\n        value: cellType.map((x) => [x.name, x.type])\n      } : cellType[0].type\n    }\n  });\n  return [{ name, type }];\n}\nfunction getDescribedJsonBuildObjectFunCall({\n  alias,\n  context,\n  node\n}) {\n  const functionName = node.funcname.at(-1)?.String?.sval ?? \"\";\n  const name = alias ?? functionName;\n  const unknownDescribedColumn = {\n    name,\n    type: context.toTypeScriptType({ name: \"unknown\" })\n  };\n  if (node.args === void 0) {\n    return [unknownDescribedColumn];\n  }\n  const describedColumn = { kind: \"object\", value: [] };\n  for (const [idx, arg] of node.args.entries()) {\n    if (idx % 2 === 1) {\n      continue;\n    }\n    const valueNode = node.args.at(idx + 1);\n    if (valueNode === void 0) {\n      throw new Error(normalizeIndent`\n          argument list must have even number of elements\n          Hint: The arguments of ${functionName}() must consist of alternating keys and values.\n        `);\n    }\n    const alias2 = arg.A_Const?.sval?.sval;\n    const type = fmap(node.args[idx + 1], (node2) => {\n      return getDescribedNode({ alias: alias2, node: node2, context }).at(0)?.type ?? null;\n    });\n    if (alias2 === void 0 || type === null) {\n      return [unknownDescribedColumn];\n    }\n    const transformedKey = toCase(alias2, context.fieldTransform);\n    describedColumn.value.push([transformedKey, resolveType({ context, nullable: false, type })]);\n  }\n  return [\n    {\n      name,\n      type: describedColumn\n    }\n  ];\n}\nfunction findRangeSubselectByAlias(params) {\n  for (const node of params.fromClause ?? []) {\n    const found = findRangeSubselectByAliasInFromNode(node, params.alias);\n    if (found !== void 0) {\n      return found;\n    }\n  }\n  return void 0;\n}\nfunction findRangeSubselectByAliasInFromNode(node, alias) {\n  if (node === void 0) {\n    return void 0;\n  }\n  if (node.RangeSubselect?.alias?.aliasname === alias) {\n    return node.RangeSubselect;\n  }\n  if (node.JoinExpr !== void 0) {\n    return findRangeSubselectByAliasInFromNode(node.JoinExpr.larg, alias) ?? findRangeSubselectByAliasInFromNode(node.JoinExpr.rarg, alias);\n  }\n  return void 0;\n}\nfunction getColumnRefOrigins({\n  context,\n  node\n}) {\n  if (isColumnTableStarRef(node.fields)) {\n    const source = node.fields[0].String.sval;\n    return (\n      // lookup in cte\n      context.select.withClause?.ctes.find((cte) => cte.CommonTableExpr?.ctename === source)?.CommonTableExpr?.ctequery?.SelectStmt?.targetList ?? // lookup in subselect (including inside join trees, e.g. LATERAL)\n      findRangeSubselectByAlias({ fromClause: context.select.fromClause, alias: source })?.subquery?.SelectStmt?.targetList\n    );\n  }\n  if (isColumnTableColumnRef(node.fields)) {\n    const source = node.fields[0].String.sval;\n    const column = node.fields[1].String.sval;\n    const origin = (\n      // lookup in cte\n      context.select.withClause?.ctes.find((cte) => cte.CommonTableExpr?.ctename === source)?.CommonTableExpr?.ctequery?.SelectStmt?.targetList?.find(\n        (x) => resTargetMatchesColumn(x.ResTarget, column)\n      ) ?? // lookup in subselect\n      findRangeSubselectByAlias({\n        fromClause: context.select.fromClause,\n        alias: source\n      })?.subquery?.SelectStmt?.targetList?.find(\n        (x) => resTargetMatchesColumn(x.ResTarget, column)\n      )\n    );\n    if (!origin) return void 0;\n    return [origin];\n  }\n}\nfunction resTargetMatchesColumn(target, column) {\n  if (target === void 0) {\n    return false;\n  }\n  const outputName = getAliasOrColumnRefName(target);\n  return outputName !== void 0 && outputName === column;\n}\nfunction getAliasOrColumnRefName(target) {\n  const name = getOutputColumnKey(target.name, target.val);\n  return name === \"?column?\" ? void 0 : name;\n}\nfunction getContextForColumnRef(context, node) {\n  if (isColumnTableColumnRef(node.fields) || isColumnTableStarRef(node.fields)) {\n    const sourceName = node.fields[0].String.sval;\n    const source = context.resolver.sources.get(sourceName);\n    if (source?.kind === \"cte\") {\n      const select = context.select.withClause?.ctes.find(\n        (cte) => cte.CommonTableExpr?.ctename === sourceName\n      )?.CommonTableExpr?.ctequery?.SelectStmt;\n      return {\n        ...context,\n        resolver: source.sources,\n        select: select ?? context.select\n      };\n    }\n    if (source?.kind === \"subselect\") {\n      const select = findRangeSubselectByAlias({\n        fromClause: context.select.fromClause,\n        alias: sourceName\n      })?.subquery?.SelectStmt;\n      return {\n        ...context,\n        resolver: source.sources,\n        select: select ?? context.select\n      };\n    }\n  }\n  return context;\n}\nfunction isNullableSubselectColumnRef(context, node) {\n  if (!isColumnTableColumnRef(node.fields) && !isColumnTableStarRef(node.fields)) {\n    return false;\n  }\n  const sourceName = node.fields[0].String.sval;\n  return context.resolver.sources.get(sourceName)?.kind === \"subselect\" && isRelationNullableDueToJoin(context.relations, sourceName);\n}\nfunction getDescribedColumnRef({\n  alias,\n  context,\n  node\n}) {\n  const definitionNodes = getColumnRefOrigins({ context, node });\n  if (definitionNodes) {\n    const defContext = getContextForColumnRef(context, node);\n    const columns = definitionNodes.flatMap(\n      (definitionNode) => getDescribedNode({ alias, node: definitionNode, context: defContext })\n    );\n    if (isNullableSubselectColumnRef(context, node)) {\n      return columns.map((col) => ({\n        ...col,\n        type: resolveType({ context, nullable: true, type: col.type })\n      }));\n    }\n    return columns;\n  }\n  const fromSchema = getDescribedColumnRefFromSchema({ alias, context, node });\n  if (fromSchema.length > 0) {\n    return fromSchema;\n  }\n  return getDescribedColumnRefFromSelectSources({ alias, context, node });\n}\nfunction getDescribedColumnRefFromSchema({\n  alias,\n  context,\n  node\n}) {\n  if (isColumnStarRef(node.fields)) {\n    return getDescribedColumnByResolvedColumns({\n      alias,\n      context,\n      resolved: context.resolver.getAllResolvedColumns().map((x) => x.column)\n    });\n  }\n  if (isColumnTableStarRef(node.fields)) {\n    return getDescribedColumnByResolvedColumns({\n      alias,\n      context,\n      resolved: context.resolver.getResolvedColumnsInTable(node.fields[0].String.sval)\n    });\n  }\n  if (isColumnUnknownRef(node.fields)) {\n    const resolved = context.resolver.getColumnsByTargetField({\n      kind: \"unknown\",\n      field: node.fields[0].String.sval\n    });\n    return getDescribedColumnByResolvedColumns({\n      alias,\n      context,\n      resolved: resolved ?? []\n    });\n  }\n  if (isColumnTableColumnRef(node.fields)) {\n    const resolved = context.resolver.getNestedResolvedTargetField({\n      kind: \"column\",\n      table: node.fields[0].String.sval,\n      column: node.fields[1].String.sval\n    });\n    return getDescribedColumnByResolvedColumns({\n      alias,\n      context,\n      resolved: fmap(resolved, (x) => [x]) ?? []\n    });\n  }\n  return [];\n}\nfunction getDescribedColumnRefFromSelectSources({\n  alias,\n  context,\n  node\n}) {\n  if (!isColumnUnknownRef(node.fields)) {\n    return [];\n  }\n  const columnName = node.fields[0].String.sval;\n  const getSelectsFromNode = (node2) => {\n    if (node2?.RangeSubselect?.subquery?.SelectStmt !== void 0) {\n      return [node2.RangeSubselect.subquery.SelectStmt];\n    }\n    if (node2?.RangeVar !== void 0) {\n      const select = context.cteSelects?.get(node2.RangeVar.relname);\n      return select ? [select] : [];\n    }\n    if (node2?.JoinExpr !== void 0) {\n      return [...getSelectsFromNode(node2.JoinExpr.larg), ...getSelectsFromNode(node2.JoinExpr.rarg)];\n    }\n    return [];\n  };\n  const selects = (context.select.fromClause ?? []).flatMap((node2) => getSelectsFromNode(node2));\n  return selects.flatMap(\n    (select) => getDescribedColumnsFromSelect({ context, select }).filter((column) => column.name === columnName).map((column) => ({\n      name: alias ?? column.name,\n      type: column.type\n    }))\n  );\n}\nfunction getDescribedColumnsFromSelect(params) {\n  const subParsed = {\n    version: 0,\n    stmts: [{ stmt: { SelectStmt: params.select }, stmtLocation: 0, stmtLen: 0 }]\n  };\n  const subDescription = getASTDescription({\n    parsed: subParsed,\n    typesMap: params.context.typesMap,\n    typeExprMap: params.context.typeExprMap,\n    overridenColumnTypesMap: params.context.overridenColumnTypesMap,\n    pgColsBySchemaAndTableName: params.context.pgColsBySchemaAndTableName,\n    pgViewsBySchemaAndName: params.context.pgViewsBySchemaAndName,\n    pgTypes: params.context.pgTypes,\n    pgEnums: params.context.pgEnums,\n    pgFns: params.context.pgFns,\n    pgAggregateNames: params.context.pgAggregateNames,\n    fieldTransform: params.context.fieldTransform,\n    prevSources: params.context.resolver.sources,\n    cteSelects: params.context.cteSelects\n  });\n  return Array.from(subDescription.map.values()).filter(\n    (column) => column !== void 0\n  );\n}\nfunction getDescribedColumnByResolvedColumns(params) {\n  return params.resolved.map(({ column, isNotNull }) => {\n    const getType = () => {\n      const overridenType = params.context.overridenColumnTypesMap.get(column.tableName)?.get(column.colName);\n      if (overridenType !== void 0) {\n        return {\n          kind: \"type\",\n          value: overridenType,\n          type: params.context.pgTypes.get(column.colTypeOid)?.name ?? \"unknown\"\n        };\n      }\n      return params.context.toTypeScriptType({\n        oid: column.colTypeOid,\n        baseOid: column.colBaseTypeOid\n      });\n    };\n    return {\n      name: params.alias ?? column.colName,\n      type: resolveType({\n        context: params.context,\n        nullable: !isNotNull,\n        type: getType()\n      })\n    };\n  });\n}\nfunction getDescribedAConst({\n  alias,\n  context,\n  node\n}) {\n  const type = (() => {\n    switch (true) {\n      case node.boolval !== void 0:\n        return {\n          kind: \"literal\",\n          value: node.boolval.boolval ? \"true\" : \"false\",\n          base: context.toTypeScriptType({ name: \"bool\" })\n        };\n      case node.bsval !== void 0:\n        return context.toTypeScriptType({ name: \"bytea\" });\n      case node.fval !== void 0:\n        return {\n          kind: \"literal\",\n          value: node.fval.toString(),\n          base: context.toTypeScriptType({ name: \"float8\" })\n        };\n      case node.isnull !== void 0:\n        return context.toTypeScriptType({ name: \"null\" });\n      case node.ival !== void 0:\n        return {\n          kind: \"literal\",\n          value: (node.ival.ival ?? 0).toString(),\n          base: context.toTypeScriptType({ name: \"int4\" })\n        };\n      case node.sval !== void 0:\n        return {\n          kind: \"literal\",\n          value: `'${node.sval.sval}'`,\n          base: context.toTypeScriptType({ name: \"text\" })\n        };\n      default:\n        return context.toTypeScriptType({ name: \"unknown\" });\n    }\n  })();\n  return [\n    {\n      name: alias ?? \"?column?\",\n      type: resolveType({ context, nullable: node.isnull === true, type })\n    }\n  ];\n}\nfunction asNonNullableType(type) {\n  switch (type.kind) {\n    case \"object\":\n    case \"array\":\n    case \"literal\":\n      return type;\n    case \"union\": {\n      const filtered = type.value.filter(\n        (described) => described.kind !== \"type\" || described.value !== \"null\"\n      );\n      if (filtered.length === 0) {\n        return { kind: \"type\", value: \"unknown\", type: \"unknown\" };\n      }\n      if (filtered.length === 1) {\n        return filtered[0];\n      }\n      return normalizeLiteralUnion({ kind: \"union\", value: filtered });\n    }\n    case \"type\":\n      return type.value === \"null\" ? { kind: \"type\", value: \"unknown\", type: \"unknown\" } : type;\n  }\n}\nfunction isDescribedColumnNullable(type) {\n  return type.kind === \"union\" && type.value.some((x) => x.kind === \"type\" && x.value === \"null\");\n}\nfunction resolveType(params) {\n  if (params.nullable && params.type.value !== \"null\") {\n    return {\n      kind: \"union\",\n      value: [params.type, params.context.toTypeScriptType({ name: \"null\" })]\n    };\n  }\n  return params.type;\n}\nfunction concatStringNodes(nodes) {\n  return nodes?.map((x) => x.String?.sval).filter(Boolean).join(\".\") ?? \"\";\n}\nfunction isBooleanAExprOperator(operator) {\n  return booleanAExprOperators.has(operator);\n}\nfunction hasColumnReference(node) {\n  if (node === void 0) {\n    return false;\n  }\n  if (node.ColumnRef !== void 0) {\n    return true;\n  }\n  if (node.A_Const !== void 0) {\n    return false;\n  }\n  if (node.TypeCast !== void 0) {\n    return hasColumnReference(node.TypeCast.arg);\n  }\n  if (node.A_Expr !== void 0) {\n    return hasColumnReference(node.A_Expr.lexpr) || hasColumnReference(node.A_Expr.rexpr);\n  }\n  if (node.BoolExpr !== void 0) {\n    return (node.BoolExpr.args ?? []).some(hasColumnReference);\n  }\n  if (node.FuncCall !== void 0) {\n    return (node.FuncCall.args ?? []).some(hasColumnReference);\n  }\n  if (node.CoalesceExpr !== void 0) {\n    return node.CoalesceExpr.args.some(hasColumnReference);\n  }\n  if (node.CaseExpr !== void 0) {\n    if (node.CaseExpr.arg && hasColumnReference(node.CaseExpr.arg)) {\n      return true;\n    }\n    if (node.CaseExpr.defresult && hasColumnReference(node.CaseExpr.defresult)) {\n      return true;\n    }\n    return node.CaseExpr.args.some((caseWhen) => {\n      if (caseWhen.CaseWhen === void 0) {\n        return false;\n      }\n      return hasColumnReference(caseWhen.CaseWhen.expr) || hasColumnReference(caseWhen.CaseWhen.result);\n    });\n  }\n  if (node.A_ArrayExpr !== void 0) {\n    return (node.A_ArrayExpr.elements ?? []).some(hasColumnReference);\n  }\n  if (node.SubLink !== void 0) {\n    return true;\n  }\n  return false;\n}\nfunction normalizeLiteralUnion(type) {\n  if (type.kind !== \"union\") {\n    return type;\n  }\n  const hasLiteral = type.value.some((value) => value.kind === \"literal\");\n  if (!hasLiteral) {\n    return type;\n  }\n  return mergeDescribedColumnTypes(type.value.map(getBaseType));\n}\n\nfunction isParsedInsertResult(parsed) {\n  return parsed.stmts[0]?.stmt?.InsertStmt !== void 0;\n}\nfunction validateInsertResult(parsed, pgColsBySchemaAndTableName, query) {\n  const insertStmt = parsed.stmts[0].stmt.InsertStmt;\n  if (insertStmt.relation === void 0) {\n    return;\n  }\n  const schemaName = insertStmt.relation.schemaname ?? \"public\";\n  const tableName = insertStmt.relation.relname;\n  const tableCols = pgColsBySchemaAndTableName.get(schemaName)?.get(tableName);\n  if (tableCols === void 0) {\n    return;\n  }\n  const insertCols = getInsertColumns(insertStmt, tableCols);\n  const missing = tableCols.filter(\n    (c) => c.colNotNull && !c.colHasDef && c.colIdentity === \"\" && !insertCols.includes(c.colName)\n  );\n  if (missing.length === 0) {\n    return;\n  }\n  const position = (parsed.stmts[0]?.stmtLocation ?? 0) + 1;\n  const columnsStr = missing.map((c) => `\"${c.colName}\"`).join(\", \");\n  const message = missing.length === 1 ? [\n    `null value in column ${columnsStr} violates not-null constraint`,\n    `Hint: Column ${columnsStr} is not nullable and has no default value.`\n  ].join(\"\\n\") : [\n    `null value in columns ${columnsStr} violates not-null constraint`,\n    `Hint: Columns ${columnsStr} are not nullable and have no default value.`\n  ].join(\"\\n\");\n  throw PostgresError.of({\n    queryText: query.text,\n    message,\n    line: \"1\",\n    position,\n    sourcemaps: query.sourcemaps\n  });\n}\nfunction getInsertColumns(stmt, tableCols) {\n  if (stmt.cols) {\n    return stmt.cols.map((col) => col.ResTarget?.name).filter((name) => Boolean(name));\n  }\n  if (stmt.selectStmt === void 0) {\n    return [];\n  }\n  const valuesFromSelect = stmt.selectStmt.SelectStmt?.valuesLists?.at(0)?.List?.items;\n  if (valuesFromSelect !== void 0) {\n    return tableCols.slice(0, valuesFromSelect.length).map((c) => c.colName);\n  }\n  return tableCols.map((c) => c.colName);\n}\n\nconst parser = createRequire(import.meta.url)(\"libpg-query\");\nconst MAX_RESULT_CACHE_ENTRIES = 5e3;\nfunction stableStringify(value) {\n  if (value === void 0) {\n    return \"undefined\";\n  }\n  if (value === null || typeof value !== \"object\") {\n    return JSON.stringify(value) ?? \"null\";\n  }\n  if (Array.isArray(value)) {\n    return `[${value.map(stableStringify).join(\",\")}]`;\n  }\n  const entries = Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`);\n  return `{${entries.join(\",\")}}`;\n}\nfunction getResultCacheForKey(cache, cacheKey) {\n  let map = cache.results.get(cacheKey);\n  if (map === void 0) {\n    map = /* @__PURE__ */ new Map();\n    cache.results.set(cacheKey, map);\n  }\n  return map;\n}\nfunction getCachedResult(cache, key) {\n  const hit = cache.get(key);\n  if (hit !== void 0) {\n    cache.delete(key);\n    cache.set(key, hit);\n  }\n  return hit;\n}\nfunction deepFreeze(value) {\n  if (value !== null && typeof value === \"object\" && !Object.isFrozen(value)) {\n    Object.freeze(value);\n    for (const child of Object.values(value)) {\n      deepFreeze(child);\n    }\n  }\n  return value;\n}\nfunction setCachedResult(cache, key, value) {\n  cache.delete(key);\n  cache.set(key, deepFreeze(value));\n  if (cache.size > MAX_RESULT_CACHE_ENTRIES) {\n    const oldest = cache.keys().next().value;\n    if (oldest !== void 0) {\n      cache.delete(oldest);\n    }\n  }\n}\nfunction createEmptyCache() {\n  return {\n    base: /* @__PURE__ */ new Map(),\n    overrides: {\n      types: /* @__PURE__ */ new Map(),\n      columns: /* @__PURE__ */ new Map()\n    },\n    functions: /* @__PURE__ */ new Map(),\n    results: /* @__PURE__ */ new Map()\n  };\n}\nfunction createGenerator() {\n  const cache = createEmptyCache();\n  return {\n    generate: (params) => generate(params, cache),\n    dropCacheKey: (cacheKey) => {\n      cache.base.delete(cacheKey);\n      cache.results.delete(cacheKey);\n      cache.functions.clear();\n    },\n    clearCache: () => {\n      cache.base.clear();\n      cache.overrides.types.clear();\n      cache.overrides.columns.clear();\n      cache.functions.clear();\n      cache.results.clear();\n    }\n  };\n}\nasync function generate(params, cache) {\n  const { sql, query, cacheKey, cacheMetadata = true } = params;\n  const {\n    pgColsByTableOidCache,\n    pgColsBySchemaAndTableName,\n    pgViewsBySchemaAndName,\n    pgTypes,\n    pgEnums,\n    pgFnsByName,\n    pgAggregateNames,\n    pgTypeExprMap\n  } = await getOrSetFromMapWithEnabled({\n    shouldCache: cacheMetadata,\n    map: cache.base,\n    key: cacheKey,\n    value: () => getDatabaseMetadata(sql)\n  });\n  const typesMap = await resolveTypesMap({\n    overrides: params.overrides,\n    cache,\n    shouldCache: cacheMetadata\n  });\n  const overridenColumnTypesMap = await resolveColumnOverridesMap({\n    overrides: params.overrides,\n    cache,\n    shouldCache: cacheMetadata\n  });\n  const functionsMap = await getOrSetFromMapWithEnabled({\n    shouldCache: cacheMetadata,\n    map: cache.functions,\n    key: JSON.stringify(params.overrides?.types),\n    value: () => {\n      const map = /* @__PURE__ */ new Map();\n      for (const [functionName, signatures] of pgFnsByName.entries()) {\n        for (const signature of signatures) {\n          if (signature.arguments.some((arg) => arg.includes(\"ORDER BY\"))) {\n            continue;\n          }\n          const tsArgs = signature.arguments.map((arg) => {\n            return typesMap.get(arg)?.value ?? \"unknown\";\n          });\n          const tsReturnType = typesMap.get(signature.returnType)?.value ?? signature.returnType;\n          const entry = { ts: tsReturnType, pg: signature.returnType };\n          const pgKey = signature.arguments.length === 0 ? functionName : `${functionName}(${signature.arguments.join(\", \")})`;\n          const tsKey = tsArgs.length === 0 ? functionName : `${functionName}(${tsArgs.join(\", \")})`;\n          map.set(pgKey, entry);\n          if (tsKey !== pgKey) {\n            map.set(tsKey, entry);\n          }\n        }\n      }\n      return map;\n    }\n  });\n  const resultKey = stableStringify([\n    params.fieldTransform ?? null,\n    params.overrides ?? null,\n    query.text\n  ]);\n  const resultCache = cacheMetadata ? getResultCacheForKey(cache, cacheKey) : void 0;\n  const cached = resultCache !== void 0 ? getCachedResult(resultCache, resultKey) : void 0;\n  if (cached !== void 0) {\n    return either.right({ ...cached, query });\n  }\n  const cacheResult = (value) => {\n    if (resultCache !== void 0) {\n      setCachedResult(resultCache, resultKey, value);\n    }\n    return value;\n  };\n  try {\n    const [describeOutcome, parseOutcome] = await Promise.allSettled([\n      sql.unsafe(query.text, [], { prepare: true }).describe(),\n      parser.parse(query.text)\n    ]);\n    if (describeOutcome.status === \"rejected\") throw describeOutcome.reason;\n    if (parseOutcome.status === \"rejected\") throw parseOutcome.reason;\n    const result = describeOutcome.value;\n    const parsed = parseOutcome.value;\n    if (isParsedInsertResult(parsed)) {\n      validateInsertResult(parsed, pgColsBySchemaAndTableName, query);\n    }\n    if (result.columns === void 0 || result.columns === null || result.columns.length === 0) {\n      return either.right({\n        ...cacheResult({ output: null, unknownColumns: [], stmt: result }),\n        query\n      });\n    }\n    const duplicateCols = result.columns.filter(\n      (col, index) => result.columns.find((c, i) => c.name === col.name && i != index)\n    );\n    if (duplicateCols.length > 0) {\n      const dupes = duplicateCols.map((col) => {\n        const tableCols = pgColsByTableOidCache.get(col.table);\n        const tableCol = col.number !== 0 ? tableCols?.at(col.number - 1) : tableCols?.find((c) => c.colName === col.name);\n        return {\n          table: tableCol?.tableName,\n          column: col.name,\n          originalColumn: tableCol?.colName\n        };\n      });\n      const dupePosition = (() => {\n        const match = query.text.search(new RegExp(`\\\\b${duplicateCols[0].name}\\\\b`));\n        return (match > -1 ? match : query.text.search(/SELECT/i)) + 1;\n      })();\n      return either.left(\n        DuplicateColumnsError.of({\n          queryText: query.text,\n          sourcemaps: query.sourcemaps,\n          position: dupePosition,\n          columns: dupes.map((x) => {\n            return x.column !== x.originalColumn ? `${x.table}.${x.originalColumn} (alias: ${x.column})` : `${x.table}.${x.column}`;\n          })\n        })\n      );\n    }\n    const astQueryDescription = getASTDescription({\n      parsed,\n      typesMap,\n      overridenColumnTypesMap,\n      pgColsBySchemaAndTableName,\n      pgViewsBySchemaAndName,\n      pgTypes,\n      pgEnums,\n      pgFns: functionsMap,\n      pgAggregateNames,\n      typeExprMap: pgTypeExprMap,\n      fieldTransform: params.fieldTransform\n    });\n    const columns = result.columns.map((col, position) => {\n      const introspected = pgColsByTableOidCache.get(col.table)?.find((x) => x.colNum === col.number);\n      const astDescribed = astQueryDescription.map.get(position);\n      return {\n        described: col,\n        astDescribed,\n        introspected,\n        isNonNullableBasedOnAST: astQueryDescription.meta.nonNullableColumns.has(col.name)\n      };\n    });\n    const context = {\n      columns,\n      pgTypes,\n      pgEnums,\n      relationsWithJoins: astQueryDescription.meta.relations,\n      overrides: {\n        types: typesMap,\n        columns: overridenColumnTypesMap\n      },\n      pgColsBySchemaAndTableName,\n      fieldTransform: params.fieldTransform\n    };\n    return either.right({\n      ...cacheResult({\n        output: getTypedColumnEntries({ context }),\n        unknownColumns: columns.filter((x) => x.astDescribed === void 0).map((x) => x.described.name),\n        stmt: result\n      }),\n      query\n    });\n  } catch (e) {\n    if (isPostgresError(e)) {\n      return either.left(\n        PostgresError.of({\n          queryText: query.text,\n          sourcemaps: query.sourcemaps,\n          message: e.message,\n          line: e.line,\n          position: e.position\n        })\n      );\n    }\n    throw e;\n  }\n}\nfunction resolveTypesMap(params) {\n  return getOrSetFromMapWithEnabled({\n    shouldCache: params.shouldCache,\n    map: params.cache.overrides.types,\n    key: JSON.stringify(params.overrides?.types),\n    value: () => {\n      const map = /* @__PURE__ */ new Map([[\"array\", { override: false, value: \"array\" }]]);\n      for (const [key, value] of defaultTypesMap.entries()) {\n        map.set(key, { override: false, value });\n      }\n      for (const [k, v] of Object.entries(params.overrides?.types ?? {})) {\n        map.set(k, { override: true, value: typeof v === \"string\" ? v : v.return });\n      }\n      return map;\n    }\n  });\n}\nfunction resolveColumnOverridesMap(params) {\n  return getOrSetFromMapWithEnabled({\n    shouldCache: params.shouldCache,\n    map: params.cache.overrides.columns,\n    key: JSON.stringify(params.overrides?.columns),\n    value: () => {\n      const map = /* @__PURE__ */ new Map();\n      for (const [colPath, type] of Object.entries(params.overrides?.columns ?? {})) {\n        const [table, column] = colPath.split(\".\");\n        if (table === void 0 || column === void 0) {\n          throw new Error(`Invalid override column key: ${colPath}. Expected format: table.column`);\n        }\n        map.has(table) ? map.get(table)?.set(column, type) : map.set(table, /* @__PURE__ */ new Map([[column, type]]));\n      }\n      return map;\n    }\n  });\n}\nasync function getDatabaseMetadata(sql) {\n  const pgTypes = await getPgTypes(sql);\n  const pgCols = await getPgCols(sql);\n  const pgEnums = await getPgEnums(sql);\n  const pgFns = await getPgFunctions(sql);\n  const pgAggregateNames = await getPgAggregateFunctionNames(sql);\n  const pgColsByTableOidCache = groupBy(pgCols, \"tableOid\");\n  const pgColsBySchemaAndTableName = groupBy(pgCols, \"schemaName\", \"tableName\");\n  const pgViewsBySchemaAndName = await getPgViews(sql);\n  const pgFnsByName = groupBy(pgFns, \"name\");\n  const pgTypeExprMap = await getPgTypeExprMap(sql);\n  return {\n    pgTypes,\n    pgCols,\n    pgEnums,\n    pgColsByTableOidCache,\n    pgColsBySchemaAndTableName,\n    pgViewsBySchemaAndName,\n    pgFnsByName,\n    pgAggregateNames,\n    pgTypeExprMap\n  };\n}\nasync function getPgViews(sql) {\n  const rows = await sql`\n      SELECT\n          pg_namespace.nspname AS \"schemaName\",\n          pg_class.relname AS \"viewName\",\n          pg_get_viewdef(pg_class.oid) AS \"definition\"\n      FROM\n          pg_class\n          JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace\n      WHERE\n          pg_class.relkind IN ('v', 'm')\n          AND pg_namespace.nspname NOT IN ('pg_catalog', 'information_schema')\n  `;\n  const parsedRows = await Promise.all(\n    rows.map(async (row) => ({ row, select: await parseViewSelect(row.definition) }))\n  );\n  const map = /* @__PURE__ */ new Map();\n  for (const { row, select } of parsedRows) {\n    if (select === void 0) {\n      continue;\n    }\n    const schemaViews = map.get(row.schemaName) ?? /* @__PURE__ */ new Map();\n    schemaViews.set(row.viewName, select);\n    map.set(row.schemaName, schemaViews);\n  }\n  return map;\n}\nfunction parseViewSelect(definition) {\n  return parser.parse(definition).then((parsed) => parsed.stmts[0]?.stmt?.SelectStmt).catch(() => void 0);\n}\nfunction getTypedColumnEntries(params) {\n  const value = params.context.columns.map(\n    (col) => getResolvedTargetEntry({ col, context: params.context })\n  );\n  return { kind: \"object\", value };\n}\nfunction isNullableResolvedTarget(target) {\n  switch (target.kind) {\n    case \"type\":\n      return [\"any\", \"null\"].includes(target.value) === false;\n    case \"union\":\n      return target.value.some(isNullableResolvedTarget);\n    case \"array\":\n      return isNullableResolvedTarget(target.value);\n    case \"object\":\n      return target.value.some(([, value]) => isNullableResolvedTarget(value));\n    case \"literal\":\n      return false;\n  }\n}\nfunction buildInterfacePropertyValue(params) {\n  const isNullable = params.isNullable && isNullableResolvedTarget(params.value);\n  return [\n    params.key,\n    isNullable ? { kind: \"union\", value: [params.value, { kind: \"type\", value: \"null\", type: \"null\" }] } : params.value\n  ];\n}\nfunction getResolvedTargetEntry(params) {\n  if (params.col.astDescribed !== void 0) {\n    return [\n      toCase(params.col.described.name, params.context.fieldTransform),\n      params.col.astDescribed.type\n    ];\n  }\n  const pgTypeOid = params.col.introspected?.colBaseTypeOid ?? params.col.described.type;\n  const pgType = params.context.pgTypes.get(pgTypeOid);\n  const getEnumByOid = (oid) => {\n    const pgEnum = params.context.pgEnums.get(oid);\n    if (pgEnum === void 0) {\n      return void 0;\n    }\n    return {\n      kind: \"union\",\n      value: pgEnum.values.map(\n        (value2) => ({\n          kind: \"type\",\n          value: `'${value2}'`,\n          type: pgEnum.name\n        })\n      )\n    };\n  };\n  const valueAsEnum = (() => {\n    const enumTarget = getEnumByOid(pgTypeOid);\n    if (enumTarget !== void 0) {\n      return enumTarget;\n    }\n    if (pgType?.typelem !== void 0 && pgType.typelem !== 0) {\n      const elemEnumTarget = getEnumByOid(pgType.typelem);\n      if (elemEnumTarget !== void 0) {\n        return { kind: \"array\", value: elemEnumTarget };\n      }\n    }\n    return void 0;\n  })();\n  const valueAsType = getTsTypeFromPgTypeOid({\n    pgTypeOid,\n    pgTypes: params.context.pgTypes\n  });\n  const valueAsOverride = (() => {\n    const pgType2 = params.context.pgTypes.get(\n      params.col.introspected?.colTypeOid ?? params.col.described.type\n    );\n    if (!pgType2) return void 0;\n    const columnOverride = params?.context?.overrides?.columns.get(params.col.introspected?.tableName ?? \"\")?.get(params.col.introspected?.colName ?? params.col.described.name);\n    if (columnOverride !== void 0) {\n      return { kind: \"type\", value: columnOverride, type: pgType2.name };\n    }\n    const typeOverride = params?.context?.overrides?.types.get(pgType2.name);\n    if (typeOverride !== void 0) {\n      return {\n        kind: \"type\",\n        value: typeOverride.value,\n        type: pgType2.name\n      };\n    }\n    return void 0;\n  })();\n  const value = valueAsOverride ?? valueAsEnum ?? valueAsType;\n  const key = params.col.described.name ?? params.col.introspected?.colName;\n  let isNonNullable = params.col.isNonNullableBasedOnAST;\n  if (!isNonNullable && params.col.introspected !== void 0) {\n    isNonNullable = params.col.introspected.colNotNull;\n    if (isTableNullableDueToJoin(params.context.relationsWithJoins, params.col.introspected.tableName)) {\n      isNonNullable = false;\n    }\n  }\n  return buildInterfacePropertyValue({\n    key: toCase(key, params.context.fieldTransform),\n    value,\n    isNullable: !isNonNullable\n  });\n}\nfunction getTsTypeFromPgTypeOid(params) {\n  const pgType = params.pgTypes.get(params.pgTypeOid);\n  if (pgType === void 0) {\n    return { kind: \"type\", value: \"unknown\", type: \"unknown\" };\n  }\n  return getTsTypeFromPgType({ pgTypeName: pgType.name });\n}\nfunction getTsTypeFromPgType(params) {\n  const { isArray, pgType } = parsePgType(params.pgTypeName);\n  const tsType = defaultTypesMap.get(pgType) ?? \"any\";\n  const property = { kind: \"type\", value: tsType, type: pgType };\n  return isArray ? { kind: \"array\", value: property } : property;\n}\nfunction isPgTypeArray(pgType) {\n  return pgType.startsWith(\"_\");\n}\nfunction parsePgType(pgType) {\n  const isArray = isPgTypeArray(pgType);\n  return {\n    isArray,\n    pgType: isArray ? pgType.slice(1) : pgType\n  };\n}\nasync function getPgEnums(sql) {\n  const rows = await sql`\n    SELECT pg_type.oid, pg_type.typname, pg_enum.enumlabel\n    FROM pg_type\n    JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid\n    WHERE pg_type.typtype = 'e'\n    ORDER BY pg_type.typname, pg_enum.enumsortorder\n  `;\n  const map = /* @__PURE__ */ new Map();\n  for (const row of rows) {\n    const existing = map.get(row.oid);\n    if (existing === void 0) {\n      map.set(row.oid, {\n        name: row.typname,\n        values: [row.enumlabel]\n      });\n      continue;\n    }\n    existing.values.push(row.enumlabel);\n  }\n  return map;\n}\nasync function getPgTypes(sql) {\n  const rows = await sql`\n        SELECT oid, typname as name, typelem FROM pg_type\n    `;\n  const map = /* @__PURE__ */ new Map();\n  for (const row of rows) {\n    map.set(row.oid, row);\n  }\n  return map;\n}\nasync function getPgCols(sql) {\n  const rows = await sql`\n      SELECT\n          pg_class.oid AS \"tableOid\",\n          pg_namespace.nspname AS \"schemaName\",\n          pg_class.relname AS \"tableName\",\n          pg_attribute.attname AS \"colName\",\n          pg_type.oid AS \"colTypeOid\",\n          CASE\n              WHEN pg_type.typtype = 'd' THEN\n                  (SELECT pt.oid FROM pg_type pt WHERE pt.oid = pg_type.typbasetype)\n              ELSE\n                  NULL\n          END AS \"colBaseTypeOid\",\n          pg_attribute.attnum AS \"colNum\",\n          pg_attribute.atthasdef \"colHasDef\",\n          pg_attribute.attnotnull \"colNotNull\",\n          pg_attribute.attidentity \"colIdentity\"\n      FROM\n          pg_attribute,\n          pg_class,\n          pg_type,\n          pg_namespace\n      WHERE TRUE\n          AND pg_attribute.attrelid = pg_class.oid\n          AND pg_attribute.atttypid = pg_type.oid\n          AND pg_class.relnamespace = pg_namespace.oid\n          AND pg_attribute.attnum >= 1\n      ORDER BY\n          pg_namespace.nspname,\n          pg_class.relname,\n          pg_attribute.attnum\n  `;\n  return rows;\n}\nasync function getPgAggregateFunctionNames(sql) {\n  const rows = await sql`\n      SELECT DISTINCT proname AS name\n      FROM pg_catalog.pg_proc\n      WHERE prokind = 'a'\n  `;\n  return new Set(rows.map((row) => row.name));\n}\nasync function getPgFunctions(sql) {\n  const rows = await sql`\n      SELECT\n          pg_proc.proname AS \"name\",\n          pg_catalog.pg_get_function_arguments(pg_proc.oid) AS \"argumentsString\",\n          pg_type.typname AS \"returnType\"\n      FROM\n          pg_catalog.pg_proc\n      JOIN\n          pg_catalog.pg_type ON pg_proc.prorettype = pg_type.oid\n      WHERE\n          pg_proc.pronamespace::regnamespace = 'pg_catalog'::regnamespace\n  `;\n  return rows.map((row) => ({\n    name: row.name,\n    arguments: row.argumentsString.replace(/\"/, \"\").split(\", \").filter((x) => x !== \"\"),\n    returnType: row.returnType\n  }));\n}\nasync function getPgTypeExprMap(sql) {\n  const rows = await sql`\n      SELECT\n        l.typname as left,\n        o.oprname as operator,\n        r.typname as right,\n        ret.typname AS result\n      FROM pg_operator o\n        JOIN pg_type l ON l.oid = o.oprleft\n        JOIN pg_type r ON r.oid = o.oprright\n        JOIN pg_type ret ON ret.oid = o.oprresult\n      WHERE o.oprleft <> 0 AND o.oprright <> 0\n  `;\n  const map = /* @__PURE__ */ new Map();\n  for (const row of rows) {\n    const leftMap = map.get(row.left) ?? /* @__PURE__ */ new Map();\n    const rightMap = leftMap.get(row.operator) ?? /* @__PURE__ */ new Map();\n    rightMap.set(row.right, row.result);\n    leftMap.set(row.operator, rightMap);\n    map.set(row.left, leftMap);\n  }\n  return map;\n}\n\nexport { createGenerator };\n//# sourceMappingURL=index.mjs.map\n","import { PluginManager } from '@ts-safeql/plugin-utils';\nimport postgres from 'postgres';\nimport { match } from 'ts-pattern';\nimport { PluginError } from '@ts-safeql/shared';\nimport * as O from 'fp-ts/lib/Option.js';\nimport { pipe } from 'fp-ts/lib/function.js';\nimport pgConnectionString from 'pg-connection-string';\n\nfunction mapConnectionOptionsToString(connectionOptions) {\n  const user = encodeURIComponent(connectionOptions.user);\n  const password = encodeURIComponent(connectionOptions.password);\n  return `postgres://${user}:${password}@${connectionOptions.host}:${connectionOptions.port}/${connectionOptions.database}`;\n}\nfunction parseConnection(databaseUrl) {\n  const connection = pgConnectionString.parse(databaseUrl);\n  if (connection.host === null) {\n    throw new Error(\"Could not resolve database host\");\n  }\n  if (!isDefined(connection.port)) {\n    throw new Error(\"Could not resolve database port\");\n  }\n  if (!isDefined(connection.user)) {\n    throw new Error(\"Could not resolve database user\");\n  }\n  if (!isDefined(connection.password)) {\n    throw new Error(\"Could not resolve database password\");\n  }\n  if (!isDefined(connection.database)) {\n    throw new Error(\"Could not resolve database name\");\n  }\n  return {\n    host: connection.host,\n    port: parseInt(connection.port, 10),\n    user: connection.user,\n    password: connection.password,\n    database: connection.database\n  };\n}\nfunction isDefined(value) {\n  return value !== null && value !== void 0;\n}\n\nfunction createConnectionManager() {\n  const connectionMap = /* @__PURE__ */ new Map();\n  const pluginManager = new PluginManager();\n  return {\n    getOrCreate: (databaseUrl, options) => {\n      return getOrCreateConnection(databaseUrl, connectionMap, options);\n    },\n    getOrCreateFromPlugins: (plugins, projectDir) => {\n      return getOrCreateFromPlugins(plugins, connectionMap, pluginManager, projectDir);\n    },\n    resolveMigrate: (plugins, projectDir) => {\n      return pluginManager.resolveMigrate(plugins, projectDir);\n    },\n    close: (strategy) => {\n      return closeConnection(strategy, connectionMap, pluginManager);\n    }\n  };\n}\nfunction getOrCreateConnection(databaseUrl, connectionMap, options) {\n  return pipe(\n    O.fromNullable(connectionMap.get(databaseUrl)),\n    O.foldW(\n      () => {\n        const sql = postgres(databaseUrl, options);\n        connectionMap.set(databaseUrl, sql);\n        return { sql, databaseUrl, isFirst: true };\n      },\n      (sql) => ({ sql, databaseUrl, isFirst: false })\n    )\n  );\n}\nasync function getOrCreateFromPlugins(plugins, connectionMap, pluginManager, projectDir) {\n  let connection;\n  try {\n    connection = pluginManager.resolveConnection(plugins, projectDir);\n  } catch (error) {\n    throw PluginError.from(\"plugin-resolution\")(error);\n  }\n  if (!connection) {\n    throw new PluginError(\n      \"plugin-resolution\",\n      \"None of the loaded SafeQL plugins provide a createConnection hook.\"\n    );\n  }\n  const { cacheKey, handler, pluginName } = connection;\n  const existing = connectionMap.get(cacheKey);\n  if (existing) {\n    return { sql: existing, databaseUrl: cacheKey, isFirst: false, pluginName };\n  }\n  try {\n    const sql = await handler();\n    connectionMap.set(cacheKey, sql);\n    return { sql, databaseUrl: cacheKey, isFirst: true, pluginName };\n  } catch (error) {\n    throw PluginError.from(pluginName)(error);\n  }\n}\nfunction closeConnection(strategy, connectionMap, pluginManager) {\n  match(strategy).with({ type: \"databaseUrl\" }, ({ databaseUrl }) => {\n    const sql = connectionMap.get(databaseUrl);\n    if (sql) {\n      sql.end();\n      connectionMap.delete(databaseUrl);\n    }\n  }).with({ type: \"migrations\" }, ({ connectionUrl, databaseName }) => {\n    const connectionOptions = { ...parseConnection(connectionUrl), database: databaseName };\n    const databaseUrl = mapConnectionOptionsToString(connectionOptions);\n    const sql = connectionMap.get(databaseUrl);\n    const migrationSql = connectionMap.get(connectionUrl);\n    if (sql) {\n      sql.end();\n      connectionMap.delete(databaseUrl);\n    }\n    if (migrationSql) {\n      migrationSql.end();\n      connectionMap.delete(connectionUrl);\n    }\n  }).with({ type: \"pluginsOnly\" }, ({ plugins, projectDir }) => {\n    const cached = pluginManager.getCachedConnection(plugins, projectDir);\n    if (cached) {\n      const sql = connectionMap.get(cached.cacheKey);\n      if (sql) {\n        sql.end();\n        connectionMap.delete(cached.cacheKey);\n      }\n    }\n    pluginManager.evictPlugins(plugins, projectDir);\n  }).exhaustive();\n}\n\nexport { createConnectionManager, mapConnectionOptionsToString, parseConnection };\n//# sourceMappingURL=index.mjs.map\n","import chokidar from \"chokidar\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { RuleOptionConnection, zConnectionMigration } from \"../rules/RuleOptions\";\nimport {\n  DEFAULT_CONNECTION_URL,\n  getDatabaseName,\n  getMigrationDatabaseMetadata,\n} from \"../rules/check-sql.utils\";\n\ninterface WatchMigrationsDirParams {\n  projectDir: string;\n  connection: RuleOptionConnection & z.infer<typeof zConnectionMigration> & { watchMode: true };\n  dropCacheKeyFn: (cacheKey: string) => void;\n  closeConnectionFn: () => void;\n}\n\nexport function createWatchManager() {\n  const migrationPaths = new Map<string, { onChange: () => void }>();\n  const watcher = chokidar.watch([], { ignoreInitial: true }).on(\"all\", (_, filePath) => {\n    for (const [path, { onChange }] of migrationPaths.entries()) {\n      if (filePath.startsWith(path)) {\n        return onChange();\n      }\n    }\n  });\n\n  const watchMigrationsDir = (params: WatchMigrationsDirParams) => {\n    const migrationPath = path.join(params.projectDir, params.connection.migrationsDir);\n\n    if (migrationPaths.has(migrationPath)) {\n      return;\n    }\n\n    migrationPaths.set(migrationPath, {\n      onChange: () => {\n        const { databaseUrl } = getMigrationDatabaseMetadata({\n          connectionUrl: params.connection.connectionUrl ?? DEFAULT_CONNECTION_URL,\n          databaseName: getDatabaseName({\n            databaseName: params.connection.databaseName,\n            migrationsDir: params.connection.migrationsDir,\n            projectDir: params.projectDir,\n          }),\n        });\n\n        params.dropCacheKeyFn(databaseUrl);\n        params.closeConnectionFn();\n      },\n    });\n\n    watcher.add(migrationPath);\n  };\n\n  return {\n    watchMigrationsDir,\n  };\n}\n","import { createGenerator, GenerateError, GenerateResult } from \"@ts-safeql/generate\";\nimport {\n  DatabaseInitializationError,\n  InternalError,\n  InvalidMigrationError,\n  InvalidMigrationsPathError,\n  PluginError,\n  QuerySourceMapEntry,\n} from \"@ts-safeql/shared\";\nimport path from \"path\";\nimport { runAsWorker } from \"synckit\";\nimport { match } from \"ts-pattern\";\nimport { createConnectionManager, type ConnectionPayload } from \"@ts-safeql/connection-manager\";\nimport {\n  getConnectionStartegyByRuleOptionConnection,\n  getMigrationDatabaseMetadata,\n  isWatchMigrationsDirEnabled,\n  runMigrations,\n} from \"../rules/check-sql.utils\";\nimport { ConnectionTarget, RuleOptionConnection } from \"../rules/RuleOptions\";\nimport { J, pipe, TE } from \"../utils/fp-ts\";\nimport { initDatabase } from \"../utils/pg.utils\";\nimport { createWatchManager } from \"../utils/watch-manager\";\n\nexport interface CheckSQLWorkerParams {\n  connection: RuleOptionConnection;\n  target: ConnectionTarget;\n  query: { text: string; sourcemaps: QuerySourceMapEntry[] };\n  projectDir: string;\n}\n\nexport type CheckSQLWorkerHandler = typeof handler;\n\nconst generator = createGenerator();\nconst connections = createConnectionManager();\nconst watchers = createWatchManager();\n\nexport async function handler(params: CheckSQLWorkerParams) {\n  const strategy = getConnectionStartegyByRuleOptionConnection({\n    connection: params.connection,\n    projectDir: params.projectDir,\n  });\n\n  if (isWatchMigrationsDirEnabled(params.connection)) {\n    watchers.watchMigrationsDir({\n      connection: params.connection,\n      projectDir: params.projectDir,\n      dropCacheKeyFn: generator.dropCacheKey,\n      closeConnectionFn: () => connections.close(strategy),\n    });\n  }\n\n  const result = await workerHandler(params)();\n\n  if (params.connection.keepAlive === false) {\n    connections.close(strategy);\n  }\n\n  return J.stringify(result);\n}\n\nrunAsWorker(handler);\n\nexport type WorkerError =\n  | InvalidMigrationsPathError\n  | InvalidMigrationError\n  | InternalError\n  | PluginError\n  | DatabaseInitializationError\n  | GenerateError;\nexport type WorkerResult = GenerateResult;\n\n/**\n * Shared by the query and schema-introspection paths so both hit the same shadow DB.\n */\nfunction resolveConnectionPayload(params: {\n  connection: RuleOptionConnection;\n  projectDir: string;\n}): TE.TaskEither<WorkerError, ConnectionPayload> {\n  const strategy = getConnectionStartegyByRuleOptionConnection(params);\n\n  return match(strategy)\n    .with({ type: \"databaseUrl\" }, ({ databaseUrl }) =>\n      TE.right(connections.getOrCreate(databaseUrl)),\n    )\n    .with({ type: \"pluginsOnly\" }, ({ plugins }) =>\n      TE.tryCatch(\n        () => connections.getOrCreateFromPlugins(plugins, params.projectDir),\n        (error) => (error instanceof PluginError ? error : PluginError.from(\"unknown\")(error)),\n      ),\n    )\n    .with({ type: \"migrations\" }, ({ migrationsDir, databaseName, connectionUrl }) => {\n      const { connectionOptions, databaseUrl } = getMigrationDatabaseMetadata({\n        connectionUrl,\n        databaseName,\n      });\n      const { sql, isFirst } = connections.getOrCreate(databaseUrl);\n      const { sql: migrationSql } = connections.getOrCreate(connectionUrl, {\n        onnotice: () => {\n          /* silence notices */\n        },\n      });\n      const connectionPayload: ConnectionPayload = { sql, isFirst, databaseUrl };\n\n      if (isFirst) {\n        const migrationsPath = path.join(params.projectDir, migrationsDir);\n\n        // A plugin's migrate hook replaces the built-in `.sql` runner. Plugin resolution\n        // can throw synchronously, so surface it as a worker error rather than crashing.\n        let pluginMigrate: ReturnType<typeof connections.resolveMigrate>;\n        try {\n          pluginMigrate = params.connection.plugins?.length\n            ? connections.resolveMigrate(params.connection.plugins, params.projectDir)\n            : undefined;\n        } catch (error) {\n          return TE.left(error instanceof PluginError ? error : PluginError.from(\"unknown\")(error));\n        }\n\n        const applyMigrations: TE.TaskEither<WorkerError, unknown> = pluginMigrate\n          ? TE.tryCatch(\n              () =>\n                pluginMigrate.handler({\n                  databaseUrl,\n                  sql,\n                  migrationsDir: migrationsPath,\n                  projectDir: params.projectDir,\n                }),\n              PluginError.from(pluginMigrate.pluginName),\n            )\n          : runMigrations({ migrationsPath, sql });\n\n        return pipe(\n          TE.Do,\n          TE.chainW(() => initDatabase(migrationSql, connectionOptions.database)),\n          TE.chainW(() => applyMigrations),\n          TE.map(() => connectionPayload),\n        );\n      }\n\n      return TE.right(connectionPayload);\n    })\n    .exhaustive();\n}\n\nfunction workerHandler(params: CheckSQLWorkerParams): TE.TaskEither<WorkerError, WorkerResult> {\n  return pipe(\n    resolveConnectionPayload(params),\n    TE.chainW(({ sql, databaseUrl, pluginName }) => {\n      return TE.tryCatch(\n        () =>\n          generator.generate({\n            sql,\n            query: params.query,\n            cacheKey: databaseUrl,\n            overrides: params.connection.overrides,\n            fieldTransform: params.target.fieldTransform,\n          }),\n        (e) => (pluginName ? PluginError.from(pluginName)(e) : InternalError.to(e)),\n      );\n    }),\n    TE.chainW(TE.fromEither),\n  );\n}\n"],"names":["i","acc","ext","start","final","isDefined","types","match","path"],"mappings":"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"}