@sqlrooms/cells 0.29.0-rc.2 → 0.29.0-rc.3

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.
Files changed (78) hide show
  1. package/README.md +8 -8
  2. package/dist/cellsSlice.d.ts.map +1 -1
  3. package/dist/cellsSlice.js +121 -198
  4. package/dist/cellsSlice.js.map +1 -1
  5. package/dist/components/CellSourceSelector.d.ts +1 -0
  6. package/dist/components/CellSourceSelector.d.ts.map +1 -1
  7. package/dist/components/CellSourceSelector.js +8 -9
  8. package/dist/components/CellSourceSelector.js.map +1 -1
  9. package/dist/components/SqlCellContent.js +3 -3
  10. package/dist/components/SqlCellContent.js.map +1 -1
  11. package/dist/components/SqlCellDependentsMenu.d.ts +3 -3
  12. package/dist/components/SqlCellDependentsMenu.d.ts.map +1 -1
  13. package/dist/components/SqlCellDependentsMenu.js +4 -4
  14. package/dist/components/SqlCellDependentsMenu.js.map +1 -1
  15. package/dist/components/VegaCellHeader.d.ts.map +1 -1
  16. package/dist/components/VegaCellHeader.js +2 -1
  17. package/dist/components/VegaCellHeader.js.map +1 -1
  18. package/dist/dagUtils.d.ts +9 -9
  19. package/dist/dagUtils.d.ts.map +1 -1
  20. package/dist/dagUtils.js +44 -42
  21. package/dist/dagUtils.js.map +1 -1
  22. package/dist/defaultCellRegistry.d.ts.map +1 -1
  23. package/dist/defaultCellRegistry.js +16 -12
  24. package/dist/defaultCellRegistry.js.map +1 -1
  25. package/dist/execution.d.ts.map +1 -1
  26. package/dist/execution.js +22 -16
  27. package/dist/execution.js.map +1 -1
  28. package/dist/helpers.d.ts +9 -17
  29. package/dist/helpers.d.ts.map +1 -1
  30. package/dist/helpers.js +24 -43
  31. package/dist/helpers.js.map +1 -1
  32. package/dist/index.d.ts +1 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +1 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/sqlHelpers.d.ts +5 -5
  37. package/dist/sqlHelpers.d.ts.map +1 -1
  38. package/dist/sqlHelpers.js +7 -7
  39. package/dist/sqlHelpers.js.map +1 -1
  40. package/dist/types.d.ts +19 -47
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/types.js +6 -12
  43. package/dist/types.js.map +1 -1
  44. package/dist/useValidateResultName.js +5 -5
  45. package/dist/useValidateResultName.js.map +1 -1
  46. package/dist/utils.d.ts +2 -2
  47. package/dist/utils.d.ts.map +1 -1
  48. package/dist/utils.js +4 -4
  49. package/dist/utils.js.map +1 -1
  50. package/package.json +10 -10
  51. package/dist/components/DeleteSheetModal.d.ts +0 -9
  52. package/dist/components/DeleteSheetModal.d.ts.map +0 -1
  53. package/dist/components/DeleteSheetModal.js +0 -6
  54. package/dist/components/DeleteSheetModal.js.map +0 -1
  55. package/dist/components/SheetsTabBar.d.ts +0 -6
  56. package/dist/components/SheetsTabBar.d.ts.map +0 -1
  57. package/dist/components/SheetsTabBar.js +0 -58
  58. package/dist/components/SheetsTabBar.js.map +0 -1
  59. package/dist/components/SqlCellBody.d.ts +0 -6
  60. package/dist/components/SqlCellBody.d.ts.map +0 -1
  61. package/dist/components/SqlCellBody.js +0 -12
  62. package/dist/components/SqlCellBody.js.map +0 -1
  63. package/dist/crdt.d.ts +0 -61
  64. package/dist/crdt.d.ts.map +0 -1
  65. package/dist/crdt.js +0 -82
  66. package/dist/crdt.js.map +0 -1
  67. package/dist/dagSlice.d.ts +0 -3
  68. package/dist/dagSlice.d.ts.map +0 -1
  69. package/dist/dagSlice.js +0 -51
  70. package/dist/dagSlice.js.map +0 -1
  71. package/dist/typeGuards.d.ts +0 -2
  72. package/dist/typeGuards.d.ts.map +0 -1
  73. package/dist/typeGuards.js +0 -4
  74. package/dist/typeGuards.js.map +0 -1
  75. package/dist/validation.d.ts +0 -16
  76. package/dist/validation.d.ts.map +0 -1
  77. package/dist/validation.js +0 -40
  78. package/dist/validation.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -289,7 +289,7 @@ export type CellRegistryItem<TCell extends Cell = Cell> = {
289
289
  findDependencies: (args: {
290
290
  cell: TCell;
291
291
  cells: Record<string, Cell>;
292
- sheetId: string;
292
+ artifactId: string;
293
293
  sqlSelectToJson: SqlSelectToJsonFn;
294
294
  }) => Promise<string[] | CellDependencies>;
295
295
  /** Optional: custom execution logic (defaults to SQL execution for sql type) */
@@ -337,14 +337,6 @@ export type CellRegistryItem<TCell extends Cell = Cell> = {
337
337
  getResultRelation?: (status: CellStatus) => string | undefined;
338
338
  };
339
339
  export type CellRegistry = Record<string, CellRegistryItem<any>>;
340
- /** Sheet and Edge types */
341
- export declare const SheetType: z.ZodEnum<{
342
- notebook: "notebook";
343
- canvas: "canvas";
344
- app: "app";
345
- dashboard: "dashboard";
346
- }>;
347
- export type SheetType = z.infer<typeof SheetType>;
348
340
  export declare const EdgeKind: z.ZodEnum<{
349
341
  dependency: "dependency";
350
342
  manual: "manual";
@@ -360,22 +352,15 @@ export declare const Edge: z.ZodObject<{
360
352
  }>>;
361
353
  }, z.core.$strip>;
362
354
  export type Edge = z.infer<typeof Edge>;
363
- export declare const SheetGraphCache: z.ZodObject<{
355
+ export declare const CellArtifactGraphCache: z.ZodObject<{
364
356
  dependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
365
357
  dependents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
366
358
  contentHashByCell: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
367
359
  tableDependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
368
360
  }, z.core.$strip>;
369
- export type SheetGraphCache = z.infer<typeof SheetGraphCache>;
370
- export declare const Sheet: z.ZodObject<{
361
+ export type CellArtifactGraphCache = z.infer<typeof CellArtifactGraphCache>;
362
+ export declare const CellArtifactRuntime: z.ZodObject<{
371
363
  id: z.ZodString;
372
- type: z.ZodEnum<{
373
- notebook: "notebook";
374
- canvas: "canvas";
375
- app: "app";
376
- dashboard: "dashboard";
377
- }>;
378
- title: z.ZodString;
379
364
  schemaName: z.ZodOptional<z.ZodString>;
380
365
  cellIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
381
366
  edges: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -394,7 +379,7 @@ export declare const Sheet: z.ZodObject<{
394
379
  tableDependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
395
380
  }, z.core.$strip>>;
396
381
  }, z.core.$strip>;
397
- export type Sheet = z.infer<typeof Sheet>;
382
+ export type CellArtifactRuntime = z.infer<typeof CellArtifactRuntime>;
398
383
  /** Cell Status */
399
384
  export declare const SqlCellStatus: z.ZodObject<{
400
385
  type: z.ZodLiteral<"sql">;
@@ -456,15 +441,8 @@ export declare const CellsSliceConfig: z.ZodObject<{
456
441
  type: z.ZodString;
457
442
  data: z.ZodRecord<z.ZodString, z.ZodAny>;
458
443
  }, z.core.$strip>>>;
459
- sheets: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
444
+ artifacts: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
460
445
  id: z.ZodString;
461
- type: z.ZodEnum<{
462
- notebook: "notebook";
463
- canvas: "canvas";
464
- app: "app";
465
- dashboard: "dashboard";
466
- }>;
467
- title: z.ZodString;
468
446
  schemaName: z.ZodOptional<z.ZodString>;
469
447
  cellIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
470
448
  edges: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -483,15 +461,12 @@ export declare const CellsSliceConfig: z.ZodObject<{
483
461
  tableDependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
484
462
  }, z.core.$strip>>;
485
463
  }, z.core.$strip>>>;
486
- sheetOrder: z.ZodDefault<z.ZodArray<z.ZodString>>;
487
- currentSheetId: z.ZodOptional<z.ZodString>;
488
464
  tableDepSchemas: z.ZodDefault<z.ZodArray<z.ZodString>>;
489
465
  }, z.core.$strip>;
490
466
  export type CellsSliceConfig = z.infer<typeof CellsSliceConfig>;
491
467
  export type CellsSliceOptions = {
492
468
  config?: Partial<CellsSliceConfig>;
493
469
  cellRegistry: CellRegistry;
494
- supportedSheetTypes?: SheetType[];
495
470
  };
496
471
  /** Data stored for a cell's query result */
497
472
  export type CellResultData = {
@@ -511,7 +486,6 @@ export type CellsSliceState = {
511
486
  status: Record<string, CellStatus>;
512
487
  activeAbortControllers: Record<string, AbortController>;
513
488
  cellRegistry: CellRegistry;
514
- supportedSheetTypes: SheetType[];
515
489
  /** Monotonic counter per cell, incremented when a new execution result arrives. Used to trigger pagination reset and re-render. */
516
490
  resultVersion: Record<string, number>;
517
491
  /** Monotonic counter per cell, incremented when a pagination/sorting fetch completes. Used to trigger re-render without resetting pagination. */
@@ -524,21 +498,18 @@ export type CellsSliceState = {
524
498
  setCrossFilterSelection: (chartCellId: string, sqlId: string, selection: CrossFilterSelection | null) => void;
525
499
  getCrossFilterPredicate: (chartCellId: string, sqlId: string) => string | null;
526
500
  clearCrossFilterGroup: (sqlId: string) => void;
527
- addCell: (sheetId: string, cell: Cell, index?: number) => Promise<void>;
501
+ ensureArtifact: (artifactId: string, options?: {
502
+ schemaName?: string;
503
+ }) => void;
504
+ removeArtifact: (artifactId: string) => void;
505
+ addCell: (artifactId: string, cell: Cell, index?: number) => Promise<void>;
528
506
  removeCell: (id: string) => void;
529
507
  updateCell: (id: string, updater: (cell: Cell) => Cell, opts?: {
530
508
  cascade?: boolean;
531
509
  }) => Promise<void>;
532
- addSheet: (title?: string, type?: SheetType) => string;
533
- removeSheet: (sheetId: string) => void;
534
- closeSheet: (sheetId: string) => void;
535
- openSheet: (sheetId: string) => void;
536
- setSheetOrder: (sheetOrder: string[]) => void;
537
- renameSheet: (sheetId: string, title: string) => void;
538
- setCurrentSheet: (sheetId: string) => void;
539
- addEdge: (sheetId: string, edge: Omit<Edge, 'id'>) => void;
540
- removeEdge: (sheetId: string, edgeId: string) => void;
541
- updateEdgesFromSql: (sheetId: string, cellId: string) => Promise<void>;
510
+ addEdge: (artifactId: string, edge: Omit<Edge, 'id'>) => void;
511
+ removeEdge: (artifactId: string, edgeId: string) => void;
512
+ updateEdgesFromSql: (artifactId: string, cellId: string) => Promise<void>;
542
513
  runCell: (id: string, opts?: {
543
514
  cascade?: boolean;
544
515
  schemaName?: string;
@@ -556,10 +527,11 @@ export type CellsSliceState = {
556
527
  id: string;
557
528
  desc: boolean;
558
529
  }[]) => Promise<void>;
559
- getDownstream: (sheetId: string, sourceCellId: string) => string[];
560
- getRootCells: (sheetId: string) => string[];
561
- runAllCellsCascade: (sheetId: string) => Promise<void>;
562
- runDownstreamCascade: (sheetId: string, sourceCellId: string) => Promise<void>;
530
+ getArtifactIdForCell: (cellId: string) => string | undefined;
531
+ getDownstream: (artifactId: string, sourceCellId: string) => string[];
532
+ getRootCells: (artifactId: string) => string[];
533
+ runAllCellsCascade: (artifactId: string) => Promise<void>;
534
+ runDownstreamCascade: (artifactId: string, sourceCellId: string) => Promise<void>;
563
535
  };
564
536
  initialize?: () => Promise<void>;
565
537
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -95,8 +95,6 @@ export const Cell = z.object({
95
95
  type: CellType,
96
96
  data: z.record(z.string(), z.any()),
97
97
  });
98
- /** Sheet and Edge types */
99
- export const SheetType = z.enum(['notebook', 'canvas', 'app', 'dashboard']);
100
98
  export const EdgeKind = z.enum(['dependency', 'manual']);
101
99
  export const Edge = z.object({
102
100
  id: z.string(),
@@ -104,20 +102,18 @@ export const Edge = z.object({
104
102
  target: z.string(), // cellId
105
103
  kind: EdgeKind.optional(),
106
104
  });
107
- export const SheetGraphCache = z.object({
105
+ export const CellArtifactGraphCache = z.object({
108
106
  dependencies: z.record(z.string(), z.array(z.string())).default({}),
109
107
  dependents: z.record(z.string(), z.array(z.string())).default({}),
110
108
  contentHashByCell: z.record(z.string(), z.string()).optional(),
111
109
  tableDependencies: z.record(z.string(), z.array(z.string())).default({}),
112
110
  });
113
- export const Sheet = z.object({
111
+ export const CellArtifactRuntime = z.object({
114
112
  id: z.string(),
115
- type: SheetType,
116
- title: z.string(),
117
113
  schemaName: z.string().optional(),
118
- cellIds: z.array(z.string()).default([]), // Which cells belong to this sheet
119
- edges: z.array(Edge).default([]), // Dependencies
120
- graphCache: SheetGraphCache.optional(),
114
+ cellIds: z.array(z.string()).default([]),
115
+ edges: z.array(Edge).default([]),
116
+ graphCache: CellArtifactGraphCache.optional(),
121
117
  });
122
118
  /** Cell Status */
123
119
  export const SqlCellStatus = z.object({
@@ -135,9 +131,7 @@ export const OtherCellStatus = z.object({
135
131
  });
136
132
  export const CellsSliceConfig = z.object({
137
133
  data: z.record(z.string(), Cell).default({}),
138
- sheets: z.record(z.string(), Sheet).default({}),
139
- sheetOrder: z.array(z.string()).default([]),
140
- currentSheetId: z.string().optional(),
134
+ artifacts: z.record(z.string(), CellArtifactRuntime).default({}),
141
135
  /** Which database schemas' tables are eligible for direct table dependencies. */
142
136
  tableDepSchemas: z.array(z.string()).default(['main']),
143
137
  });
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type {DbSliceState} from '@sqlrooms/db';\nimport type {BaseRoomStoreState, SliceFunctions} from '@sqlrooms/room-store';\nimport type * as arrow from 'apache-arrow';\nimport type React from 'react';\nimport {z} from 'zod';\n\n/** Cell types */\nexport type BuiltInCellType = 'sql' | 'text' | 'vega' | 'input';\nexport type CellType = BuiltInCellType | (string & {});\nexport const CellType = z.string();\n\n/** Input Cell types */\nexport const InputTypes = z.enum(['text', 'slider', 'dropdown']);\nexport type InputTypes = z.infer<typeof InputTypes>;\n\nexport const InputText = z.object({\n kind: z.literal(InputTypes.enum.text),\n varName: z.string(),\n value: z.string().default(''),\n});\nexport type InputText = z.infer<typeof InputText>;\n\nexport const InputSlider = z.object({\n kind: z.literal(InputTypes.enum.slider),\n varName: z.string(),\n min: z.number().default(0),\n max: z.number().default(100),\n step: z.number().default(1),\n value: z.number().default(0),\n});\nexport type InputSlider = z.infer<typeof InputSlider>;\n\nexport const InputDropdown = z.object({\n kind: z.literal(InputTypes.enum.dropdown),\n varName: z.string(),\n options: z.array(z.string()).default([]),\n value: z.string().default(''),\n});\nexport type InputDropdown = z.infer<typeof InputDropdown>;\n\nexport const InputUnion = z.discriminatedUnion('kind', [\n InputText,\n InputSlider,\n InputDropdown,\n]);\nexport type InputUnion = z.infer<typeof InputUnion>;\n\n/** SQL Cell */\nexport const SqlCellData = z.object({\n title: z.string().default('Untitled'),\n sql: z.string().default(''),\n resultName: z.string().optional(), // SQL-friendly identifier for the result view\n connectorId: z.string().optional(),\n});\nexport type SqlCellData = z.infer<typeof SqlCellData>;\n\n/** Text Cell */\nexport const TextCellData = z.object({\n title: z.string().default('Text'),\n text: z.string().default(''),\n});\nexport type TextCellData = z.infer<typeof TextCellData>;\n\n/** Field type category for cross-filter predicates */\nexport type BrushFieldType = 'numeric' | 'temporal' | 'string';\n\n/** Cross-filter configuration for Vega chart cells */\nexport const CrossFilterConfig = z.object({\n enabled: z.boolean().default(true),\n brushField: z.string().optional(),\n brushFieldType: z\n .enum(['numeric', 'temporal', 'string'])\n .optional() as z.ZodOptional<z.ZodType<BrushFieldType>>,\n});\nexport type CrossFilterConfig = z.infer<typeof CrossFilterConfig>;\n\n/** Vega Cell */\nexport const VegaCellData = z.object({\n title: z.string().default('Chart'),\n sqlId: z.string().optional(), // In notebook, it links to another cell. In canvas, it might be the same.\n tableRef: z.string().optional(), // Direct table reference, e.g. \"main.flights\"\n sql: z.string().optional(), // In canvas, it often has its own SQL.\n vegaSpec: z.any().optional(),\n crossFilter: CrossFilterConfig.default({enabled: true}),\n});\nexport type VegaCellData = z.infer<typeof VegaCellData>;\n\n/** Input Cell Data */\nexport const InputCellData = z.object({\n title: z.string().default('Input'),\n input: InputUnion,\n});\nexport type InputCellData = z.infer<typeof InputCellData>;\n\n/** Unified Cell Data */\nexport const CellData = z.object({\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type CellData = {\n type: CellType;\n data: Record<string, any>;\n};\n\nexport const SqlCell = z.object({\n id: z.string(),\n type: z.literal('sql'),\n data: SqlCellData,\n});\nexport type SqlCell = z.infer<typeof SqlCell>;\n\nexport const TextCell = z.object({\n id: z.string(),\n type: z.literal('text'),\n data: TextCellData,\n});\nexport type TextCell = z.infer<typeof TextCell>;\n\nexport const VegaCell = z.object({\n id: z.string(),\n type: z.literal('vega'),\n data: VegaCellData,\n});\nexport type VegaCell = z.infer<typeof VegaCell>;\n\nexport const InputCell = z.object({\n id: z.string(),\n type: z.literal('input'),\n data: InputCellData,\n});\nexport type InputCell = z.infer<typeof InputCell>;\nexport const SqlCellSchema = SqlCell;\nexport const TextCellSchema = TextCell;\nexport const VegaCellSchema = VegaCell;\nexport const InputCellSchema = InputCell;\n\n/** Canonical Cell */\nexport const Cell = z.object({\n id: z.string(),\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type Cell = {\n id: string;\n type: CellType;\n data: Record<string, any>;\n};\n\n/** Unified Cell Registry */\nexport type CellContainerProps = {\n header?: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n showHeader?: boolean;\n};\n\n/** Type for SQL AST parsing function from DuckDB slice */\nexport type SqlSelectToJsonFn = (sql: string) => Promise<{\n error: boolean;\n error_type?: string;\n statements?: unknown[];\n}>;\n\n/** Return type from findDependencies: cell IDs and optional table names. */\nexport type CellDependencies = {\n cellIds: string[];\n tableNames?: string[];\n};\n\nexport type CreateCellArgs = {\n id: string;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n};\n\nexport type CellRegistryItem<TCell extends Cell = Cell> = {\n type: string;\n title: string;\n createCell: (args: CreateCellArgs) => TCell;\n renderCell: (props: {\n id: string;\n cell: TCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n }) => React.ReactElement;\n /** Find dependencies for DAG using AST-enabled async resolution. */\n findDependencies: (args: {\n cell: TCell;\n cells: Record<string, Cell>;\n sheetId: string;\n sqlSelectToJson: SqlSelectToJsonFn;\n }) => Promise<string[] | CellDependencies>;\n /** Optional: custom execution logic (defaults to SQL execution for sql type) */\n runCell?: (args: {\n id: string;\n opts?: {cascade?: boolean; schemaName?: string};\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n /** Optional: rename the result view when resultName changes */\n renameResult?: (args: {\n id: string;\n oldResultView: string;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n\n /** Return initial CellStatus when a cell is first added. Default: {type:'other'} */\n createStatus?: (id: string) => CellStatus;\n /** Called once during cells.initialize() for each cell of this type. Reset ephemeral runtime state after hydration. */\n onInitialize?: (args: {\n id: string;\n status: CellStatus | undefined;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => void;\n /** Called when cell is removed. Clean up DuckDB relations, caches, etc. */\n onRemove?: (args: {\n id: string;\n status: CellStatus | undefined;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void> | void;\n /** Detect whether an updateCell change is semantically significant for this cell type. */\n hasSemanticChange?: (oldCell: TCell, newCell: TCell) => boolean;\n /** Reset status to idle/stale. Called by invalidateCellStatus. If not provided, status is set to {type:'other'}. */\n invalidateStatus?: (currentStatus: CellStatus) => CellStatus;\n /** Collect DuckDB relation names that should be dropped when this cell is removed. */\n getRelationsToDrop?: (status: CellStatus) => string[];\n /** Record an error on the cell status during cascade execution. */\n recordError?: (currentStatus: CellStatus, message: string) => CellStatus;\n /** Return the query relation name for paged fetches, if applicable. */\n getResultRelation?: (status: CellStatus) => string | undefined;\n};\n\nexport type CellRegistry = Record<string, CellRegistryItem<any>>;\n\n/** Sheet and Edge types */\nexport const SheetType = z.enum(['notebook', 'canvas', 'app', 'dashboard']);\nexport type SheetType = z.infer<typeof SheetType>;\n\nexport const EdgeKind = z.enum(['dependency', 'manual']);\nexport type EdgeKind = z.infer<typeof EdgeKind>;\n\nexport const Edge = z.object({\n id: z.string(),\n source: z.string(), // cellId\n target: z.string(), // cellId\n kind: EdgeKind.optional(),\n});\nexport type Edge = z.infer<typeof Edge>;\n\nexport const SheetGraphCache = z.object({\n dependencies: z.record(z.string(), z.array(z.string())).default({}),\n dependents: z.record(z.string(), z.array(z.string())).default({}),\n contentHashByCell: z.record(z.string(), z.string()).optional(),\n tableDependencies: z.record(z.string(), z.array(z.string())).default({}),\n});\nexport type SheetGraphCache = z.infer<typeof SheetGraphCache>;\n\nexport const Sheet = z.object({\n id: z.string(),\n type: SheetType,\n title: z.string(),\n schemaName: z.string().optional(),\n cellIds: z.array(z.string()).default([]), // Which cells belong to this sheet\n edges: z.array(Edge).default([]), // Dependencies\n graphCache: SheetGraphCache.optional(),\n});\nexport type Sheet = z.infer<typeof Sheet>;\n\n/** Cell Status */\nexport const SqlCellStatus = z.object({\n type: z.literal('sql'),\n status: z.enum(['idle', 'running', 'success', 'cancel', 'error']),\n lastError: z.string().optional(),\n referencedTables: z.array(z.string()).default([]),\n resultName: z.string().optional(),\n resultView: z.string().optional(),\n resultRelationType: z.enum(['view', 'table']).optional(),\n lastRunTime: z.number().optional(),\n});\nexport type SqlCellStatus = z.infer<typeof SqlCellStatus>;\n\nexport const OtherCellStatus = z.object({\n type: z.literal('other'),\n});\nexport type OtherCellStatus = z.infer<typeof OtherCellStatus>;\n\n/** Extensible cell status -- each cell type defines its own shape with a discriminating `type` field. */\nexport type CellStatus = {type: string; [key: string]: unknown};\n\n/** SQL execution results */\nexport type SqlRunResult = {\n resultName?: string;\n referencedTables?: string[];\n lastRunTime?: number;\n};\n\nexport type SqlRunCallbacks = {\n onStart?: () => void;\n onSuccess?: (result: SqlRunResult) => void;\n onError?: (message: string) => void;\n onFinally?: () => void;\n};\n\nexport type SqlRenderInput = {\n varName: string;\n value: string | number;\n};\n\nexport type SqlDependencyOptions = {\n inputTypes?: string[];\n sqlTypes?: string[];\n};\n\nexport type SqlCellRunStatus =\n | {\n state: 'idle' | 'running' | 'success' | 'cancel' | 'error';\n message?: string;\n resultName?: string;\n }\n | undefined;\n\nexport const CellsSliceConfig = z.object({\n data: z.record(z.string(), Cell).default({}),\n sheets: z.record(z.string(), Sheet).default({}),\n sheetOrder: z.array(z.string()).default([]),\n currentSheetId: z.string().optional(),\n /** Which database schemas' tables are eligible for direct table dependencies. */\n tableDepSchemas: z.array(z.string()).default(['main']),\n});\nexport type CellsSliceConfig = z.infer<typeof CellsSliceConfig>;\n\nexport type CellsSliceOptions = {\n config?: Partial<CellsSliceConfig>;\n cellRegistry: CellRegistry;\n supportedSheetTypes?: SheetType[];\n};\n\n/** Data stored for a cell's query result */\nexport type CellResultData = {\n arrowTable: arrow.Table;\n totalRows: number;\n};\n\n/** Cross-filter selection value emitted by a Vega chart brush */\nexport type CrossFilterSelection = {\n field: string;\n fieldType?: BrushFieldType;\n type: 'interval' | 'point';\n value: unknown;\n};\n\nexport type CellsSliceState = {\n cells: SliceFunctions & {\n config: CellsSliceConfig;\n status: Record<string, CellStatus>;\n activeAbortControllers: Record<string, AbortController>;\n cellRegistry: CellRegistry;\n supportedSheetTypes: SheetType[];\n /** Monotonic counter per cell, incremented when a new execution result arrives. Used to trigger pagination reset and re-render. */\n resultVersion: Record<string, number>;\n /** Monotonic counter per cell, incremented when a pagination/sorting fetch completes. Used to trigger re-render without resetting pagination. */\n pageVersion: Record<string, number>;\n\n /**\n * Ephemeral cross-filter selections (not persisted).\n * Outer key: sqlId (the shared data source), inner key: chartCellId.\n */\n crossFilterSelections: Record<\n string,\n Record<string, CrossFilterSelection | null>\n >;\n setCrossFilterSelection: (\n chartCellId: string,\n sqlId: string,\n selection: CrossFilterSelection | null,\n ) => void;\n getCrossFilterPredicate: (\n chartCellId: string,\n sqlId: string,\n ) => string | null;\n clearCrossFilterGroup: (sqlId: string) => void;\n\n // Cell CRUD\n addCell: (sheetId: string, cell: Cell, index?: number) => Promise<void>;\n removeCell: (id: string) => void;\n updateCell: (\n id: string,\n updater: (cell: Cell) => Cell,\n opts?: {cascade?: boolean},\n ) => Promise<void>;\n\n // Sheet CRUD\n addSheet: (title?: string, type?: SheetType) => string;\n removeSheet: (sheetId: string) => void;\n closeSheet: (sheetId: string) => void;\n openSheet: (sheetId: string) => void;\n setSheetOrder: (sheetOrder: string[]) => void;\n renameSheet: (sheetId: string, title: string) => void;\n setCurrentSheet: (sheetId: string) => void;\n\n // Edge management\n addEdge: (sheetId: string, edge: Omit<Edge, 'id'>) => void;\n removeEdge: (sheetId: string, edgeId: string) => void;\n updateEdgesFromSql: (sheetId: string, cellId: string) => Promise<void>;\n\n // Execution\n runCell: (\n id: string,\n opts?: {cascade?: boolean; schemaName?: string},\n ) => Promise<void>;\n cancelCell: (id: string) => void;\n invalidateCellStatus: (id: string) => void;\n\n // Cell result cache\n setCellResult: (id: string, data: CellResultData) => void;\n setCellResultPage: (id: string, data: CellResultData) => void;\n getCellResult: (id: string) => CellResultData | undefined;\n clearCellResult: (id: string) => void;\n fetchCellResultPage: (\n id: string,\n pagination: {pageIndex: number; pageSize: number},\n sorting?: {id: string; desc: boolean}[],\n ) => Promise<void>;\n\n // DAG methods\n getDownstream: (sheetId: string, sourceCellId: string) => string[];\n getRootCells: (sheetId: string) => string[];\n runAllCellsCascade: (sheetId: string) => Promise<void>;\n runDownstreamCascade: (\n sheetId: string,\n sourceCellId: string,\n ) => Promise<void>;\n };\n // Slice lifecycle\n initialize?: () => Promise<void>;\n};\n\nexport type CellsRootState = BaseRoomStoreState &\n DbSliceState &\n CellsSliceState;\n\nexport function isSqlCell(cell: Cell): cell is SqlCell {\n return cell.type === 'sql';\n}\n\nexport function isTextCell(cell: Cell): cell is TextCell {\n return cell.type === 'text';\n}\n\nexport function isVegaCell(cell: Cell): cell is VegaCell {\n return cell.type === 'vega';\n}\n\nexport function isInputCell(cell: Cell): cell is InputCell {\n return cell.type === 'input';\n}\n\nexport function isSqlCellStatus(\n status: CellStatus | undefined,\n): status is SqlCellStatus {\n return status?.type === 'sql';\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type {DbSliceState} from '@sqlrooms/db';\nimport type {BaseRoomStoreState, SliceFunctions} from '@sqlrooms/room-store';\nimport type * as arrow from 'apache-arrow';\nimport type React from 'react';\nimport {z} from 'zod';\n\n/** Cell types */\nexport type BuiltInCellType = 'sql' | 'text' | 'vega' | 'input';\nexport type CellType = BuiltInCellType | (string & {});\nexport const CellType = z.string();\n\n/** Input Cell types */\nexport const InputTypes = z.enum(['text', 'slider', 'dropdown']);\nexport type InputTypes = z.infer<typeof InputTypes>;\n\nexport const InputText = z.object({\n kind: z.literal(InputTypes.enum.text),\n varName: z.string(),\n value: z.string().default(''),\n});\nexport type InputText = z.infer<typeof InputText>;\n\nexport const InputSlider = z.object({\n kind: z.literal(InputTypes.enum.slider),\n varName: z.string(),\n min: z.number().default(0),\n max: z.number().default(100),\n step: z.number().default(1),\n value: z.number().default(0),\n});\nexport type InputSlider = z.infer<typeof InputSlider>;\n\nexport const InputDropdown = z.object({\n kind: z.literal(InputTypes.enum.dropdown),\n varName: z.string(),\n options: z.array(z.string()).default([]),\n value: z.string().default(''),\n});\nexport type InputDropdown = z.infer<typeof InputDropdown>;\n\nexport const InputUnion = z.discriminatedUnion('kind', [\n InputText,\n InputSlider,\n InputDropdown,\n]);\nexport type InputUnion = z.infer<typeof InputUnion>;\n\n/** SQL Cell */\nexport const SqlCellData = z.object({\n title: z.string().default('Untitled'),\n sql: z.string().default(''),\n resultName: z.string().optional(), // SQL-friendly identifier for the result view\n connectorId: z.string().optional(),\n});\nexport type SqlCellData = z.infer<typeof SqlCellData>;\n\n/** Text Cell */\nexport const TextCellData = z.object({\n title: z.string().default('Text'),\n text: z.string().default(''),\n});\nexport type TextCellData = z.infer<typeof TextCellData>;\n\n/** Field type category for cross-filter predicates */\nexport type BrushFieldType = 'numeric' | 'temporal' | 'string';\n\n/** Cross-filter configuration for Vega chart cells */\nexport const CrossFilterConfig = z.object({\n enabled: z.boolean().default(true),\n brushField: z.string().optional(),\n brushFieldType: z\n .enum(['numeric', 'temporal', 'string'])\n .optional() as z.ZodOptional<z.ZodType<BrushFieldType>>,\n});\nexport type CrossFilterConfig = z.infer<typeof CrossFilterConfig>;\n\n/** Vega Cell */\nexport const VegaCellData = z.object({\n title: z.string().default('Chart'),\n sqlId: z.string().optional(), // In notebook, it links to another cell. In canvas, it might be the same.\n tableRef: z.string().optional(), // Direct table reference, e.g. \"main.flights\"\n sql: z.string().optional(), // In canvas, it often has its own SQL.\n vegaSpec: z.any().optional(),\n crossFilter: CrossFilterConfig.default({enabled: true}),\n});\nexport type VegaCellData = z.infer<typeof VegaCellData>;\n\n/** Input Cell Data */\nexport const InputCellData = z.object({\n title: z.string().default('Input'),\n input: InputUnion,\n});\nexport type InputCellData = z.infer<typeof InputCellData>;\n\n/** Unified Cell Data */\nexport const CellData = z.object({\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type CellData = {\n type: CellType;\n data: Record<string, any>;\n};\n\nexport const SqlCell = z.object({\n id: z.string(),\n type: z.literal('sql'),\n data: SqlCellData,\n});\nexport type SqlCell = z.infer<typeof SqlCell>;\n\nexport const TextCell = z.object({\n id: z.string(),\n type: z.literal('text'),\n data: TextCellData,\n});\nexport type TextCell = z.infer<typeof TextCell>;\n\nexport const VegaCell = z.object({\n id: z.string(),\n type: z.literal('vega'),\n data: VegaCellData,\n});\nexport type VegaCell = z.infer<typeof VegaCell>;\n\nexport const InputCell = z.object({\n id: z.string(),\n type: z.literal('input'),\n data: InputCellData,\n});\nexport type InputCell = z.infer<typeof InputCell>;\nexport const SqlCellSchema = SqlCell;\nexport const TextCellSchema = TextCell;\nexport const VegaCellSchema = VegaCell;\nexport const InputCellSchema = InputCell;\n\n/** Canonical Cell */\nexport const Cell = z.object({\n id: z.string(),\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type Cell = {\n id: string;\n type: CellType;\n data: Record<string, any>;\n};\n\n/** Unified Cell Registry */\nexport type CellContainerProps = {\n header?: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n showHeader?: boolean;\n};\n\n/** Type for SQL AST parsing function from DuckDB slice */\nexport type SqlSelectToJsonFn = (sql: string) => Promise<{\n error: boolean;\n error_type?: string;\n statements?: unknown[];\n}>;\n\n/** Return type from findDependencies: cell IDs and optional table names. */\nexport type CellDependencies = {\n cellIds: string[];\n tableNames?: string[];\n};\n\nexport type CreateCellArgs = {\n id: string;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n};\n\nexport type CellRegistryItem<TCell extends Cell = Cell> = {\n type: string;\n title: string;\n createCell: (args: CreateCellArgs) => TCell;\n renderCell: (props: {\n id: string;\n cell: TCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n }) => React.ReactElement;\n /** Find dependencies for DAG using AST-enabled async resolution. */\n findDependencies: (args: {\n cell: TCell;\n cells: Record<string, Cell>;\n artifactId: string;\n sqlSelectToJson: SqlSelectToJsonFn;\n }) => Promise<string[] | CellDependencies>;\n /** Optional: custom execution logic (defaults to SQL execution for sql type) */\n runCell?: (args: {\n id: string;\n opts?: {cascade?: boolean; schemaName?: string};\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n /** Optional: rename the result view when resultName changes */\n renameResult?: (args: {\n id: string;\n oldResultView: string;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n\n /** Return initial CellStatus when a cell is first added. Default: {type:'other'} */\n createStatus?: (id: string) => CellStatus;\n /** Called once during cells.initialize() for each cell of this type. Reset ephemeral runtime state after hydration. */\n onInitialize?: (args: {\n id: string;\n status: CellStatus | undefined;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => void;\n /** Called when cell is removed. Clean up DuckDB relations, caches, etc. */\n onRemove?: (args: {\n id: string;\n status: CellStatus | undefined;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void> | void;\n /** Detect whether an updateCell change is semantically significant for this cell type. */\n hasSemanticChange?: (oldCell: TCell, newCell: TCell) => boolean;\n /** Reset status to idle/stale. Called by invalidateCellStatus. If not provided, status is set to {type:'other'}. */\n invalidateStatus?: (currentStatus: CellStatus) => CellStatus;\n /** Collect DuckDB relation names that should be dropped when this cell is removed. */\n getRelationsToDrop?: (status: CellStatus) => string[];\n /** Record an error on the cell status during cascade execution. */\n recordError?: (currentStatus: CellStatus, message: string) => CellStatus;\n /** Return the query relation name for paged fetches, if applicable. */\n getResultRelation?: (status: CellStatus) => string | undefined;\n};\n\nexport type CellRegistry = Record<string, CellRegistryItem<any>>;\n\nexport const EdgeKind = z.enum(['dependency', 'manual']);\nexport type EdgeKind = z.infer<typeof EdgeKind>;\n\nexport const Edge = z.object({\n id: z.string(),\n source: z.string(), // cellId\n target: z.string(), // cellId\n kind: EdgeKind.optional(),\n});\nexport type Edge = z.infer<typeof Edge>;\n\nexport const CellArtifactGraphCache = z.object({\n dependencies: z.record(z.string(), z.array(z.string())).default({}),\n dependents: z.record(z.string(), z.array(z.string())).default({}),\n contentHashByCell: z.record(z.string(), z.string()).optional(),\n tableDependencies: z.record(z.string(), z.array(z.string())).default({}),\n});\nexport type CellArtifactGraphCache = z.infer<typeof CellArtifactGraphCache>;\n\nexport const CellArtifactRuntime = z.object({\n id: z.string(),\n schemaName: z.string().optional(),\n cellIds: z.array(z.string()).default([]),\n edges: z.array(Edge).default([]),\n graphCache: CellArtifactGraphCache.optional(),\n});\nexport type CellArtifactRuntime = z.infer<typeof CellArtifactRuntime>;\n\n/** Cell Status */\nexport const SqlCellStatus = z.object({\n type: z.literal('sql'),\n status: z.enum(['idle', 'running', 'success', 'cancel', 'error']),\n lastError: z.string().optional(),\n referencedTables: z.array(z.string()).default([]),\n resultName: z.string().optional(),\n resultView: z.string().optional(),\n resultRelationType: z.enum(['view', 'table']).optional(),\n lastRunTime: z.number().optional(),\n});\nexport type SqlCellStatus = z.infer<typeof SqlCellStatus>;\n\nexport const OtherCellStatus = z.object({\n type: z.literal('other'),\n});\nexport type OtherCellStatus = z.infer<typeof OtherCellStatus>;\n\n/** Extensible cell status -- each cell type defines its own shape with a discriminating `type` field. */\nexport type CellStatus = {type: string; [key: string]: unknown};\n\n/** SQL execution results */\nexport type SqlRunResult = {\n resultName?: string;\n referencedTables?: string[];\n lastRunTime?: number;\n};\n\nexport type SqlRunCallbacks = {\n onStart?: () => void;\n onSuccess?: (result: SqlRunResult) => void;\n onError?: (message: string) => void;\n onFinally?: () => void;\n};\n\nexport type SqlRenderInput = {\n varName: string;\n value: string | number;\n};\n\nexport type SqlDependencyOptions = {\n inputTypes?: string[];\n sqlTypes?: string[];\n};\n\nexport type SqlCellRunStatus =\n | {\n state: 'idle' | 'running' | 'success' | 'cancel' | 'error';\n message?: string;\n resultName?: string;\n }\n | undefined;\n\nexport const CellsSliceConfig = z.object({\n data: z.record(z.string(), Cell).default({}),\n artifacts: z.record(z.string(), CellArtifactRuntime).default({}),\n /** Which database schemas' tables are eligible for direct table dependencies. */\n tableDepSchemas: z.array(z.string()).default(['main']),\n});\nexport type CellsSliceConfig = z.infer<typeof CellsSliceConfig>;\n\nexport type CellsSliceOptions = {\n config?: Partial<CellsSliceConfig>;\n cellRegistry: CellRegistry;\n};\n\n/** Data stored for a cell's query result */\nexport type CellResultData = {\n arrowTable: arrow.Table;\n totalRows: number;\n};\n\n/** Cross-filter selection value emitted by a Vega chart brush */\nexport type CrossFilterSelection = {\n field: string;\n fieldType?: BrushFieldType;\n type: 'interval' | 'point';\n value: unknown;\n};\n\nexport type CellsSliceState = {\n cells: SliceFunctions & {\n config: CellsSliceConfig;\n status: Record<string, CellStatus>;\n activeAbortControllers: Record<string, AbortController>;\n cellRegistry: CellRegistry;\n /** Monotonic counter per cell, incremented when a new execution result arrives. Used to trigger pagination reset and re-render. */\n resultVersion: Record<string, number>;\n /** Monotonic counter per cell, incremented when a pagination/sorting fetch completes. Used to trigger re-render without resetting pagination. */\n pageVersion: Record<string, number>;\n\n /**\n * Ephemeral cross-filter selections (not persisted).\n * Outer key: sqlId (the shared data source), inner key: chartCellId.\n */\n crossFilterSelections: Record<\n string,\n Record<string, CrossFilterSelection | null>\n >;\n setCrossFilterSelection: (\n chartCellId: string,\n sqlId: string,\n selection: CrossFilterSelection | null,\n ) => void;\n getCrossFilterPredicate: (\n chartCellId: string,\n sqlId: string,\n ) => string | null;\n clearCrossFilterGroup: (sqlId: string) => void;\n\n // Cell CRUD\n ensureArtifact: (\n artifactId: string,\n options?: {schemaName?: string},\n ) => void;\n removeArtifact: (artifactId: string) => void;\n addCell: (artifactId: string, cell: Cell, index?: number) => Promise<void>;\n removeCell: (id: string) => void;\n updateCell: (\n id: string,\n updater: (cell: Cell) => Cell,\n opts?: {cascade?: boolean},\n ) => Promise<void>;\n\n // Edge management\n addEdge: (artifactId: string, edge: Omit<Edge, 'id'>) => void;\n removeEdge: (artifactId: string, edgeId: string) => void;\n updateEdgesFromSql: (artifactId: string, cellId: string) => Promise<void>;\n\n // Execution\n runCell: (\n id: string,\n opts?: {cascade?: boolean; schemaName?: string},\n ) => Promise<void>;\n cancelCell: (id: string) => void;\n invalidateCellStatus: (id: string) => void;\n\n // Cell result cache\n setCellResult: (id: string, data: CellResultData) => void;\n setCellResultPage: (id: string, data: CellResultData) => void;\n getCellResult: (id: string) => CellResultData | undefined;\n clearCellResult: (id: string) => void;\n fetchCellResultPage: (\n id: string,\n pagination: {pageIndex: number; pageSize: number},\n sorting?: {id: string; desc: boolean}[],\n ) => Promise<void>;\n\n // DAG methods\n getArtifactIdForCell: (cellId: string) => string | undefined;\n getDownstream: (artifactId: string, sourceCellId: string) => string[];\n getRootCells: (artifactId: string) => string[];\n runAllCellsCascade: (artifactId: string) => Promise<void>;\n runDownstreamCascade: (\n artifactId: string,\n sourceCellId: string,\n ) => Promise<void>;\n };\n // Slice lifecycle\n initialize?: () => Promise<void>;\n};\n\nexport type CellsRootState = BaseRoomStoreState &\n DbSliceState &\n CellsSliceState;\n\nexport function isSqlCell(cell: Cell): cell is SqlCell {\n return cell.type === 'sql';\n}\n\nexport function isTextCell(cell: Cell): cell is TextCell {\n return cell.type === 'text';\n}\n\nexport function isVegaCell(cell: Cell): cell is VegaCell {\n return cell.type === 'vega';\n}\n\nexport function isInputCell(cell: Cell): cell is InputCell {\n return cell.type === 'input';\n}\n\nexport function isSqlCellStatus(\n status: CellStatus | undefined,\n): status is SqlCellStatus {\n return status?.type === 'sql';\n}\n"]}
@@ -79,13 +79,13 @@ export function validateResultName(opts) {
79
79
  * 4. Self-reference cycle detection
80
80
  */
81
81
  export function useValidateResultName(cellId, name) {
82
- const currentSheetId = useCellsStore((s) => s.cells.config.currentSheetId);
82
+ const artifactId = useCellsStore((s) => s.cells.getArtifactIdForCell(cellId));
83
83
  const cellsData = useCellsStore((s) => s.cells.config.data);
84
- const sheets = useCellsStore((s) => s.cells.config.sheets);
84
+ const artifacts = useCellsStore((s) => s.cells.config.artifacts);
85
85
  const tableSchemas = useCellsStore((s) => s.db.tables);
86
86
  const currentCell = cellsData[cellId];
87
87
  const currentCellSql = currentCell?.type === 'sql' ? currentCell.data.sql : '';
88
- const sheetCellIds = useMemo(() => (currentSheetId ? (sheets[currentSheetId]?.cellIds ?? []) : []), [currentSheetId, sheets]);
88
+ const artifactCellIds = useMemo(() => (artifactId ? (artifacts[artifactId]?.cellIds ?? []) : []), [artifactId, artifacts]);
89
89
  const mainSchemaTableNames = useMemo(() => tableSchemas
90
90
  .filter((t) => (t.table.schema ?? t.schema) === 'main')
91
91
  .map((t) => t.table.table ?? t.tableName), [tableSchemas]);
@@ -94,7 +94,7 @@ export function useValidateResultName(cellId, name) {
94
94
  proposedName: name,
95
95
  currentCellId: cellId,
96
96
  currentCellSql,
97
- sheetCellIds,
97
+ sheetCellIds: artifactCellIds,
98
98
  cells: cellsData,
99
99
  mainSchemaTableNames,
100
100
  convertToValidName: convertToValidColumnOrTableName,
@@ -103,7 +103,7 @@ export function useValidateResultName(cellId, name) {
103
103
  name,
104
104
  cellId,
105
105
  currentCellSql,
106
- sheetCellIds,
106
+ artifactCellIds,
107
107
  cellsData,
108
108
  mainSchemaTableNames,
109
109
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"useValidateResultName.js","sourceRoot":"","sources":["../src/useValidateResultName.ts"],"names":[],"mappings":"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","sourcesContent":["import {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport {useMemo} from 'react';\nimport {useCellsStore} from './hooks';\nimport type {Cell, SqlCellData} from './types';\nimport {getEffectiveResultName, isValidSqlIdentifier} from './utils';\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Strips single-quoted SQL string literals from text so that identifier\n * checks don't produce false positives on quoted string content.\n * Handles escaped single-quotes inside literals (e.g. 'it''s fine').\n */\nfunction stripStringLiterals(sql: string): string {\n return sql.replace(/'(?:[^']|'')*'/g, \"''\");\n}\n\nfunction containsIdentifier(text: string, name: string): boolean {\n // The lookbehind includes '.' so that qualified names like `schema.my_result`\n // are NOT matched — we only want to detect unqualified references.\n // The lookahead intentionally omits '.' so that column-access expressions like\n // `my_result.column` ARE matched (they reference the `my_result` table).\n const pattern = new RegExp(\n `(?<![a-zA-Z0-9_.])${escapeRegExp(name)}(?![a-zA-Z0-9_])`,\n 'i',\n );\n return pattern.test(stripStringLiterals(text));\n}\n\n/**\n * Validates whether a proposed result name is available for a SQL cell.\n *\n * Returns a human-readable error message if the name is taken or would cause\n * problems, or `null` if the name is acceptable.\n *\n * Checks performed (in order):\n * 1. Basic validation (empty, valid SQL identifier)\n * 2. Not already used by another SQL cell in the same sheet (name collision).\n * 3. Not conflicting with a main-schema table name (would shadow real data).\n * 4. Not creating a self-reference cycle (SQL references the proposed name).\n */\nexport function validateResultName(opts: {\n proposedName: string;\n currentCellId: string;\n currentCellSql: string;\n sheetCellIds: string[];\n cells: Record<string, Cell>;\n mainSchemaTableNames: ReadonlyArray<string>;\n convertToValidName: (name: string) => string;\n}): string | null {\n const {\n proposedName,\n currentCellId,\n currentCellSql,\n sheetCellIds,\n cells,\n mainSchemaTableNames,\n convertToValidName,\n } = opts;\n\n const trimmedName = proposedName.trim();\n\n // 1. Basic validation first\n if (!trimmedName) {\n return 'Cannot be empty';\n }\n\n if (!isValidSqlIdentifier(trimmedName)) {\n return 'Must be a valid SQL identifier';\n }\n\n const nameLower = trimmedName.toLowerCase();\n\n // 2. Check for name collision with other SQL cells in the same sheet\n for (const cellId of sheetCellIds) {\n if (cellId === currentCellId) {\n continue;\n }\n\n const cell = cells[cellId];\n if (!cell || cell.type !== 'sql') {\n continue;\n }\n\n const otherName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidName,\n );\n\n if (otherName.toLowerCase() === nameLower) {\n return 'Already used by another cell';\n }\n }\n\n // 3. Check for conflict with main-schema table names\n if (mainSchemaTableNames.some((t) => t.toLowerCase() === nameLower)) {\n return 'Conflicts with existing table';\n }\n\n // 4. Check for self-reference cycle: the cell's SQL references the proposed name\n if (containsIdentifier(currentCellSql, trimmedName)) {\n return 'Name creates a dependency cycle';\n }\n\n return null;\n}\n\n/**\n * Hook to validate SQL cell result names.\n * Returns an error message if invalid, or null if valid.\n *\n * Performs all validation checks via validateResultName:\n * 1. Basic validation (empty, valid SQL identifier)\n * 2. Name collision with other cells\n * 3. Conflict with main-schema tables\n * 4. Self-reference cycle detection\n */\nexport function useValidateResultName(\n cellId: string,\n name: string,\n): string | null {\n const currentSheetId = useCellsStore((s) => s.cells.config.currentSheetId);\n const cellsData = useCellsStore((s) => s.cells.config.data);\n const sheets = useCellsStore((s) => s.cells.config.sheets);\n const tableSchemas = useCellsStore((s) => s.db.tables);\n\n const currentCell = cellsData[cellId];\n const currentCellSql =\n currentCell?.type === 'sql' ? currentCell.data.sql : '';\n\n const sheetCellIds = useMemo(\n () => (currentSheetId ? (sheets[currentSheetId]?.cellIds ?? []) : []),\n [currentSheetId, sheets],\n );\n\n const mainSchemaTableNames = useMemo(\n () =>\n tableSchemas\n .filter((t) => (t.table.schema ?? t.schema) === 'main')\n .map((t) => t.table.table ?? t.tableName),\n [tableSchemas],\n );\n\n return useMemo(() => {\n return validateResultName({\n proposedName: name,\n currentCellId: cellId,\n currentCellSql,\n sheetCellIds,\n cells: cellsData,\n mainSchemaTableNames,\n convertToValidName: convertToValidColumnOrTableName,\n });\n }, [\n name,\n cellId,\n currentCellSql,\n sheetCellIds,\n cellsData,\n mainSchemaTableNames,\n ]);\n}\n"]}
1
+ {"version":3,"file":"useValidateResultName.js","sourceRoot":"","sources":["../src/useValidateResultName.ts"],"names":[],"mappings":"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","sourcesContent":["import {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport {useMemo} from 'react';\nimport {useCellsStore} from './hooks';\nimport type {Cell, SqlCellData} from './types';\nimport {getEffectiveResultName, isValidSqlIdentifier} from './utils';\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Strips single-quoted SQL string literals from text so that identifier\n * checks don't produce false positives on quoted string content.\n * Handles escaped single-quotes inside literals (e.g. 'it''s fine').\n */\nfunction stripStringLiterals(sql: string): string {\n return sql.replace(/'(?:[^']|'')*'/g, \"''\");\n}\n\nfunction containsIdentifier(text: string, name: string): boolean {\n // The lookbehind includes '.' so that qualified names like `schema.my_result`\n // are NOT matched — we only want to detect unqualified references.\n // The lookahead intentionally omits '.' so that column-access expressions like\n // `my_result.column` ARE matched (they reference the `my_result` table).\n const pattern = new RegExp(\n `(?<![a-zA-Z0-9_.])${escapeRegExp(name)}(?![a-zA-Z0-9_])`,\n 'i',\n );\n return pattern.test(stripStringLiterals(text));\n}\n\n/**\n * Validates whether a proposed result name is available for a SQL cell.\n *\n * Returns a human-readable error message if the name is taken or would cause\n * problems, or `null` if the name is acceptable.\n *\n * Checks performed (in order):\n * 1. Basic validation (empty, valid SQL identifier)\n * 2. Not already used by another SQL cell in the same sheet (name collision).\n * 3. Not conflicting with a main-schema table name (would shadow real data).\n * 4. Not creating a self-reference cycle (SQL references the proposed name).\n */\nexport function validateResultName(opts: {\n proposedName: string;\n currentCellId: string;\n currentCellSql: string;\n sheetCellIds: string[];\n cells: Record<string, Cell>;\n mainSchemaTableNames: ReadonlyArray<string>;\n convertToValidName: (name: string) => string;\n}): string | null {\n const {\n proposedName,\n currentCellId,\n currentCellSql,\n sheetCellIds,\n cells,\n mainSchemaTableNames,\n convertToValidName,\n } = opts;\n\n const trimmedName = proposedName.trim();\n\n // 1. Basic validation first\n if (!trimmedName) {\n return 'Cannot be empty';\n }\n\n if (!isValidSqlIdentifier(trimmedName)) {\n return 'Must be a valid SQL identifier';\n }\n\n const nameLower = trimmedName.toLowerCase();\n\n // 2. Check for name collision with other SQL cells in the same sheet\n for (const cellId of sheetCellIds) {\n if (cellId === currentCellId) {\n continue;\n }\n\n const cell = cells[cellId];\n if (!cell || cell.type !== 'sql') {\n continue;\n }\n\n const otherName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidName,\n );\n\n if (otherName.toLowerCase() === nameLower) {\n return 'Already used by another cell';\n }\n }\n\n // 3. Check for conflict with main-schema table names\n if (mainSchemaTableNames.some((t) => t.toLowerCase() === nameLower)) {\n return 'Conflicts with existing table';\n }\n\n // 4. Check for self-reference cycle: the cell's SQL references the proposed name\n if (containsIdentifier(currentCellSql, trimmedName)) {\n return 'Name creates a dependency cycle';\n }\n\n return null;\n}\n\n/**\n * Hook to validate SQL cell result names.\n * Returns an error message if invalid, or null if valid.\n *\n * Performs all validation checks via validateResultName:\n * 1. Basic validation (empty, valid SQL identifier)\n * 2. Name collision with other cells\n * 3. Conflict with main-schema tables\n * 4. Self-reference cycle detection\n */\nexport function useValidateResultName(\n cellId: string,\n name: string,\n): string | null {\n const artifactId = useCellsStore((s) => s.cells.getArtifactIdForCell(cellId));\n const cellsData = useCellsStore((s) => s.cells.config.data);\n const artifacts = useCellsStore((s) => s.cells.config.artifacts);\n const tableSchemas = useCellsStore((s) => s.db.tables);\n\n const currentCell = cellsData[cellId];\n const currentCellSql =\n currentCell?.type === 'sql' ? currentCell.data.sql : '';\n\n const artifactCellIds = useMemo(\n () => (artifactId ? (artifacts[artifactId]?.cellIds ?? []) : []),\n [artifactId, artifacts],\n );\n\n const mainSchemaTableNames = useMemo(\n () =>\n tableSchemas\n .filter((t) => (t.table.schema ?? t.schema) === 'main')\n .map((t) => t.table.table ?? t.tableName),\n [tableSchemas],\n );\n\n return useMemo(() => {\n return validateResultName({\n proposedName: name,\n currentCellId: cellId,\n currentCellSql,\n sheetCellIds: artifactCellIds,\n cells: cellsData,\n mainSchemaTableNames,\n convertToValidName: convertToValidColumnOrTableName,\n });\n }, [\n name,\n cellId,\n currentCellSql,\n artifactCellIds,\n cellsData,\n mainSchemaTableNames,\n ]);\n}\n"]}
package/dist/utils.d.ts CHANGED
@@ -11,9 +11,9 @@ export declare function isValidSqlIdentifier(name: string): boolean;
11
11
  */
12
12
  export declare function getEffectiveResultName(data: SqlCellData, convertToValidName: (name: string) => string): string;
13
13
  /**
14
- * Generates a stable SQL schema name for a sheet id.
14
+ * Generates a stable SQL schema name for an artifact id.
15
15
  */
16
- export declare function getSheetSchemaName(sheetId: string): string;
16
+ export declare function getArtifactSchemaName(artifactId: string): string;
17
17
  /**
18
18
  * Extracts a preview from SQL query - first non-empty line and whether there are more lines.
19
19
  * Returns empty firstLine if the SQL is empty or contains only whitespace.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AAEzC,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAE7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,WAAW,EACjB,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAC3C,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB,CAaA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AAEzC,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAE7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,WAAW,EACjB,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAC3C,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB,CAaA"}
package/dist/utils.js CHANGED
@@ -26,11 +26,11 @@ export function getEffectiveResultName(data, convertToValidName) {
26
26
  return normalizedTitle;
27
27
  }
28
28
  /**
29
- * Generates a stable SQL schema name for a sheet id.
29
+ * Generates a stable SQL schema name for an artifact id.
30
30
  */
31
- export function getSheetSchemaName(sheetId) {
32
- const normalized = sheetId.replace(/[^a-zA-Z0-9_]/g, '_').toLowerCase();
33
- return `sheet_${normalized}`;
31
+ export function getArtifactSchemaName(artifactId) {
32
+ const normalized = artifactId.replace(/[^a-zA-Z0-9_]/g, '_').toLowerCase();
33
+ return `artifact_${normalized}`;
34
34
  }
35
35
  /**
36
36
  * Extracts a preview from SQL query - first non-empty line and whether there are more lines.
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAI,KAAoB;IAC/C,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAiB,EACjB,kBAA4C;IAE5C,IAAI,IAAI,CAAC,UAAU,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAErE,6DAA6D;IAC7D,sDAAsD;IACtD,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7E,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACxE,OAAO,SAAS,UAAU,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAI5C,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG;SAC7B,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAC,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,SAAS;QACT,YAAY,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;KAC9B,CAAC;AACJ,CAAC","sourcesContent":["import type {SqlCellData} from './types';\n\nexport function isDefined<T>(value: T | undefined): value is T {\n return value !== undefined;\n}\n\n/**\n * Validates that a string is a valid SQL identifier.\n * Must start with a letter or underscore, followed by letters, digits, or underscores.\n */\nexport function isValidSqlIdentifier(name: string): boolean {\n return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name);\n}\n\n/**\n * Gets the effective result name for a SQL cell.\n * Returns explicit resultName if valid, otherwise auto-generates from title.\n */\nexport function getEffectiveResultName(\n data: SqlCellData,\n convertToValidName: (name: string) => string,\n): string {\n if (data.resultName && isValidSqlIdentifier(data.resultName)) {\n return data.resultName;\n }\n\n const normalizedTitle = convertToValidName(data.title).toLowerCase();\n\n // Keep SQL default titles mapped to a neutral result_* name:\n // \"SQL 1\" -> \"result_1\", \"SQL Query 2\" -> \"result_2\".\n const sqlDefaultMatch = normalizedTitle.match(/^sql(?:_query)?(?:_(\\d+))?$/);\n if (sqlDefaultMatch) {\n return sqlDefaultMatch[1] ? `result_${sqlDefaultMatch[1]}` : 'result';\n }\n\n return normalizedTitle;\n}\n\n/**\n * Generates a stable SQL schema name for a sheet id.\n */\nexport function getSheetSchemaName(sheetId: string): string {\n const normalized = sheetId.replace(/[^a-zA-Z0-9_]/g, '_').toLowerCase();\n return `sheet_${normalized}`;\n}\n\n/**\n * Extracts a preview from SQL query - first non-empty line and whether there are more lines.\n * Returns empty firstLine if the SQL is empty or contains only whitespace.\n */\nexport function getSqlQueryPreview(sql: string): {\n firstLine: string;\n hasMoreLines: boolean;\n} {\n const [firstLine, ...rest] = sql\n .split('\\n')\n .filter((line) => line.trim() !== '');\n\n if (!firstLine) {\n return {firstLine: '', hasMoreLines: false};\n }\n\n return {\n firstLine,\n hasMoreLines: rest.length > 0,\n };\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAI,KAAoB;IAC/C,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAiB,EACjB,kBAA4C;IAE5C,IAAI,IAAI,CAAC,UAAU,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAErE,6DAA6D;IAC7D,sDAAsD;IACtD,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7E,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3E,OAAO,YAAY,UAAU,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAI5C,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG;SAC7B,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAC,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,SAAS;QACT,YAAY,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;KAC9B,CAAC;AACJ,CAAC","sourcesContent":["import type {SqlCellData} from './types';\n\nexport function isDefined<T>(value: T | undefined): value is T {\n return value !== undefined;\n}\n\n/**\n * Validates that a string is a valid SQL identifier.\n * Must start with a letter or underscore, followed by letters, digits, or underscores.\n */\nexport function isValidSqlIdentifier(name: string): boolean {\n return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name);\n}\n\n/**\n * Gets the effective result name for a SQL cell.\n * Returns explicit resultName if valid, otherwise auto-generates from title.\n */\nexport function getEffectiveResultName(\n data: SqlCellData,\n convertToValidName: (name: string) => string,\n): string {\n if (data.resultName && isValidSqlIdentifier(data.resultName)) {\n return data.resultName;\n }\n\n const normalizedTitle = convertToValidName(data.title).toLowerCase();\n\n // Keep SQL default titles mapped to a neutral result_* name:\n // \"SQL 1\" -> \"result_1\", \"SQL Query 2\" -> \"result_2\".\n const sqlDefaultMatch = normalizedTitle.match(/^sql(?:_query)?(?:_(\\d+))?$/);\n if (sqlDefaultMatch) {\n return sqlDefaultMatch[1] ? `result_${sqlDefaultMatch[1]}` : 'result';\n }\n\n return normalizedTitle;\n}\n\n/**\n * Generates a stable SQL schema name for an artifact id.\n */\nexport function getArtifactSchemaName(artifactId: string): string {\n const normalized = artifactId.replace(/[^a-zA-Z0-9_]/g, '_').toLowerCase();\n return `artifact_${normalized}`;\n}\n\n/**\n * Extracts a preview from SQL query - first non-empty line and whether there are more lines.\n * Returns empty firstLine if the SQL is empty or contains only whitespace.\n */\nexport function getSqlQueryPreview(sql: string): {\n firstLine: string;\n hasMoreLines: boolean;\n} {\n const [firstLine, ...rest] = sql\n .split('\\n')\n .filter((line) => line.trim() !== '');\n\n if (!firstLine) {\n return {firstLine: '', hasMoreLines: false};\n }\n\n return {\n firstLine,\n hasMoreLines: rest.length > 0,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/cells",
3
- "version": "0.29.0-rc.2",
3
+ "version": "0.29.0-rc.3",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -26,14 +26,14 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@paralleldrive/cuid2": "^2.2.2",
29
- "@sqlrooms/data-table": "0.29.0-rc.2",
30
- "@sqlrooms/db": "0.29.0-rc.2",
31
- "@sqlrooms/duckdb": "0.29.0-rc.2",
32
- "@sqlrooms/room-store": "0.29.0-rc.2",
33
- "@sqlrooms/sql-editor": "0.29.0-rc.2",
34
- "@sqlrooms/ui": "0.29.0-rc.2",
35
- "@sqlrooms/utils": "0.29.0-rc.2",
36
- "@sqlrooms/vega": "0.29.0-rc.2",
29
+ "@sqlrooms/data-table": "0.29.0-rc.3",
30
+ "@sqlrooms/db": "0.29.0-rc.3",
31
+ "@sqlrooms/duckdb": "0.29.0-rc.3",
32
+ "@sqlrooms/room-store": "0.29.0-rc.3",
33
+ "@sqlrooms/sql-editor": "0.29.0-rc.3",
34
+ "@sqlrooms/ui": "0.29.0-rc.3",
35
+ "@sqlrooms/utils": "0.29.0-rc.3",
36
+ "@sqlrooms/vega": "0.29.0-rc.3",
37
37
  "@tanstack/react-table": "^8.21.3",
38
38
  "apache-arrow": "17.0.0",
39
39
  "immer": "^11.0.1",
@@ -52,5 +52,5 @@
52
52
  "react": "^18 || ^19",
53
53
  "react-dom": "^18 || ^19"
54
54
  },
55
- "gitHead": "5d511631992c1af8852ea79ced488867aad4a555"
55
+ "gitHead": "4ffaf6c31d41c27f96bd3e4f5e83d431968721c3"
56
56
  }
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- export type DeleteSheetModalProps = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- onConfirm: () => void;
6
- sheetTitle?: string;
7
- };
8
- export declare const DeleteSheetModal: React.FC<DeleteSheetModalProps>;
9
- //# sourceMappingURL=DeleteSheetModal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteSheetModal.d.ts","sourceRoot":"","sources":["../../src/components/DeleteSheetModal.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA2B5D,CAAC"}
@@ -1,6 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Button, } from '@sqlrooms/ui';
3
- export const DeleteSheetModal = ({ isOpen, onClose, onConfirm, sheetTitle, }) => {
4
- return (_jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { children: ["Delete ", sheetTitle || 'Sheet'] }), _jsx(DialogDescription, { children: "Are you sure you want to delete this sheet? This action cannot be undone." })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "destructive", onClick: onConfirm, children: "Delete" })] })] }) }));
5
- };
6
- //# sourceMappingURL=DeleteSheetModal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteSheetModal.js","sourceRoot":"","sources":["../../src/components/DeleteSheetModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,GACP,MAAM,cAAc,CAAC;AAUtB,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EAChE,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,GACX,EAAE,EAAE;IACH,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,YAC9D,MAAC,aAAa,eACZ,MAAC,YAAY,eACX,MAAC,WAAW,0BAAS,UAAU,IAAI,OAAO,IAAe,EACzD,KAAC,iBAAiB,4FAGE,IACP,EACf,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,uBAEjC,EACT,KAAC,MAAM,IAAC,OAAO,EAAC,aAAa,EAAC,OAAO,EAAE,SAAS,uBAEvC,IACI,IACD,GACT,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Button,\n} from '@sqlrooms/ui';\nimport React from 'react';\n\nexport type DeleteSheetModalProps = {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n sheetTitle?: string;\n};\n\nexport const DeleteSheetModal: React.FC<DeleteSheetModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n sheetTitle,\n}) => {\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete {sheetTitle || 'Sheet'}</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete this sheet? This action cannot be\n undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"destructive\" onClick={onConfirm}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n"]}
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- export type SheetsTabBarProps = {
3
- className?: string;
4
- };
5
- export declare const SheetsTabBar: React.FC<SheetsTabBarProps>;
6
- //# sourceMappingURL=SheetsTabBar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SheetsTabBar.d.ts","sourceRoot":"","sources":["../../src/components/SheetsTabBar.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AASF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAmIpD,CAAC"}