@electric-sql/pglite-repl 0.0.1-alpha.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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 let 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 PGlite } from \"@electric-sql/pglite\";\nimport { describe } from \"psql-describe\";\nimport type { Results, Response } from \"./types\";\n\nexport async function runQuery(query: string, pg: PGlite): 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 any[],\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: PGlite,\n): Promise<Response> {\n const start = performance.now();\n let out: any;\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,\n results: [ret!],\n time: elapsed,\n };\n }\n}\n\nexport async function getSchema(pg: PGlite): 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: any) {\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: any) {\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 {\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, i) => (\n <th key={i}>{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 <tr key={i}>\n {row.map((col, j) => (\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 <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 { defaultKeymap } from \"@codemirror/commands\";\nimport { keymap } from \"@codemirror/view\";\nimport { PostgreSQL } from \"@codemirror/lang-sql\";\nimport { type PGlite } from \"@electric-sql/pglite\";\nimport { makeSqlExt } from \"./sqlSupport\";\nimport type { Response } from \"./types\";\nimport { runQuery, getSchema } from \"./utils\";\nimport { ReplResponse } from \"./ReplResponse\";\nimport { xcodeDark, xcodeLight } from \"@uiw/codemirror-theme-xcode\";\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\nexport interface ReplProps {\n pg: PGlite;\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,\n border = false,\n lightTheme = xcodeLight,\n darkTheme = xcodeDark,\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 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 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 }\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 =\n 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],\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 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\n className=\"PGliteRepl-output\"\n ref={(ref) => (outputRef.current = ref)}\n >\n {loading && <div className=\"PGliteRepl-loading-msg\">Loading...</div>}\n {output.map((response, i) => (\n <div key={i}>\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","xcodeLight","xcodeDark","useRef","useCallback","useMemo","keymap","view","border"],"mappings":"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"}
1
+ {"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 PGlite } from '@electric-sql/pglite'\nimport { describe } from 'psql-describe'\nimport type { Results, Response } from './types'\n\nexport async function runQuery(query: string, pg: PGlite): 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: PGlite,\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(pg: PGlite): 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, i) => (\n <th key={i}>{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 <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 PGlite } from '@electric-sql/pglite'\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: PGlite\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,\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 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 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\n className=\"PGliteRepl-output\"\n ref={(ref) => (outputRef.current = ref)}\n >\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","useCallback","useMemo","keymap","view","border"],"mappings":"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"}
package/dist/style.css CHANGED
@@ -71,7 +71,7 @@
71
71
  display: block;
72
72
  width: 0.7em;
73
73
  text-align: center;
74
- content: "❮";
74
+ content: '❮';
75
75
  margin-right: 0.5em;
76
76
  color: var(--border-color);
77
77
  position: absolute;
@@ -87,7 +87,7 @@
87
87
  }
88
88
 
89
89
  .PGliteRepl-query::before {
90
- content: "❯";
90
+ content: '❯';
91
91
  }
92
92
 
93
93
  .PGliteRepl-table th {
@@ -147,7 +147,7 @@
147
147
  }
148
148
 
149
149
  .PGliteRepl-error::before {
150
- content: "!";
150
+ content: '!';
151
151
  color: #c33;
152
152
  font-weight: bold;
153
153
  }
@@ -55868,7 +55868,7 @@ function describeCompletionsAutoComplete(context) {
55868
55868
  };
55869
55869
  }
