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

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,9 +1,14 @@
1
1
  import { Extension } from '@uiw/react-codemirror';
2
- import { PGlite } from '@electric-sql/pglite';
3
-
4
- export type ReplTheme = "light" | "dark" | "auto";
2
+ import { CreateThemeOptions } from '@uiw/codemirror-themes';
3
+ import { PGliteInterface } from '@electric-sql/pglite';
4
+ export type ReplTheme = 'light' | 'dark' | 'auto';
5
+ type ThemeInit = (options?: Partial<CreateThemeOptions>) => Extension;
6
+ export declare const defaultLightThemeInit: ThemeInit;
7
+ export declare const defaultLightTheme: Extension;
8
+ export declare const defaultDarkThemeInit: ThemeInit;
9
+ export declare const defaultDarkTheme: Extension;
5
10
  export interface ReplProps {
6
- pg: PGlite;
11
+ pg?: PGliteInterface;
7
12
  border?: boolean;
8
13
  lightTheme?: Extension;
9
14
  darkTheme?: Extension;
@@ -11,4 +16,5 @@ export interface ReplProps {
11
16
  showTime?: boolean;
12
17
  disableUpdateSchema?: boolean;
13
18
  }
14
- 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
+ export {};
package/dist/Repl.js CHANGED
@@ -5,9 +5,10 @@ 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
- import { xcodeLight, xcodeDark } from "@uiw/codemirror-theme-xcode";
11
+ import { githubLightInit, githubLight, githubDarkInit, githubDark } from "@uiw/codemirror-theme-github";
11
12
  const describeCompletions = [
12
13
  {
13
14
  label: "\\d",
@@ -295,7 +296,7 @@ function describeCompletionsAutoComplete(context) {
295
296
  };
296
297
  }
297
298
  function makeSqlExt(config = {}) {
298
- let lang = config.dialect || PostgreSQL;
299
+ const lang = config.dialect || PostgreSQL;
299
300
  return new LanguageSupport(lang.language, [
300
301
  // schemaCompletion(config),
301
302
  config.schema ? lang.language.data.of({
@@ -431,6 +432,8 @@ function cellValue(value) {
431
432
  str = JSON.stringify(value);
432
433
  } else if (ArrayBuffer.isView(value)) {
433
434
  str = `${value.byteLength} bytes`;
435
+ } else if (value === void 0) {
436
+ str = "undefined";
434
437
  } else {
435
438
  str = value.toString();
436
439
  }
@@ -447,8 +450,14 @@ function ReplTable({ result }) {
447
450
  };
448
451
  return /* @__PURE__ */ jsxs(Fragment, { children: [
449
452
  /* @__PURE__ */ jsx("div", { className: "PGliteRepl-table-scroll", children: /* @__PURE__ */ jsxs("table", { className: "PGliteRepl-table", children: [
450
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: result.fields.map((col, i) => /* @__PURE__ */ jsx("th", { children: col.name }, i)) }) }),
451
- /* @__PURE__ */ jsx("tbody", { children: rows.map((row, i) => /* @__PURE__ */ jsx("tr", { children: row.map((col, j) => /* @__PURE__ */ jsx("td", { className: cellClass(col), children: cellValue(col) }, j)) }, i)) })
453
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: result.fields.map((col) => /* @__PURE__ */ jsx("th", { children: col.name }, col.name)) }) }),
454
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((row, i) => (
455
+ // eslint-disable-next-line @eslint-react/no-array-index-key
456
+ /* @__PURE__ */ jsx("tr", { children: row.map((col, j) => (
457
+ // eslint-disable-next-line @eslint-react/no-array-index-key
458
+ /* @__PURE__ */ jsx("td", { className: cellClass(col), children: cellValue(col) }, j)
459
+ )) }, i)
460
+ )) })
452
461
  ] }) }),
