@electric-sql/pglite-repl 0.0.1-alpha.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Repl.d.ts +8 -2
- package/dist/Repl.js +30 -10
- package/dist/Repl.js.map +1 -1
- package/dist/Repl.umd.cjs +30 -10
- package/dist/Repl.umd.cjs.map +1 -1
- package/dist/style.css +3 -3
- package/dist-webcomponent/Repl.js +147 -85
- package/dist-webcomponent/Repl.js.map +1 -1
- package/dist-webcomponent/src/Repl.d.ts +8 -2
- package/dist-webcomponent/src-webcomponent/main.d.ts +3 -3
- package/package.json +12 -10
package/dist/Repl.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { Extension } from '@uiw/react-codemirror';
|
|
2
|
+
import { CreateThemeOptions } from '@uiw/codemirror-themes';
|
|
2
3
|
import { PGlite } from '@electric-sql/pglite';
|
|
3
|
-
|
|
4
|
-
|
|
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
11
|
pg: PGlite;
|
|
7
12
|
border?: boolean;
|
|
@@ -12,3 +17,4 @@ export interface ReplProps {
|
|
|
12
17
|
disableUpdateSchema?: boolean;
|
|
13
18
|
}
|
|
14
19
|
export declare function Repl({ pg, border, lightTheme, darkTheme, theme, showTime, disableUpdateSchema, }: ReplProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
package/dist/Repl.js
CHANGED
|
@@ -7,7 +7,7 @@ import { keymap } from "@codemirror/view";
|
|
|
7
7
|
import { PostgreSQL, schemaCompletionSource, keywordCompletionSource } from "@codemirror/lang-sql";
|
|
8
8
|
import { LanguageSupport } from "@codemirror/language";
|
|
9
9
|
import { describe } from "psql-describe";
|
|
10
|
-
import {
|
|
10
|
+
import { githubLightInit, githubLight, githubDarkInit, githubDark } from "@uiw/codemirror-theme-github";
|
|
11
11
|
const describeCompletions = [
|
|
12
12
|
{
|
|
13
13
|
label: "\\d",
|
|
@@ -295,7 +295,7 @@ function describeCompletionsAutoComplete(context) {
|
|
|
295
295
|
};
|
|
296
296
|
}
|
|
297
297
|
function makeSqlExt(config = {}) {
|
|
298
|
-
|
|
298
|
+
const lang = config.dialect || PostgreSQL;
|
|
299
299
|
return new LanguageSupport(lang.language, [
|
|
300
300
|
// schemaCompletion(config),
|
|
301
301
|
config.schema ? lang.language.data.of({
|
|
@@ -431,6 +431,8 @@ function cellValue(value) {
|
|
|
431
431
|
str = JSON.stringify(value);
|
|
432
432
|
} else if (ArrayBuffer.isView(value)) {
|
|
433
433
|
str = `${value.byteLength} bytes`;
|
|
434
|
+
} else if (value === void 0) {
|
|
435
|
+
str = "undefined";
|
|
434
436
|
} else {
|
|
435
437
|
str = value.toString();
|
|
436
438
|
}
|
|
@@ -448,7 +450,13 @@ function ReplTable({ result }) {
|
|
|
448
450
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
449
451
|
/* @__PURE__ */ jsx("div", { className: "PGliteRepl-table-scroll", children: /* @__PURE__ */ jsxs("table", { className: "PGliteRepl-table", children: [
|
|
450
452
|
/* @__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) =>
|
|
453
|
+
/* @__PURE__ */ jsx("tbody", { children: rows.map((row, i) => (
|
|
454
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key
|
|
455
|
+
/* @__PURE__ */ jsx("tr", { children: row.map((col, j) => (
|
|
456
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key
|
|
457
|
+
/* @__PURE__ */ jsx("td", { className: cellClass(col), children: cellValue(col) }, j)
|
|
458
|
+
)) }, i)
|
|
459
|
+
)) })
|
|
452
460
|
] }) }),
|
|
453
461
|
/* @__PURE__ */ jsxs("div", { className: "PGliteRepl-table-row-count", children: [
|
|
454
462
|
result.rows.length > maxRows ? `${maxRows} of ` : "",
|
|
@@ -497,11 +505,15 @@ function ReplResponse({
|
|
|
497
505
|
] });
|
|
498
506
|
}
|
|
499
507
|
const baseKeymap = defaultKeymap.filter((key) => key.key !== "Enter");
|
|
508
|
+
const defaultLightThemeInit = githubLightInit;
|
|
509
|
+
const defaultLightTheme = githubLight;
|
|
510
|
+
const defaultDarkThemeInit = githubDarkInit;
|
|
511
|
+
const defaultDarkTheme = githubDark;
|
|
500
512
|
function Repl({
|
|
501
513
|
pg,
|
|
502
514
|
border = false,
|
|
503
|
-
lightTheme =
|
|
504
|
-
darkTheme =
|
|
515
|
+
lightTheme = defaultLightTheme,
|
|
516
|
+
darkTheme = defaultDarkTheme,
|
|
505
517
|
theme = "auto",
|
|
506
518
|
showTime = false,
|
|
507
519
|
disableUpdateSchema = false
|
|
@@ -550,6 +562,7 @@ function Repl({
|
|
|
550
562
|
setTimeout(() => {
|
|
551
563
|
extractStyles();
|
|
552
564
|
}, 0);
|
|
565
|
+
return;
|
|
553
566
|
}
|
|
554
567
|
}, [theme, lightTheme, darkTheme]);
|
|
555
568
|
const onChange = useCallback((val, _viewUpdate) => {
|
|
@@ -653,11 +666,14 @@ function Repl({
|
|
|
653
666
|
defaultSchema: "public"
|
|
654
667
|
})
|
|
655
668
|
],
|
|
656
|
-
[pg, schema, value, output]
|
|
669
|
+
[pg, schema, value, output, disableUpdateSchema]
|
|
657
670
|
);
|
|
658
671
|
const extractStyles = () => {
|
|
659
|
-
var _a;
|
|
660
|
-
const cmEditorEl = (_a = rcm.current) == null ? void 0 : _a.editor.querySelector(".cm-editor");
|
|
672
|
+
var _a, _b;
|
|
673
|
+
const cmEditorEl = (_b = (_a = rcm.current) == null ? void 0 : _a.editor) == null ? void 0 : _b.querySelector(".cm-editor");
|
|
674
|
+
if (!cmEditorEl) {
|
|
675
|
+
throw new Error("No CodeMirror editor found");
|
|
676
|
+
}
|
|
661
677
|
const gutterEl = cmEditorEl.querySelector(".cm-gutters");
|
|
662
678
|
const cmEditorElComputedStyles = window.getComputedStyle(cmEditorEl);
|
|
663
679
|
const foregroundColor = cmEditorElComputedStyles.color;
|
|
@@ -691,7 +707,7 @@ function Repl({
|
|
|
691
707
|
ref: (ref) => outputRef.current = ref,
|
|
692
708
|
children: [
|
|
693
709
|
loading && /* @__PURE__ */ jsx("div", { className: "PGliteRepl-loading-msg", children: "Loading..." }),
|
|
694
|
-
output.map((response
|
|
710
|
+
output.map((response) => /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ReplResponse, { response: response || [], showTime }) }, `${response.query}-${response.time}`))
|
|
695
711
|
]
|
|
696
712
|
}
|
|
697
713
|
),
|
|
@@ -721,6 +737,10 @@ function Repl({
|
|
|
721
737
|
);
|
|
722
738
|
}
|
|
723
739
|
export {
|
|
724
|
-
Repl
|
|
740
|
+
Repl,
|
|
741
|
+
defaultDarkTheme,
|
|
742
|
+
defaultDarkThemeInit,
|
|
743
|
+
defaultLightTheme,
|
|
744
|
+
defaultLightThemeInit
|
|
725
745
|
};
|
|
726
746
|
//# 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 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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"}
|
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-
|
|
3
|
-
})(this, function(exports2, jsxRuntime, react, CodeMirror, commands, view, langSql, language, psqlDescribe,
|
|
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) {
|
|
4
4
|
"use strict";
|
|
5
5
|
const describeCompletions = [
|
|
6
6
|
{
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
};
|
|
290
290
|
}
|
|
291
291
|
function makeSqlExt(config = {}) {
|
|
292
|
-
|
|
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
|
}
|
|
@@ -442,7 +444,13 @@
|
|
|
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
446
|
/* @__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) =>
|
|
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 ` : "",
|
|
@@ -491,11 +499,15 @@
|
|
|
491
499
|
] });
|
|
492
500
|
}
|
|
493
501
|
const baseKeymap = commands.defaultKeymap.filter((key) => key.key !== "Enter");
|
|
502
|
+
const defaultLightThemeInit = codemirrorThemeGithub.githubLightInit;
|
|
503
|
+
const defaultLightTheme = codemirrorThemeGithub.githubLight;
|
|
504
|
+
const defaultDarkThemeInit = codemirrorThemeGithub.githubDarkInit;
|
|
505
|
+
const defaultDarkTheme = codemirrorThemeGithub.githubDark;
|
|
494
506
|
function Repl({
|
|
495
507
|
pg,
|
|
496
508
|
border = false,
|
|
497
|
-
lightTheme =
|
|
498
|
-
darkTheme =
|
|
509
|
+
lightTheme = defaultLightTheme,
|
|
510
|
+
darkTheme = defaultDarkTheme,
|
|
499
511
|
theme = "auto",
|
|
500
512
|
showTime = false,
|
|
501
513
|
disableUpdateSchema = false
|
|
@@ -544,6 +556,7 @@
|
|
|
544
556
|
setTimeout(() => {
|
|
545
557
|
extractStyles();
|
|
546
558
|
}, 0);
|
|
559
|
+
return;
|
|
547
560
|
}
|
|
548
561
|
}, [theme, lightTheme, darkTheme]);
|
|
549
562
|
const onChange = react.useCallback((val, _viewUpdate) => {
|
|
@@ -647,11 +660,14 @@
|
|
|
647
660
|
defaultSchema: "public"
|
|
648
661
|
})
|
|
649
662
|
],
|
|
650
|
-
[pg, schema, value, output]
|
|
663
|
+
[pg, schema, value, output, disableUpdateSchema]
|
|
651
664
|
);
|
|
652
665
|
const extractStyles = () => {
|
|
653
|
-
var _a;
|
|
654
|
-
const cmEditorEl = (_a = rcm.current) == null ? void 0 : _a.editor.querySelector(".cm-editor");
|
|
666
|
+
var _a, _b;
|
|
667
|
+
const cmEditorEl = (_b = (_a = rcm.current) == null ? void 0 : _a.editor) == null ? void 0 : _b.querySelector(".cm-editor");
|
|
668
|
+
if (!cmEditorEl) {
|
|
669
|
+
throw new Error("No CodeMirror editor found");
|
|
670
|
+
}
|
|
655
671
|
const gutterEl = cmEditorEl.querySelector(".cm-gutters");
|
|
656
672
|
const cmEditorElComputedStyles = window.getComputedStyle(cmEditorEl);
|
|
657
673
|
const foregroundColor = cmEditorElComputedStyles.color;
|
|
@@ -685,7 +701,7 @@
|
|
|
685
701
|
ref: (ref) => outputRef.current = ref,
|
|
686
702
|
children: [
|
|
687
703
|
loading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "PGliteRepl-loading-msg", children: "Loading..." }),
|
|
688
|
-
output.map((response
|
|
704
|
+
output.map((response) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(ReplResponse, { response: response || [], showTime }) }, `${response.query}-${response.time}`))
|
|
689
705
|
]
|
|
690
706
|
}
|
|
691
707
|
),
|
|
@@ -715,6 +731,10 @@
|
|
|
715
731
|
);
|
|
716
732
|
}
|
|
717
733
|
exports2.Repl = Repl;
|
|
734
|
+
exports2.defaultDarkTheme = defaultDarkTheme;
|
|
735
|
+
exports2.defaultDarkThemeInit = defaultDarkThemeInit;
|
|
736
|
+
exports2.defaultLightTheme = defaultLightTheme;
|
|
737
|
+
exports2.defaultLightThemeInit = defaultLightThemeInit;
|
|
718
738
|
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
|
719
739
|
});
|
|
720
740
|
//# sourceMappingURL=Repl.umd.cjs.map
|