{"version":3,"file":"Repl.umd.cjs","sources":["../src/sqlSupport.ts","../src/utils.ts","../src/ReplTable.tsx","../src/ReplResponse.tsx","../src/Repl.tsx"],"sourcesContent":["import {\n  PostgreSQL,\n  SQLConfig,\n  keywordCompletionSource,\n  schemaCompletionSource,\n} from '@codemirror/lang-sql'\nimport { CompletionContext, CompletionResult } from '@codemirror/autocomplete'\nimport { LanguageSupport } from '@codemirror/language'\n\nconst describeCompletions = [\n  {\n    label: '\\\\d',\n    type: 'function',\n    displayLabel: '\\\\d[S+] [ pattern ]',\n    detail: 'PSQL Describe',\n  },\n  {\n    label: '\\\\da',\n    type: 'function',\n    displayLabel: '\\\\da[S] [ pattern ]',\n    detail: 'Lists aggregate functions',\n  },\n  {\n    label: '\\\\dA',\n    type: 'function',\n    displayLabel: '\\\\dA[+] [ pattern ]',\n    detail: 'Lists access methods',\n  },\n  {\n    label: '\\\\dAc',\n    type: 'function',\n    displayLabel: '\\\\dAc[+] [access-method-pattern [input-type-pattern]]',\n    detail: 'Lists operator classes',\n  },\n  {\n    label: '\\\\dAf',\n    type: 'function',\n    displayLabel: '\\\\dAf[+] [access-method-pattern [input-type-pattern]]',\n    detail: 'Lists operator families',\n  },\n  {\n    label: '\\\\dAo',\n    type: 'function',\n    displayLabel: '\\\\dAo[+] [access-method-pattern [operator-family-pattern]]',\n    detail: 'Lists operators associated with operator families',\n  },\n  {\n    label: '\\\\dAp',\n    type: 'function',\n    displayLabel: '\\\\dAp[+] [access-method-pattern [operator-family-pattern]]',\n    detail: 'Lists support functions associated with operator families',\n  },\n  {\n    label: '\\\\db',\n    type: 'function',\n    displayLabel: '\\\\db[+] [ pattern ]',\n    detail: 'Lists tablespaces',\n  },\n  {\n    label: '\\\\dc',\n    type: 'function',\n    displayLabel: '\\\\dc[S+] [ pattern ]',\n    detail: 'Lists conversions between character-set encodings',\n  },\n  {\n    label: '\\\\dconfig',\n    type: 'function',\n    displayLabel: '\\\\dconfig[+] [ pattern ]',\n    detail: 'Lists server configuration parameters and their values',\n  },\n  {\n    label: '\\\\dC',\n    type: 'function',\n    displayLabel: '\\\\dC[+] [ pattern ]',\n    detail: 'Lists type casts',\n  },\n  {\n    label: '\\\\dd',\n    type: 'function',\n    displayLabel: '\\\\dd[S] [ pattern ]',\n    detail:\n      'Shows the descriptions of objects of type constraint, operator class, operator family, rule, and trigger',\n  },\n  {\n    label: '\\\\dD',\n    type: 'function',\n    displayLabel: '\\\\dD[S+] [ pattern ]',\n    detail: 'Lists domains',\n  },\n  {\n    label: '\\\\ddp',\n    type: 'function',\n    displayLabel: '\\\\ddp [ pattern ]',\n    detail: 'Lists default access privilege settings',\n  },\n  {\n    label: '\\\\dE',\n    type: 'function',\n    displayLabel: '\\\\dE[S+] [ pattern ]',\n    detail: 'Lists foreign tables',\n  },\n  {\n    label: '\\\\di',\n    type: 'function',\n    displayLabel: '\\\\di[S+] [ pattern ]',\n    detail: 'Lists indexes',\n  },\n  {\n    label: '\\\\dm',\n    type: 'function',\n    displayLabel: '\\\\dm[S+] [ pattern ]',\n    detail: 'Lists materialized views',\n  },\n  {\n    label: '\\\\ds',\n    type: 'function',\n    displayLabel: '\\\\ds[S+] [ pattern ]',\n    detail: 'Lists sequences',\n  },\n  {\n    label: '\\\\dt',\n    type: 'function',\n    displayLabel: '\\\\dt[S+] [ pattern ]',\n    detail: 'Lists tables',\n  },\n  {\n    label: '\\\\dv',\n    type: 'function',\n    displayLabel: '\\\\dv[S+] [ pattern ]',\n    detail: 'Lists views',\n  },\n  {\n    label: '\\\\des',\n    type: 'function',\n    displayLabel: '\\\\des[+] [ pattern ]',\n    detail: 'Lists foreign servers',\n  },\n  {\n    label: '\\\\det',\n    type: 'function',\n    displayLabel: '\\\\det[+] [ pattern ]',\n    detail: 'Lists foreign tables',\n  },\n  {\n    label: '\\\\deu',\n    type: 'function',\n    displayLabel: '\\\\deu[+] [ pattern ]',\n    detail: 'Lists user mappings',\n  },\n  {\n    label: '\\\\dew',\n    type: 'function',\n    displayLabel: '\\\\dew[+] [ pattern ]',\n    detail: 'Lists foreign-data wrappers',\n  },\n  {\n    label: '\\\\df',\n    type: 'function',\n    displayLabel: '\\\\df[anptwS+] [ pattern [ arg_pattern ... ] ]',\n    detail: 'Lists functions',\n  },\n  {\n    label: '\\\\dF',\n    type: 'function',\n    displayLabel: '\\\\dF[+] [ pattern ]',\n    detail: 'Lists text search configurations',\n  },\n  {\n    label: '\\\\dFd',\n    type: 'function',\n    displayLabel: '\\\\dFd[+] [ pattern ]',\n    detail: 'Lists text search dictionaries',\n  },\n  {\n    label: '\\\\dFp',\n    type: 'function',\n    displayLabel: '\\\\dFp[+] [ pattern ]',\n    detail: 'Lists text search parsers',\n  },\n  {\n    label: '\\\\dFt',\n    type: 'function',\n    displayLabel: '\\\\dFt[+] [ pattern ]',\n    detail: 'Lists text search templates',\n  },\n  {\n    label: '\\\\dg',\n    type: 'function',\n    displayLabel: '\\\\dg[S+] [ pattern ]',\n    detail: 'Lists database roles',\n  },\n  {\n    label: '\\\\dl',\n    type: 'function',\n    displayLabel: '\\\\dl[+] ',\n    detail: 'List large objects',\n  },\n  {\n    label: '\\\\dL',\n    type: 'function',\n    displayLabel: '\\\\dL[S+] [ pattern ]',\n    detail: 'Lists procedural languages',\n  },\n  {\n    label: '\\\\dn',\n    type: 'function',\n    displayLabel: '\\\\dn[S+] [ pattern ]',\n    detail: 'Lists schemas',\n  },\n  {\n    label: '\\\\do',\n    type: 'function',\n    displayLabel: '\\\\do[S+] [ pattern [ arg_pattern [ arg_pattern ] ] ]',\n    detail: 'Lists operators with their operand and result types',\n  },\n  {\n    label: '\\\\dO',\n    type: 'function',\n    displayLabel: '\\\\dO[S+] [ pattern ]',\n    detail: 'Lists collations',\n  },\n  {\n    label: '\\\\dp',\n    type: 'function',\n    displayLabel: '\\\\dp[S] [ pattern ]',\n    detail:\n      'Lists tables, views and sequences with their associated access privileges',\n  },\n  {\n    label: '\\\\dP',\n    type: 'function',\n    displayLabel: '\\\\dP[itn+] [ pattern ]',\n    detail: 'Lists partitioned relations',\n  },\n  {\n    label: '\\\\drds',\n    type: 'function',\n    displayLabel: '\\\\drds [ role-pattern [ database-pattern ] ]',\n    detail: 'Lists defined configuration settings',\n  },\n  {\n    label: '\\\\drg',\n    type: 'function',\n    displayLabel: '\\\\drg[S] [ pattern ]',\n    detail: 'Lists information about each granted role membership',\n  },\n  {\n    label: '\\\\dRp',\n    type: 'function',\n    displayLabel: '\\\\dRp[+] [ pattern ]',\n    detail: 'Lists replication publications',\n  },\n  {\n    label: '\\\\dRs',\n    type: 'function',\n    displayLabel: '\\\\dRs[+] [ pattern ]',\n    detail: 'Lists replication subscriptions',\n  },\n  {\n    label: '\\\\dT',\n    type: 'function',\n    displayLabel: '\\\\dT[S+] [ pattern ]',\n    detail: 'Lists data types',\n  },\n  {\n    label: '\\\\du',\n    type: 'function',\n    displayLabel: '\\\\du[S+] [ pattern ]',\n    detail: 'Lists database roles',\n  },\n  {\n    label: '\\\\dx',\n    type: 'function',\n    displayLabel: '\\\\dx[+] [ pattern ]',\n    detail: 'Lists installed extensions',\n  },\n  {\n    label: '\\\\dX',\n    type: 'function',\n    displayLabel: '\\\\dX [ pattern ]',\n    detail: 'Lists extended statistics',\n  },\n  {\n    label: '\\\\dy',\n    type: 'function',\n    displayLabel: '\\\\dy[+] [ pattern ]',\n    detail: 'Lists event triggers',\n  },\n]\n\nfunction describeCompletionsAutoComplete(\n  context: CompletionContext,\n): CompletionResult | null {\n  const word = context.matchBefore(/\\\\\\w*/)\n  if (!word || word.from === word.to) return null\n  return {\n    from: word.from,\n    options: describeCompletions,\n  }\n}\n\n// This is a reimplemented version of `sql()` from `@codemirror/lang-sql` that\n// includes a custom autocompletion function for postgresql's `\\d` command.\nexport function makeSqlExt(config: SQLConfig = {}) {\n  const lang = config.dialect || PostgreSQL\n  return new LanguageSupport(lang.language, [\n    // schemaCompletion(config),\n    config.schema\n      ? lang.language.data.of({\n          autocomplete: schemaCompletionSource(config),\n        })\n      : [],\n    // keywordCompletion(lang, !!config.upperCaseKeywords)\n    lang.language.data.of({\n      autocomplete: keywordCompletionSource(lang, !!config.upperCaseKeywords),\n    }),\n    lang.language.data.of({\n      autocomplete: describeCompletionsAutoComplete,\n    }),\n  ])\n}\n","import { type PGliteInterface } from '@electric-sql/pglite'\nimport { describe } from 'psql-describe'\nimport type { Results, Response } from './types'\n\nexport async function runQuery(\n  query: string,\n  pg: PGliteInterface,\n): Promise<Response> {\n  if (query.trim().toLowerCase().startsWith('\\\\')) {\n    return runDescribe(query, pg)\n  }\n  const start = performance.now()\n  try {\n    const result = await pg.exec(query, {\n      rowMode: 'array',\n    })\n    const elapsed = performance.now() - start\n    return {\n      query,\n      results: result as Results[],\n      time: elapsed,\n    }\n  } catch (err) {\n    return {\n      query,\n      error: (err as Error).message,\n      time: performance.now() - start,\n    }\n  }\n}\n\nexport async function runDescribe(\n  query: string,\n  pg: PGliteInterface,\n): Promise<Response> {\n  const start = performance.now()\n  let out: string | Record<string, unknown> | undefined\n  let ret: Results\n  const { promise, cancel: _cancel } = describe(\n    query,\n    'postgres',\n    async (sql) => {\n      ret = (await pg.exec(sql, { rowMode: 'array' }))[0] as Results\n      return {\n        rows: ret.rows,\n        fields: ret.fields,\n        rowCount: ret.rows.length,\n      }\n    },\n    (output) => {\n      out = output\n    },\n  )\n  await promise\n  const elapsed = performance.now() - start\n\n  if (!out) {\n    return {\n      query,\n      error: 'No output',\n      time: elapsed,\n    }\n  } else if (typeof out === 'string') {\n    if (out.startsWith('ERROR:')) {\n      return {\n        query,\n        error: out,\n        time: elapsed,\n      }\n    } else {\n      return {\n        query,\n        text: out,\n        time: elapsed,\n      }\n    }\n  } else {\n    return {\n      query,\n      text: out.title as string,\n      results: [ret!],\n      time: elapsed,\n    }\n  }\n}\n\nexport async function getSchema(\n  pg: PGliteInterface,\n): Promise<Record<string, string[]>> {\n  const ret = await pg.query<{\n    schema: string\n    table: string\n    columns: string\n  }>(`\n    SELECT \n      table_schema AS schema,\n      table_name AS table,\n      array_agg(column_name) AS columns\n    FROM \n      information_schema.columns\n    GROUP BY \n      table_schema, table_name\n    ORDER BY \n      table_schema, table_name;\n  `)\n  const schema: Record<string, string[]> = {}\n  for (const row of ret.rows) {\n    schema[`${row.schema}.${row.table}`] = Array.isArray(row.columns)\n      ? row.columns\n      : row.columns.slice(1, -1).split(',')\n  }\n  return schema\n}\n","import { useState, useEffect } from 'react'\nimport type { Results } from './types'\n\nconst tableRowIncrement = 100\nconst maxCellLength = 200\n\nfunction cellClass(value: unknown) {\n  if (value === null) {\n    return 'PGliteRepl-null'\n  } else if (typeof value === 'number') {\n    return 'PGliteRepl-number'\n  } else if (typeof value === 'boolean') {\n    return 'PGliteRepl-boolean'\n  } else {\n    return ''\n  }\n}\n\nfunction cellValue(value: unknown) {\n  let str: string\n  if (value === null) {\n    str = 'null'\n  } else if (typeof value === 'number') {\n    str = value.toString()\n  } else if (typeof value === 'boolean') {\n    str = value ? 'true' : 'false'\n  } else if (value instanceof Date) {\n    str = value.toISOString()\n  } else if (Array.isArray(value)) {\n    str = `[${value.map(cellValue).join(', ')}]`\n  } else if (typeof value === 'object') {\n    str = JSON.stringify(value)\n  } else if (ArrayBuffer.isView(value)) {\n    str = `${value.byteLength} bytes`\n  } else if (value === undefined) {\n    str = 'undefined'\n  } else {\n    str = value.toString()\n  }\n  return str.length > maxCellLength ? str.slice(0, maxCellLength) + '…' : str\n}\n\nexport function ReplTable({ result }: { result: Results }) {\n  const [maxRows, setMaxRows] = useState(tableRowIncrement)\n  const rows = result.rows.slice(0, maxRows)\n\n  useEffect(() => {\n    // Reset maxRows when the result changes\n    setMaxRows(tableRowIncrement)\n  }, [result])\n\n  const showMore = () => {\n    setMaxRows((prev) => prev + tableRowIncrement)\n  }\n\n  return (\n    <>\n      <div className=\"PGliteRepl-table-scroll\">\n        <table className=\"PGliteRepl-table\">\n          <thead>\n            <tr>\n              {result.fields.map((col) => (\n                <th key={col.name}>{col.name}</th>\n              ))}\n            </tr>\n            {/* <tr>\n              {result.fields.map((col, i) => (\n                <th key={i}>{col.dataTypeID}</th>\n              ))}\n            </tr> */}\n          </thead>\n          <tbody>\n            {rows.map((row, i) => (\n              // eslint-disable-next-line @eslint-react/no-array-index-key\n              <tr key={i}>\n                {row.map((col, j) => (\n                  // eslint-disable-next-line @eslint-react/no-array-index-key\n                  <td key={j} className={cellClass(col)}>\n                    {cellValue(col)}\n                  </td>\n                ))}\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n      <div className=\"PGliteRepl-table-row-count\">\n        {result.rows.length > maxRows ? `${maxRows} of ` : ''}\n        {result.rows.length} rows{' '}\n        {result.rows.length > maxRows && (\n          <a\n            href=\"\"\n            onClick={(e) => {\n              e.preventDefault()\n              showMore()\n            }}\n          >\n            Show more\n          </a>\n        )}\n      </div>\n    </>\n  )\n}\n","import type { Results, Response } from './types'\nimport { ReplTable } from './ReplTable'\n\nfunction OutLine({ result }: { result: Results }) {\n  return (\n    <div className=\"PGliteRepl-line\">\n      {result.fields.length > 0 ? (\n        <ReplTable result={result} />\n      ) : (\n        <div className=\"PGliteRepl-null\">null</div>\n      )}\n    </div>\n  )\n}\n\nexport function ReplResponse({\n  response,\n  showTime,\n}: {\n  response: Response\n  showTime: boolean\n}) {\n  let out\n  if (response.error) {\n    out = (\n      <div className=\"PGliteRepl-line PGliteRepl-error\">{response.error}</div>\n    )\n  } else {\n    out = (\n      <>\n        {response.results?.map((result, i) => (\n          // eslint-disable-next-line @eslint-react/no-array-index-key\n          <OutLine key={i} result={result} />\n        ))}\n      </>\n    )\n  }\n  return (\n    <>\n      <pre className=\"PGliteRepl-line PGliteRepl-query\">{response.query}</pre>\n      {response.text && (\n        <div className=\"PGliteRepl-line PGliteRepl-text\">{response.text}</div>\n      )}\n      {out}\n      <div className=\"PGliteRepl-divider\">\n        <hr />\n        {showTime && (\n          <div className=\"PGliteRepl-time\">{response.time.toFixed(1)}ms</div>\n        )}\n      </div>\n    </>\n  )\n}\n","import { useState, useCallback, useMemo, useRef, useEffect } from 'react'\nimport CodeMirror, {\n  type ViewUpdate,\n  type ReactCodeMirrorRef,\n  type Extension,\n} from '@uiw/react-codemirror'\nimport type { CreateThemeOptions } from '@uiw/codemirror-themes'\nimport { defaultKeymap } from '@codemirror/commands'\nimport { keymap } from '@codemirror/view'\nimport { PostgreSQL } from '@codemirror/lang-sql'\nimport type { PGliteInterface } from '@electric-sql/pglite'\nimport type { PGliteWithLive } from '@electric-sql/pglite/live'\nimport { usePGlite } from '@electric-sql/pglite-react'\nimport { makeSqlExt } from './sqlSupport'\nimport type { Response } from './types'\nimport { runQuery, getSchema } from './utils'\nimport { ReplResponse } from './ReplResponse'\nimport {\n  githubDark,\n  githubDarkInit,\n  githubLight,\n  githubLightInit,\n} from '@uiw/codemirror-theme-github'\n\nimport './Repl.css'\n\n// Filter out the Enter key from the default keymap, we entirely override its behavior\n// to run the query when the user presses Enter.\n// We keep the up and down arrow keys as we only override their behavior\n// when the cursor is on the first or last line.\nconst baseKeymap = defaultKeymap.filter((key) => key.key !== 'Enter')\n\nexport type ReplTheme = 'light' | 'dark' | 'auto'\n\ntype ThemeInit = (options?: Partial<CreateThemeOptions>) => Extension\n\nexport const defaultLightThemeInit: ThemeInit = githubLightInit\nexport const defaultLightTheme = githubLight\nexport const defaultDarkThemeInit: ThemeInit = githubDarkInit\nexport const defaultDarkTheme = githubDark\n\nexport interface ReplProps {\n  pg?: PGliteInterface\n  border?: boolean\n  lightTheme?: Extension\n  darkTheme?: Extension\n  theme?: ReplTheme\n  showTime?: boolean\n  disableUpdateSchema?: boolean\n}\n\nexport function Repl({\n  pg: pgProp,\n  border = false,\n  lightTheme = defaultLightTheme,\n  darkTheme = defaultDarkTheme,\n  theme = 'auto',\n  showTime = false,\n  disableUpdateSchema = false,\n}: ReplProps) {\n  const [value, setValue] = useState('')\n  const valueNoHistory = useRef('')\n  const [loading, setLoading] = useState(true)\n  const [output, setOutput] = useState<Response[]>([])\n  const outputRef = useRef<HTMLDivElement | null>(null)\n  const [schema, setSchema] = useState<Record<string, string[]>>({})\n  const historyPos = useRef(-1)\n  const rcm = useRef<ReactCodeMirrorRef | null>(null)\n  const [themeToUse, setThemeToUse] = useState<Extension>(\n    theme === 'dark' ? darkTheme : lightTheme,\n  )\n  const [styles, setStyles] = useState<{ [key: string]: string | number }>({})\n\n  const pg: PGliteInterface = usePGlite(pgProp as PGliteWithLive)\n\n  useEffect(() => {\n    let ignore = false\n    const init = async () => {\n      await pg.waitReady\n      if (ignore) return\n      setLoading(false)\n    }\n    setLoading(true)\n    init()\n    return () => {\n      ignore = true\n    }\n  }, [pg])\n\n  useEffect(() => {\n    if (theme === 'auto') {\n      const systemTheme = window.matchMedia('(prefers-color-scheme: dark)')\n        .matches\n        ? 'dark'\n        : 'light'\n      setThemeToUse(systemTheme === 'dark' ? darkTheme : lightTheme)\n      const listener = (e: MediaQueryListEvent) => {\n        setThemeToUse(e.matches ? darkTheme : lightTheme)\n        setTimeout(() => {\n          extractStyles()\n        }, 0)\n      }\n      // eslint-disable-next-line @eslint-react/web-api/no-leaked-event-listener\n      window\n        .matchMedia('(prefers-color-scheme: dark)')\n        .addEventListener('change', listener)\n      return () => {\n        window\n          .matchMedia('(prefers-color-scheme: dark)')\n          .removeEventListener('change', listener)\n      }\n    } else {\n      setThemeToUse(theme === 'dark' ? darkTheme : lightTheme)\n      setTimeout(() => {\n        extractStyles()\n      }, 0)\n      return\n    }\n  }, [theme, lightTheme, darkTheme])\n\n  const onChange = useCallback((val: string, _viewUpdate: ViewUpdate) => {\n    extractStyles()\n    setValue(val)\n    if (historyPos.current === -1) {\n      valueNoHistory.current = val\n    }\n  }, [])\n\n  const extensions = useMemo(\n    () => [\n      keymap.of([\n        {\n          key: 'Enter',\n          preventDefault: true,\n          run: () => {\n            if (value.trim() === '') return false // Do nothing if the input is empty\n            runQuery(value, pg).then((response) => {\n              setOutput((prev) => [...prev, response])\n              if (outputRef.current) {\n                setTimeout(() => {\n                  outputRef.current!.scrollTop = outputRef.current!.scrollHeight\n                }, 0)\n              }\n              // Update the schema for any new tables to be used in autocompletion\n              if (!disableUpdateSchema) {\n                getSchema(pg).then(setSchema)\n              }\n            })\n            historyPos.current = -1\n            valueNoHistory.current = ''\n            setValue('')\n            return true\n          },\n        },\n        {\n          key: 'ArrowUp',\n          run: (view) => {\n            const state = view.state\n            const cursorLine = state.doc.lineAt(\n              state.selection.main.head,\n            ).number\n            if (cursorLine === 1) {\n              // If the cursor is on the first line, go back in history\n              const currentPos = historyPos.current\n              historyPos.current++\n              if (historyPos.current >= output.length) {\n                historyPos.current = output.length - 1\n              }\n              if (historyPos.current < -1) {\n                historyPos.current = -1\n              }\n              if (historyPos.current === currentPos) return true\n              if (historyPos.current === -1) {\n                setValue(valueNoHistory.current)\n              } else {\n                setValue(output[output.length - historyPos.current - 1].query)\n              }\n              return true // Prevent the default behavior\n            }\n            return false // Allow the default behavior\n          },\n        },\n        {\n          key: 'ArrowDown',\n          run: (view) => {\n            const state = view.state\n            const cursorLine = state.doc.lineAt(\n              state.selection.main.head,\n            ).number\n            const lastLine = state.doc.lines\n            if (cursorLine === lastLine) {\n              // If the cursor is on the last line, go forward in history\n              const currentPos = historyPos.current\n              historyPos.current--\n              if (historyPos.current >= output.length) {\n                historyPos.current = output.length - 1\n              }\n              if (historyPos.current < -1) {\n                historyPos.current = -1\n              }\n              if (historyPos.current === currentPos) return true\n              if (historyPos.current === -1) {\n                setValue(valueNoHistory.current)\n              } else {\n                setValue(output[output.length - historyPos.current - 1].query)\n              }\n              return true // Prevent the default behavior\n            }\n            return false // Allow the default behavior\n          },\n        },\n        ...baseKeymap,\n      ]),\n      makeSqlExt({\n        dialect: PostgreSQL,\n        schema: schema,\n        tables: [\n          {\n            label: 'd',\n            displayLabel: '\\\\d',\n          },\n        ],\n        defaultSchema: 'public',\n      }),\n    ],\n    [pg, schema, value, output, disableUpdateSchema],\n  )\n\n  const extractStyles = () => {\n    // Get the styles from the CodeMirror editor to use in the REPL\n    const cmEditorEl = rcm.current?.editor?.querySelector('.cm-editor')\n    if (!cmEditorEl) {\n      throw new Error('No CodeMirror editor found')\n    }\n    const gutterEl = cmEditorEl.querySelector('.cm-gutters')\n    const cmEditorElComputedStyles = window.getComputedStyle(cmEditorEl)\n    const foregroundColor = cmEditorElComputedStyles.color\n    const backgroundColor = cmEditorElComputedStyles.backgroundColor\n\n    const gutterElComputedStyles = window.getComputedStyle(gutterEl!)\n    const gutterBorder = gutterElComputedStyles.borderRight\n    const borderWidth = parseInt(gutterElComputedStyles.borderRightWidth) || 0\n    const borderColor = borderWidth\n      ? gutterElComputedStyles.borderRightColor\n      : foregroundColor.replace('rgb', 'rgba').replace(')', ', 0.15)')\n    const border = borderWidth\n      ? gutterElComputedStyles.borderRight\n      : `1px solid ${borderColor}`\n\n    setStyles({\n      '--PGliteRepl-foreground-color': foregroundColor,\n      '--PGliteRepl-background-color': backgroundColor,\n      '--PGliteRepl-border': border,\n      '--PGliteRepl-gutter-border': gutterBorder,\n      '--PGliteRepl-border-color': borderColor,\n    })\n  }\n\n  return (\n    <div\n      className={`\n      PGliteRepl-root\n      ${border ? 'PGliteRepl-root-border' : ''}\n    `}\n      style={styles}\n    >\n      <div className=\"PGliteRepl-output\" ref={outputRef}>\n        {loading && <div className=\"PGliteRepl-loading-msg\">Loading...</div>}\n        {output.map((response) => (\n          <div key={`${response.query}-${response.time}`}>\n            <ReplResponse response={response || []} showTime={showTime} />\n          </div>\n        ))}\n      </div>\n      <CodeMirror\n        ref={rcm}\n        className={`PGliteRepl-input ${loading ? 'PGliteRepl-input-loading' : ''}`}\n        width=\"100%\"\n        value={value}\n        basicSetup={{\n          defaultKeymap: false,\n        }}\n        extensions={extensions}\n        theme={themeToUse}\n        onChange={onChange}\n        editable={!loading}\n        onCreateEditor={() => {\n          extractStyles()\n          setTimeout(extractStyles, 0)\n          getSchema(pg).then(setSchema)\n        }}\n      />\n    </div>\n  )\n}\n"],"names":["PostgreSQL","LanguageSupport","schemaCompletionSource","keywordCompletionSource","describe","useState","useEffect","jsxs","Fragment","jsx","defaultKeymap","githubLightInit","githubLight","githubDarkInit","githubDark","useRef","usePGlite","useCallback","useMemo","keymap","view","border"],"mappings":"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"}