453
462
  /* @__PURE__ */ jsxs("div", { className: "PGliteRepl-table-row-count", children: [
454
463
  result.rows.length > maxRows ? `${maxRows} of ` : "",
@@ -481,7 +490,10 @@ function ReplResponse({
481
490
  if (response.error) {
482
491
  out = /* @__PURE__ */ jsx("div", { className: "PGliteRepl-line PGliteRepl-error", children: response.error });
483
492
  } else {
484
- 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
+ )) });
485
497
  }
486
498
  return /* @__PURE__ */ jsxs(Fragment, { children: [
487
499
  /* @__PURE__ */ jsx("pre", { className: "PGliteRepl-line PGliteRepl-query", children: response.query }),
@@ -497,11 +509,15 @@ function ReplResponse({
497
509
  ] });
498
510
  }
499
511
  const baseKeymap = defaultKeymap.filter((key) => key.key !== "Enter");
512
+ const defaultLightThemeInit = githubLightInit;
513
+ const defaultLightTheme = githubLight;
514
+ const defaultDarkThemeInit = githubDarkInit;
515
+ const defaultDarkTheme = githubDark;
500
516
  function Repl({
501
- pg,
517
+ pg: pgProp,
502
518
  border = false,
503
- lightTheme = xcodeLight,
504
- darkTheme = xcodeDark,
519
+ lightTheme = defaultLightTheme,
520
+ darkTheme = defaultDarkTheme,
505
521
  theme = "auto",
506
522
  showTime = false,
507
523
  disableUpdateSchema = false
@@ -518,6 +534,7 @@ function Repl({
518
534
  theme === "dark" ? darkTheme : lightTheme
519
535
  );
520
536
  const [styles, setStyles] = useState({});
537
+ const pg = usePGlite(pgProp);
521
538
  useEffect(() => {
522
539
  let ignore = false;
523
540
  const init = async () => {
@@ -550,6 +567,7 @@ function Repl({
550
567
  setTimeout(() => {
551
568
  extractStyles();
552
569
  }, 0);
570
+ return;
553
571
  }
554
572
  }, [theme, lightTheme, darkTheme]);
555
573
  const onChange = useCallback((val, _viewUpdate) => {
@@ -653,11 +671,14 @@ function Repl({
653
671
  defaultSchema: "public"
654
672
  })
655
673
  ],
656
- [pg, schema, value, output]
674
+ [pg, schema, value, output, disableUpdateSchema]
657
675
  );
658
676
  const extractStyles = () => {
659
- var _a;
660
- const cmEditorEl = (_a = rcm.current) == null ? void 0 : _a.editor.querySelector(".cm-editor");
677
+ var _a, _b;
678
+ const cmEditorEl = (_b = (_a = rcm.current) == null ? void 0 : _a.editor) == null ? void 0 : _b.querySelector(".cm-editor");
679
+ if (!cmEditorEl) {
680
+ throw new Error("No CodeMirror editor found");
681
+ }
661
682
  const gutterEl = cmEditorEl.querySelector(".cm-gutters");
662
683
  const cmEditorElComputedStyles = window.getComputedStyle(cmEditorEl);
663
684
  const foregroundColor = cmEditorElComputedStyles.color;
@@ -691,7 +712,7 @@ function Repl({
691
712
  ref: (ref) => outputRef.current = ref,
692
713
  children: [
693
714
  loading && /* @__PURE__ */ jsx("div", { className: "PGliteRepl-loading-msg", children: "Loading..." }),
694
- output.map((response, i) => /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ReplResponse, { response: response || [], showTime }) }, i))
715
+ output.map((response) => /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ReplResponse, { response: response || [], showTime }) }, `${response.query}-${response.time}`))
695
716
  ]
696
717
  }
697
718
  ),
@@ -721,6 +742,10 @@ function Repl({
721
742
  );
722
743
  }
723
744
  export {
724
- Repl
745
+ Repl,
746
+ defaultDarkTheme,
747
+ defaultDarkThemeInit,
748
+ defaultLightTheme,
749
+ defaultLightThemeInit
725
750
  };
726
751
  //# sourceMappingURL=Repl.js.map
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 let lang = config.dialect || PostgreSQL;\n return new LanguageSupport(lang.language, [\n // schemaCompletion(config),\n config.schema\n ? lang.language.data.of({\n autocomplete: schemaCompletionSource(config),\n })\n : [],\n // keywordCompletion(lang, !!config.upperCaseKeywords)\n lang.language.data.of({\n autocomplete: keywordCompletionSource(lang, !!config.upperCaseKeywords),\n }),\n lang.language.data.of({\n autocomplete: describeCompletionsAutoComplete,\n }),\n ]);\n}\n","import { type PGlite } from \"@electric-sql/pglite\";\nimport { describe } from \"psql-describe\";\nimport type { Results, Response } from \"./types\";\n\nexport async function runQuery(query: string, pg: PGlite): Promise<Response> {\n if (query.trim().toLowerCase().startsWith(\"\\\\\")) {\n return runDescribe(query, pg);\n }\n const start = performance.now();\n try {\n const result = await pg.exec(query, {\n rowMode: \"array\",\n });\n const elapsed = performance.now() - start;\n return {\n query,\n results: result as any[],\n time: elapsed,\n };\n } catch (err) {\n return {\n query,\n error: (err as Error).message,\n time: performance.now() - start,\n };\n }\n}\n\nexport async function runDescribe(\n query: string,\n pg: PGlite,\n): Promise<Response> {\n const start = performance.now();\n let out: any;\n let ret: Results;\n const { promise, cancel: _cancel } = describe(\n query,\n \"postgres\",\n async (sql) => {\n ret = (await pg.exec(sql, { rowMode: \"array\" }))[0] as Results;\n return {\n rows: ret.rows,\n fields: ret.fields,\n rowCount: ret.rows.length,\n };\n },\n (output) => {\n out = output;\n },\n );\n await promise;\n const elapsed = performance.now() - start;\n\n if (!out) {\n return {\n query,\n error: \"No output\",\n time: elapsed,\n };\n } else if (typeof out === \"string\") {\n if (out.startsWith(\"ERROR:\")) {\n return {\n query,\n error: out,\n time: elapsed,\n };\n } else {\n return {\n query,\n text: out,\n time: elapsed,\n };\n }\n } else {\n return {\n query,\n text: out.title,\n results: [ret!],\n time: elapsed,\n };\n }\n}\n\nexport async function getSchema(pg: PGlite): Promise<Record<string, string[]>> {\n const ret = await pg.query<{\n schema: string;\n table: string;\n columns: string;\n }>(`\n SELECT \n table_schema AS schema,\n table_name AS table,\n array_agg(column_name) AS columns\n FROM \n information_schema.columns\n GROUP BY \n table_schema, table_name\n ORDER BY \n table_schema, table_name;\n `);\n const schema: Record<string, string[]> = {};\n for (const row of ret.rows) {\n schema[`${row.schema}.${row.table}`] = Array.isArray(row.columns)\n ? row.columns\n : row.columns.slice(1, -1).split(\",\");\n }\n return schema;\n}\n","import { useState, useEffect } from \"react\";\nimport type { Results } from \"./types\";\n\nconst tableRowIncrement = 100;\nconst maxCellLength = 200;\n\nfunction cellClass(value: any) {\n if (value === null) {\n return \"PGliteRepl-null\";\n } else if (typeof value === \"number\") {\n return \"PGliteRepl-number\";\n } else if (typeof value === \"boolean\") {\n return \"PGliteRepl-boolean\";\n } else {\n return \"\";\n }\n}\n\nfunction cellValue(value: any) {\n let str: string;\n if (value === null) {\n str = \"null\";\n } else if (typeof value === \"number\") {\n str = value.toString();\n } else if (typeof value === \"boolean\") {\n str = value ? \"true\" : \"false\";\n } else if (value instanceof Date) {\n str = value.toISOString();\n } else if (Array.isArray(value)) {\n str = `[${value.map(cellValue).join(\", \")}]`;\n } else if (typeof value === \"object\") {\n str = JSON.stringify(value);\n } else if (ArrayBuffer.isView(value)) {\n str = `${value.byteLength} bytes`;\n } else {\n str = value.toString();\n }\n return str.length > maxCellLength ? str.slice(0, maxCellLength) + \"…\" : str;\n}\n\nexport function ReplTable({ result }: { result: Results }) {\n const [maxRows, setMaxRows] = useState(tableRowIncrement);\n const rows = result.rows.slice(0, maxRows);\n\n useEffect(() => {\n // Reset maxRows when the result changes\n setMaxRows(tableRowIncrement);\n }, [result]);\n\n const showMore = () => {\n setMaxRows((prev) => prev + tableRowIncrement);\n };\n\n return (\n <>\n <div className=\"PGliteRepl-table-scroll\">\n <table className=\"PGliteRepl-table\">\n <thead>\n <tr>\n {result.fields.map((col, i) => (\n <th key={i}>{col.name}</th>\n ))}\n </tr>\n {/* <tr>\n {result.fields.map((col, i) => (\n <th key={i}>{col.dataTypeID}</th>\n ))}\n </tr> */}\n </thead>\n <tbody>\n {rows.map((row, i) => (\n <tr key={i}>\n {row.map((col, j) => (\n <td key={j} className={cellClass(col)}>\n {cellValue(col)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <div className=\"PGliteRepl-table-row-count\">\n {result.rows.length > maxRows ? `${maxRows} of ` : \"\"}\n {result.rows.length} rows{\" \"}\n {result.rows.length > maxRows && (\n <a\n href=\"\"\n onClick={(e) => {\n e.preventDefault();\n showMore();\n }}\n >\n Show more\n </a>\n )}\n </div>\n </>\n );\n}\n","import type { Results, Response } from \"./types\";\nimport { ReplTable } from \"./ReplTable\";\n\nfunction OutLine({ result }: { result: Results }) {\n return (\n <div className=\"PGliteRepl-line\">\n {result.fields.length > 0 ? (\n <ReplTable result={result} />\n ) : (\n <div className=\"PGliteRepl-null\">null</div>\n )}\n </div>\n );\n}\n\nexport function ReplResponse({\n response,\n showTime,\n}: {\n response: Response;\n showTime: boolean;\n}) {\n let out;\n if (response.error) {\n out = (\n <div className=\"PGliteRepl-line PGliteRepl-error\">{response.error}</div>\n );\n } else {\n out = (\n <>\n {response.results?.map((result, i) => (\n <OutLine key={i} result={result} />\n ))}\n </>\n );\n }\n return (\n <>\n <pre className=\"PGliteRepl-line PGliteRepl-query\">{response.query}</pre>\n {response.text && (\n <div className=\"PGliteRepl-line PGliteRepl-text\">{response.text}</div>\n )}\n {out}\n <div className=\"PGliteRepl-divider\">\n <hr />\n {showTime && (\n <div className=\"PGliteRepl-time\">{response.time.toFixed(1)}ms</div>\n )}\n </div>\n </>\n );\n}\n","import { useState, useCallback, useMemo, useRef, useEffect } from \"react\";\nimport CodeMirror, {\n type ViewUpdate,\n type ReactCodeMirrorRef,\n type Extension,\n} from \"@uiw/react-codemirror\";\nimport { defaultKeymap } from \"@codemirror/commands\";\nimport { keymap } from \"@codemirror/view\";\nimport { PostgreSQL } from \"@codemirror/lang-sql\";\nimport { type PGlite } from \"@electric-sql/pglite\";\nimport { makeSqlExt } from \"./sqlSupport\";\nimport type { Response } from \"./types\";\nimport { runQuery, getSchema } from \"./utils\";\nimport { ReplResponse } from \"./ReplResponse\";\nimport { xcodeDark, xcodeLight } from \"@uiw/codemirror-theme-xcode\";\n\nimport \"./Repl.css\";\n\n// Filter out the Enter key from the default keymap, we entirely override its behavior\n// to run the query when the user presses Enter.\n// We keep the up and down arrow keys as we only override their behavior\n// when the cursor is on the first or last line.\nconst baseKeymap = defaultKeymap.filter((key) => key.key !== \"Enter\");\n\nexport type ReplTheme = \"light\" | \"dark\" | \"auto\";\n\nexport interface ReplProps {\n pg: PGlite;\n border?: boolean;\n lightTheme?: Extension;\n darkTheme?: Extension;\n theme?: ReplTheme;\n showTime?: boolean;\n disableUpdateSchema?: boolean;\n}\n\nexport function Repl({\n pg,\n border = false,\n lightTheme = xcodeLight,\n darkTheme = xcodeDark,\n theme = \"auto\",\n showTime = false,\n disableUpdateSchema = false,\n}: ReplProps) {\n const [value, setValue] = useState(\"\");\n const valueNoHistory = useRef(\"\");\n const [loading, setLoading] = useState(true);\n const [output, setOutput] = useState<Response[]>([]);\n const outputRef = useRef<HTMLDivElement | null>(null);\n const [schema, setSchema] = useState<Record<string, string[]>>({});\n const historyPos = useRef(-1);\n const rcm = useRef<ReactCodeMirrorRef | null>(null);\n const [themeToUse, setThemeToUse] = useState<Extension>(\n theme === \"dark\" ? darkTheme : lightTheme,\n );\n const [styles, setStyles] = useState<{ [key: string]: string | number }>({});\n\n useEffect(() => {\n let ignore = false;\n const init = async () => {\n await pg.waitReady;\n if (ignore) return;\n setLoading(false);\n };\n setLoading(true);\n init();\n return () => {\n ignore = true;\n };\n }, [pg]);\n\n useEffect(() => {\n if (theme === \"auto\") {\n const systemTheme = window.matchMedia(\"(prefers-color-scheme: dark)\")\n .matches\n ? \"dark\"\n : \"light\";\n setThemeToUse(systemTheme === \"dark\" ? darkTheme : lightTheme);\n const listener = (e: MediaQueryListEvent) => {\n setThemeToUse(e.matches ? darkTheme : lightTheme);\n setTimeout(() => {\n extractStyles();\n }, 0);\n };\n window\n .matchMedia(\"(prefers-color-scheme: dark)\")\n .addEventListener(\"change\", listener);\n return () => {\n window\n .matchMedia(\"(prefers-color-scheme: dark)\")\n .removeEventListener(\"change\", listener);\n };\n } else {\n setThemeToUse(theme === \"dark\" ? darkTheme : lightTheme);\n setTimeout(() => {\n extractStyles();\n }, 0);\n }\n }, [theme, lightTheme, darkTheme]);\n\n const onChange = useCallback((val: string, _viewUpdate: ViewUpdate) => {\n extractStyles();\n setValue(val);\n if (historyPos.current === -1) {\n valueNoHistory.current = val;\n }\n }, []);\n\n const extensions = useMemo(\n () => [\n keymap.of([\n {\n key: \"Enter\",\n preventDefault: true,\n run: () => {\n if (value.trim() === \"\") return false; // Do nothing if the input is empty\n runQuery(value, pg).then((response) => {\n setOutput((prev) => [...prev, response]);\n if (outputRef.current) {\n setTimeout(() => {\n outputRef.current!.scrollTop =\n outputRef.current!.scrollHeight;\n }, 0);\n }\n // Update the schema for any new tables to be used in autocompletion\n if (!disableUpdateSchema) {\n getSchema(pg).then(setSchema);\n }\n });\n historyPos.current = -1;\n valueNoHistory.current = \"\";\n setValue(\"\");\n return true;\n },\n },\n {\n key: \"ArrowUp\",\n run: (view) => {\n const state = view.state;\n const cursorLine = state.doc.lineAt(\n state.selection.main.head,\n ).number;\n if (cursorLine === 1) {\n // If the cursor is on the first line, go back in history\n const currentPos = historyPos.current;\n historyPos.current++;\n if (historyPos.current >= output.length) {\n historyPos.current = output.length - 1;\n }\n if (historyPos.current < -1) {\n historyPos.current = -1;\n }\n if (historyPos.current === currentPos) return true;\n if (historyPos.current === -1) {\n setValue(valueNoHistory.current);\n } else {\n setValue(output[output.length - historyPos.current - 1].query);\n }\n return true; // Prevent the default behavior\n }\n return false; // Allow the default behavior\n },\n },\n {\n key: \"ArrowDown\",\n run: (view) => {\n const state = view.state;\n const cursorLine = state.doc.lineAt(\n state.selection.main.head,\n ).number;\n const lastLine = state.doc.lines;\n if (cursorLine === lastLine) {\n // If the cursor is on the last line, go forward in history\n const currentPos = historyPos.current;\n historyPos.current--;\n if (historyPos.current >= output.length) {\n historyPos.current = output.length - 1;\n }\n if (historyPos.current < -1) {\n historyPos.current = -1;\n }\n if (historyPos.current === currentPos) return true;\n if (historyPos.current === -1) {\n setValue(valueNoHistory.current);\n } else {\n setValue(output[output.length - historyPos.current - 1].query);\n }\n return true; // Prevent the default behavior\n }\n return false; // Allow the default behavior\n },\n },\n ...baseKeymap,\n ]),\n makeSqlExt({\n dialect: PostgreSQL,\n schema: schema,\n tables: [\n {\n label: \"d\",\n displayLabel: \"\\\\d\",\n },\n ],\n defaultSchema: \"public\",\n }),\n ],\n [pg, schema, value, output],\n );\n\n const extractStyles = () => {\n // Get the styles from the CodeMirror editor to use in the REPL\n const cmEditorEl = rcm.current?.editor!.querySelector(\".cm-editor\")!;\n const gutterEl = cmEditorEl.querySelector(\".cm-gutters\")!;\n const cmEditorElComputedStyles = window.getComputedStyle(cmEditorEl);\n const foregroundColor = cmEditorElComputedStyles.color;\n const backgroundColor = cmEditorElComputedStyles.backgroundColor;\n\n const gutterElComputedStyles = window.getComputedStyle(gutterEl!);\n const gutterBorder = gutterElComputedStyles.borderRight;\n const borderWidth = parseInt(gutterElComputedStyles.borderRightWidth) || 0;\n const borderColor = borderWidth\n ? gutterElComputedStyles.borderRightColor\n : foregroundColor.replace(\"rgb\", \"rgba\").replace(\")\", \", 0.15)\");\n const border = borderWidth\n ? gutterElComputedStyles.borderRight\n : `1px solid ${borderColor}`;\n\n setStyles({\n \"--PGliteRepl-foreground-color\": foregroundColor,\n \"--PGliteRepl-background-color\": backgroundColor,\n \"--PGliteRepl-border\": border,\n \"--PGliteRepl-gutter-border\": gutterBorder,\n \"--PGliteRepl-border-color\": borderColor,\n });\n };\n\n return (\n <div\n className={`\n PGliteRepl-root\n ${border ? \"PGliteRepl-root-border\" : \"\"}\n `}\n style={styles}\n >\n <div\n className=\"PGliteRepl-output\"\n ref={(ref) => (outputRef.current = ref)}\n >\n {loading && <div className=\"PGliteRepl-loading-msg\">Loading...</div>}\n {output.map((response, i) => (\n <div key={i}>\n <ReplResponse response={response || []} showTime={showTime} />\n </div>\n ))}\n </div>\n <CodeMirror\n ref={rcm}\n className={`PGliteRepl-input ${loading ? \"PGliteRepl-input-loading\" : \"\"}`}\n width=\"100%\"\n value={value}\n basicSetup={{\n defaultKeymap: false,\n }}\n extensions={extensions}\n theme={themeToUse}\n onChange={onChange}\n editable={!loading}\n onCreateEditor={() => {\n extractStyles();\n setTimeout(extractStyles, 0);\n getSchema(pg).then(setSchema);\n }}\n />\n </div>\n );\n}\n"],"names":["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-xcode")) : 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-xcode"], 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.codemirrorThemeXcode));
3
- })(this, function(exports2, jsxRuntime, react, CodeMirror, commands, view, langSql, language, psqlDescribe, codemirrorThemeXcode) {
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
  {
@@ -289,7 +289,7 @@
289
289
  };
290
290
  }
291
291
  function makeSqlExt(config = {}) {
292
- let lang = config.dialect || langSql.PostgreSQL;
292
+ const lang = config.dialect || langSql.PostgreSQL;
293
293
  return new language.LanguageSupport(lang.language, [
294
294
  // schemaCompletion(config),
295
295
  config.schema ? lang.language.data.of({
@@ -425,6 +425,8 @@
425
425
  str = JSON.stringify(value);
426
426
  } else if (ArrayBuffer.isView(value)) {
427
427
  str = `${value.byteLength} bytes`;
428
+ } else if (value === void 0) {
429
+ str = "undefined";
428
430
  } else {
429
431
  str = value.toString();
430
432
  }
@@ -441,8 +443,14 @@
441
443
  };
442
444
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
443
445
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "PGliteRepl-table-scroll", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "PGliteRepl-table", children: [
444
- /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { children: result.fields.map((col, i) => /* @__PURE__ */ jsxRuntime.jsx("th", { children: col.name }, i)) }) }),
445
- /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row, i) => /* @__PURE__ */ jsxRuntime.jsx("tr", { children: row.map((col, j) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: cellClass(col), children: cellValue(col) }, j)) }, 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
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row, i) => (
448
+ // eslint-disable-next-line @eslint-react/no-array-index-key
449
+ /* @__PURE__ */ jsxRuntime.jsx("tr", { children: row.map((col, j) => (
450
+ // eslint-disable-next-line @eslint-react/no-array-index-key
451
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: cellClass(col), children: cellValue(col) }, j)
452
+ )) }, i)
453
+ )) })
446
454
  ] }) }),
