@electric-sql/pglite-repl 0.2.0 → 0.2.2

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.
package/dist/Repl.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Extension } from '@uiw/react-codemirror';
2
2
  import { CreateThemeOptions } from '@uiw/codemirror-themes';
3
- import { PGlite } from '@electric-sql/pglite';
3
+ import { PGliteInterface } from '@electric-sql/pglite';
4
4
  export type ReplTheme = 'light' | 'dark' | 'auto';
5
5
  type ThemeInit = (options?: Partial<CreateThemeOptions>) => Extension;
6
6
  export declare const defaultLightThemeInit: ThemeInit;
@@ -8,7 +8,7 @@ export declare const defaultLightTheme: Extension;
8
8
  export declare const defaultDarkThemeInit: ThemeInit;
9
9
  export declare const defaultDarkTheme: Extension;
10
10
  export interface ReplProps {
11
- pg: PGlite;
11
+ pg?: PGliteInterface;
12
12
  border?: boolean;
13
13
  lightTheme?: Extension;
14
14
  darkTheme?: Extension;
@@ -16,5 +16,5 @@ export interface ReplProps {
16
16
  showTime?: boolean;
17
17
  disableUpdateSchema?: boolean;
18
18
  }
19
- export declare function Repl({ pg, border, lightTheme, darkTheme, theme, showTime, disableUpdateSchema, }: ReplProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function Repl({ pg: pgProp, border, lightTheme, darkTheme, theme, showTime, disableUpdateSchema, }: ReplProps): import("react/jsx-runtime").JSX.Element;
20
20
  export {};
package/dist/Repl.js CHANGED
@@ -5,6 +5,7 @@ import CodeMirror from "@uiw/react-codemirror";
5
5
  import { defaultKeymap } from "@codemirror/commands";
6
6
  import { keymap } from "@codemirror/view";
7
7
  import { PostgreSQL, schemaCompletionSource, keywordCompletionSource } from "@codemirror/lang-sql";
8
+ import { usePGlite } from "@electric-sql/pglite-react";
8
9
  import { LanguageSupport } from "@codemirror/language";
9
10
  import { describe } from "psql-describe";
10
11
  import { githubLightInit, githubLight, githubDarkInit, githubDark } from "@uiw/codemirror-theme-github";
@@ -449,7 +450,7 @@ function ReplTable({ result }) {
449
450
  };
450
451
  return /* @__PURE__ */ jsxs(Fragment, { children: [
451
452
  /* @__PURE__ */ jsx("div", { className: "PGliteRepl-table-scroll", children: /* @__PURE__ */ jsxs("table", { className: "PGliteRepl-table", children: [
452
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: result.fields.map((col, i) => /* @__PURE__ */ jsx("th", { children: col.name }, i)) }) }),
453
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: result.fields.map((col) => /* @__PURE__ */ jsx("th", { children: col.name }, col.name)) }) }),
453
454
  /* @__PURE__ */ jsx("tbody", { children: rows.map((row, i) => (
454
455
  // eslint-disable-next-line @eslint-react/no-array-index-key
455
456
  /* @__PURE__ */ jsx("tr", { children: row.map((col, j) => (
@@ -489,7 +490,10 @@ function ReplResponse({
489
490
  if (response.error) {
490
491
  out = /* @__PURE__ */ jsx("div", { className: "PGliteRepl-line PGliteRepl-error", children: response.error });
491
492
  } else {
492
- out = /* @__PURE__ */ jsx(Fragment, { children: (_a = response.results) == null ? void 0 : _a.map((result, i) => /* @__PURE__ */ jsx(OutLine, { result }, i)) });
493
+ out = /* @__PURE__ */ jsx(Fragment, { children: (_a = response.results) == null ? void 0 : _a.map((result, i) => (
494
+ // eslint-disable-next-line @eslint-react/no-array-index-key
495
+ /* @__PURE__ */ jsx(OutLine, { result }, i)
496
+ )) });
493
497
  }
494
498
  return /* @__PURE__ */ jsxs(Fragment, { children: [
495
499
  /* @__PURE__ */ jsx("pre", { className: "PGliteRepl-line PGliteRepl-query", children: response.query }),
@@ -510,7 +514,7 @@ const defaultLightTheme = githubLight;
510
514
  const defaultDarkThemeInit = githubDarkInit;
511
515
  const defaultDarkTheme = githubDark;
512
516
  function Repl({
513
- pg,
517
+ pg: pgProp,
514
518
  border = false,
515
519
  lightTheme = defaultLightTheme,
516
520
  darkTheme = defaultDarkTheme,
@@ -530,6 +534,7 @@ function Repl({
530
534
  theme === "dark" ? darkTheme : lightTheme
531
535
  );
532
536
  const [styles, setStyles] = useState({});
537
+ const pg = usePGlite(pgProp);
533
538
  useEffect(() => {
534
539
  let ignore = false;
535
540
  const init = async () => {
package/dist/Repl.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Repl.js","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":["border"],"mappings":"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"}
1
+ {"version":3,"file":"Repl.js","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 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":["border"],"mappings":"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"}
package/dist/Repl.umd.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  (function(global, factory) {
2
- typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react/jsx-runtime"), require("react"), require("@uiw/react-codemirror"), require("@codemirror/commands"), require("@codemirror/view"), require("@codemirror/lang-sql"), require("@codemirror/language"), require("psql-describe"), require("@uiw/codemirror-theme-github")) : typeof define === "function" && define.amd ? define(["exports", "react/jsx-runtime", "react", "@uiw/react-codemirror", "@codemirror/commands", "@codemirror/view", "@codemirror/lang-sql", "@codemirror/language", "psql-describe", "@uiw/codemirror-theme-github"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.PGliteREPL = {}, global.jsxRuntime, global.react, global.CodeMirror, global.commands, global.view, global.langSql, global.language, global.psqlDescribe, global.codemirrorThemeGithub));
3
- })(this, function(exports2, jsxRuntime, react, CodeMirror, commands, view, langSql, language, psqlDescribe, codemirrorThemeGithub) {
2
+ typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react/jsx-runtime"), require("react"), require("@uiw/react-codemirror"), require("@codemirror/commands"), require("@codemirror/view"), require("@codemirror/lang-sql"), require("@electric-sql/pglite-react"), require("@codemirror/language"), require("psql-describe"), require("@uiw/codemirror-theme-github")) : typeof define === "function" && define.amd ? define(["exports", "react/jsx-runtime", "react", "@uiw/react-codemirror", "@codemirror/commands", "@codemirror/view", "@codemirror/lang-sql", "@electric-sql/pglite-react", "@codemirror/language", "psql-describe", "@uiw/codemirror-theme-github"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.PGliteREPL = {}, global.jsxRuntime, global.react, global.CodeMirror, global.commands, global.view, global.langSql, global.pgliteReact, global.language, global.psqlDescribe, global.codemirrorThemeGithub));
3
+ })(this, function(exports2, jsxRuntime, react, CodeMirror, commands, view, langSql, pgliteReact, language, psqlDescribe, codemirrorThemeGithub) {
4
4
  "use strict";
5
5
  const describeCompletions = [
6
6
  {
@@ -443,7 +443,7 @@
443
443
  };
444
444
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
445
445
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "PGliteRepl-table-scroll", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "PGliteRepl-table", children: [
446
- /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { children: result.fields.map((col, i) => /* @__PURE__ */ jsxRuntime.jsx("th", { children: col.name }, i)) }) }),
446
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { children: result.fields.map((col) => /* @__PURE__ */ jsxRuntime.jsx("th", { children: col.name }, col.name)) }) }),
447
447
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row, i) => (
448
448
  // eslint-disable-next-line @eslint-react/no-array-index-key
449
449
  /* @__PURE__ */ jsxRuntime.jsx("tr", { children: row.map((col, j) => (
@@ -483,7 +483,10 @@
483
483
  if (response.error) {
484
484
  out = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "PGliteRepl-line PGliteRepl-error", children: response.error });
485
485
  } else {
486
- out = /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: (_a = response.results) == null ? void 0 : _a.map((result, i) => /* @__PURE__ */ jsxRuntime.jsx(OutLine, { result }, i)) });
486
+ out = /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: (_a = response.results) == null ? void 0 : _a.map((result, i) => (
487
+ // eslint-disable-next-line @eslint-react/no-array-index-key
488
+ /* @__PURE__ */ jsxRuntime.jsx(OutLine, { result }, i)
489
+ )) });
487
490
  }
488
491
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
489
492
  /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "PGliteRepl-line PGliteRepl-query", children: response.query }),
@@ -504,7 +507,7 @@
504
507
  const defaultDarkThemeInit = codemirrorThemeGithub.githubDarkInit;
505
508
  const defaultDarkTheme = codemirrorThemeGithub.githubDark;
506
509
  function Repl({
507
- pg,
510
+ pg: pgProp,
508
511
  border = false,
509
512
  lightTheme = defaultLightTheme,
510
513
  darkTheme = defaultDarkTheme,
@@ -524,6 +527,7 @@
524
527
  theme === "dark" ? darkTheme : lightTheme
525
528
  );
526
529
  const [styles, setStyles] = react.useState({});
530
+ const pg = pgliteReact.usePGlite(pgProp);
527
531
  react.useEffect(() => {
528
532
  let ignore = false;
529
533
  const init = async () => {
@@ -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 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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"}
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 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 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","usePGlite","useCallback","useMemo","keymap","view","border"],"mappings":"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"}