55870
55870
  function makeSqlExt(config2 = {}) {
55871
- let lang = config2.dialect || PostgreSQL;
55871
+ const lang = config2.dialect || PostgreSQL;
55872
55872
  return new LanguageSupport(lang.language, [
55873
55873
  // schemaCompletion(config),
55874
55874
  config2.schema ? lang.language.data.of({
@@ -62858,6 +62858,8 @@ function cellValue(value) {
62858
62858
  str = JSON.stringify(value);
62859
62859
  } else if (ArrayBuffer.isView(value)) {
62860
62860
  str = `${value.byteLength} bytes`;
62861
+ } else if (value === void 0) {
62862
+ str = "undefined";
62861
62863
  } else {
62862
62864
  str = value.toString();
62863
62865
  }
@@ -62875,7 +62877,13 @@ function ReplTable({ result }) {
62875
62877
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
62876
62878
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "PGliteRepl-table-scroll", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("table", { className: "PGliteRepl-table", children: [
62877
62879
  /* @__PURE__ */ jsxRuntimeExports.jsx("thead", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("tr", { children: result.fields.map((col, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("th", { children: col.name }, i)) }) }),
62878
- /* @__PURE__ */ jsxRuntimeExports.jsx("tbody", { children: rows.map((row, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("tr", { children: row.map((col, j) => /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: cellClass(col), children: cellValue(col) }, j)) }, i)) })
62880
+ /* @__PURE__ */ jsxRuntimeExports.jsx("tbody", { children: rows.map((row, i) => (
62881
+ // eslint-disable-next-line @eslint-react/no-array-index-key
62882
+ /* @__PURE__ */ jsxRuntimeExports.jsx("tr", { children: row.map((col, j) => (
62883
+ // eslint-disable-next-line @eslint-react/no-array-index-key
62884
+ /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: cellClass(col), children: cellValue(col) }, j)
62885
+ )) }, i)
62886
+ )) })
62879
62887
  ] }) }),
62880
62888
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "PGliteRepl-table-row-count", children: [
62881
62889
  result.rows.length > maxRows ? `${maxRows} of ` : "",
@@ -62998,108 +63006,153 @@ var createTheme = (_ref) => {
62998
63006
  var extension = [themeExtension, syntaxHighlighting(highlightStyle)];
62999
63007
  return extension;
63000
63008
  };
63001
- var defaultSettingsXcodeLight = {
63009
+ var defaultSettingsGithubLight = {
63002
63010
  background: "#fff",
63003
- foreground: "#3D3D3D",
63011
+ foreground: "#24292e",
63004
63012
  selection: "#BBDFFF",
63005
63013
  selectionMatch: "#BBDFFF",
63006
63014
  gutterBackground: "#fff",
63007
- gutterForeground: "#AFAFAF",
63008
- lineHighlight: "#d5e6ff69"
63015
+ gutterForeground: "#6e7781"
63009
63016
  };
63010
- function xcodeLightInit(options) {
63017
+ var githubLightStyle = [{
63018
+ tag: [tags.standard(tags.tagName), tags.tagName],
63019
+ color: "#116329"
63020
+ }, {
63021
+ tag: [tags.comment, tags.bracket],
63022
+ color: "#6a737d"
63023
+ }, {
63024
+ tag: [tags.className, tags.propertyName],
63025
+ color: "#6f42c1"
63026
+ }, {
63027
+ tag: [tags.variableName, tags.attributeName, tags.number, tags.operator],
63028
+ color: "#005cc5"
63029
+ }, {
63030
+ tag: [tags.keyword, tags.typeName, tags.typeOperator, tags.typeName],
63031
+ color: "#d73a49"
63032
+ }, {
63033
+ tag: [tags.string, tags.meta, tags.regexp],
63034
+ color: "#032f62"
63035
+ }, {
63036
+ tag: [tags.name, tags.quote],
63037
+ color: "#22863a"
63038
+ }, {
63039
+ tag: [tags.heading, tags.strong],
63040
+ color: "#24292e",
63041
+ fontWeight: "bold"
63042
+ }, {
63043
+ tag: [tags.emphasis],
63044
+ color: "#24292e",
63045
+ fontStyle: "italic"
63046
+ }, {
63047
+ tag: [tags.deleted],
63048
+ color: "#b31d28",
63049
+ backgroundColor: "ffeef0"
63050
+ }, {
63051
+ tag: [tags.atom, tags.bool, tags.special(tags.variableName)],
63052
+ color: "#e36209"
63053
+ }, {
63054
+ tag: [tags.url, tags.escape, tags.regexp, tags.link],
63055
+ color: "#032f62"
63056
+ }, {
63057
+ tag: tags.link,
63058
+ textDecoration: "underline"
63059
+ }, {
63060
+ tag: tags.strikethrough,
63061
+ textDecoration: "line-through"
63062
+ }, {
63063
+ tag: tags.invalid,
63064
+ color: "#cb2431"
63065
+ }];
63066
+ var githubLightInit = (options) => {
63011
63067
  var {
63012
63068
  theme: theme2 = "light",
63013
63069
  settings = {},
63014
63070
  styles = []
63015
- } = {};
63071
+ } = options || {};
63016
63072
  return createTheme({
63017
63073
  theme: theme2,
63018
- settings: _extends({}, defaultSettingsXcodeLight, settings),
63019
- styles: [{
63020
- tag: [tags.comment, tags.quote],
63021
- color: "#707F8D"
63022
- }, {
63023
- tag: [tags.typeName, tags.typeOperator],
63024
- color: "#aa0d91"
63025
- }, {
63026
- tag: [tags.keyword],
63027
- color: "#aa0d91",
63028
- fontWeight: "bold"
63029
- }, {
63030
- tag: [tags.string, tags.meta],
63031
- color: "#D23423"
63032
- }, {
63033
- tag: [tags.name],
63034
- color: "#032f62"
63035
- }, {
63036
- tag: [tags.typeName],
63037
- color: "#522BB2"
63038
- }, {
63039
- tag: [tags.variableName],
63040
- color: "#23575C"
63041
- }, {
63042
- tag: [tags.definition(tags.variableName)],
63043
- color: "#327A9E"
63044
- }, {
63045
- tag: [tags.regexp, tags.link],
63046
- color: "#0e0eff"
63047
- }, ...styles]
63074
+ settings: _extends({}, defaultSettingsGithubLight, settings),
63075
+ styles: [...githubLightStyle, ...styles]
63048
63076
  });
63049
- }
63050
- var xcodeLight = xcodeLightInit();
63051
- var defaultSettingsXcodeDark = {
63052
- background: "#292A30",
63053
- foreground: "#CECFD0",
63054
- caret: "#fff",
63055
- selection: "#727377",
63056
- selectionMatch: "#727377",
63057
- lineHighlight: "#ffffff0f"
63058
63077
  };
63059
- var xcodeDarkInit = (options) => {
63078
+ var githubLight = githubLightInit();
63079
+ var defaultSettingsGithubDark = {
63080
+ background: "#0d1117",
63081
+ foreground: "#c9d1d9",
63082
+ caret: "#c9d1d9",
63083
+ selection: "#003d73",
63084
+ selectionMatch: "#003d73",
63085
+ lineHighlight: "#36334280"
63086
+ };
63087
+ var githubDarkStyle = [{
63088
+ tag: [tags.standard(tags.tagName), tags.tagName],
63089
+ color: "#7ee787"
63090
+ }, {
63091
+ tag: [tags.comment, tags.bracket],
63092
+ color: "#8b949e"
63093
+ }, {
63094
+ tag: [tags.className, tags.propertyName],
63095
+ color: "#d2a8ff"
63096
+ }, {
63097
+ tag: [tags.variableName, tags.attributeName, tags.number, tags.operator],
63098
+ color: "#79c0ff"
63099
+ }, {
63100
+ tag: [tags.keyword, tags.typeName, tags.typeOperator, tags.typeName],
63101
+ color: "#ff7b72"
63102
+ }, {
63103
+ tag: [tags.string, tags.meta, tags.regexp],
63104
+ color: "#a5d6ff"
63105
+ }, {
63106
+ tag: [tags.name, tags.quote],
63107
+ color: "#7ee787"
63108
+ }, {
63109
+ tag: [tags.heading, tags.strong],
63110
+ color: "#d2a8ff",
63111
+ fontWeight: "bold"
63112
+ }, {
63113
+ tag: [tags.emphasis],
63114
+ color: "#d2a8ff",
63115
+ fontStyle: "italic"
63116
+ }, {
63117
+ tag: [tags.deleted],
63118
+ color: "#ffdcd7",
63119
+ backgroundColor: "ffeef0"
63120
+ }, {
63121
+ tag: [tags.atom, tags.bool, tags.special(tags.variableName)],
63122
+ color: "#ffab70"
63123
+ }, {
63124
+ tag: tags.link,
63125
+ textDecoration: "underline"
63126
+ }, {
63127
+ tag: tags.strikethrough,
63128
+ textDecoration: "line-through"
63129
+ }, {
63130
+ tag: tags.invalid,
63131
+ color: "#f97583"
63132
+ }];
63133
+ var githubDarkInit = (options) => {
63060
63134
  var {
63061
63135
  theme: theme2 = "dark",
63062
63136
  settings = {},
63063
63137
  styles = []
63064
- } = {};
63138
+ } = options || {};
63065
63139
  return createTheme({
63066
63140
  theme: theme2,
63067
- settings: _extends({}, defaultSettingsXcodeDark, settings),
63068
- styles: [{
63069
- tag: [tags.comment, tags.quote],
63070
- color: "#7F8C98"
63071
- }, {
63072
- tag: [tags.keyword],
63073
- color: "#FF7AB2",
63074
- fontWeight: "bold"
63075
- }, {
63076
- tag: [tags.string, tags.meta],
63077
- color: "#FF8170"
63078
- }, {
63079
- tag: [tags.typeName],
63080
- color: "#DABAFF"
63081
- }, {
63082
- tag: [tags.definition(tags.variableName)],
63083
- color: "#6BDFFF"
63084
- }, {
63085
- tag: [tags.name],
63086
- color: "#6BAA9F"
63087
- }, {
63088
- tag: [tags.variableName],
63089
- color: "#ACF2E4"
63090
- }, {
63091
- tag: [tags.regexp, tags.link],
63092
- color: "#FF8170"
63093
- }, ...styles]
63141
+ settings: _extends({}, defaultSettingsGithubDark, settings),
63142
+ styles: [...githubDarkStyle, ...styles]
63094
63143
  });
63095
63144
  };
63096
- var xcodeDark = xcodeDarkInit();
63145
+ var githubDark = githubDarkInit();
63097
63146
  const baseKeymap = defaultKeymap.filter((key) => key.key !== "Enter");
63147
+ const defaultLightThemeInit = githubLightInit;
63148
+ const defaultLightTheme = githubLight;
63149
+ const defaultDarkThemeInit = githubDarkInit;
63150
+ const defaultDarkTheme = githubDark;
63098
63151
  function Repl({
63099
63152
  pg,
63100
63153
  border = false,
63101
- lightTheme = xcodeLight,
63102
- darkTheme: darkTheme2 = xcodeDark,
63154
+ lightTheme = defaultLightTheme,
63155
+ darkTheme: darkTheme2 = defaultDarkTheme,
63103
63156
  theme: theme2 = "auto",
63104
63157
  showTime = false,
63105
63158
  disableUpdateSchema = false
@@ -63148,6 +63201,7 @@ function Repl({
63148
63201
  setTimeout(() => {
63149
63202
  extractStyles();
63150
63203
  }, 0);
63204
+ return;
63151
63205
  }
63152
63206
  }, [theme2, lightTheme, darkTheme2]);
63153
63207
  const onChange = reactExports.useCallback((val, _viewUpdate) => {
@@ -63251,11 +63305,14 @@ function Repl({
63251
63305
  defaultSchema: "public"
63252
63306
  })
63253
63307
  ],
63254
- [pg, schema, value, output]
63308
+ [pg, schema, value, output, disableUpdateSchema]
63255
63309
  );
63256
63310
  const extractStyles = () => {
63257
- var _a2;
63258
- const cmEditorEl = (_a2 = rcm.current) == null ? void 0 : _a2.editor.querySelector(".cm-editor");
63311
+ var _a2, _b;
63312
+ const cmEditorEl = (_b = (_a2 = rcm.current) == null ? void 0 : _a2.editor) == null ? void 0 : _b.querySelector(".cm-editor");
63313
+ if (!cmEditorEl) {
63314
+ throw new Error("No CodeMirror editor found");
63315
+ }
63259
63316
  const gutterEl = cmEditorEl.querySelector(".cm-gutters");
63260
63317
  const cmEditorElComputedStyles = window.getComputedStyle(cmEditorEl);
63261
63318
  const foregroundColor = cmEditorElComputedStyles.color;
@@ -63289,7 +63346,7 @@ function Repl({
63289
63346
  ref: (ref) => outputRef.current = ref,
63290
63347
  children: [
63291
63348
  loading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "PGliteRepl-loading-msg", children: "Loading..." }),
63292
- output.map((response, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(ReplResponse, { response: response || [], showTime }) }, i))
63349
+ output.map((response) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(ReplResponse, { response: response || [], showTime }) }, `${response.query}-${response.time}`))
63293
63350
  ]
63294
63351
  }
63295
63352
  ),