447
455
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "PGliteRepl-table-row-count", children: [
448
456
  result.rows.length > maxRows ? `${maxRows} of ` : "",
@@ -475,7 +483,10 @@
475
483
  if (response.error) {
476
484
  out = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "PGliteRepl-line PGliteRepl-error", children: response.error });
477
485
  } else {
478
- 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
+ )) });
479
490
  }
480
491
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
481
492
  /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "PGliteRepl-line PGliteRepl-query", children: response.query }),
@@ -491,11 +502,15 @@
491
502
  ] });
492
503
  }
493
504
  const baseKeymap = commands.defaultKeymap.filter((key) => key.key !== "Enter");
505
+ const defaultLightThemeInit = codemirrorThemeGithub.githubLightInit;
506
+ const defaultLightTheme = codemirrorThemeGithub.githubLight;
507
+ const defaultDarkThemeInit = codemirrorThemeGithub.githubDarkInit;
508
+ const defaultDarkTheme = codemirrorThemeGithub.githubDark;
494
509
  function Repl({
495
- pg,
510
+ pg: pgProp,
496
511
  border = false,
497
- lightTheme = codemirrorThemeXcode.xcodeLight,
498
- darkTheme = codemirrorThemeXcode.xcodeDark,
512
+ lightTheme = defaultLightTheme,
513
+ darkTheme = defaultDarkTheme,
499
514
  theme = "auto",
500
515
  showTime = false,
501
516
  disableUpdateSchema = false
@@ -512,6 +527,7 @@
512
527
  theme === "dark" ? darkTheme : lightTheme
513
528
  );
514
529
  const [styles, setStyles] = react.useState({});
530
+ const pg = pgliteReact.usePGlite(pgProp);
515
531
  react.useEffect(() => {
516
532
  let ignore = false;
517
533
  const init = async () => {
@@ -544,6 +560,7 @@
544
560
  setTimeout(() => {
545
561
  extractStyles();
546
562
  }, 0);
563
+ return;
547
564
  }
548
565
  }, [theme, lightTheme, darkTheme]);
549
566
  const onChange = react.useCallback((val, _viewUpdate) => {
@@ -647,11 +664,14 @@
647
664
  defaultSchema: "public"
648
665
  })
649
666
  ],
