@sqlrooms/canvas 0.26.0-rc.5 → 0.26.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/CanvasSlice.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { AiSliceState, createAiSlice } from '@sqlrooms/ai';
|
|
2
2
|
import { DuckDbSliceState } from '@sqlrooms/duckdb';
|
|
3
|
-
import { BaseRoomConfig } from '@sqlrooms/room-shell';
|
|
4
3
|
import type { Viewport, XYPosition } from '@xyflow/react';
|
|
5
4
|
import { Connection, type EdgeChange, type NodeChange } from '@xyflow/react';
|
|
6
5
|
import { z } from 'zod';
|
|
@@ -125,9 +124,9 @@ export type CanvasSliceState = AiSliceState & {
|
|
|
125
124
|
};
|
|
126
125
|
};
|
|
127
126
|
export declare function createDefaultCanvasConfig(props?: Partial<CanvasSliceConfig>): CanvasSliceConfig;
|
|
128
|
-
export declare function createCanvasSlice
|
|
127
|
+
export declare function createCanvasSlice(props: {
|
|
129
128
|
config?: Partial<CanvasSliceConfig>;
|
|
130
|
-
ai?: Partial<Parameters<typeof createAiSlice
|
|
129
|
+
ai?: Partial<Parameters<typeof createAiSlice>[0]>;
|
|
131
130
|
}): import("zustand").StateCreator<CanvasSliceState>;
|
|
132
131
|
export type DuckDbSliceStateWithCanvas = DuckDbSliceState & CanvasSliceState;
|
|
133
132
|
export declare function useStoreWithCanvas<T>(selector: (state: DuckDbSliceStateWithCanvas) => T): T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasSlice.d.ts","sourceRoot":"","sources":["../src/CanvasSlice.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,aAAa,EAGd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,gBAAgB,EAAW,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"CanvasSlice.d.ts","sourceRoot":"","sources":["../src/CanvasSlice.ts"],"names":[],"mappings":"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"}
|
package/dist/CanvasSlice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasSlice.js","sourceRoot":"","sources":["../src/CanvasSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {\n AiSliceState,\n createAiSlice,\n createDefaultAiInstructions,\n createDefaultAiTools,\n} from '@sqlrooms/ai';\nimport {DuckDbSliceState, escapeId} from '@sqlrooms/duckdb';\nimport {\n BaseRoomConfig,\n BaseRoomStoreState,\n createSlice,\n useBaseRoomStore,\n} from '@sqlrooms/room-shell';\nimport {createVegaChartTool} from '@sqlrooms/vega';\nimport type {Viewport, XYPosition} from '@xyflow/react';\nimport {\n addEdge,\n applyEdgeChanges,\n applyNodeChanges,\n Connection,\n type EdgeChange,\n type NodeChange,\n} from '@xyflow/react';\nimport {produce} from 'immer';\nimport {z} from 'zod';\nimport {findNodeById, topoSortAll, topoSortDownstream} from './dag';\n\nconst DEFAULT_NODE_WIDTH = 800;\nconst DEFAULT_NODE_HEIGHT = 600;\nconst CANVAS_SCHEMA_NAME = 'canvas';\n\nexport const CanvasNodeTypes = z.enum(['sql', 'vega']);\nexport type CanvasNodeTypes = z.infer<typeof CanvasNodeTypes>;\n\nexport const CanvasNodeData = z.discriminatedUnion('type', [\n z.object({\n title: z.string().default('Untitled'),\n type: z.literal('sql'),\n sql: z.string().optional(),\n }),\n z.object({\n title: z.string().default('Untitled'),\n type: z.literal('vega'),\n sql: z.string().optional(),\n vegaSpec: z.any().optional(),\n }),\n]);\nexport type CanvasNodeData = z.infer<typeof CanvasNodeData>;\n\ntype SqlData = Extract<CanvasNodeData, {type: 'sql'}>;\nfunction isSqlData(data: CanvasNodeData): data is SqlData {\n return data.type === 'sql';\n}\n\nfunction getUniqueSqlTitle(\n nodes: CanvasNodeSchema[],\n baseTitle: string,\n excludeNodeId?: string,\n): string {\n const existing = new Set(\n nodes\n .filter((n) => n.type === 'sql' && n.id !== (excludeNodeId || ''))\n .map((n) => n.data.title || ''),\n );\n if (!existing.has(baseTitle)) return baseTitle;\n let counter = 1;\n while (existing.has(`${baseTitle} ${counter}`)) counter += 1;\n return `${baseTitle} ${counter}`;\n}\n\nexport const CanvasNodeSchema = z.object({\n id: z.string(),\n position: z.object({x: z.number(), y: z.number()}),\n type: CanvasNodeTypes,\n data: CanvasNodeData,\n width: z.number(),\n height: z.number(),\n});\nexport type CanvasNodeSchema = z.infer<typeof CanvasNodeSchema>;\n\nexport const CanvasEdgeSchema = z.object({\n id: z.string(),\n source: z.string(),\n target: z.string(),\n});\nexport type CanvasEdgeSchema = z.infer<typeof CanvasEdgeSchema>;\n\nexport type SqlNodeQueryResult =\n | {status: 'idle'}\n | {status: 'loading'}\n | {status: 'error'; error: string}\n | {status: 'success'; tableName: string; lastQueryStatement: string};\n\nexport const CanvasSliceConfig = z.object({\n viewport: z.object({\n x: z.number(),\n y: z.number(),\n zoom: z.number(),\n }),\n nodes: z.array(CanvasNodeSchema).default([]),\n edges: z.array(CanvasEdgeSchema).default([]),\n});\nexport type CanvasSliceConfig = z.infer<typeof CanvasSliceConfig>;\n\nexport type CanvasSliceState = AiSliceState & {\n canvas: {\n config: CanvasSliceConfig;\n isAssistantOpen: boolean;\n sqlResults: Record<string, SqlNodeQueryResult>;\n initialize: () => Promise<void>;\n setConfig: (config: CanvasSliceConfig) => void;\n setViewport: (viewport: Viewport) => void;\n setAssistantOpen: (isAssistantOpen: boolean) => void;\n addNode: (params: {\n parentId?: string;\n nodeType?: CanvasNodeTypes;\n initialPosition?: XYPosition;\n }) => string;\n executeDownstreamFrom: (nodeId: string) => Promise<void>;\n renameNode: (nodeId: string, newTitle: string) => Promise<void>;\n updateNode: (\n nodeId: string,\n updater: (data: CanvasNodeData) => CanvasNodeData,\n ) => void;\n deleteNode: (nodeId: string) => void;\n applyNodeChanges: (changes: NodeChange<CanvasNodeSchema>[]) => void;\n applyEdgeChanges: (changes: EdgeChange<CanvasEdgeSchema>[]) => void;\n addEdge: (edge: Connection) => void;\n executeSqlNodeQuery: (\n nodeId: string,\n opts?: {cascade?: boolean},\n ) => Promise<void>;\n };\n};\n\nexport function createDefaultCanvasConfig(\n props?: Partial<CanvasSliceConfig>,\n): CanvasSliceConfig {\n return {\n viewport: {x: 0, y: 0, zoom: 1},\n nodes: [],\n edges: [],\n ...props,\n };\n}\n\nexport function createCanvasSlice<\n PC extends BaseRoomConfig = BaseRoomConfig,\n>(props: {\n config?: Partial<CanvasSliceConfig>;\n ai?: Partial<Parameters<typeof createAiSlice<PC>>[0]>;\n}) {\n return createSlice<\n CanvasSliceState,\n BaseRoomStoreState & DuckDbSliceState & CanvasSliceState\n >((set, get, store) => ({\n ...createAiSlice({\n getInstructions: () => {\n return createDefaultAiInstructions(store);\n },\n tools: {\n ...createDefaultAiTools(store),\n chart: createVegaChartTool(),\n ...props.ai?.tools,\n },\n ...props.ai,\n })(set, get, store),\n canvas: {\n config: createDefaultCanvasConfig(props.config),\n isAssistantOpen: false,\n sqlResults: {},\n setConfig: (config) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config = config;\n }),\n );\n },\n setAssistantOpen: (isAssistantOpen) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.isAssistantOpen = isAssistantOpen;\n }),\n );\n },\n\n async initialize() {\n // Execute SQL nodes in topological order based on edges\n const nodes = get().canvas.config.nodes;\n const edges = get().canvas.config.edges;\n\n const order = topoSortAll(nodes, edges);\n\n // Execute SQL nodes sequentially to ensure parents finish before children\n for (const nodeId of order) {\n const node = findNodeById(get().canvas.config.nodes, nodeId);\n if (!node || !isSqlData(node.data)) continue;\n const sqlText = node.data.sql || '';\n if (!sqlText.trim()) continue;\n // Await ensures table creation completes before children execute\n await get().canvas.executeSqlNodeQuery(nodeId, {cascade: false});\n }\n\n await get().db.refreshTableSchemas();\n },\n\n addNode: ({\n parentId,\n nodeType = 'sql',\n initialPosition,\n }: {\n parentId?: string;\n nodeType?: CanvasNodeTypes;\n initialPosition?: XYPosition;\n }) => {\n const newId = createId();\n set((state) =>\n produce(state, (draft) => {\n const parent = parentId\n ? findNodeById(draft.canvas.config.nodes, parentId)\n : undefined;\n const position: XYPosition = initialPosition\n ? initialPosition\n : parent\n ? {\n x: parent.position.x + parent.width + 100,\n y: parent.position.y,\n }\n : {\n x: draft.canvas.config.viewport.x + 100,\n y: draft.canvas.config.viewport.y + 100,\n };\n const firstTable = draft.db.tables.find(\n (t) => t.table.schema === 'main',\n );\n\n const getInitialSqlForNewSqlNode = () => {\n if (parent && isSqlData(parent.data)) {\n const parentResults = draft.canvas.sqlResults[parent.id];\n const parentTitle = parent.data.title || 'Query';\n const fallbackParentTable = `${CANVAS_SCHEMA_NAME}.${escapeId(parentTitle)}`;\n const parentTableName =\n parentResults && parentResults.status === 'success'\n ? parentResults.tableName\n : fallbackParentTable;\n return `SELECT * FROM ${parentTableName}`;\n }\n return firstTable\n ? `SELECT * FROM ${firstTable.table.table}`\n : `SELECT 1`;\n };\n\n const newSqlTitle = getUniqueSqlTitle(\n draft.canvas.config.nodes,\n 'Query',\n );\n const initialSql = getInitialSqlForNewSqlNode();\n\n draft.canvas.config.nodes.push({\n id: newId,\n position,\n width: DEFAULT_NODE_WIDTH,\n height: DEFAULT_NODE_HEIGHT,\n type: nodeType,\n data: (nodeType === 'sql'\n ? {\n title: newSqlTitle,\n type: 'sql',\n sql: initialSql,\n }\n : {\n title: 'Chart',\n type: 'vega',\n }) as CanvasNodeData,\n });\n if (parentId) {\n draft.canvas.config.edges.push({\n id: `${parentId}-${newId}`,\n source: parentId,\n target: newId,\n });\n }\n }),\n );\n return newId;\n },\n\n executeDownstreamFrom: async (nodeId: string) => {\n const allNodes = get().canvas.config.nodes;\n const allEdges = get().canvas.config.edges;\n const downstreamOrder = topoSortDownstream(nodeId, allNodes, allEdges);\n for (const childId of downstreamOrder) {\n const child = findNodeById(allNodes, childId);\n if (!child || !isSqlData(child.data)) continue;\n const text = child.data.sql || '';\n if (!text.trim()) continue;\n await get().canvas.executeSqlNodeQuery(childId, {cascade: false});\n }\n await get().db.refreshTableSchemas();\n },\n\n addEdge: (connection) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.edges = addEdge(\n connection,\n draft.canvas.config.edges,\n );\n }),\n );\n },\n\n updateNode: (nodeId, updater) => {\n set((state) =>\n produce(state, (draft) => {\n const node = findNodeById(draft.canvas.config.nodes, nodeId);\n if (node) {\n node.data = updater(node.data as CanvasNodeData);\n }\n }),\n );\n },\n\n renameNode: async (nodeId: string, newTitle: string) => {\n const node = findNodeById(get().canvas.config.nodes, nodeId);\n if (!node) throw new Error('Node not found');\n if (!isSqlData(node.data)) {\n set((state) =>\n produce(state, (draft) => {\n const dnode = findNodeById(draft.canvas.config.nodes, nodeId);\n if (dnode) dnode.data.title = newTitle;\n }),\n );\n return;\n }\n\n const prevTitle = node.data.title || 'result';\n if (prevTitle === newTitle) return;\n\n // Ensure title uniqueness among SQL nodes by adjusting to a unique variant\n const uniqueTitle = getUniqueSqlTitle(\n get().canvas.config.nodes,\n newTitle,\n nodeId,\n );\n\n const connector = await get().db.getConnector();\n await connector.query(\n `CREATE SCHEMA IF NOT EXISTS ${CANVAS_SCHEMA_NAME}`,\n );\n\n const result = get().canvas.sqlResults[nodeId];\n const oldTableName =\n result && result.status === 'success'\n ? result.tableName\n : `${CANVAS_SCHEMA_NAME}.${escapeId(prevTitle)}`;\n\n await connector.query(\n `ALTER TABLE ${oldTableName} RENAME TO ${escapeId(uniqueTitle)}`,\n );\n\n const newQualified = `${CANVAS_SCHEMA_NAME}.${escapeId(uniqueTitle)}`;\n set((state) =>\n produce(state, (draft) => {\n const dnode = findNodeById(draft.canvas.config.nodes, nodeId);\n if (dnode) dnode.data.title = uniqueTitle;\n const r = draft.canvas.sqlResults[nodeId];\n if (r && r.status === 'success') r.tableName = newQualified;\n }),\n );\n\n await get().db.refreshTableSchemas();\n\n // Recompute children since upstream table name changed\n await get().canvas.executeDownstreamFrom(nodeId);\n },\n\n deleteNode: (nodeId) => {\n const current = get();\n const node = findNodeById(current.canvas.config.nodes, nodeId);\n let tableToDrop: string | undefined;\n if (node && isSqlData(node.data)) {\n const title = node.data.title || 'result';\n const res = current.canvas.sqlResults[nodeId];\n tableToDrop =\n res && res.status === 'success'\n ? res.tableName\n : `${CANVAS_SCHEMA_NAME}.${escapeId(title)}`;\n }\n\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.nodes = draft.canvas.config.nodes.filter(\n (n) => n.id !== nodeId,\n );\n draft.canvas.config.edges = draft.canvas.config.edges.filter(\n (e) => e.source !== nodeId && e.target !== nodeId,\n );\n // Clear stored result for the node\n delete draft.canvas.sqlResults[nodeId];\n if (draft.canvas.config.nodes.length === 0) {\n draft.canvas.config.viewport.x = 0;\n draft.canvas.config.viewport.y = 0;\n }\n }),\n );\n\n if (tableToDrop) {\n (async () => {\n try {\n const connector = await get().db.getConnector();\n await connector.query(`DROP TABLE IF EXISTS ${tableToDrop}`);\n await get().db.refreshTableSchemas();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(\n '[canvas.deleteNode] Failed to drop table for node',\n nodeId,\n e,\n );\n }\n })();\n }\n },\n\n applyNodeChanges: (changes) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.nodes = applyNodeChanges(\n changes,\n draft.canvas.config.nodes,\n );\n }),\n );\n },\n\n applyEdgeChanges: (changes) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.edges = applyEdgeChanges(\n changes,\n draft.canvas.config.edges,\n );\n }),\n );\n },\n\n setViewport: (viewport) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.viewport = viewport;\n }),\n );\n },\n\n executeSqlNodeQuery: async (\n nodeId: string,\n opts?: {cascade?: boolean},\n ) => {\n const node = findNodeById(get().canvas.config.nodes, nodeId);\n if (!node || !isSqlData(node.data)) return;\n const sql = node.data.sql || '';\n const title = node.data.title || 'result';\n\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.sqlResults[nodeId] = {status: 'loading'};\n }),\n );\n\n try {\n // Validate it's a single select\n const parsed = await get().db.sqlSelectToJson(sql);\n if (parsed.error) {\n throw new Error(\n parsed.error_message || 'Not a valid SELECT statement',\n );\n }\n\n // Create schema and table\n const connector = await get().db.getConnector();\n await connector.query(\n `CREATE SCHEMA IF NOT EXISTS ${CANVAS_SCHEMA_NAME}`,\n );\n\n const tableName = `${CANVAS_SCHEMA_NAME}.${escapeId(title)}`;\n await connector.query(\n `CREATE OR REPLACE TABLE ${tableName} AS ${sql}`,\n );\n\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.sqlResults[nodeId] = {\n status: 'success',\n tableName,\n lastQueryStatement: sql,\n };\n }),\n );\n\n // Cascade execution to downstream SQL nodes (topologically) unless disabled\n if (opts?.cascade !== false) {\n await get().canvas.executeDownstreamFrom(nodeId);\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.sqlResults[nodeId] = {\n status: 'error',\n error: message,\n };\n }),\n );\n }\n },\n },\n }));\n}\n\nexport type DuckDbSliceStateWithCanvas = DuckDbSliceState & CanvasSliceState;\n\nexport function useStoreWithCanvas<T>(\n selector: (state: DuckDbSliceStateWithCanvas) => T,\n): T {\n return useBaseRoomStore<BaseRoomStoreState, T>((state) =>\n selector(state as unknown as DuckDbSliceStateWithCanvas),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CanvasSlice.js","sourceRoot":"","sources":["../src/CanvasSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {\n AiSliceState,\n createAiSlice,\n createDefaultAiInstructions,\n createDefaultAiTools,\n} from '@sqlrooms/ai';\nimport {DuckDbSliceState, escapeId} from '@sqlrooms/duckdb';\nimport {\n BaseRoomStoreState,\n createSlice,\n useBaseRoomStore,\n} from '@sqlrooms/room-shell';\nimport {createVegaChartTool} from '@sqlrooms/vega';\nimport type {Viewport, XYPosition} from '@xyflow/react';\nimport {\n addEdge,\n applyEdgeChanges,\n applyNodeChanges,\n Connection,\n type EdgeChange,\n type NodeChange,\n} from '@xyflow/react';\nimport {produce} from 'immer';\nimport {z} from 'zod';\nimport {findNodeById, topoSortAll, topoSortDownstream} from './dag';\n\nconst DEFAULT_NODE_WIDTH = 800;\nconst DEFAULT_NODE_HEIGHT = 600;\nconst CANVAS_SCHEMA_NAME = 'canvas';\n\nexport const CanvasNodeTypes = z.enum(['sql', 'vega']);\nexport type CanvasNodeTypes = z.infer<typeof CanvasNodeTypes>;\n\nexport const CanvasNodeData = z.discriminatedUnion('type', [\n z.object({\n title: z.string().default('Untitled'),\n type: z.literal('sql'),\n sql: z.string().optional(),\n }),\n z.object({\n title: z.string().default('Untitled'),\n type: z.literal('vega'),\n sql: z.string().optional(),\n vegaSpec: z.any().optional(),\n }),\n]);\nexport type CanvasNodeData = z.infer<typeof CanvasNodeData>;\n\ntype SqlData = Extract<CanvasNodeData, {type: 'sql'}>;\nfunction isSqlData(data: CanvasNodeData): data is SqlData {\n return data.type === 'sql';\n}\n\nfunction getUniqueSqlTitle(\n nodes: CanvasNodeSchema[],\n baseTitle: string,\n excludeNodeId?: string,\n): string {\n const existing = new Set(\n nodes\n .filter((n) => n.type === 'sql' && n.id !== (excludeNodeId || ''))\n .map((n) => n.data.title || ''),\n );\n if (!existing.has(baseTitle)) return baseTitle;\n let counter = 1;\n while (existing.has(`${baseTitle} ${counter}`)) counter += 1;\n return `${baseTitle} ${counter}`;\n}\n\nexport const CanvasNodeSchema = z.object({\n id: z.string(),\n position: z.object({x: z.number(), y: z.number()}),\n type: CanvasNodeTypes,\n data: CanvasNodeData,\n width: z.number(),\n height: z.number(),\n});\nexport type CanvasNodeSchema = z.infer<typeof CanvasNodeSchema>;\n\nexport const CanvasEdgeSchema = z.object({\n id: z.string(),\n source: z.string(),\n target: z.string(),\n});\nexport type CanvasEdgeSchema = z.infer<typeof CanvasEdgeSchema>;\n\nexport type SqlNodeQueryResult =\n | {status: 'idle'}\n | {status: 'loading'}\n | {status: 'error'; error: string}\n | {status: 'success'; tableName: string; lastQueryStatement: string};\n\nexport const CanvasSliceConfig = z.object({\n viewport: z.object({\n x: z.number(),\n y: z.number(),\n zoom: z.number(),\n }),\n nodes: z.array(CanvasNodeSchema).default([]),\n edges: z.array(CanvasEdgeSchema).default([]),\n});\nexport type CanvasSliceConfig = z.infer<typeof CanvasSliceConfig>;\n\nexport type CanvasSliceState = AiSliceState & {\n canvas: {\n config: CanvasSliceConfig;\n isAssistantOpen: boolean;\n sqlResults: Record<string, SqlNodeQueryResult>;\n initialize: () => Promise<void>;\n setConfig: (config: CanvasSliceConfig) => void;\n setViewport: (viewport: Viewport) => void;\n setAssistantOpen: (isAssistantOpen: boolean) => void;\n addNode: (params: {\n parentId?: string;\n nodeType?: CanvasNodeTypes;\n initialPosition?: XYPosition;\n }) => string;\n executeDownstreamFrom: (nodeId: string) => Promise<void>;\n renameNode: (nodeId: string, newTitle: string) => Promise<void>;\n updateNode: (\n nodeId: string,\n updater: (data: CanvasNodeData) => CanvasNodeData,\n ) => void;\n deleteNode: (nodeId: string) => void;\n applyNodeChanges: (changes: NodeChange<CanvasNodeSchema>[]) => void;\n applyEdgeChanges: (changes: EdgeChange<CanvasEdgeSchema>[]) => void;\n addEdge: (edge: Connection) => void;\n executeSqlNodeQuery: (\n nodeId: string,\n opts?: {cascade?: boolean},\n ) => Promise<void>;\n };\n};\n\nexport function createDefaultCanvasConfig(\n props?: Partial<CanvasSliceConfig>,\n): CanvasSliceConfig {\n return {\n viewport: {x: 0, y: 0, zoom: 1},\n nodes: [],\n edges: [],\n ...props,\n };\n}\n\nexport function createCanvasSlice(props: {\n config?: Partial<CanvasSliceConfig>;\n ai?: Partial<Parameters<typeof createAiSlice>[0]>;\n}) {\n return createSlice<\n CanvasSliceState,\n BaseRoomStoreState & DuckDbSliceState & CanvasSliceState\n >((set, get, store) => ({\n ...createAiSlice({\n getInstructions: () => {\n return createDefaultAiInstructions(store);\n },\n tools: {\n ...createDefaultAiTools(store),\n chart: createVegaChartTool(),\n ...props.ai?.tools,\n },\n ...props.ai,\n })(set, get, store),\n canvas: {\n config: createDefaultCanvasConfig(props.config),\n isAssistantOpen: false,\n sqlResults: {},\n setConfig: (config) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config = config;\n }),\n );\n },\n setAssistantOpen: (isAssistantOpen) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.isAssistantOpen = isAssistantOpen;\n }),\n );\n },\n\n async initialize() {\n // Execute SQL nodes in topological order based on edges\n const nodes = get().canvas.config.nodes;\n const edges = get().canvas.config.edges;\n\n const order = topoSortAll(nodes, edges);\n\n // Execute SQL nodes sequentially to ensure parents finish before children\n for (const nodeId of order) {\n const node = findNodeById(get().canvas.config.nodes, nodeId);\n if (!node || !isSqlData(node.data)) continue;\n const sqlText = node.data.sql || '';\n if (!sqlText.trim()) continue;\n // Await ensures table creation completes before children execute\n await get().canvas.executeSqlNodeQuery(nodeId, {cascade: false});\n }\n\n await get().db.refreshTableSchemas();\n },\n\n addNode: ({\n parentId,\n nodeType = 'sql',\n initialPosition,\n }: {\n parentId?: string;\n nodeType?: CanvasNodeTypes;\n initialPosition?: XYPosition;\n }) => {\n const newId = createId();\n set((state) =>\n produce(state, (draft) => {\n const parent = parentId\n ? findNodeById(draft.canvas.config.nodes, parentId)\n : undefined;\n const position: XYPosition = initialPosition\n ? initialPosition\n : parent\n ? {\n x: parent.position.x + parent.width + 100,\n y: parent.position.y,\n }\n : {\n x: draft.canvas.config.viewport.x + 100,\n y: draft.canvas.config.viewport.y + 100,\n };\n const firstTable = draft.db.tables.find(\n (t) => t.table.schema === 'main',\n );\n\n const getInitialSqlForNewSqlNode = () => {\n if (parent && isSqlData(parent.data)) {\n const parentResults = draft.canvas.sqlResults[parent.id];\n const parentTitle = parent.data.title || 'Query';\n const fallbackParentTable = `${CANVAS_SCHEMA_NAME}.${escapeId(parentTitle)}`;\n const parentTableName =\n parentResults && parentResults.status === 'success'\n ? parentResults.tableName\n : fallbackParentTable;\n return `SELECT * FROM ${parentTableName}`;\n }\n return firstTable\n ? `SELECT * FROM ${firstTable.table.table}`\n : `SELECT 1`;\n };\n\n const newSqlTitle = getUniqueSqlTitle(\n draft.canvas.config.nodes,\n 'Query',\n );\n const initialSql = getInitialSqlForNewSqlNode();\n\n draft.canvas.config.nodes.push({\n id: newId,\n position,\n width: DEFAULT_NODE_WIDTH,\n height: DEFAULT_NODE_HEIGHT,\n type: nodeType,\n data: (nodeType === 'sql'\n ? {\n title: newSqlTitle,\n type: 'sql',\n sql: initialSql,\n }\n : {\n title: 'Chart',\n type: 'vega',\n }) as CanvasNodeData,\n });\n if (parentId) {\n draft.canvas.config.edges.push({\n id: `${parentId}-${newId}`,\n source: parentId,\n target: newId,\n });\n }\n }),\n );\n return newId;\n },\n\n executeDownstreamFrom: async (nodeId: string) => {\n const allNodes = get().canvas.config.nodes;\n const allEdges = get().canvas.config.edges;\n const downstreamOrder = topoSortDownstream(nodeId, allNodes, allEdges);\n for (const childId of downstreamOrder) {\n const child = findNodeById(allNodes, childId);\n if (!child || !isSqlData(child.data)) continue;\n const text = child.data.sql || '';\n if (!text.trim()) continue;\n await get().canvas.executeSqlNodeQuery(childId, {cascade: false});\n }\n await get().db.refreshTableSchemas();\n },\n\n addEdge: (connection) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.edges = addEdge(\n connection,\n draft.canvas.config.edges,\n );\n }),\n );\n },\n\n updateNode: (nodeId, updater) => {\n set((state) =>\n produce(state, (draft) => {\n const node = findNodeById(draft.canvas.config.nodes, nodeId);\n if (node) {\n node.data = updater(node.data as CanvasNodeData);\n }\n }),\n );\n },\n\n renameNode: async (nodeId: string, newTitle: string) => {\n const node = findNodeById(get().canvas.config.nodes, nodeId);\n if (!node) throw new Error('Node not found');\n if (!isSqlData(node.data)) {\n set((state) =>\n produce(state, (draft) => {\n const dnode = findNodeById(draft.canvas.config.nodes, nodeId);\n if (dnode) dnode.data.title = newTitle;\n }),\n );\n return;\n }\n\n const prevTitle = node.data.title || 'result';\n if (prevTitle === newTitle) return;\n\n // Ensure title uniqueness among SQL nodes by adjusting to a unique variant\n const uniqueTitle = getUniqueSqlTitle(\n get().canvas.config.nodes,\n newTitle,\n nodeId,\n );\n\n const connector = await get().db.getConnector();\n await connector.query(\n `CREATE SCHEMA IF NOT EXISTS ${CANVAS_SCHEMA_NAME}`,\n );\n\n const result = get().canvas.sqlResults[nodeId];\n const oldTableName =\n result && result.status === 'success'\n ? result.tableName\n : `${CANVAS_SCHEMA_NAME}.${escapeId(prevTitle)}`;\n\n await connector.query(\n `ALTER TABLE ${oldTableName} RENAME TO ${escapeId(uniqueTitle)}`,\n );\n\n const newQualified = `${CANVAS_SCHEMA_NAME}.${escapeId(uniqueTitle)}`;\n set((state) =>\n produce(state, (draft) => {\n const dnode = findNodeById(draft.canvas.config.nodes, nodeId);\n if (dnode) dnode.data.title = uniqueTitle;\n const r = draft.canvas.sqlResults[nodeId];\n if (r && r.status === 'success') r.tableName = newQualified;\n }),\n );\n\n await get().db.refreshTableSchemas();\n\n // Recompute children since upstream table name changed\n await get().canvas.executeDownstreamFrom(nodeId);\n },\n\n deleteNode: (nodeId) => {\n const current = get();\n const node = findNodeById(current.canvas.config.nodes, nodeId);\n let tableToDrop: string | undefined;\n if (node && isSqlData(node.data)) {\n const title = node.data.title || 'result';\n const res = current.canvas.sqlResults[nodeId];\n tableToDrop =\n res && res.status === 'success'\n ? res.tableName\n : `${CANVAS_SCHEMA_NAME}.${escapeId(title)}`;\n }\n\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.nodes = draft.canvas.config.nodes.filter(\n (n) => n.id !== nodeId,\n );\n draft.canvas.config.edges = draft.canvas.config.edges.filter(\n (e) => e.source !== nodeId && e.target !== nodeId,\n );\n // Clear stored result for the node\n delete draft.canvas.sqlResults[nodeId];\n if (draft.canvas.config.nodes.length === 0) {\n draft.canvas.config.viewport.x = 0;\n draft.canvas.config.viewport.y = 0;\n }\n }),\n );\n\n if (tableToDrop) {\n (async () => {\n try {\n const connector = await get().db.getConnector();\n await connector.query(`DROP TABLE IF EXISTS ${tableToDrop}`);\n await get().db.refreshTableSchemas();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(\n '[canvas.deleteNode] Failed to drop table for node',\n nodeId,\n e,\n );\n }\n })();\n }\n },\n\n applyNodeChanges: (changes) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.nodes = applyNodeChanges(\n changes,\n draft.canvas.config.nodes,\n );\n }),\n );\n },\n\n applyEdgeChanges: (changes) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.edges = applyEdgeChanges(\n changes,\n draft.canvas.config.edges,\n );\n }),\n );\n },\n\n setViewport: (viewport) => {\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.config.viewport = viewport;\n }),\n );\n },\n\n executeSqlNodeQuery: async (\n nodeId: string,\n opts?: {cascade?: boolean},\n ) => {\n const node = findNodeById(get().canvas.config.nodes, nodeId);\n if (!node || !isSqlData(node.data)) return;\n const sql = node.data.sql || '';\n const title = node.data.title || 'result';\n\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.sqlResults[nodeId] = {status: 'loading'};\n }),\n );\n\n try {\n // Validate it's a single select\n const parsed = await get().db.sqlSelectToJson(sql);\n if (parsed.error) {\n throw new Error(\n parsed.error_message || 'Not a valid SELECT statement',\n );\n }\n\n // Create schema and table\n const connector = await get().db.getConnector();\n await connector.query(\n `CREATE SCHEMA IF NOT EXISTS ${CANVAS_SCHEMA_NAME}`,\n );\n\n const tableName = `${CANVAS_SCHEMA_NAME}.${escapeId(title)}`;\n await connector.query(\n `CREATE OR REPLACE TABLE ${tableName} AS ${sql}`,\n );\n\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.sqlResults[nodeId] = {\n status: 'success',\n tableName,\n lastQueryStatement: sql,\n };\n }),\n );\n\n // Cascade execution to downstream SQL nodes (topologically) unless disabled\n if (opts?.cascade !== false) {\n await get().canvas.executeDownstreamFrom(nodeId);\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n set((state) =>\n produce(state, (draft) => {\n draft.canvas.sqlResults[nodeId] = {\n status: 'error',\n error: message,\n };\n }),\n );\n }\n },\n },\n }));\n}\n\nexport type DuckDbSliceStateWithCanvas = DuckDbSliceState & CanvasSliceState;\n\nexport function useStoreWithCanvas<T>(\n selector: (state: DuckDbSliceStateWithCanvas) => T,\n): T {\n return useBaseRoomStore<BaseRoomStoreState, T>((state) =>\n selector(state as unknown as DuckDbSliceStateWithCanvas),\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/canvas",
|
|
3
|
-
"version": "0.26.0
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@paralleldrive/cuid2": "^2.2.2",
|
|
22
|
-
"@sqlrooms/ai": "0.26.0
|
|
23
|
-
"@sqlrooms/data-table": "0.26.0
|
|
24
|
-
"@sqlrooms/duckdb": "0.26.0
|
|
25
|
-
"@sqlrooms/room-shell": "0.26.0
|
|
26
|
-
"@sqlrooms/sql-editor": "0.26.0
|
|
27
|
-
"@sqlrooms/ui": "0.26.0
|
|
28
|
-
"@sqlrooms/vega": "0.26.0
|
|
22
|
+
"@sqlrooms/ai": "0.26.0",
|
|
23
|
+
"@sqlrooms/data-table": "0.26.0",
|
|
24
|
+
"@sqlrooms/duckdb": "0.26.0",
|
|
25
|
+
"@sqlrooms/room-shell": "0.26.0",
|
|
26
|
+
"@sqlrooms/sql-editor": "0.26.0",
|
|
27
|
+
"@sqlrooms/ui": "0.26.0",
|
|
28
|
+
"@sqlrooms/vega": "0.26.0",
|
|
29
29
|
"@xyflow/react": "^12.8.5",
|
|
30
30
|
"immer": "^10.1.3",
|
|
31
31
|
"lucide-react": "^0.474.0",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"typecheck": "tsc --noEmit",
|
|
43
43
|
"typedoc": "typedoc"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "3376e76ddfa3c54097b79a20b88a1c37814dca61"
|
|
46
46
|
}
|