@sqlrooms/room-shell 0.28.1-rc.0 → 0.29.0-rc.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/RoomShellSlice.d.ts +3 -2
- package/dist/RoomShellSlice.d.ts.map +1 -1
- package/dist/RoomShellSlice.js +72 -29
- package/dist/RoomShellSlice.js.map +1 -1
- package/dist/data-sources/FileDataSourcesPanel.js +1 -1
- package/dist/data-sources/FileDataSourcesPanel.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +11 -10
package/dist/RoomShellSlice.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DbSliceState } from '@sqlrooms/db';
|
|
2
|
+
import { DataTable, DuckDbConnector, LoadFileOptions } from '@sqlrooms/duckdb';
|
|
2
3
|
import { CreateLayoutSliceProps, LayoutSliceState } from '@sqlrooms/layout';
|
|
3
4
|
import { BaseRoomConfig, DataSource, FileDataSource, LayoutConfig } from '@sqlrooms/room-config';
|
|
4
5
|
import { BaseRoomStoreState, CommandSliceState, CreateCommandSliceProps, CreateBaseRoomSliceProps } from '@sqlrooms/room-store';
|
|
@@ -85,7 +86,7 @@ export type RoomShellSliceState = {
|
|
|
85
86
|
setRoomFileProgress(pathname: string, fileState: RoomFileState): void;
|
|
86
87
|
addDataSource: (dataSource: DataSource, status?: DataSourceStatus) => Promise<void>;
|
|
87
88
|
};
|
|
88
|
-
} &
|
|
89
|
+
} & DbSliceState & LayoutSliceState & CommandSliceState;
|
|
89
90
|
/**
|
|
90
91
|
* This type takes a union type U (for example, A | B) and transforms it into an intersection type (A & B). This is useful because if you pass in, say, two slices of type { a: number } and { b: string }, the union of the slice types would be { a: number } | { b: string }, but you really want an object that has both properties—i.e. { a: number } & { b: string }.
|
|
91
92
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomShellSlice.d.ts","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"RoomShellSlice.d.ts","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"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"}
|
package/dist/RoomShellSlice.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createDbSlice } from '@sqlrooms/db';
|
|
2
2
|
import { createLayoutSlice, } from '@sqlrooms/layout';
|
|
3
3
|
import { DataSourceTypes, createDefaultBaseRoomConfig, isFileDataSource, isSqlQueryDataSource, isUrlDataSource, } from '@sqlrooms/room-config';
|
|
4
4
|
import { createBaseRoomSlice, createCommandSlice, isRoomSliceWithInitialize, registerCommandsForOwner, unregisterCommandsForOwner, useBaseRoomStore, } from '@sqlrooms/room-store';
|
|
@@ -51,7 +51,7 @@ export function createRoomShellSlice(props) {
|
|
|
51
51
|
})(set, get, store);
|
|
52
52
|
const sliceState = {
|
|
53
53
|
...roomSliceState,
|
|
54
|
-
...
|
|
54
|
+
...createDbSlice({ duckDb: { connector } })(set, get, store),
|
|
55
55
|
...createLayoutSlice(createLayoutProps)(set, get, store),
|
|
56
56
|
...createCommandSlice(createCommandProps)(set, get, store),
|
|
57
57
|
room: {
|
|
@@ -75,32 +75,44 @@ export function createRoomShellSlice(props) {
|
|
|
75
75
|
async initialize() {
|
|
76
76
|
registerCommandsForOwner(store, ROOM_SHELL_COMMAND_OWNER, createRoomShellCommands());
|
|
77
77
|
const { setTaskProgress } = get().room;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
78
|
+
try {
|
|
79
|
+
setTaskProgress(INIT_DB_TASK, {
|
|
80
|
+
message: 'Initializing database…',
|
|
81
|
+
progress: undefined,
|
|
82
|
+
});
|
|
83
|
+
await get().db.initialize();
|
|
84
|
+
setTaskProgress(INIT_DB_TASK, undefined);
|
|
85
|
+
setTaskProgress(INIT_ROOM_TASK, {
|
|
86
|
+
message: 'Loading data sources…',
|
|
87
|
+
progress: undefined,
|
|
88
|
+
});
|
|
89
|
+
await updateReadyDataSources();
|
|
90
|
+
await maybeDownloadDataSources();
|
|
91
|
+
setTaskProgress(INIT_ROOM_TASK, {
|
|
92
|
+
message: 'Initializing room…',
|
|
93
|
+
progress: undefined,
|
|
94
|
+
});
|
|
95
|
+
// Call initialize on all other slices that have an initialize function
|
|
96
|
+
const slices = Object.entries(store.getState()).filter(([key, value]) => key !== 'room' &&
|
|
97
|
+
key !== 'db' &&
|
|
98
|
+
isRoomSliceWithInitialize(value));
|
|
99
|
+
for (const [sliceName, slice] of slices) {
|
|
100
|
+
if (isRoomSliceWithInitialize(slice)) {
|
|
101
|
+
setTaskProgress(INIT_ROOM_TASK, {
|
|
102
|
+
message: `Initializing ${sliceName}…`,
|
|
103
|
+
progress: undefined,
|
|
104
|
+
});
|
|
105
|
+
await slice.initialize();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const state = store.getState();
|
|
109
|
+
if (isRoomSliceWithInitialize(state)) {
|
|
110
|
+
await state.initialize();
|
|
97
111
|
}
|
|
98
112
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
await state.initialize();
|
|
113
|
+
finally {
|
|
114
|
+
setTaskProgress(INIT_ROOM_TASK, undefined);
|
|
102
115
|
}
|
|
103
|
-
setTaskProgress(INIT_ROOM_TASK, undefined);
|
|
104
116
|
},
|
|
105
117
|
async destroy() {
|
|
106
118
|
unregisterCommandsForOwner(store, ROOM_SHELL_COMMAND_OWNER);
|
|
@@ -150,12 +162,28 @@ export function createRoomShellSlice(props) {
|
|
|
150
162
|
async addOrUpdateSqlQueryDataSource(tableName, query, oldTableName, abortSignal) {
|
|
151
163
|
const { schema } = get().db;
|
|
152
164
|
const { db } = get();
|
|
165
|
+
const dbConnectors = get().db.connectors;
|
|
153
166
|
const newTableName = tableName !== oldTableName
|
|
154
167
|
? convertToUniqueColumnOrTableName(tableName, await db.getTables(schema))
|
|
155
168
|
: tableName;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
169
|
+
let rowCount;
|
|
170
|
+
if (dbConnectors?.runQuery) {
|
|
171
|
+
const routed = await dbConnectors.runQuery({
|
|
172
|
+
sql: query,
|
|
173
|
+
queryType: 'arrow',
|
|
174
|
+
materialize: true,
|
|
175
|
+
materializedName: newTableName,
|
|
176
|
+
signal: abortSignal,
|
|
177
|
+
});
|
|
178
|
+
const relation = routed.relationName || newTableName;
|
|
179
|
+
rowCount = await db.getTableRowCount(relation, schema);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const created = await db.createTableFromQuery(newTableName, query, {
|
|
183
|
+
abortSignal,
|
|
184
|
+
});
|
|
185
|
+
rowCount = created.rowCount;
|
|
186
|
+
}
|
|
159
187
|
if (rowCount !== undefined) {
|
|
160
188
|
get().db.setTableRowCount(newTableName, rowCount);
|
|
161
189
|
}
|
|
@@ -401,6 +429,7 @@ export function createRoomShellSlice(props) {
|
|
|
401
429
|
}
|
|
402
430
|
}
|
|
403
431
|
async function runDataSourceQueries(queries) {
|
|
432
|
+
const dbConnectors = get().db.connectors;
|
|
404
433
|
for (const ds of queries) {
|
|
405
434
|
try {
|
|
406
435
|
const { tableName, sqlQuery } = ds;
|
|
@@ -409,7 +438,21 @@ export function createRoomShellSlice(props) {
|
|
|
409
438
|
status: DataSourceStatus.FETCHING,
|
|
410
439
|
};
|
|
411
440
|
}));
|
|
412
|
-
|
|
441
|
+
let rowCount;
|
|
442
|
+
if (dbConnectors?.runQuery) {
|
|
443
|
+
const routed = await dbConnectors.runQuery({
|
|
444
|
+
sql: sqlQuery,
|
|
445
|
+
queryType: 'arrow',
|
|
446
|
+
materialize: true,
|
|
447
|
+
materializedName: tableName,
|
|
448
|
+
});
|
|
449
|
+
const relation = routed.relationName || tableName;
|
|
450
|
+
rowCount = await get().db.getTableRowCount(relation);
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
const created = await get().db.createTableFromQuery(tableName, sqlQuery);
|
|
454
|
+
rowCount = created.rowCount;
|
|
455
|
+
}
|
|
413
456
|
if (rowCount !== undefined) {
|
|
414
457
|
get().db.setTableRowCount(tableName, rowCount);
|
|
415
458
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomShellSlice.js","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DataTable,\n DuckDbConnector,\n DuckDbSliceState,\n LoadFileOptions,\n createDuckDbSlice,\n} from '@sqlrooms/duckdb';\nimport {\n CreateLayoutSliceProps,\n LayoutSliceState,\n createLayoutSlice,\n} from '@sqlrooms/layout';\nimport {\n BaseRoomConfig,\n DataSource,\n DataSourceTypes,\n FileDataSource,\n LayoutConfig,\n SqlQueryDataSource,\n UrlDataSource,\n createDefaultBaseRoomConfig,\n isFileDataSource,\n isSqlQueryDataSource,\n isUrlDataSource,\n} from '@sqlrooms/room-config';\nimport {\n BaseRoomStoreState,\n CommandSliceState,\n CreateCommandSliceProps,\n CreateBaseRoomSliceProps,\n createBaseRoomSlice,\n createCommandSlice,\n isRoomSliceWithInitialize,\n registerCommandsForOwner,\n RoomCommand,\n unregisterCommandsForOwner,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {ErrorBoundary} from '@sqlrooms/ui';\nimport {\n ProgressInfo,\n convertToUniqueColumnOrTableName,\n convertToValidColumnOrTableName,\n downloadFile,\n} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {ReactNode} from 'react';\nimport {z} from 'zod';\nimport {StateCreator, StoreApi} from 'zustand';\nimport {\n DataSourceState,\n DataSourceStatus,\n RoomFileInfo,\n RoomFileState,\n} from './types';\n\nexport type RoomShellSliceConfig = BaseRoomConfig;\n\nexport type RoomShellStore = StoreApi<RoomShellSliceState>;\n\nexport type TaskProgress = {\n progress?: number | undefined;\n message: string;\n};\n\nexport type RoomShellSliceState = {\n initialize?: () => Promise<void>;\n room: BaseRoomStoreState['room'] & {\n config: RoomShellSliceConfig;\n tasksProgress: Record<string, TaskProgress>;\n\n setConfig: (config: RoomShellSliceConfig) => void;\n setTaskProgress: (\n id: string,\n taskProgress: TaskProgress | undefined,\n ) => void;\n getLoadingProgress: () => TaskProgress | undefined;\n\n roomFiles: RoomFileInfo[];\n roomFilesProgress: {[pathname: string]: RoomFileState};\n isDataAvailable: boolean; // Whether the data has been loaded (on initialization)\n dataSourceStates: {[tableName: string]: DataSourceState}; // TODO\n /**\n * Load a file data source. A fileDataSourceLoader implementation can be passed to\n * createRoomShellSlice to specify how file data sources should be loaded.\n *\n * @example\n * ```ts\n * ...createRoomShellSlice({\n * config: {\n * dataSources: [\n * { type: 'file', fileName: 'earthquakes.parquet', tableName: 'earthquakes' },\n * ],\n * },\n * room: {\n * fileDataSourceLoader: async ({fileName}, onProgress) =>\n * await downloadFile(`https://some.url/${fileName}`, {onProgress}),\n * },\n * })(set, get, store)\n * ```\n *\n * @param fileName - The name of the file to load.\n * @param onProgress - A callback to report the progress of the download.\n * @returns The loaded file.\n */\n fileDataSourceLoader?: (\n {fileName}: FileDataSource,\n onProgress: (progress: ProgressInfo) => void,\n ) => Promise<Uint8Array | File>;\n CustomErrorBoundary: React.ComponentType<{\n onRetry?: () => void;\n children?: ReactNode;\n }>;\n\n setRoomTitle(title: string): void;\n setDescription(description: string): void;\n\n /**\n * Add or update a SQL query data source.\n * @param tableName - The name of the table to create or update.\n * @param query - The SQL query to execute.\n * @param oldTableName - The name of the table to replace (optional).\n */\n addOrUpdateSqlQueryDataSource(\n tableName: string,\n query: string,\n oldTableName?: string,\n abortSignal?: AbortSignal,\n ): Promise<void>;\n areDatasetsReady(): boolean;\n\n addRoomFile(\n file: File | string,\n tableName?: string,\n loadFileOptions?: LoadFileOptions,\n ): Promise<DataTable | undefined>;\n /**\n * @deprecated Use removeDataSource or removeRoomFile instead\n */\n removeSqlQueryDataSource(tableName: string): Promise<void>;\n /**\n * Removes a data source from the room by tableName.\n * @param tableName - The name of the table of the data source to remove.\n */\n removeDataSource(tableName: string): Promise<void>;\n /**\n * Removes a file data source from the room by pathname.\n * @param pathname - The pathname of the file to remove.\n */\n removeRoomFile(pathname: string): Promise<void>;\n setRoomFiles(info: RoomFileInfo[]): void;\n setRoomFileProgress(pathname: string, fileState: RoomFileState): void;\n addDataSource: (\n dataSource: DataSource,\n status?: DataSourceStatus,\n ) => Promise<void>;\n };\n} & DuckDbSliceState &\n LayoutSliceState &\n CommandSliceState;\n\n/**\n * \tThis type takes a union type U (for example, A | B) and transforms it into an intersection type (A & B). This is useful because if you pass in, say, two slices of type { a: number } and { b: string }, the union of the slice types would be { a: number } | { b: string }, but you really want an object that has both properties—i.e. { a: number } & { b: string }.\n */\ntype CreateRoomShellSliceProps = CreateBaseRoomSliceProps & {\n connector?: DuckDbConnector;\n config?: Partial<\n RoomShellSliceConfig & {\n /** @deprecated Use layout.config instead */\n layout?: LayoutConfig;\n }\n >;\n layout?: CreateLayoutSliceProps;\n fileDataSourceLoader?: RoomShellSliceState['room']['fileDataSourceLoader'];\n CustomErrorBoundary?: RoomShellSliceState['room']['CustomErrorBoundary'];\n createCommandProps?: CreateCommandSliceProps;\n /** @deprecated Use direct props instead e.g. layout.panels */\n room?: Partial<Pick<LayoutSliceState['layout'], 'panels'>>;\n};\n\nconst DOWNLOAD_DATA_SOURCES_TASK = 'download-data-sources';\nconst INIT_DB_TASK = 'init-db';\nconst INIT_ROOM_TASK = 'init-room';\nconst ROOM_SHELL_COMMAND_OWNER = '@sqlrooms/room-shell';\n\nconst RoomSetTitleCommandInput = z.object({\n title: z.string().min(1).describe('Room title.'),\n});\ntype RoomSetTitleCommandInput = z.infer<typeof RoomSetTitleCommandInput>;\n\nconst RoomSetDescriptionCommandInput = z.object({\n description: z.string().describe('Room description.'),\n});\ntype RoomSetDescriptionCommandInput = z.infer<\n typeof RoomSetDescriptionCommandInput\n>;\n\nconst RoomRemoveDataSourceInput = z.object({\n tableName: z.string().describe('Table name of the data source to remove.'),\n});\ntype RoomRemoveDataSourceInput = z.infer<typeof RoomRemoveDataSourceInput>;\n\nconst RoomAddUrlDataSourceInput = z.object({\n url: z.string().url().describe('URL of the source file to load.'),\n tableName: z\n .string()\n .describe('Target table name where the URL data should be loaded.'),\n httpMethod: z\n .string()\n .optional()\n .describe('Optional HTTP method for URL fetch.'),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Optional HTTP headers for URL fetch.'),\n});\ntype RoomAddUrlDataSourceInput = z.infer<typeof RoomAddUrlDataSourceInput>;\n\nconst RoomAddSqlDataSourceInput = z.object({\n query: z.string().describe('SQL query that defines the derived table.'),\n tableName: z.string().describe('Target table name for query result.'),\n});\ntype RoomAddSqlDataSourceInput = z.infer<typeof RoomAddSqlDataSourceInput>;\n\nexport function createRoomShellSlice(\n props: CreateRoomShellSliceProps,\n): StateCreator<RoomShellSliceState> {\n const slice: StateCreator<RoomShellSliceState> = (set, get, store) => {\n const {\n connector,\n config: configProps,\n layout: layoutProps,\n room: deprecatedRoomProps,\n fileDataSourceLoader,\n CustomErrorBoundary = ErrorBoundary,\n createCommandProps,\n captureException = (exception) => console.error(exception),\n ...restProps\n } = props;\n\n const createLayoutProps: CreateLayoutSliceProps = {\n ...layoutProps,\n config: layoutProps?.config ?? configProps?.layout,\n panels: layoutProps?.panels ?? deprecatedRoomProps?.panels,\n };\n const roomSliceState = createBaseRoomSlice({\n captureException,\n })(set, get, store);\n\n const sliceState: RoomShellSliceState = {\n ...roomSliceState,\n ...createDuckDbSlice({connector})(set, get, store),\n ...createLayoutSlice(createLayoutProps)(set, get, store),\n ...createCommandSlice(createCommandProps)(set, get, store),\n room: {\n ...roomSliceState.room,\n config: {\n ...createDefaultBaseRoomConfig(),\n ...configProps,\n },\n CustomErrorBoundary,\n roomFiles: [],\n roomFilesProgress: {},\n isDataAvailable: false,\n dataSourceStates: {},\n tasksProgress: {},\n fileDataSourceLoader,\n\n setConfig: (config) => {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config = config;\n }),\n );\n },\n\n async initialize() {\n registerCommandsForOwner(\n store,\n ROOM_SHELL_COMMAND_OWNER,\n createRoomShellCommands(),\n );\n const {setTaskProgress} = get().room;\n setTaskProgress(INIT_DB_TASK, {\n message: 'Initializing database…',\n progress: undefined,\n });\n await get().db.initialize();\n setTaskProgress(INIT_DB_TASK, undefined);\n\n setTaskProgress(INIT_ROOM_TASK, {\n message: 'Loading data sources…',\n progress: undefined,\n });\n await updateReadyDataSources();\n await maybeDownloadDataSources();\n\n // Call initialize on all other slices that have an initialize function\n const slices = Object.entries(store.getState()).filter(\n ([key, value]) =>\n key !== 'room' &&\n key !== 'db' &&\n isRoomSliceWithInitialize(value),\n );\n for (const [_, slice] of slices) {\n if (isRoomSliceWithInitialize(slice)) {\n await slice.initialize();\n }\n }\n const state = store.getState();\n if (isRoomSliceWithInitialize(state)) {\n await state.initialize();\n }\n\n setTaskProgress(INIT_ROOM_TASK, undefined);\n },\n\n async destroy() {\n unregisterCommandsForOwner(store, ROOM_SHELL_COMMAND_OWNER);\n await roomSliceState.room.destroy();\n },\n\n /** Returns the progress of the last task */\n getLoadingProgress() {\n const {tasksProgress} = get().room;\n const keys = Object.keys(tasksProgress);\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n return tasksProgress[lastKey];\n }\n return undefined;\n },\n\n setTaskProgress(id, taskProgress) {\n set((state) =>\n produce(state, (draft) => {\n if (taskProgress) {\n draft.room.tasksProgress[id] = taskProgress;\n } else {\n delete draft.room.tasksProgress[id];\n }\n }),\n );\n },\n\n setRoomTitle: (title) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.title = title;\n }),\n ),\n\n setDescription: (description) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.description = description;\n }),\n ),\n\n addDataSource: async (\n dataSource,\n status = DataSourceStatus.PENDING,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n const dataSources = draft.room.config.dataSources;\n const tableName = dataSource.tableName;\n const index = dataSources.findIndex(\n (d) => d.tableName === tableName,\n );\n if (index >= 0) {\n dataSources[index] = dataSource;\n } else {\n dataSources.push(dataSource);\n }\n draft.room.dataSourceStates[tableName] = {status};\n }),\n );\n await maybeDownloadDataSources();\n },\n\n async addOrUpdateSqlQueryDataSource(\n tableName,\n query,\n oldTableName,\n abortSignal,\n ) {\n const {schema} = get().db;\n const {db} = get();\n const newTableName =\n tableName !== oldTableName\n ? convertToUniqueColumnOrTableName(\n tableName,\n await db.getTables(schema),\n )\n : tableName;\n const {rowCount} = await db.createTableFromQuery(\n newTableName,\n query,\n {\n abortSignal,\n },\n );\n if (rowCount !== undefined) {\n get().db.setTableRowCount(newTableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n const newDataSource = {\n type: DataSourceTypes.enum.sql,\n sqlQuery: query,\n tableName: newTableName,\n };\n if (oldTableName) {\n draft.room.config.dataSources =\n draft.room.config.dataSources.map((dataSource) =>\n dataSource.tableName === oldTableName\n ? newDataSource\n : dataSource,\n );\n delete draft.room.dataSourceStates[oldTableName];\n } else {\n draft.room.config.dataSources.push(newDataSource);\n }\n draft.room.dataSourceStates[newTableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n await get().db.refreshTableSchemas();\n },\n\n setRoomFiles: (roomFiles) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles = roomFiles;\n }),\n ),\n\n async addRoomFile(file, desiredTableName, loadOptions) {\n const {db} = get();\n\n const pathname = file instanceof File ? file.name : file;\n const tableName =\n desiredTableName ?? convertToValidColumnOrTableName(pathname);\n\n await db.connector.loadFile(file, tableName, loadOptions);\n\n // This must come before addDataSource, as addDataSource can trigger\n // download which also adds the file\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles.push({\n pathname,\n duckdbFileName: pathname,\n size: file instanceof File ? file.size : undefined,\n file: file instanceof File ? file : undefined,\n });\n }),\n );\n await get().room.addDataSource(\n {\n type: DataSourceTypes.enum.file,\n fileName: pathname,\n tableName,\n },\n // duckdbFileName ? DataSourceStatus.READY : DataSourceStatus.PENDING,\n DataSourceStatus.READY,\n );\n await get().db.refreshTableSchemas();\n set((state) =>\n produce(state, (draft) => {\n if (\n Object.values(get().room.dataSourceStates).every(\n (ds) => ds.status === DataSourceStatus.READY,\n )\n ) {\n draft.room.isDataAvailable = true;\n }\n }),\n );\n return get().db.findTableByName(tableName);\n },\n removeSqlQueryDataSource: async (tableName) => {\n await get().room.removeDataSource(tableName);\n },\n removeDataSource: async (tableName) => {\n const {db} = get();\n const dataSource = get().room.config.dataSources.find(\n (d) => d.tableName === tableName,\n );\n if (dataSource) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.dataSources =\n draft.room.config.dataSources.filter(\n (d) => d.tableName !== tableName,\n );\n if (dataSource && isFileDataSource(dataSource)) {\n draft.room.roomFiles = draft.room.roomFiles.filter(\n (f) => f.pathname !== dataSource.fileName,\n );\n }\n delete draft.room.dataSourceStates[tableName];\n }),\n );\n await db.dropTable(tableName);\n await db.refreshTableSchemas();\n }\n },\n\n removeRoomFile: async (pathname) => {\n const dataSource = get().room.config.dataSources.find(\n (d) => isFileDataSource(d) && d.fileName === pathname,\n );\n if (dataSource) {\n await get().room.removeDataSource(dataSource.tableName);\n }\n },\n\n setRoomFileProgress(pathname, fileState) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFilesProgress[pathname] = fileState;\n // Update the file size in the room config from the progress info\n const fileInfo = draft.room.roomFiles.find(\n (f) => f.pathname === pathname,\n );\n if (fileInfo && fileInfo.size === undefined) {\n if (fileState.status !== 'error' && fileState.progress) {\n fileInfo.size = fileState.progress.total;\n }\n }\n }),\n );\n },\n\n areDatasetsReady: () => {\n const dataSourceStates = get().room.dataSourceStates;\n const dataSources = get().room.config.dataSources;\n return dataSources.every(\n (ds) =>\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.READY,\n );\n },\n },\n\n ...restProps,\n };\n\n // If the tables have changed, update the data sources\n store.subscribe((state, prevState) => {\n if (state.db.tables !== prevState.db.tables) {\n updateReadyDataSources();\n }\n });\n\n return sliceState;\n\n async function updateReadyDataSources() {\n const {tables} = get().db;\n const {dataSourceStates} = get().room;\n const {config} = get().room;\n const {dataSources} = config;\n set((state) =>\n produce(state, (draft) => {\n for (const ds of dataSources) {\n const tableName = ds.tableName;\n const table = tables.find((t) => t.tableName === tableName);\n if (table) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n } else {\n // Prev status could be ERROR or PENDING, don't change it then\n if (!dataSourceStates[tableName]?.status) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.PENDING,\n };\n }\n }\n }\n }),\n );\n }\n\n async function maybeDownloadDataSources() {\n const {roomFilesProgress, dataSourceStates} = get().room;\n const {dataSources} = get().room.config;\n const pendingDataSources = dataSources.filter(\n (ds) =>\n !dataSourceStates[ds.tableName] ||\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.PENDING,\n );\n\n const filesToDownload = pendingDataSources.filter((ds) => {\n if (isFileDataSource(ds)) {\n return !roomFilesProgress[ds.fileName];\n }\n if (isUrlDataSource(ds)) {\n return !roomFilesProgress[ds.url];\n }\n return false;\n }) as (FileDataSource | UrlDataSource)[];\n\n if (filesToDownload.length > 0) {\n await downloadRoomFiles(filesToDownload);\n }\n\n const queriesToRun = pendingDataSources.filter(isSqlQueryDataSource);\n\n if (queriesToRun.length > 0) {\n await runDataSourceQueries(queriesToRun);\n }\n\n if (get().room.config.dataSources.length > 0) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.isDataAvailable = true;\n }),\n );\n }\n }\n\n async function downloadRoomFiles(\n filesToDownload: (FileDataSource | UrlDataSource)[],\n ) {\n if (!filesToDownload.length) return;\n const {setTableRowCount} = get().db;\n const {captureException, setTaskProgress, setRoomFileProgress} =\n get().room;\n filesToDownload.forEach((ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n set((state) =>\n produce(state, (draft) => {\n const info = {\n duckdbFileName: fileName,\n pathname: fileName,\n file: undefined,\n size: undefined,\n };\n const index = draft.room.roomFiles.findIndex(\n (f) => f.pathname === fileName,\n );\n if (index >= 0) {\n draft.room.roomFiles[index] = info;\n } else {\n draft.room.roomFiles.push(info);\n }\n }),\n );\n setRoomFileProgress(fileName, {status: 'download'});\n });\n if (filesToDownload.length > 0) {\n updateTotalFileDownloadProgress();\n }\n\n const loadedFiles = await Promise.all(\n filesToDownload.map(async (ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n const onProgress = (progress: ProgressInfo) => {\n setRoomFileProgress(fileName, {\n status: 'download',\n progress,\n });\n updateTotalFileDownloadProgress();\n };\n try {\n let downloadedFile: Uint8Array | File;\n if (isFileDataSource(ds)) {\n const {fileDataSourceLoader} = get().room;\n if (!fileDataSourceLoader) {\n throw new Error('fileDataSourceLoader is not defined');\n }\n downloadedFile = await fileDataSourceLoader(ds, onProgress);\n } else if (isUrlDataSource(ds)) {\n const url = ds.url;\n downloadedFile = await downloadFile(url, {\n method: ds.httpMethod,\n headers: ds.headers,\n onProgress,\n });\n } else {\n // This should never happen as filesToDownload only contains FileDataSource | UrlDataSource\n throw new Error('Unsupported data source type');\n }\n setRoomFileProgress(fileName, {status: 'done'});\n updateTotalFileDownloadProgress();\n const {db} = get();\n await db.connector.loadFile(\n downloadedFile instanceof File\n ? downloadedFile\n : new File([new Uint8Array(downloadedFile)], fileName),\n ds.tableName,\n ds.loadOptions,\n );\n setTableRowCount(\n ds.tableName,\n await db.getTableRowCount(ds.tableName),\n );\n } catch (err) {\n captureException(err);\n console.error(err);\n setRoomFileProgress(fileName, {\n status: 'error',\n message: 'Download failed',\n });\n // TODO: Make sure the errors are shown\n } finally {\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, undefined);\n }\n }),\n );\n if (loadedFiles.length) {\n await get().db.refreshTableSchemas();\n }\n }\n\n async function runDataSourceQueries(queries: SqlQueryDataSource[]) {\n for (const ds of queries) {\n try {\n const {tableName, sqlQuery} = ds;\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.FETCHING,\n };\n }),\n );\n const {rowCount} = await get().db.createTableFromQuery(\n tableName,\n sqlQuery,\n );\n if (rowCount !== undefined) {\n get().db.setTableRowCount(tableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n } catch (err) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[ds.tableName] = {\n status: DataSourceStatus.ERROR,\n message: `${err}`,\n };\n }),\n );\n // TODO: Make sure the errors are shown\n }\n }\n await get().db.refreshTableSchemas();\n await updateReadyDataSources();\n }\n\n function updateTotalFileDownloadProgress() {\n const {setTaskProgress, roomFilesProgress} = get().room;\n let total = 0,\n loaded = 0;\n for (const p of Object.values(roomFilesProgress)) {\n if (p.status === 'download' || p.status === 'done') {\n total += p.progress?.total || 0;\n loaded += p.progress?.loaded || 0;\n }\n }\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, {\n progress: total > 0 ? Math.round((loaded / total) * 100) : undefined,\n message: 'Downloading data…',\n });\n }\n };\n\n return slice;\n}\n\ntype RoomShellCommandStoreState = RoomShellSliceState;\n\nfunction createRoomShellCommands(): RoomCommand<RoomShellCommandStoreState>[] {\n return [\n {\n id: 'room.set-title',\n name: 'Set room title',\n description: 'Update the room title',\n group: 'Room',\n keywords: ['room', 'title', 'name'],\n inputSchema: RoomSetTitleCommandInput,\n inputDescription: 'Provide a non-empty room title.',\n ui: {\n keystrokes: 'Mod+Alt+Shift+T',\n },\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {title} = input as RoomSetTitleCommandInput;\n getState().room.setRoomTitle(title);\n return {\n success: true,\n commandId: 'room.set-title',\n message: `Updated room title to \"${title}\".`,\n };\n },\n },\n {\n id: 'room.set-description',\n name: 'Set room description',\n description: 'Update the room description',\n group: 'Room',\n keywords: ['room', 'description'],\n inputSchema: RoomSetDescriptionCommandInput,\n inputDescription: 'Provide room description text.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {description} = input as RoomSetDescriptionCommandInput;\n getState().room.setDescription(description);\n return {\n success: true,\n commandId: 'room.set-description',\n message: 'Updated room description.',\n };\n },\n },\n {\n id: 'room.remove-data-source',\n name: 'Remove data source',\n description: 'Remove a data source by table name',\n group: 'Room',\n keywords: ['room', 'data source', 'remove', 'table'],\n inputSchema: RoomRemoveDataSourceInput,\n inputDescription: 'Provide tableName of the data source to remove.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'high',\n requiresConfirmation: true,\n },\n validateInput: (input, {getState}) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n const dataSource = getState().room.config.dataSources.find(\n (source) => source.tableName === tableName,\n );\n if (!dataSource) {\n throw new Error(\n `Data source for table \"${tableName}\" was not found.`,\n );\n }\n },\n execute: async ({getState}, input) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n await getState().room.removeDataSource(tableName);\n return {\n success: true,\n commandId: 'room.remove-data-source',\n message: `Removed data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-url-data-source',\n name: 'Add URL data source',\n description: 'Add a URL data source and start loading it',\n group: 'Room',\n keywords: ['room', 'data source', 'url', 'add'],\n inputSchema: RoomAddUrlDataSourceInput,\n inputDescription:\n 'Provide url and tableName, with optional httpMethod and headers.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n execute: async ({getState}, input) => {\n const {url, tableName, httpMethod, headers} =\n input as RoomAddUrlDataSourceInput;\n await getState().room.addDataSource({\n type: DataSourceTypes.enum.url,\n url,\n tableName,\n ...(httpMethod ? {httpMethod} : {}),\n ...(headers ? {headers} : {}),\n });\n return {\n success: true,\n commandId: 'room.add-url-data-source',\n message: `Added URL data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-sql-data-source',\n name: 'Add SQL data source',\n description: 'Create a data source from a SQL query',\n group: 'Room',\n keywords: ['room', 'data source', 'sql', 'query', 'add'],\n inputSchema: RoomAddSqlDataSourceInput,\n inputDescription: 'Provide query and tableName.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n validateInput: (input) => {\n const {query} = input as RoomAddSqlDataSourceInput;\n if (!query.trim()) {\n throw new Error('Query cannot be empty.');\n }\n },\n execute: async ({getState}, input) => {\n const {query, tableName} = input as RoomAddSqlDataSourceInput;\n await getState().room.addOrUpdateSqlQueryDataSource(tableName, query);\n return {\n success: true,\n commandId: 'room.add-sql-data-source',\n message: `Added SQL data source \"${tableName}\".`,\n };\n },\n },\n ];\n}\n\nexport function useBaseRoomShellStore<RS extends RoomShellSliceState, T>(\n selector: (state: RS) => T,\n): T {\n return useBaseRoomStore<RS, T>(selector as (state: RS) => T);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomShellSlice.js","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {DbSliceState, createDbSlice} from '@sqlrooms/db';\nimport {DataTable, DuckDbConnector, LoadFileOptions} from '@sqlrooms/duckdb';\nimport {\n CreateLayoutSliceProps,\n LayoutSliceState,\n createLayoutSlice,\n} from '@sqlrooms/layout';\nimport {\n BaseRoomConfig,\n DataSource,\n DataSourceTypes,\n FileDataSource,\n LayoutConfig,\n SqlQueryDataSource,\n UrlDataSource,\n createDefaultBaseRoomConfig,\n isFileDataSource,\n isSqlQueryDataSource,\n isUrlDataSource,\n} from '@sqlrooms/room-config';\nimport {\n BaseRoomStoreState,\n CommandSliceState,\n CreateCommandSliceProps,\n CreateBaseRoomSliceProps,\n RoomCommand,\n createBaseRoomSlice,\n createCommandSlice,\n isRoomSliceWithInitialize,\n registerCommandsForOwner,\n unregisterCommandsForOwner,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {ErrorBoundary} from '@sqlrooms/ui';\nimport {\n ProgressInfo,\n convertToUniqueColumnOrTableName,\n convertToValidColumnOrTableName,\n downloadFile,\n} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {ReactNode} from 'react';\nimport {z} from 'zod';\nimport {StateCreator, StoreApi} from 'zustand';\nimport {\n DataSourceState,\n DataSourceStatus,\n RoomFileInfo,\n RoomFileState,\n} from './types';\n\nexport type RoomShellSliceConfig = BaseRoomConfig;\n\nexport type RoomShellStore = StoreApi<RoomShellSliceState>;\n\nexport type TaskProgress = {\n progress?: number | undefined;\n message: string;\n};\n\nexport type RoomShellSliceState = {\n initialize?: () => Promise<void>;\n room: BaseRoomStoreState['room'] & {\n config: RoomShellSliceConfig;\n tasksProgress: Record<string, TaskProgress>;\n\n setConfig: (config: RoomShellSliceConfig) => void;\n setTaskProgress: (\n id: string,\n taskProgress: TaskProgress | undefined,\n ) => void;\n getLoadingProgress: () => TaskProgress | undefined;\n\n roomFiles: RoomFileInfo[];\n roomFilesProgress: {[pathname: string]: RoomFileState};\n isDataAvailable: boolean; // Whether the data has been loaded (on initialization)\n dataSourceStates: {[tableName: string]: DataSourceState}; // TODO\n /**\n * Load a file data source. A fileDataSourceLoader implementation can be passed to\n * createRoomShellSlice to specify how file data sources should be loaded.\n *\n * @example\n * ```ts\n * ...createRoomShellSlice({\n * config: {\n * dataSources: [\n * { type: 'file', fileName: 'earthquakes.parquet', tableName: 'earthquakes' },\n * ],\n * },\n * room: {\n * fileDataSourceLoader: async ({fileName}, onProgress) =>\n * await downloadFile(`https://some.url/${fileName}`, {onProgress}),\n * },\n * })(set, get, store)\n * ```\n *\n * @param fileName - The name of the file to load.\n * @param onProgress - A callback to report the progress of the download.\n * @returns The loaded file.\n */\n fileDataSourceLoader?: (\n {fileName}: FileDataSource,\n onProgress: (progress: ProgressInfo) => void,\n ) => Promise<Uint8Array | File>;\n CustomErrorBoundary: React.ComponentType<{\n onRetry?: () => void;\n children?: ReactNode;\n }>;\n\n setRoomTitle(title: string): void;\n setDescription(description: string): void;\n\n /**\n * Add or update a SQL query data source.\n * @param tableName - The name of the table to create or update.\n * @param query - The SQL query to execute.\n * @param oldTableName - The name of the table to replace (optional).\n */\n addOrUpdateSqlQueryDataSource(\n tableName: string,\n query: string,\n oldTableName?: string,\n abortSignal?: AbortSignal,\n ): Promise<void>;\n areDatasetsReady(): boolean;\n\n addRoomFile(\n file: File | string,\n tableName?: string,\n loadFileOptions?: LoadFileOptions,\n ): Promise<DataTable | undefined>;\n /**\n * @deprecated Use removeDataSource or removeRoomFile instead\n */\n removeSqlQueryDataSource(tableName: string): Promise<void>;\n /**\n * Removes a data source from the room by tableName.\n * @param tableName - The name of the table of the data source to remove.\n */\n removeDataSource(tableName: string): Promise<void>;\n /**\n * Removes a file data source from the room by pathname.\n * @param pathname - The pathname of the file to remove.\n */\n removeRoomFile(pathname: string): Promise<void>;\n setRoomFiles(info: RoomFileInfo[]): void;\n setRoomFileProgress(pathname: string, fileState: RoomFileState): void;\n addDataSource: (\n dataSource: DataSource,\n status?: DataSourceStatus,\n ) => Promise<void>;\n };\n} & DbSliceState &\n LayoutSliceState &\n CommandSliceState;\n\n/**\n * \tThis type takes a union type U (for example, A | B) and transforms it into an intersection type (A & B). This is useful because if you pass in, say, two slices of type { a: number } and { b: string }, the union of the slice types would be { a: number } | { b: string }, but you really want an object that has both properties—i.e. { a: number } & { b: string }.\n */\ntype CreateRoomShellSliceProps = CreateBaseRoomSliceProps & {\n connector?: DuckDbConnector;\n config?: Partial<\n RoomShellSliceConfig & {\n /** @deprecated Use layout.config instead */\n layout?: LayoutConfig;\n }\n >;\n layout?: CreateLayoutSliceProps;\n fileDataSourceLoader?: RoomShellSliceState['room']['fileDataSourceLoader'];\n CustomErrorBoundary?: RoomShellSliceState['room']['CustomErrorBoundary'];\n createCommandProps?: CreateCommandSliceProps;\n /** @deprecated Use direct props instead e.g. layout.panels */\n room?: Partial<Pick<LayoutSliceState['layout'], 'panels'>>;\n};\n\nconst DOWNLOAD_DATA_SOURCES_TASK = 'download-data-sources';\nconst INIT_DB_TASK = 'init-db';\nconst INIT_ROOM_TASK = 'init-room';\nconst ROOM_SHELL_COMMAND_OWNER = '@sqlrooms/room-shell';\n\nconst RoomSetTitleCommandInput = z.object({\n title: z.string().min(1).describe('Room title.'),\n});\ntype RoomSetTitleCommandInput = z.infer<typeof RoomSetTitleCommandInput>;\n\nconst RoomSetDescriptionCommandInput = z.object({\n description: z.string().describe('Room description.'),\n});\ntype RoomSetDescriptionCommandInput = z.infer<\n typeof RoomSetDescriptionCommandInput\n>;\n\nconst RoomRemoveDataSourceInput = z.object({\n tableName: z.string().describe('Table name of the data source to remove.'),\n});\ntype RoomRemoveDataSourceInput = z.infer<typeof RoomRemoveDataSourceInput>;\n\nconst RoomAddUrlDataSourceInput = z.object({\n url: z.string().url().describe('URL of the source file to load.'),\n tableName: z\n .string()\n .describe('Target table name where the URL data should be loaded.'),\n httpMethod: z\n .string()\n .optional()\n .describe('Optional HTTP method for URL fetch.'),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Optional HTTP headers for URL fetch.'),\n});\ntype RoomAddUrlDataSourceInput = z.infer<typeof RoomAddUrlDataSourceInput>;\n\nconst RoomAddSqlDataSourceInput = z.object({\n query: z.string().describe('SQL query that defines the derived table.'),\n tableName: z.string().describe('Target table name for query result.'),\n});\ntype RoomAddSqlDataSourceInput = z.infer<typeof RoomAddSqlDataSourceInput>;\n\nexport function createRoomShellSlice(\n props: CreateRoomShellSliceProps,\n): StateCreator<RoomShellSliceState> {\n const slice: StateCreator<RoomShellSliceState> = (set, get, store) => {\n const {\n connector,\n config: configProps,\n layout: layoutProps,\n room: deprecatedRoomProps,\n fileDataSourceLoader,\n CustomErrorBoundary = ErrorBoundary,\n createCommandProps,\n captureException = (exception) => console.error(exception),\n ...restProps\n } = props;\n\n const createLayoutProps: CreateLayoutSliceProps = {\n ...layoutProps,\n config: layoutProps?.config ?? configProps?.layout,\n panels: layoutProps?.panels ?? deprecatedRoomProps?.panels,\n };\n const roomSliceState = createBaseRoomSlice({\n captureException,\n })(set, get, store);\n\n const sliceState: RoomShellSliceState = {\n ...roomSliceState,\n ...createDbSlice({duckDb: {connector}})(set, get, store),\n ...createLayoutSlice(createLayoutProps)(set, get, store),\n ...createCommandSlice(createCommandProps)(set, get, store),\n room: {\n ...roomSliceState.room,\n config: {\n ...createDefaultBaseRoomConfig(),\n ...configProps,\n },\n CustomErrorBoundary,\n roomFiles: [],\n roomFilesProgress: {},\n isDataAvailable: false,\n dataSourceStates: {},\n tasksProgress: {},\n fileDataSourceLoader,\n\n setConfig: (config) => {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config = config;\n }),\n );\n },\n\n async initialize() {\n registerCommandsForOwner(\n store,\n ROOM_SHELL_COMMAND_OWNER,\n createRoomShellCommands(),\n );\n const {setTaskProgress} = get().room;\n try {\n setTaskProgress(INIT_DB_TASK, {\n message: 'Initializing database…',\n progress: undefined,\n });\n await get().db.initialize();\n setTaskProgress(INIT_DB_TASK, undefined);\n\n setTaskProgress(INIT_ROOM_TASK, {\n message: 'Loading data sources…',\n progress: undefined,\n });\n await updateReadyDataSources();\n await maybeDownloadDataSources();\n\n setTaskProgress(INIT_ROOM_TASK, {\n message: 'Initializing room…',\n progress: undefined,\n });\n // Call initialize on all other slices that have an initialize function\n const slices = Object.entries(store.getState()).filter(\n ([key, value]) =>\n key !== 'room' &&\n key !== 'db' &&\n isRoomSliceWithInitialize(value),\n );\n for (const [sliceName, slice] of slices) {\n if (isRoomSliceWithInitialize(slice)) {\n setTaskProgress(INIT_ROOM_TASK, {\n message: `Initializing ${sliceName}…`,\n progress: undefined,\n });\n\n await slice.initialize();\n }\n }\n const state = store.getState();\n if (isRoomSliceWithInitialize(state)) {\n await state.initialize();\n }\n } finally {\n setTaskProgress(INIT_ROOM_TASK, undefined);\n }\n },\n\n async destroy() {\n unregisterCommandsForOwner(store, ROOM_SHELL_COMMAND_OWNER);\n await roomSliceState.room.destroy();\n },\n\n /** Returns the progress of the last task */\n getLoadingProgress() {\n const {tasksProgress} = get().room;\n const keys = Object.keys(tasksProgress);\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n return tasksProgress[lastKey];\n }\n return undefined;\n },\n\n setTaskProgress(id, taskProgress) {\n set((state) =>\n produce(state, (draft) => {\n if (taskProgress) {\n draft.room.tasksProgress[id] = taskProgress;\n } else {\n delete draft.room.tasksProgress[id];\n }\n }),\n );\n },\n\n setRoomTitle: (title) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.title = title;\n }),\n ),\n\n setDescription: (description) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.description = description;\n }),\n ),\n\n addDataSource: async (\n dataSource,\n status = DataSourceStatus.PENDING,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n const dataSources = draft.room.config.dataSources;\n const tableName = dataSource.tableName;\n const index = dataSources.findIndex(\n (d) => d.tableName === tableName,\n );\n if (index >= 0) {\n dataSources[index] = dataSource;\n } else {\n dataSources.push(dataSource);\n }\n draft.room.dataSourceStates[tableName] = {status};\n }),\n );\n await maybeDownloadDataSources();\n },\n\n async addOrUpdateSqlQueryDataSource(\n tableName,\n query,\n oldTableName,\n abortSignal,\n ) {\n const {schema} = get().db;\n const {db} = get();\n const dbConnectors = get().db.connectors;\n const newTableName =\n tableName !== oldTableName\n ? convertToUniqueColumnOrTableName(\n tableName,\n await db.getTables(schema),\n )\n : tableName;\n let rowCount: number | undefined;\n if (dbConnectors?.runQuery) {\n const routed = await dbConnectors.runQuery({\n sql: query,\n queryType: 'arrow',\n materialize: true,\n materializedName: newTableName,\n signal: abortSignal,\n });\n const relation = routed.relationName || newTableName;\n rowCount = await db.getTableRowCount(relation as string, schema);\n } else {\n const created = await db.createTableFromQuery(newTableName, query, {\n abortSignal,\n });\n rowCount = created.rowCount;\n }\n if (rowCount !== undefined) {\n get().db.setTableRowCount(newTableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n const newDataSource = {\n type: DataSourceTypes.enum.sql,\n sqlQuery: query,\n tableName: newTableName,\n };\n if (oldTableName) {\n draft.room.config.dataSources =\n draft.room.config.dataSources.map((dataSource) =>\n dataSource.tableName === oldTableName\n ? newDataSource\n : dataSource,\n );\n delete draft.room.dataSourceStates[oldTableName];\n } else {\n draft.room.config.dataSources.push(newDataSource);\n }\n draft.room.dataSourceStates[newTableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n await get().db.refreshTableSchemas();\n },\n\n setRoomFiles: (roomFiles) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles = roomFiles;\n }),\n ),\n\n async addRoomFile(file, desiredTableName, loadOptions) {\n const {db} = get();\n\n const pathname = file instanceof File ? file.name : file;\n const tableName =\n desiredTableName ?? convertToValidColumnOrTableName(pathname);\n\n await db.connector.loadFile(file, tableName, loadOptions);\n\n // This must come before addDataSource, as addDataSource can trigger\n // download which also adds the file\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles.push({\n pathname,\n duckdbFileName: pathname,\n size: file instanceof File ? file.size : undefined,\n file: file instanceof File ? file : undefined,\n });\n }),\n );\n await get().room.addDataSource(\n {\n type: DataSourceTypes.enum.file,\n fileName: pathname,\n tableName,\n },\n // duckdbFileName ? DataSourceStatus.READY : DataSourceStatus.PENDING,\n DataSourceStatus.READY,\n );\n await get().db.refreshTableSchemas();\n set((state) =>\n produce(state, (draft) => {\n if (\n Object.values(get().room.dataSourceStates).every(\n (ds) => ds.status === DataSourceStatus.READY,\n )\n ) {\n draft.room.isDataAvailable = true;\n }\n }),\n );\n return get().db.findTableByName(tableName);\n },\n removeSqlQueryDataSource: async (tableName) => {\n await get().room.removeDataSource(tableName);\n },\n removeDataSource: async (tableName) => {\n const {db} = get();\n const dataSource = get().room.config.dataSources.find(\n (d) => d.tableName === tableName,\n );\n if (dataSource) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.dataSources =\n draft.room.config.dataSources.filter(\n (d) => d.tableName !== tableName,\n );\n if (dataSource && isFileDataSource(dataSource)) {\n draft.room.roomFiles = draft.room.roomFiles.filter(\n (f) => f.pathname !== dataSource.fileName,\n );\n }\n delete draft.room.dataSourceStates[tableName];\n }),\n );\n await db.dropTable(tableName);\n await db.refreshTableSchemas();\n }\n },\n\n removeRoomFile: async (pathname) => {\n const dataSource = get().room.config.dataSources.find(\n (d) => isFileDataSource(d) && d.fileName === pathname,\n );\n if (dataSource) {\n await get().room.removeDataSource(dataSource.tableName);\n }\n },\n\n setRoomFileProgress(pathname, fileState) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFilesProgress[pathname] = fileState;\n // Update the file size in the room config from the progress info\n const fileInfo = draft.room.roomFiles.find(\n (f) => f.pathname === pathname,\n );\n if (fileInfo && fileInfo.size === undefined) {\n if (fileState.status !== 'error' && fileState.progress) {\n fileInfo.size = fileState.progress.total;\n }\n }\n }),\n );\n },\n\n areDatasetsReady: () => {\n const dataSourceStates = get().room.dataSourceStates;\n const dataSources = get().room.config.dataSources;\n return dataSources.every(\n (ds) =>\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.READY,\n );\n },\n },\n\n ...restProps,\n };\n\n // If the tables have changed, update the data sources\n store.subscribe((state, prevState) => {\n if (state.db.tables !== prevState.db.tables) {\n updateReadyDataSources();\n }\n });\n\n return sliceState;\n\n async function updateReadyDataSources() {\n const {tables} = get().db;\n const {dataSourceStates} = get().room;\n const {config} = get().room;\n const {dataSources} = config;\n set((state) =>\n produce(state, (draft) => {\n for (const ds of dataSources) {\n const tableName = ds.tableName;\n const table = tables.find((t) => t.tableName === tableName);\n if (table) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n } else {\n // Prev status could be ERROR or PENDING, don't change it then\n if (!dataSourceStates[tableName]?.status) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.PENDING,\n };\n }\n }\n }\n }),\n );\n }\n\n async function maybeDownloadDataSources() {\n const {roomFilesProgress, dataSourceStates} = get().room;\n const {dataSources} = get().room.config;\n const pendingDataSources = dataSources.filter(\n (ds) =>\n !dataSourceStates[ds.tableName] ||\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.PENDING,\n );\n\n const filesToDownload = pendingDataSources.filter((ds) => {\n if (isFileDataSource(ds)) {\n return !roomFilesProgress[ds.fileName];\n }\n if (isUrlDataSource(ds)) {\n return !roomFilesProgress[ds.url];\n }\n return false;\n }) as (FileDataSource | UrlDataSource)[];\n\n if (filesToDownload.length > 0) {\n await downloadRoomFiles(filesToDownload);\n }\n\n const queriesToRun = pendingDataSources.filter(isSqlQueryDataSource);\n\n if (queriesToRun.length > 0) {\n await runDataSourceQueries(queriesToRun);\n }\n\n if (get().room.config.dataSources.length > 0) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.isDataAvailable = true;\n }),\n );\n }\n }\n\n async function downloadRoomFiles(\n filesToDownload: (FileDataSource | UrlDataSource)[],\n ) {\n if (!filesToDownload.length) return;\n const {setTableRowCount} = get().db;\n const {captureException, setTaskProgress, setRoomFileProgress} =\n get().room;\n filesToDownload.forEach((ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n set((state) =>\n produce(state, (draft) => {\n const info = {\n duckdbFileName: fileName,\n pathname: fileName,\n file: undefined,\n size: undefined,\n };\n const index = draft.room.roomFiles.findIndex(\n (f) => f.pathname === fileName,\n );\n if (index >= 0) {\n draft.room.roomFiles[index] = info;\n } else {\n draft.room.roomFiles.push(info);\n }\n }),\n );\n setRoomFileProgress(fileName, {status: 'download'});\n });\n if (filesToDownload.length > 0) {\n updateTotalFileDownloadProgress();\n }\n\n const loadedFiles = await Promise.all(\n filesToDownload.map(async (ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n const onProgress = (progress: ProgressInfo) => {\n setRoomFileProgress(fileName, {\n status: 'download',\n progress,\n });\n updateTotalFileDownloadProgress();\n };\n try {\n let downloadedFile: Uint8Array | File;\n if (isFileDataSource(ds)) {\n const {fileDataSourceLoader} = get().room;\n if (!fileDataSourceLoader) {\n throw new Error('fileDataSourceLoader is not defined');\n }\n downloadedFile = await fileDataSourceLoader(ds, onProgress);\n } else if (isUrlDataSource(ds)) {\n const url = ds.url;\n downloadedFile = await downloadFile(url, {\n method: ds.httpMethod,\n headers: ds.headers,\n onProgress,\n });\n } else {\n // This should never happen as filesToDownload only contains FileDataSource | UrlDataSource\n throw new Error('Unsupported data source type');\n }\n setRoomFileProgress(fileName, {status: 'done'});\n updateTotalFileDownloadProgress();\n const {db} = get();\n await db.connector.loadFile(\n downloadedFile instanceof File\n ? downloadedFile\n : new File([new Uint8Array(downloadedFile)], fileName),\n ds.tableName,\n ds.loadOptions,\n );\n setTableRowCount(\n ds.tableName,\n await db.getTableRowCount(ds.tableName),\n );\n } catch (err) {\n captureException(err);\n console.error(err);\n setRoomFileProgress(fileName, {\n status: 'error',\n message: 'Download failed',\n });\n // TODO: Make sure the errors are shown\n } finally {\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, undefined);\n }\n }),\n );\n if (loadedFiles.length) {\n await get().db.refreshTableSchemas();\n }\n }\n\n async function runDataSourceQueries(queries: SqlQueryDataSource[]) {\n const dbConnectors = (get() as any).db.connectors as\n | {\n runQuery?: (args: {\n sql: string;\n queryType?: 'arrow' | 'json' | 'exec';\n materialize?: boolean;\n materializedName?: string;\n }) => Promise<{relationName?: string}>;\n }\n | undefined;\n for (const ds of queries) {\n try {\n const {tableName, sqlQuery} = ds;\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.FETCHING,\n };\n }),\n );\n let rowCount: number | undefined;\n if (dbConnectors?.runQuery) {\n const routed = await dbConnectors.runQuery({\n sql: sqlQuery,\n queryType: 'arrow',\n materialize: true,\n materializedName: tableName,\n });\n const relation = routed.relationName || tableName;\n rowCount = await get().db.getTableRowCount(relation as string);\n } else {\n const created = await get().db.createTableFromQuery(\n tableName,\n sqlQuery,\n );\n rowCount = created.rowCount;\n }\n if (rowCount !== undefined) {\n get().db.setTableRowCount(tableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n } catch (err) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[ds.tableName] = {\n status: DataSourceStatus.ERROR,\n message: `${err}`,\n };\n }),\n );\n // TODO: Make sure the errors are shown\n }\n }\n await get().db.refreshTableSchemas();\n await updateReadyDataSources();\n }\n\n function updateTotalFileDownloadProgress() {\n const {setTaskProgress, roomFilesProgress} = get().room;\n let total = 0,\n loaded = 0;\n for (const p of Object.values(roomFilesProgress)) {\n if (p.status === 'download' || p.status === 'done') {\n total += p.progress?.total || 0;\n loaded += p.progress?.loaded || 0;\n }\n }\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, {\n progress: total > 0 ? Math.round((loaded / total) * 100) : undefined,\n message: 'Downloading data…',\n });\n }\n };\n\n return slice;\n}\n\ntype RoomShellCommandStoreState = RoomShellSliceState;\n\nfunction createRoomShellCommands(): RoomCommand<RoomShellCommandStoreState>[] {\n return [\n {\n id: 'room.set-title',\n name: 'Set room title',\n description: 'Update the room title',\n group: 'Room',\n keywords: ['room', 'title', 'name'],\n inputSchema: RoomSetTitleCommandInput,\n inputDescription: 'Provide a non-empty room title.',\n ui: {\n keystrokes: 'Mod+Alt+Shift+T',\n },\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {title} = input as RoomSetTitleCommandInput;\n getState().room.setRoomTitle(title);\n return {\n success: true,\n commandId: 'room.set-title',\n message: `Updated room title to \"${title}\".`,\n };\n },\n },\n {\n id: 'room.set-description',\n name: 'Set room description',\n description: 'Update the room description',\n group: 'Room',\n keywords: ['room', 'description'],\n inputSchema: RoomSetDescriptionCommandInput,\n inputDescription: 'Provide room description text.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {description} = input as RoomSetDescriptionCommandInput;\n getState().room.setDescription(description);\n return {\n success: true,\n commandId: 'room.set-description',\n message: 'Updated room description.',\n };\n },\n },\n {\n id: 'room.remove-data-source',\n name: 'Remove data source',\n description: 'Remove a data source by table name',\n group: 'Room',\n keywords: ['room', 'data source', 'remove', 'table'],\n inputSchema: RoomRemoveDataSourceInput,\n inputDescription: 'Provide tableName of the data source to remove.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'high',\n requiresConfirmation: true,\n },\n validateInput: (input, {getState}) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n const dataSource = getState().room.config.dataSources.find(\n (source) => source.tableName === tableName,\n );\n if (!dataSource) {\n throw new Error(\n `Data source for table \"${tableName}\" was not found.`,\n );\n }\n },\n execute: async ({getState}, input) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n await getState().room.removeDataSource(tableName);\n return {\n success: true,\n commandId: 'room.remove-data-source',\n message: `Removed data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-url-data-source',\n name: 'Add URL data source',\n description: 'Add a URL data source and start loading it',\n group: 'Room',\n keywords: ['room', 'data source', 'url', 'add'],\n inputSchema: RoomAddUrlDataSourceInput,\n inputDescription:\n 'Provide url and tableName, with optional httpMethod and headers.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n execute: async ({getState}, input) => {\n const {url, tableName, httpMethod, headers} =\n input as RoomAddUrlDataSourceInput;\n await getState().room.addDataSource({\n type: DataSourceTypes.enum.url,\n url,\n tableName,\n ...(httpMethod ? {httpMethod} : {}),\n ...(headers ? {headers} : {}),\n });\n return {\n success: true,\n commandId: 'room.add-url-data-source',\n message: `Added URL data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-sql-data-source',\n name: 'Add SQL data source',\n description: 'Create a data source from a SQL query',\n group: 'Room',\n keywords: ['room', 'data source', 'sql', 'query', 'add'],\n inputSchema: RoomAddSqlDataSourceInput,\n inputDescription: 'Provide query and tableName.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n validateInput: (input) => {\n const {query} = input as RoomAddSqlDataSourceInput;\n if (!query.trim()) {\n throw new Error('Query cannot be empty.');\n }\n },\n execute: async ({getState}, input) => {\n const {query, tableName} = input as RoomAddSqlDataSourceInput;\n await getState().room.addOrUpdateSqlQueryDataSource(tableName, query);\n return {\n success: true,\n commandId: 'room.add-sql-data-source',\n message: `Added SQL data source \"${tableName}\".`,\n };\n },\n },\n ];\n}\n\nexport function useBaseRoomShellStore<RS extends RoomShellSliceState, T>(\n selector: (state: RS) => T,\n): T {\n return useBaseRoomStore<RS, T>(selector as (state: RS) => T);\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { FileDataSourceCard } from './FileDataSourceCard';
|
|
3
2
|
import { useBaseRoomShellStore } from '../RoomShellSlice';
|
|
3
|
+
import { FileDataSourceCard } from './FileDataSourceCard';
|
|
4
4
|
const FileDataSourcesPanel = ({ isReadOnly }) => {
|
|
5
5
|
const roomFiles = useBaseRoomShellStore((state) => state.room.roomFiles);
|
|
6
6
|
const roomFilesProgress = useBaseRoomShellStore((state) => state.room.roomFilesProgress);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDataSourcesPanel.js","sourceRoot":"","sources":["../../src/data-sources/FileDataSourcesPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"FileDataSourcesPanel.js","sourceRoot":"","sources":["../../src/data-sources/FileDataSourcesPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD,MAAM,oBAAoB,GAA+B,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE;IACxE,MAAM,SAAS,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAAG,qBAAqB,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CACxC,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,kCAAkC,YAC9C,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAC9B,KAAC,kBAAkB,IAEjB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAH1C,CAAC,CAIN,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,oBAAoB,EAAC,CAAC","sourcesContent":["import {FC} from 'react';\nimport {useBaseRoomShellStore} from '../RoomShellSlice';\nimport {FileDataSourceCard} from './FileDataSourceCard';\n\nconst FileDataSourcesPanel: FC<{isReadOnly?: boolean}> = ({isReadOnly}) => {\n const roomFiles = useBaseRoomShellStore((state) => state.room.roomFiles);\n const roomFilesProgress = useBaseRoomShellStore(\n (state) => state.room.roomFilesProgress,\n );\n\n return (\n <div className=\"flex grow flex-col overflow-auto\">\n {roomFiles.map((fileInfo, i) => (\n <FileDataSourceCard\n key={i}\n isReadOnly={isReadOnly}\n fileInfo={fileInfo}\n fileState={roomFilesProgress[fileInfo.pathname]}\n />\n ))}\n </div>\n );\n};\n\nexport {FileDataSourcesPanel};\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -23,5 +23,7 @@ export type { RoomPanelInfo } from '@sqlrooms/layout';
|
|
|
23
23
|
export { createBaseRoomSlice, createBaseSlice, createCommandSlice, createCommandCliAdapter, createCommandMcpAdapter, createPersistHelpers, createRoomCommandExecutionContext, createRoomSlice, createRoomStore, createRoomStoreCreator, createSlice, doesCommandRequireInput, exportCommandInputSchema, getCommandKeystrokes, getCommandInputComponent, getCommandShortcut, hasCommandSliceState, invokeCommandFromStore, isRoomSliceWithDestroy, isRoomSliceWithInitialize, listCommandsFromStore, persistSliceConfigs, registerCommandsForOwner, resolveCommandPolicyMetadata, RoomStateContext, RoomStateProvider, unregisterCommandsForOwner, useBaseRoomStore, validateCommandInput, useRoomStoreApi, } from '@sqlrooms/room-store';
|
|
24
24
|
export type { BaseRoomStore, BaseRoomStoreState, CommandCliAdapter, CommandCliAdapterOptions, CommandMcpAdapter, CommandMcpAdapterOptions, CommandMcpToolDescriptor, CommandSliceState, CreateCommandSliceProps, CreateBaseRoomSliceProps, RoomCommandDescriptor, RoomCommandExecuteOutput, RoomCommandKeystrokes, RoomCommandInvocation, RoomCommandInvokeFailureEvent, RoomCommandInvokeErrorEvent, RoomCommandInvocationOptions, RoomCommandInvokeStartEvent, RoomCommandInvokeSuccessEvent, RoomCommandMiddleware, RoomCommandMiddlewareNext, RegisteredRoomCommand, RoomCommand, RoomCommandInputComponent, RoomCommandInputComponentProps, RoomCommandListOptions, RoomCommandPolicyMetadata, RoomCommandPortableSchema, RoomCommandResult, RoomCommandRiskLevel, RoomCommandSurface, RoomCommandUiMetadata, RoomCommandExecutionContext, RoomCommandPredicate, RoomStateProviderProps, UseRoomStore, } from '@sqlrooms/room-store';
|
|
25
25
|
export { useShallow } from 'zustand/react/shallow';
|
|
26
|
+
export { createDbSlice } from '@sqlrooms/db';
|
|
27
|
+
export type { DbSliceState } from '@sqlrooms/db';
|
|
26
28
|
export { BaseDataSource, BaseRoomConfig, createDefaultBaseRoomConfig, createDefaultMosaicLayout, DataSource, DataSourceTypes, DEFAULT_MOSAIC_LAYOUT, DEFAULT_ROOM_TITLE, FileDataSource, isFileDataSource, isMosaicLayoutParent, isSpatialLoadFileOptions, isSqlQueryDataSource, isUrlDataSource, LayoutConfig, LayoutTypes, LoadFile, LoadFileOptions, MAIN_VIEW, MosaicLayoutConfig, MosaicLayoutDirection, MosaicLayoutNode, MosaicLayoutNodeKey, MosaicLayoutParent, SpatialLoadFileOptions, SpatialLoadOptions, SqlQueryDataSource, StandardLoadFileOptions, StandardLoadOptions, UrlDataSource, } from '@sqlrooms/room-store';
|
|
27
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAClE,YAAY,EACV,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACnD,YAAY,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,oBAAoB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAC7E,YAAY,EAAC,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAE1D,YAAY,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AACzC,YAAY,EAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAE1E,YAAY,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,yBAAyB,EACzB,8BAA8B,EAC9B,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,8 @@ export { DataSourceStatus } from './types';
|
|
|
17
17
|
// Re-export from @sqlrooms/room-store
|
|
18
18
|
export { createBaseRoomSlice, createBaseSlice, createCommandSlice, createCommandCliAdapter, createCommandMcpAdapter, createPersistHelpers, createRoomCommandExecutionContext, createRoomSlice, createRoomStore, createRoomStoreCreator, createSlice, doesCommandRequireInput, exportCommandInputSchema, getCommandKeystrokes, getCommandInputComponent, getCommandShortcut, hasCommandSliceState, invokeCommandFromStore, isRoomSliceWithDestroy, isRoomSliceWithInitialize, listCommandsFromStore, persistSliceConfigs, registerCommandsForOwner, resolveCommandPolicyMetadata, RoomStateContext, RoomStateProvider, unregisterCommandsForOwner, useBaseRoomStore, validateCommandInput, useRoomStoreApi, } from '@sqlrooms/room-store';
|
|
19
19
|
export { useShallow } from 'zustand/react/shallow';
|
|
20
|
+
// Re-export from @sqlrooms/db
|
|
21
|
+
export { createDbSlice } from '@sqlrooms/db';
|
|
20
22
|
// Re-export from @sqlrooms/room-config (via room-store)
|
|
21
23
|
// Values also export their corresponding types automatically (Zod pattern)
|
|
22
24
|
export { BaseDataSource, BaseRoomConfig, createDefaultBaseRoomConfig, createDefaultMosaicLayout, DataSource, DataSourceTypes, DEFAULT_MOSAIC_LAYOUT, DEFAULT_ROOM_TITLE, FileDataSource, isFileDataSource, isMosaicLayoutParent, isSpatialLoadFileOptions, isSqlQueryDataSource, isUrlDataSource, LayoutConfig, LayoutTypes, LoadFile, LoadFileOptions, MAIN_VIEW, MosaicLayoutConfig, MosaicLayoutDirection, MosaicLayoutNode, MosaicLayoutNodeKey, MosaicLayoutParent, SpatialLoadFileOptions, SpatialLoadOptions, SqlQueryDataSource, StandardLoadFileOptions, StandardLoadOptions, UrlDataSource, } from '@sqlrooms/room-store';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAMlE,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,oBAAoB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAK7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAKzC,sCAAsC;AACtC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAwC9B,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAEjD,wDAAwD;AACxD,2EAA2E;AAC3E,OAAO,EACL,cAAc,EACd,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,GACd,MAAM,sBAAsB,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {RoomShell} from './RoomShell';\nexport {RoomShellCommandPalette} from './RoomShellCommandPalette';\nexport type {\n RoomShellCommandPaletteButtonProps,\n RoomShellCommandPaletteProps,\n} from './RoomShellCommandPalette';\n\nexport {FileDataSourceCard} from './data-sources/FileDataSourceCard';\nexport {FileDataSourcesPanel} from './data-sources/FileDataSourcesPanel';\nexport {TableCard} from './data-sources/TableCard';\nexport type {TableAction} from './data-sources/TableCard';\nexport {TablesListPanel} from './data-sources/TablesListPanel';\n\nexport {PanelHeaderButton} from './panels/RoomHeaderButton';\nexport {RoomPanel} from './panels/RoomPanel';\nexport {RoomPanelHeader} from './panels/RoomPanelHeader';\n\nexport {\n RoomShellSidebarButton,\n RoomShellSidebarButtons,\n SidebarButton,\n} from './RoomShellSidebarButtons';\n\nexport {createRoomShellSlice, useBaseRoomShellStore} from './RoomShellSlice';\nexport type {RoomShellSliceState} from './RoomShellSlice';\n\nexport type {StateCreator, StoreApi} from 'zustand';\n\nexport {DataSourceStatus} from './types';\nexport type {DataSourceState, RoomFileInfo, RoomFileState} from './types';\n\nexport type {RoomPanelInfo} from '@sqlrooms/layout';\n\n// Re-export from @sqlrooms/room-store\nexport {\n createBaseRoomSlice,\n createBaseSlice,\n createCommandSlice,\n createCommandCliAdapter,\n createCommandMcpAdapter,\n createPersistHelpers,\n createRoomCommandExecutionContext,\n createRoomSlice,\n createRoomStore,\n createRoomStoreCreator,\n createSlice,\n doesCommandRequireInput,\n exportCommandInputSchema,\n getCommandKeystrokes,\n getCommandInputComponent,\n getCommandShortcut,\n hasCommandSliceState,\n invokeCommandFromStore,\n isRoomSliceWithDestroy,\n isRoomSliceWithInitialize,\n listCommandsFromStore,\n persistSliceConfigs,\n registerCommandsForOwner,\n resolveCommandPolicyMetadata,\n RoomStateContext,\n RoomStateProvider,\n unregisterCommandsForOwner,\n useBaseRoomStore,\n validateCommandInput,\n useRoomStoreApi,\n} from '@sqlrooms/room-store';\nexport type {\n BaseRoomStore,\n BaseRoomStoreState,\n CommandCliAdapter,\n CommandCliAdapterOptions,\n CommandMcpAdapter,\n CommandMcpAdapterOptions,\n CommandMcpToolDescriptor,\n CommandSliceState,\n CreateCommandSliceProps,\n CreateBaseRoomSliceProps,\n RoomCommandDescriptor,\n RoomCommandExecuteOutput,\n RoomCommandKeystrokes,\n RoomCommandInvocation,\n RoomCommandInvokeFailureEvent,\n RoomCommandInvokeErrorEvent,\n RoomCommandInvocationOptions,\n RoomCommandInvokeStartEvent,\n RoomCommandInvokeSuccessEvent,\n RoomCommandMiddleware,\n RoomCommandMiddlewareNext,\n RegisteredRoomCommand,\n RoomCommand,\n RoomCommandInputComponent,\n RoomCommandInputComponentProps,\n RoomCommandListOptions,\n RoomCommandPolicyMetadata,\n RoomCommandPortableSchema,\n RoomCommandResult,\n RoomCommandRiskLevel,\n RoomCommandSurface,\n RoomCommandUiMetadata,\n RoomCommandExecutionContext,\n RoomCommandPredicate,\n RoomStateProviderProps,\n UseRoomStore,\n} from '@sqlrooms/room-store';\n\nexport {useShallow} from 'zustand/react/shallow';\n\n// Re-export from @sqlrooms/room-config (via room-store)\n// Values also export their corresponding types automatically (Zod pattern)\nexport {\n BaseDataSource,\n BaseRoomConfig,\n createDefaultBaseRoomConfig,\n createDefaultMosaicLayout,\n DataSource,\n DataSourceTypes,\n DEFAULT_MOSAIC_LAYOUT,\n DEFAULT_ROOM_TITLE,\n FileDataSource,\n isFileDataSource,\n isMosaicLayoutParent,\n isSpatialLoadFileOptions,\n isSqlQueryDataSource,\n isUrlDataSource,\n LayoutConfig,\n LayoutTypes,\n LoadFile,\n LoadFileOptions,\n MAIN_VIEW,\n MosaicLayoutConfig,\n MosaicLayoutDirection,\n MosaicLayoutNode,\n MosaicLayoutNodeKey,\n MosaicLayoutParent,\n SpatialLoadFileOptions,\n SpatialLoadOptions,\n SqlQueryDataSource,\n StandardLoadFileOptions,\n StandardLoadOptions,\n UrlDataSource,\n} from '@sqlrooms/room-store';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAMlE,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,oBAAoB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAK7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAKzC,sCAAsC;AACtC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAwC9B,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAEjD,8BAA8B;AAC9B,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAG3C,wDAAwD;AACxD,2EAA2E;AAC3E,OAAO,EACL,cAAc,EACd,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,GACd,MAAM,sBAAsB,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {RoomShell} from './RoomShell';\nexport {RoomShellCommandPalette} from './RoomShellCommandPalette';\nexport type {\n RoomShellCommandPaletteButtonProps,\n RoomShellCommandPaletteProps,\n} from './RoomShellCommandPalette';\n\nexport {FileDataSourceCard} from './data-sources/FileDataSourceCard';\nexport {FileDataSourcesPanel} from './data-sources/FileDataSourcesPanel';\nexport {TableCard} from './data-sources/TableCard';\nexport type {TableAction} from './data-sources/TableCard';\nexport {TablesListPanel} from './data-sources/TablesListPanel';\n\nexport {PanelHeaderButton} from './panels/RoomHeaderButton';\nexport {RoomPanel} from './panels/RoomPanel';\nexport {RoomPanelHeader} from './panels/RoomPanelHeader';\n\nexport {\n RoomShellSidebarButton,\n RoomShellSidebarButtons,\n SidebarButton,\n} from './RoomShellSidebarButtons';\n\nexport {createRoomShellSlice, useBaseRoomShellStore} from './RoomShellSlice';\nexport type {RoomShellSliceState} from './RoomShellSlice';\n\nexport type {StateCreator, StoreApi} from 'zustand';\n\nexport {DataSourceStatus} from './types';\nexport type {DataSourceState, RoomFileInfo, RoomFileState} from './types';\n\nexport type {RoomPanelInfo} from '@sqlrooms/layout';\n\n// Re-export from @sqlrooms/room-store\nexport {\n createBaseRoomSlice,\n createBaseSlice,\n createCommandSlice,\n createCommandCliAdapter,\n createCommandMcpAdapter,\n createPersistHelpers,\n createRoomCommandExecutionContext,\n createRoomSlice,\n createRoomStore,\n createRoomStoreCreator,\n createSlice,\n doesCommandRequireInput,\n exportCommandInputSchema,\n getCommandKeystrokes,\n getCommandInputComponent,\n getCommandShortcut,\n hasCommandSliceState,\n invokeCommandFromStore,\n isRoomSliceWithDestroy,\n isRoomSliceWithInitialize,\n listCommandsFromStore,\n persistSliceConfigs,\n registerCommandsForOwner,\n resolveCommandPolicyMetadata,\n RoomStateContext,\n RoomStateProvider,\n unregisterCommandsForOwner,\n useBaseRoomStore,\n validateCommandInput,\n useRoomStoreApi,\n} from '@sqlrooms/room-store';\nexport type {\n BaseRoomStore,\n BaseRoomStoreState,\n CommandCliAdapter,\n CommandCliAdapterOptions,\n CommandMcpAdapter,\n CommandMcpAdapterOptions,\n CommandMcpToolDescriptor,\n CommandSliceState,\n CreateCommandSliceProps,\n CreateBaseRoomSliceProps,\n RoomCommandDescriptor,\n RoomCommandExecuteOutput,\n RoomCommandKeystrokes,\n RoomCommandInvocation,\n RoomCommandInvokeFailureEvent,\n RoomCommandInvokeErrorEvent,\n RoomCommandInvocationOptions,\n RoomCommandInvokeStartEvent,\n RoomCommandInvokeSuccessEvent,\n RoomCommandMiddleware,\n RoomCommandMiddlewareNext,\n RegisteredRoomCommand,\n RoomCommand,\n RoomCommandInputComponent,\n RoomCommandInputComponentProps,\n RoomCommandListOptions,\n RoomCommandPolicyMetadata,\n RoomCommandPortableSchema,\n RoomCommandResult,\n RoomCommandRiskLevel,\n RoomCommandSurface,\n RoomCommandUiMetadata,\n RoomCommandExecutionContext,\n RoomCommandPredicate,\n RoomStateProviderProps,\n UseRoomStore,\n} from '@sqlrooms/room-store';\n\nexport {useShallow} from 'zustand/react/shallow';\n\n// Re-export from @sqlrooms/db\nexport {createDbSlice} from '@sqlrooms/db';\nexport type {DbSliceState} from '@sqlrooms/db';\n\n// Re-export from @sqlrooms/room-config (via room-store)\n// Values also export their corresponding types automatically (Zod pattern)\nexport {\n BaseDataSource,\n BaseRoomConfig,\n createDefaultBaseRoomConfig,\n createDefaultMosaicLayout,\n DataSource,\n DataSourceTypes,\n DEFAULT_MOSAIC_LAYOUT,\n DEFAULT_ROOM_TITLE,\n FileDataSource,\n isFileDataSource,\n isMosaicLayoutParent,\n isSpatialLoadFileOptions,\n isSqlQueryDataSource,\n isUrlDataSource,\n LayoutConfig,\n LayoutTypes,\n LoadFile,\n LoadFileOptions,\n MAIN_VIEW,\n MosaicLayoutConfig,\n MosaicLayoutDirection,\n MosaicLayoutNode,\n MosaicLayoutNodeKey,\n MosaicLayoutParent,\n SpatialLoadFileOptions,\n SpatialLoadOptions,\n SqlQueryDataSource,\n StandardLoadFileOptions,\n StandardLoadOptions,\n UrlDataSource,\n} from '@sqlrooms/room-store';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/room-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0-rc.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -26,14 +26,15 @@
|
|
|
26
26
|
"typedoc": "typedoc"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@sqlrooms/data-table": "0.
|
|
30
|
-
"@sqlrooms/
|
|
31
|
-
"@sqlrooms/
|
|
32
|
-
"@sqlrooms/
|
|
33
|
-
"@sqlrooms/
|
|
34
|
-
"@sqlrooms/room-
|
|
35
|
-
"@sqlrooms/
|
|
36
|
-
"@sqlrooms/
|
|
29
|
+
"@sqlrooms/data-table": "0.29.0-rc.0",
|
|
30
|
+
"@sqlrooms/db": "0.29.0-rc.0",
|
|
31
|
+
"@sqlrooms/duckdb": "0.29.0-rc.0",
|
|
32
|
+
"@sqlrooms/layout": "0.29.0-rc.0",
|
|
33
|
+
"@sqlrooms/monaco-editor": "0.29.0-rc.0",
|
|
34
|
+
"@sqlrooms/room-config": "0.29.0-rc.0",
|
|
35
|
+
"@sqlrooms/room-store": "0.29.0-rc.0",
|
|
36
|
+
"@sqlrooms/ui": "0.29.0-rc.0",
|
|
37
|
+
"@sqlrooms/utils": "0.29.0-rc.0",
|
|
37
38
|
"apache-arrow": "17.0.0",
|
|
38
39
|
"immer": "^11.0.1",
|
|
39
40
|
"lucide-react": "^0.556.0",
|
|
@@ -45,5 +46,5 @@
|
|
|
45
46
|
"react": ">=18",
|
|
46
47
|
"react-dom": ">=18"
|
|
47
48
|
},
|
|
48
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "afdb949c9601b4cdeaae966157a25a54aea2ae54"
|
|
49
50
|
}
|