650
- [pg, schema, value, output]
667
+ [pg, schema, value, output, disableUpdateSchema]
651
668
  );
652
669
  const extractStyles = () => {
653
- var _a;
654
- const cmEditorEl = (_a = rcm.current) == null ? void 0 : _a.editor.querySelector(".cm-editor");
670
+ var _a, _b;
671
+ const cmEditorEl = (_b = (_a = rcm.current) == null ? void 0 : _a.editor) == null ? void 0 : _b.querySelector(".cm-editor");
672
+ if (!cmEditorEl) {
673
+ throw new Error("No CodeMirror editor found");
674
+ }
655
675
  const gutterEl = cmEditorEl.querySelector(".cm-gutters");
656
676
  const cmEditorElComputedStyles = window.getComputedStyle(cmEditorEl);
657
677
  const foregroundColor = cmEditorElComputedStyles.color;
@@ -685,7 +705,7 @@
685
705
  ref: (ref) => outputRef.current = ref,
686
706
  children: [
687
707
  loading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "PGliteRepl-loading-msg", children: "Loading..." }),
688
- output.map((response, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(ReplResponse, { response: response || [], showTime }) }, i))
708
+ output.map((response) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(ReplResponse, { response: response || [], showTime }) }, `${response.query}-${response.time}`))
689
709
  ]
690
710
  }
691
711
  ),
@@ -715,6 +735,10 @@
715
735
  );
716
736
  }
717
737
  exports2.Repl = Repl;
738
+ exports2.defaultDarkTheme = defaultDarkTheme;
739
+ exports2.defaultDarkThemeInit = defaultDarkThemeInit;
740
+ exports2.defaultLightTheme = defaultLightTheme;
741
+ exports2.defaultLightThemeInit = defaultLightThemeInit;
718
742
  Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
719
743
  });
720
744
  //# sourceMappingURL=Repl.umd.cjs.map