@@ -63318,7 +63375,7 @@ function Repl({
63318
63375
  }
63319
63376
  );
63320
63377
  }
63321
- const css = '.PGliteRepl-root {\n --fg: var(--PGliteRepl-foreground-color);\n --bg: var(--PGliteRepl-background-color);\n --border: var(--PGliteRepl-border);\n --border-color: var(--PGliteRepl-border-color);\n --font-size: var(--PGliteRepl-font-size, 12px);\n\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n font-size: var(--font-size);\n color: var(--fg);\n background-color: var(--bg);\n}\n\n.PGliteRepl-loading-msg {\n opacity: 0.5;\n}\n\n.PGliteRepl-root table {\n font-size: var(--font-size);\n}\n\n.PGliteRepl-root-border {\n border: var(--border);\n}\n\n.PGliteRepl-output {\n flex: 1;\n overflow-y: auto;\n padding: 0.5em 0 0.5em 0.5em;\n border-bottom: var(--border);\n}\n\n.PGliteRepl-root hr {\n margin: 0.5em 0;\n border: none;\n border-top: var(--border);\n}\n\n.PGliteRepl-input {\n display: flex;\n min-height: 60px;\n max-height: 50%;\n width: 100%;\n}\n\n.PGliteRepl-input .cm-editor.cm-focused {\n outline: none;\n}\n\n.PGliteRepl-input-loading {\n pointer-events: none;\n}\n\n.PGliteRepl-table-scroll {\n overflow-x: auto;\n}\n\n.PGliteRepl-table {\n border-collapse: collapse;\n}\n\n.PGliteRepl-line {\n margin: 0 0 0 1em;\n position: relative;\n}\n\n.PGliteRepl-line::before {\n display: block;\n width: 0.7em;\n text-align: center;\n content: "❮";\n margin-right: 0.5em;\n color: var(--border-color);\n position: absolute;\n left: -1em;\n}\n\n.PGliteRepl-line + .PGliteRepl-line {\n margin-top: 0.25em;\n}\n\n.PGliteRepl-query {\n margin: 0 0 0.25em 1em;\n}\n\n.PGliteRepl-query::before {\n content: "❯";\n}\n\n.PGliteRepl-table th {\n text-align: center;\n font-weight: 600;\n}\n\n.PGliteRepl-table td {\n text-align: left;\n max-width: 400px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.PGliteRepl-table .PGliteRepl-number {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.PGliteRepl-table .PGliteRepl-boolean {\n text-align: center;\n}\n\n.PGliteRepl-table .PGliteRepl-json {\n font-family: monospace;\n}\n\n.PGliteRepl-table th,\n.PGliteRepl-table td {\n padding: 0 0.2em;\n border: var(--border);\n}\n\n.PGliteRepl-divider {\n font-size: 9px;\n display: flex;\n align-items: center;\n color: var(--border-color);\n padding-right: 0.5em;\n}\n\n.PGliteRepl-divider hr {\n margin: 0;\n flex-grow: 1;\n}\n\n.PGliteRepl-time {\n margin: 0 0.5em;\n}\n\n.PGliteRepl-null {\n color: var(--border-color);\n}\n\n.PGliteRepl-error {\n color: #c33;\n}\n\n.PGliteRepl-error::before {\n content: "!";\n color: #c33;\n font-weight: bold;\n}\n\n.PGliteRepl-table-row-count a {\n text-decoration: none;\n}\n';
63378
+ const css = ".PGliteRepl-root {\n --fg: var(--PGliteRepl-foreground-color);\n --bg: var(--PGliteRepl-background-color);\n --border: var(--PGliteRepl-border);\n --border-color: var(--PGliteRepl-border-color);\n --font-size: var(--PGliteRepl-font-size, 12px);\n\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n font-size: var(--font-size);\n color: var(--fg);\n background-color: var(--bg);\n}\n\n.PGliteRepl-loading-msg {\n opacity: 0.5;\n}\n\n.PGliteRepl-root table {\n font-size: var(--font-size);\n}\n\n.PGliteRepl-root-border {\n border: var(--border);\n}\n\n.PGliteRepl-output {\n flex: 1;\n overflow-y: auto;\n padding: 0.5em 0 0.5em 0.5em;\n border-bottom: var(--border);\n}\n\n.PGliteRepl-root hr {\n margin: 0.5em 0;\n border: none;\n border-top: var(--border);\n}\n\n.PGliteRepl-input {\n display: flex;\n min-height: 60px;\n max-height: 50%;\n width: 100%;\n}\n\n.PGliteRepl-input .cm-editor.cm-focused {\n outline: none;\n}\n\n.PGliteRepl-input-loading {\n pointer-events: none;\n}\n\n.PGliteRepl-table-scroll {\n overflow-x: auto;\n}\n\n.PGliteRepl-table {\n border-collapse: collapse;\n}\n\n.PGliteRepl-line {\n margin: 0 0 0 1em;\n position: relative;\n}\n\n.PGliteRepl-line::before {\n display: block;\n width: 0.7em;\n text-align: center;\n content: '❮';\n margin-right: 0.5em;\n color: var(--border-color);\n position: absolute;\n left: -1em;\n}\n\n.PGliteRepl-line + .PGliteRepl-line {\n margin-top: 0.25em;\n}\n\n.PGliteRepl-query {\n margin: 0 0 0.25em 1em;\n}\n\n.PGliteRepl-query::before {\n content: '❯';\n}\n\n.PGliteRepl-table th {\n text-align: center;\n font-weight: 600;\n}\n\n.PGliteRepl-table td {\n text-align: left;\n max-width: 400px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.PGliteRepl-table .PGliteRepl-number {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.PGliteRepl-table .PGliteRepl-boolean {\n text-align: center;\n}\n\n.PGliteRepl-table .PGliteRepl-json {\n font-family: monospace;\n}\n\n.PGliteRepl-table th,\n.PGliteRepl-table td {\n padding: 0 0.2em;\n border: var(--border);\n}\n\n.PGliteRepl-divider {\n font-size: 9px;\n display: flex;\n align-items: center;\n color: var(--border-color);\n padding-right: 0.5em;\n}\n\n.PGliteRepl-divider hr {\n margin: 0;\n flex-grow: 1;\n}\n\n.PGliteRepl-time {\n margin: 0 0.5em;\n}\n\n.PGliteRepl-null {\n color: var(--border-color);\n}\n\n.PGliteRepl-error {\n color: #c33;\n}\n\n.PGliteRepl-error::before {\n content: '!';\n color: #c33;\n font-weight: bold;\n}\n\n.PGliteRepl-table-row-count a {\n text-decoration: none;\n}\n";
63322
63379
  class PGliteREPL extends HTMLElement {
63323
63380
  constructor() {
63324
63381
  super();
@@ -63328,6 +63385,7 @@ class PGliteREPL extends HTMLElement {
63328
63385
  __privateAdd(this, _lightTheme);
63329
63386
  __privateAdd(this, _darkTheme);
63330
63387
  __privateSet(this, _mountPoint, document.createElement("div"));
63388
+ __privateGet(this, _mountPoint).classList.add("PGliteRepl-root");
63331
63389
  const shadowRoot = this.attachShadow({ mode: "open" });
63332
63390
  const style = document.createElement("style");
63333
63391
  style.textContent = css;
@@ -63397,6 +63455,10 @@ _lightTheme = new WeakMap();
63397
63455
  _darkTheme = new WeakMap();
63398
63456
  customElements.define("pglite-repl", PGliteREPL);
63399
63457
  export {
63400
- PGliteREPL
63458
+ PGliteREPL,
63459
+ defaultDarkTheme,
63460
+ defaultDarkThemeInit,
63461
+ defaultLightTheme,
63462
+ defaultLightThemeInit
63401
63463
  };
63402
63464
  //# sourceMappingURL=Repl.js.map