@sqlrooms/sql-editor 0.24.2 → 0.24.4
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/components/QueryEditorPanelEditor.d.ts.map +1 -1
- package/dist/components/QueryEditorPanelEditor.js +10 -11
- package/dist/components/QueryEditorPanelEditor.js.map +1 -1
- package/dist/constants/functionSuggestions.d.ts +1 -1
- package/dist/constants/functionSuggestions.d.ts.map +1 -1
- package/dist/constants/functionSuggestions.js +5 -2
- package/dist/constants/functionSuggestions.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditorPanelEditor.d.ts","sourceRoot":"","sources":["../../src/components/QueryEditorPanelEditor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QueryEditorPanelEditor.d.ts","sourceRoot":"","sources":["../../src/components/QueryEditorPanelEditor.tsx"],"names":[],"mappings":"AAmBA,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAsDA,CAAC"}
|
|
@@ -3,6 +3,14 @@ import { cn } from '@sqlrooms/ui';
|
|
|
3
3
|
import { useCallback, useRef } from 'react';
|
|
4
4
|
import { useStoreWithSqlEditor } from '../SqlEditorSlice';
|
|
5
5
|
import { SqlMonacoEditor } from '../SqlMonacoEditor';
|
|
6
|
+
const MONACO_OPTIONS = {
|
|
7
|
+
scrollBeyondLastLine: false,
|
|
8
|
+
automaticLayout: true,
|
|
9
|
+
minimap: { enabled: false },
|
|
10
|
+
wordWrap: 'on',
|
|
11
|
+
quickSuggestions: true,
|
|
12
|
+
suggestOnTriggerCharacters: true,
|
|
13
|
+
};
|
|
6
14
|
export const QueryEditorPanelEditor = ({ className, queryId }) => {
|
|
7
15
|
const tableSchemas = useStoreWithSqlEditor((s) => s.db.tables);
|
|
8
16
|
const runQuery = useStoreWithSqlEditor((s) => s.sqlEditor.parseAndRunQuery);
|
|
@@ -18,7 +26,7 @@ export const QueryEditorPanelEditor = ({ className, queryId }) => {
|
|
|
18
26
|
updateQueryText(queryId, value);
|
|
19
27
|
}, [queryId, updateQueryText]);
|
|
20
28
|
// Handle editor mount
|
|
21
|
-
const handleEditorMount = useCallback((editor, monaco
|
|
29
|
+
const handleEditorMount = useCallback((editor, monaco) => {
|
|
22
30
|
editorRef.current[queryId] = editor;
|
|
23
31
|
// Add keyboard shortcut for running query
|
|
24
32
|
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => {
|
|
@@ -32,15 +40,6 @@ export const QueryEditorPanelEditor = ({ className, queryId }) => {
|
|
|
32
40
|
}
|
|
33
41
|
});
|
|
34
42
|
}, [runQuery]);
|
|
35
|
-
return (_jsx(SqlMonacoEditor, { connector: connector, value: queryText ?? '', onChange: handleUpdateQuery, className: cn('h-full w-full flex-grow', className), options:
|
|
36
|
-
scrollBeyondLastLine: false,
|
|
37
|
-
automaticLayout: true,
|
|
38
|
-
minimap: { enabled: false },
|
|
39
|
-
wordWrap: 'on',
|
|
40
|
-
quickSuggestions: true,
|
|
41
|
-
suggestOnTriggerCharacters: true,
|
|
42
|
-
}, onMount: (editor, monaco) => {
|
|
43
|
-
handleEditorMount(editor, monaco, queryId);
|
|
44
|
-
}, tableSchemas: tableSchemas }));
|
|
43
|
+
return (_jsx(SqlMonacoEditor, { connector: connector, value: queryText ?? '', onChange: handleUpdateQuery, className: cn('h-full w-full flex-grow', className), options: MONACO_OPTIONS, onMount: handleEditorMount, tableSchemas: tableSchemas }));
|
|
45
44
|
};
|
|
46
45
|
//# sourceMappingURL=QueryEditorPanelEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditorPanelEditor.js","sourceRoot":"","sources":["../../src/components/QueryEditorPanelEditor.tsx"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"QueryEditorPanelEditor.js","sourceRoot":"","sources":["../../src/components/QueryEditorPanelEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import { cn } from '@sqlrooms/ui';\nimport type * as Monaco from 'monaco-editor';\nimport { useCallback, useRef } from 'react';\nimport { useStoreWithSqlEditor } from '../SqlEditorSlice';\nimport { SqlMonacoEditor } from '../SqlMonacoEditor';\n\ntype EditorInstance = Monaco.editor.IStandaloneCodeEditor;\ntype MonacoInstance = typeof Monaco;\n\nconst MONACO_OPTIONS = {\n scrollBeyondLastLine: false,\n automaticLayout: true,\n minimap: { enabled: false },\n wordWrap: 'on',\n quickSuggestions: true,\n suggestOnTriggerCharacters: true,\n};\n\n\nexport const QueryEditorPanelEditor: React.FC<{\n className?: string;\n queryId: string;\n}> = ({className, queryId}) => {\n const tableSchemas = useStoreWithSqlEditor((s) => s.db.tables);\n const runQuery = useStoreWithSqlEditor((s) => s.sqlEditor.parseAndRunQuery);\n const connector = useStoreWithSqlEditor((s) => s.db.connector);\n\n const queryText = useStoreWithSqlEditor(\n (s) => s.config.sqlEditor.queries.find((q) => q.id === queryId)?.query,\n );\n const updateQueryText = useStoreWithSqlEditor(\n (s) => s.sqlEditor.updateQueryText,\n );\n // Editor instance ref for keyboard shortcuts\n const editorRef = useRef<{\n [key: string]: EditorInstance;\n }>({});\n\n // Handle query text update\n const handleUpdateQuery = useCallback(\n (value: string | undefined) => {\n if (!value) return;\n updateQueryText(queryId, value);\n },\n [queryId, updateQueryText],\n );\n\n // Handle editor mount\n const handleEditorMount = useCallback(\n (editor: EditorInstance, monaco: MonacoInstance) => {\n editorRef.current[queryId] = editor;\n // Add keyboard shortcut for running query\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => {\n const model = editor.getModel();\n const selection = editor.getSelection();\n if (model && selection && !selection.isEmpty()) {\n runQuery(model.getValueInRange(selection));\n } else {\n runQuery(editor.getValue());\n }\n });\n },\n [runQuery],\n );\n\n return (\n <SqlMonacoEditor\n connector={connector}\n value={queryText ?? ''}\n onChange={handleUpdateQuery}\n className={cn('h-full w-full flex-grow', className)}\n options={MONACO_OPTIONS}\n onMount={handleEditorMount}\n tableSchemas={tableSchemas}\n />\n );\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DuckDbConnector } from '@sqlrooms/duckdb';
|
|
2
|
-
export declare
|
|
2
|
+
export declare const getFunctionSuggestions: (connector: DuckDbConnector, wordBeforeCursor: string, limit?: number | undefined) => Promise<Iterable<{
|
|
3
3
|
name: string;
|
|
4
4
|
documentation: string;
|
|
5
5
|
}>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functionSuggestions.d.ts","sourceRoot":"","sources":["../../src/constants/functionSuggestions.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,eAAe,EAEhB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"functionSuggestions.d.ts","sourceRoot":"","sources":["../../src/constants/functionSuggestions.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AA8C1B,eAAO,MAAM,sBAAsB;UAvCR,MAAM;mBAAiB,MAAM;GAuCqB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Copyright 2022 Foursquare Labs, Inc. All Rights Reserved.
|
|
2
2
|
import { createTypedRowAccessor, escapeVal, } from '@sqlrooms/duckdb';
|
|
3
|
-
|
|
3
|
+
import { memoizeOnce } from '@sqlrooms/utils';
|
|
4
|
+
const getFunctionSuggestionsImpl = async (connector, wordBeforeCursor, limit = 100) => {
|
|
4
5
|
const result = await connector.query(`SELECT
|
|
5
6
|
function_name as name,
|
|
6
7
|
function_type as type,
|
|
@@ -25,7 +26,9 @@ export async function getFunctionSuggestions(connector, wordBeforeCursor, limit
|
|
|
25
26
|
})).entries()).map(([name, rows]) => {
|
|
26
27
|
return { name, documentation: formatDocumentation(rows) };
|
|
27
28
|
});
|
|
28
|
-
}
|
|
29
|
+
};
|
|
30
|
+
// Memoized version of the function
|
|
31
|
+
export const getFunctionSuggestions = memoizeOnce(getFunctionSuggestionsImpl);
|
|
29
32
|
function groupFunctionsByName(functions) {
|
|
30
33
|
return functions.reduce((acc, fn) => {
|
|
31
34
|
if (!acc.has(fn.name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functionSuggestions.js","sourceRoot":"","sources":["../../src/constants/functionSuggestions.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EACL,sBAAsB,EAEtB,SAAS,GACV,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"functionSuggestions.js","sourceRoot":"","sources":["../../src/constants/functionSuggestions.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2022 Foursquare Labs, Inc. All Rights Reserved.\n\nimport {\n createTypedRowAccessor,\n DuckDbConnector,\n escapeVal,\n} from '@sqlrooms/duckdb';\nimport { memoizeOnce } from '@sqlrooms/utils';\n\nconst getFunctionSuggestionsImpl = async (\n connector: DuckDbConnector,\n wordBeforeCursor: string,\n limit = 100,\n): Promise<Iterable<{name: string; documentation: string}>> => {\n const result = await connector.query(\n `SELECT \n function_name as name,\n function_type as type,\n return_type as returnType,\n examples,\n parameters,\n parameter_types as parameterTypes,\n description\n FROM duckdb_functions()\n WHERE name ILIKE ${escapeVal(\n wordBeforeCursor.replace(/([%_\\\\])/g, '\\\\$1') + '%',\n )} ESCAPE '\\\\'\n AND REGEXP_MATCHES(name,'^[A-Z]', 'i')\n ORDER BY name\n LIMIT ${limit}\n `,\n );\n\n return Array.from(\n groupFunctionsByName(\n Array.from(createTypedRowAccessor({arrowTable: result})).map(\n (row: FunctionRow) => {\n return {\n ...row,\n parameterTypes: Array.from(row.parameterTypes),\n parameters: Array.from(row.parameters),\n examples: Array.from(row.examples),\n };\n },\n ),\n ).entries(),\n ).map(([name, rows]) => {\n return {name, documentation: formatDocumentation(rows)};\n });\n};\n\n// Memoized version of the function\nexport const getFunctionSuggestions = memoizeOnce(getFunctionSuggestionsImpl);\n\ntype FunctionRow = {\n name: string;\n type: string;\n returnType: string;\n parameters: string[];\n parameterTypes: string[];\n description: string;\n examples: string[];\n};\n\nfunction groupFunctionsByName(\n functions: FunctionRow[],\n): Map<string, FunctionRow[]> {\n return functions.reduce((acc, fn) => {\n if (!acc.has(fn.name)) {\n acc.set(fn.name, []);\n }\n\n acc.get(fn.name)?.push(fn);\n\n return acc;\n }, new Map<string, FunctionRow[]>());\n}\n\nfunction formatDocumentation(functions: FunctionRow[]): string {\n // if no overload, return empty string\n if (!functions.length) {\n return '';\n }\n\n return [\n formatSignatures(functions),\n formatDescription(functions),\n formatExamples(functions),\n ]\n .filter(Boolean)\n .join('<br>');\n}\n\nfunction formatDescription(functions: FunctionRow[]): string {\n // description is the same for all overloads, so we can take it from the first one\n const description = functions[0]?.description;\n return description ? `<i>${description}</i>` : '';\n}\n\nfunction formatExamples(functions: FunctionRow[], examplesToShow = 3): string {\n const examples = Array.from(\n new Set(functions.flatMap((fn) => fn.examples).filter(Boolean)),\n )\n .slice(0, examplesToShow)\n .join('\\n');\n\n if (!examples) {\n return '';\n }\n\n return `<br><b>Examples:</b><br><pre>${examples}</pre>`;\n}\n\nfunction formatSignatures(\n functions: FunctionRow[],\n overloadsToShow = 3,\n): string {\n const overloadToShow = functions.slice(0, overloadsToShow);\n\n const formattedOverloads = overloadToShow.map(formatSignature);\n\n // print more overloads count message\n const moreOverloadsCount = functions.length - overloadToShow.length;\n const formattedMoreOverloads = moreOverloadsCount\n ? `(+${moreOverloadsCount} more overload)`\n : '';\n\n // build lines array\n const lines = [\n ...formattedOverloads,\n ...(formattedMoreOverloads ? [formattedMoreOverloads] : []),\n ];\n\n return `<pre>${lines.filter(Boolean).join('\\n')}</pre>`;\n}\n\nfunction formatSignature({\n name,\n parameterTypes,\n parameters,\n returnType,\n}: FunctionRow): string {\n // format parameters\n const params = parameters\n .map((parameterName, index) => ({\n parameterName,\n parameterType: parameterTypes[index],\n }))\n .map(({parameterName, parameterType}) => {\n if (parameterType) {\n return `${parameterName}: ${parameterType}`;\n }\n return parameterName;\n })\n .join(', ');\n\n // format signature body\n const signatureBody = `${name}(${params})`;\n\n // if returnType is defined, add it to the signature\n if (returnType) {\n return `${signatureBody}: ${returnType}`;\n }\n\n return signatureBody;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/sql-editor",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Ilya Boyandin <ilya@boyandin.me>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,16 +28,16 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@hookform/resolvers": "^3.10.0",
|
|
30
30
|
"@monaco-editor/react": "^4.7.0",
|
|
31
|
-
"@sqlrooms/data-table": "0.24.
|
|
32
|
-
"@sqlrooms/duckdb": "0.24.
|
|
33
|
-
"@sqlrooms/layout": "0.24.
|
|
34
|
-
"@sqlrooms/monaco-editor": "0.24.
|
|
35
|
-
"@sqlrooms/room-config": "0.24.
|
|
36
|
-
"@sqlrooms/room-shell": "0.24.
|
|
37
|
-
"@sqlrooms/schema-tree": "0.24.
|
|
38
|
-
"@sqlrooms/sql-editor-config": "0.24.
|
|
39
|
-
"@sqlrooms/ui": "0.24.
|
|
40
|
-
"@sqlrooms/utils": "0.24.
|
|
31
|
+
"@sqlrooms/data-table": "0.24.4",
|
|
32
|
+
"@sqlrooms/duckdb": "0.24.4",
|
|
33
|
+
"@sqlrooms/layout": "0.24.4",
|
|
34
|
+
"@sqlrooms/monaco-editor": "0.24.4",
|
|
35
|
+
"@sqlrooms/room-config": "0.24.4",
|
|
36
|
+
"@sqlrooms/room-shell": "0.24.4",
|
|
37
|
+
"@sqlrooms/schema-tree": "0.24.4",
|
|
38
|
+
"@sqlrooms/sql-editor-config": "0.24.4",
|
|
39
|
+
"@sqlrooms/ui": "0.24.4",
|
|
40
|
+
"@sqlrooms/utils": "0.24.4",
|
|
41
41
|
"d3-dsv": "^3.0.1",
|
|
42
42
|
"file-saver": "^2.0.5",
|
|
43
43
|
"immer": "^10.1.1",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"@types/react": "^19.1.7",
|
|
59
59
|
"@types/react-dom": "^19.1.6"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "fa0f592f6816218da76e1fbb74c5b6b4b173404f"
|
|
62
62
|
}
|