@datarecce/ui 0.1.1 → 0.1.8

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/README.md CHANGED
@@ -18,23 +18,26 @@ This library requires the following peer dependencies:
18
18
 
19
19
  ```json
20
20
  {
21
- "@chakra-ui/react": "^3.0.0",
22
21
  "@emotion/react": "^11.0.0",
22
+ "@mui/material": "^7.0.0",
23
23
  "@tanstack/react-query": "^5.0.0",
24
24
  "@xyflow/react": "^12.0.0",
25
+ "axios": "^1.0.0",
25
26
  "react": "^18.0.0 || ^19.0.0",
26
27
  "react-dom": "^18.0.0 || ^19.0.0"
27
28
  }
28
29
  ```
29
30
 
31
+ > **Note**: This library uses Material-UI (MUI) for its UI components. The `@emotion/react` dependency is required by MUI for styling.
32
+
30
33
  ## Usage
31
34
 
32
35
  ### Basic Setup
33
36
 
34
- Wrap your application with the Recce UI Provider:
37
+ Wrap your application with the required providers:
35
38
 
36
39
  ```tsx
37
- import { Provider } from "@datarecce/ui";
40
+ import { MuiProvider, ToasterProvider } from "@datarecce/ui";
38
41
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
39
42
 
40
43
  const queryClient = new QueryClient();
@@ -42,7 +45,11 @@ const queryClient = new QueryClient();
42
45
  function App() {
43
46
  return (
44
47
  <QueryClientProvider client={queryClient}>
45
- <Provider>{/* Your app components */}</Provider>
48
+ <MuiProvider>
49
+ <ToasterProvider>
50
+ {/* Your app components */}
51
+ </ToasterProvider>
52
+ </MuiProvider>
46
53
  </QueryClientProvider>
47
54
  );
48
55
  }
@@ -101,7 +108,7 @@ import type { DataFrame, Check, Run } from "@datarecce/ui/types";
101
108
 
102
109
  - `QueryForm` - SQL query input form
103
110
  - `QueryPage` - Complete query interface
104
- - `SqlEditor` - Monaco-based SQL editor
111
+ - `SqlEditor` - CodeMirror-based SQL editor
105
112
  - `QueryResultView` - Query results display
106
113
 
107
114
  ### Profile Components
@@ -147,67 +154,114 @@ axiosClient.defaults.headers.common["Authorization"] = "Bearer token";
147
154
 
148
155
  ## Development
149
156
 
150
- ### Building from Source
157
+ ### Prerequisites
158
+
159
+ - Node.js >= 20
160
+ - pnpm (package manager)
151
161
 
152
- This package uses a git submodule to reference the main Recce repository:
162
+ ### Quick Start
153
163
 
154
164
  ```bash
155
165
  # Clone with submodules
156
166
  git clone --recursive https://github.com/DataRecce/recce-ui.git
157
-
158
- # Or if already cloned, initialize submodules
159
- git submodule init
160
- git submodule update
167
+ cd recce-ui
161
168
 
162
169
  # Install dependencies
163
170
  pnpm install
164
171
 
165
- # The postinstall script will automatically apply TypeScript patches
166
- # If you need to reapply patches manually:
167
- npm run patch:apply
168
-
169
172
  # Build the library
170
- pnpm build
173
+ make build
171
174
 
172
- # Run in development mode
173
- pnpm dev
175
+ # Run type checking
176
+ make type-check
177
+ ```
174
178
 
175
- # Type checking
176
- pnpm type:check # Run with known issues handled
177
- pnpm type:check:strict # Run strict type checking
179
+ ### Available Make Commands
180
+
181
+ ```bash
182
+ make help # Show all available commands
183
+ make sync # Sync submodule to latest main and update dependencies
184
+ make sync-branch BRANCH=feature/xyz # Sync to specific branch
185
+ make install # Install dependencies
186
+ make build # Build the package
187
+ make type-check # Run TypeScript type checking
188
+ make clean # Clean build artifacts
189
+ make verify # Run sync + build + type-check
178
190
  ```
179
191
 
180
- #### TypeScript Patches
192
+ ### Syncing with Recce OSS
181
193
 
182
- This package includes automatic patches to fix TypeScript strict mode issues in the source code. These patches are applied automatically during `npm install` and fix:
194
+ This package uses a git submodule (`recce-source`) that references the main Recce repository. To update to the latest version:
183
195
 
184
- 1. Type assertion issues in CheckDetail.tsx
185
- 2. Boolean type issues in CheckList.tsx
186
- 3. Type conversion issues in LineageViewContextMenu.tsx
187
- 4. Type inference issues in toaster.tsx
196
+ ```bash
197
+ # Sync to latest main branch
198
+ make sync
188
199
 
189
- The patches are temporary fixes until the main Recce repository is updated.
200
+ # Or sync to a specific branch
201
+ make sync-branch BRANCH=feature/new-feature
202
+ ```
203
+
204
+ The sync command will:
205
+ 1. Update the submodule to the latest commit
206
+ 2. Sync dependencies from the Recce OSS package.json
207
+ 3. Install updated dependencies
190
208
 
191
- ### Updating the Submodule
209
+ ### Manual Commands
192
210
 
193
- To update the Recce source code:
211
+ If you prefer not to use Make:
194
212
 
195
213
  ```bash
214
+ # Initialize submodules (if not cloned with --recursive)
215
+ git submodule init
216
+ git submodule update
217
+
218
+ # Update submodule to latest
196
219
  pnpm run submodule:update
197
- ```
198
220
 
199
- ### Running Storybook
221
+ # Sync dependencies from OSS
222
+ pnpm run sync:deps
200
223
 
201
- View component documentation and examples:
224
+ # Build
225
+ pnpm build
202
226
 
203
- ```bash
204
- pnpm storybook
227
+ # Type checking
228
+ pnpm type:check # Filters OSS-side errors
229
+ pnpm type:check:all # Shows all errors including OSS
230
+ ```
231
+
232
+ ### Project Structure
233
+
234
+ ```
235
+ recce-ui/
236
+ ├── src/ # Wrapper/re-export source files
237
+ │ ├── components/ # Component exports
238
+ │ ├── api/ # API client exports
239
+ │ ├── hooks/ # Hook exports
240
+ │ └── types/ # Type exports
241
+ ├── recce-source/ # Git submodule (Recce OSS)
242
+ │ └── js/src/ # Actual component source code
243
+ ├── scripts/
244
+ │ ├── sync-submodule.sh # Submodule sync script
245
+ │ └── sync-deps.js # Dependency sync script
246
+ ├── dist/ # Built output
247
+ ├── Makefile # Build automation
248
+ └── package.json
205
249
  ```
206
250
 
207
251
  ## TypeScript Support
208
252
 
209
253
  This library is written in TypeScript and provides full type definitions. All exports include proper TypeScript types for enhanced development experience.
210
254
 
255
+ ### Custom Theme Colors
256
+
257
+ The library extends MUI with custom theme colors. If you're using TypeScript and need to use these colors, import the type augmentations:
258
+
259
+ ```tsx
260
+ // This is automatically included when importing from @datarecce/ui
261
+ // Custom colors available: brand, iochmara, cyan, amber, green, red, rose, fuchsia, neutral
262
+ // Custom sizes available: xsmall
263
+ ```
264
+
211
265
  ## License
212
266
 
213
267
  Apache-2.0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @file agGridStyles.css
3
+ * @description Custom AG Grid styles for Recce data grids
4
+ *
5
+ * Provides header layout customization to ensure proper flex alignment:
6
+ * - Header cells use flex layout with items centered vertically
7
+ * - Labels aligned to the left
8
+ * - Actions (menu, sort icons) aligned to the right
9
+ * - Sticky headers when scrolling vertically
10
+ */
11
+
12
+ /* AG Grid Viewport */
13
+ .ag-body-viewport,
14
+ .ag-center-cols-viewport {
15
+ /* Slate 100 */
16
+ background-color: #f1f5f9;
17
+ }
18
+
19
+ /* Sticky header - stays visible when scrolling vertically */
20
+ .ag-header {
21
+ position: sticky;
22
+ top: 0;
23
+ z-index: 1;
24
+ }
25
+
26
+ /* Header cell flex layout */
27
+ .ag-header-cell-comp-wrapper {
28
+ display: flex;
29
+ align-items: center;
30
+ width: 100%;
31
+ }
32
+
33
+ /* Header label takes available space and aligns left */
34
+ .ag-header-cell-label {
35
+ flex: 1;
36
+ display: flex;
37
+ align-items: center;
38
+ overflow: hidden;
39
+ }
40
+
41
+ /* Sort icons stay with the label */
42
+ .ag-header-cell-label .ag-sort-indicator-container {
43
+ margin-left: 4px;
44
+ }
45
+
46
+ /* Actions container (menu button, etc.) aligned right */
47
+ .ag-header-cell-menu-button {
48
+ margin-left: auto;
49
+ }
50
+
51
+ /* Ensure header icons don't shrink */
52
+ .ag-header-icon {
53
+ flex-shrink: 0;
54
+ }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../recce-source/js/src/lib/const.ts","../recce-source/js/src/lib/api/axiosClient.ts","../recce-source/js/src/lib/api/types.ts","../recce-source/js/src/lib/api/runs.ts","../recce-source/js/src/lib/api/adhocQuery.ts","../recce-source/js/src/lib/api/cacheKeys.ts","../recce-source/js/src/lib/api/checks.ts","../recce-source/js/src/lib/api/cll.ts","../recce-source/js/src/lib/api/connectToCloud.ts","../recce-source/js/src/lib/api/flag.ts","../recce-source/js/src/lib/api/info.ts","../recce-source/js/src/lib/api/lineagecheck.ts","../recce-source/js/src/lib/api/rowcount.ts","../recce-source/js/src/lib/api/models.ts","../recce-source/js/src/lib/api/profile.ts","../recce-source/js/src/lib/api/schemacheck.ts","../recce-source/js/src/lib/api/select.ts","../recce-source/js/src/lib/api/state.ts","../recce-source/js/src/lib/api/user.ts","../recce-source/js/src/lib/api/valuediff.ts","../recce-source/js/src/lib/api/version.ts","../recce-source/js/src/lib/api/localStorageKeys.ts","../recce-source/js/src/lib/api/sessionStorageKeys.ts"],"names":["axios","QueryClient","useQuery","AxiosError","isAxiosError","useState","useEffect","version","latestVersion","prefix"],"mappings":"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","file":"api.js","sourcesContent":["let apiUrl = process.env.NEXT_PUBLIC_API_URL;\napiUrl ??= typeof window !== \"undefined\" ? window.location.origin : \"\";\n\nexport const PUBLIC_API_URL = apiUrl;\n\nlet cloudWebUrl = process.env.NEXT_PUBLIC_CLOUD_WEB_URL;\ncloudWebUrl ??= \"https://cloud.datarecce.io\";\n\nexport const PUBLIC_CLOUD_WEB_URL = cloudWebUrl;\n","import { QueryClient } from \"@tanstack/react-query\";\nimport axios from \"axios\";\nimport { PUBLIC_API_URL } from \"@/lib/const\";\n\nexport const axiosClient = axios.create({\n baseURL: PUBLIC_API_URL,\n});\n\nexport const reactQueryClient = new QueryClient();\n","// ============================================================================\n// Base Types\n// ============================================================================\n\nexport type AxiosQueryParams = Record<\n string,\n string | string[] | number | number[] | undefined\n>;\n\nexport type RowDataTypes = number | string | boolean | null | undefined;\nexport type RowData = RowDataTypes[];\n\nexport type RowObjectType = Record<string, RowDataTypes> & {\n __status: \"added\" | \"removed\" | \"modified\" | undefined;\n _index?: number;\n};\n\nexport type ColumnType =\n | \"number\"\n | \"integer\"\n | \"text\"\n | \"boolean\"\n | \"date\"\n | \"datetime\"\n | \"timedelta\"\n | \"unknown\";\n\nexport type ColumnRenderMode =\n | \"raw\"\n | \"percent\"\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9;\n\nexport interface DataFrame {\n columns: {\n key: string;\n name: string;\n type: ColumnType;\n }[];\n data: RowData[];\n limit?: number;\n more?: boolean;\n}\n\n// ============================================================================\n// Run Types - Strict enum without string union\n// ============================================================================\n\n// ============================================================================\n// Inline Param Definitions (defined here to avoid circular dependencies)\n// ============================================================================\n\n// Import types that are defined in other files\nimport { RunType } from \"@/components/run/registry\";\nimport type {\n QueryDiffParams,\n QueryDiffResult,\n QueryResult,\n QueryRunParams,\n} from \"./adhocQuery\";\nimport type { LineageDiffResult } from \"./info\";\nimport type {\n HistogramDiffParams,\n HistogramDiffResult,\n ProfileDiffParams,\n ProfileDiffResult,\n TopKDiffParams,\n TopKDiffResult,\n} from \"./profile\";\nimport type {\n RowCountDiffParams,\n RowCountDiffResult,\n RowCountParams,\n RowCountResult,\n} from \"./rowcount\";\nimport type {\n ValueDiffDetailParams,\n ValueDiffDetailResult,\n ValueDiffParams,\n ValueDiffResult,\n} from \"./valuediff\";\n\n// Define params that don't have their own files yet\nexport interface SchemaDiffParams {\n node_id?: string | string[];\n select?: string;\n exclude?: string;\n packages?: string[];\n view_mode?: \"all\" | \"changed_models\";\n}\n\nexport interface LineageDiffParams {\n select?: string;\n exclude?: string;\n packages?: string[];\n view_mode?: \"all\" | \"changed_models\";\n}\n\n// ============================================================================\n// Run - Discriminated Union Type\n// ============================================================================\n\nexport type RunParamTypes =\n | QueryRunParams\n | QueryDiffParams\n | ValueDiffParams\n | SchemaDiffParams\n | ProfileDiffParams\n | RowCountParams\n | RowCountDiffParams\n | LineageDiffParams\n | TopKDiffParams\n | HistogramDiffParams\n | undefined;\n\ninterface BaseRun {\n type: RunType;\n run_id: string;\n run_at: string;\n name?: string;\n check_id?: string;\n progress?: {\n message?: string;\n percentage?: number;\n };\n error?: string;\n status?: \"finished\" | \"failed\" | \"cancelled\" | \"running\";\n}\n\nexport type Run =\n | (BaseRun & {\n type: \"simple\";\n params?: undefined;\n result?: undefined;\n })\n | (BaseRun & {\n type: \"sandbox\";\n params?: undefined;\n result?: undefined;\n })\n | (BaseRun & {\n type: \"query\";\n params?: QueryRunParams;\n result?: QueryResult;\n })\n | (BaseRun & {\n type: \"query_base\";\n params?: QueryRunParams;\n result?: QueryResult;\n })\n | (BaseRun & {\n type: \"query_diff\";\n params?: QueryDiffParams;\n result?: QueryDiffResult;\n })\n | (BaseRun & {\n type: \"value_diff\";\n params?: ValueDiffParams;\n result?: ValueDiffResult;\n })\n | (BaseRun & {\n type: \"value_diff_detail\";\n params?: ValueDiffDetailParams;\n result?: ValueDiffDetailResult;\n })\n | (BaseRun & {\n type: \"schema_diff\";\n params?: SchemaDiffParams;\n result?: undefined;\n })\n | (BaseRun & {\n type: \"profile\";\n params?: ProfileDiffParams;\n result?: ProfileDiffResult;\n })\n | (BaseRun & {\n type: \"profile_diff\";\n params?: ProfileDiffParams;\n result?: ProfileDiffResult;\n })\n | (BaseRun & {\n type: \"row_count\";\n params?: RowCountParams;\n result?: RowCountResult;\n })\n | (BaseRun & {\n type: \"row_count_diff\";\n params?: RowCountDiffParams;\n result?: RowCountDiffResult;\n })\n | (BaseRun & {\n type: \"lineage_diff\";\n params?: LineageDiffParams;\n result?: LineageDiffResult;\n })\n | (BaseRun & {\n type: \"top_k_diff\";\n params?: TopKDiffParams;\n result?: TopKDiffResult;\n })\n | (BaseRun & {\n type: \"histogram_diff\";\n params?: HistogramDiffParams;\n result?: HistogramDiffResult;\n });\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isSimpleRun(run: Run): run is Extract<Run, { type: \"simple\" }> {\n return run.type === \"simple\";\n}\n\nexport function isQueryRun(run: Run): run is Extract<Run, { type: \"query\" }> {\n return run.type === \"query\";\n}\n\nexport function isQueryBaseRun(\n run: Run,\n): run is Extract<Run, { type: \"query_base\" }> {\n return run.type === \"query_base\";\n}\n\nexport function isQueryDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"query_diff\" }> {\n return run.type === \"query_diff\";\n}\n\nexport function isValueDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"value_diff\" }> {\n return run.type === \"value_diff\";\n}\n\nexport function isValueDiffDetailRun(\n run: Run,\n): run is Extract<Run, { type: \"value_diff_detail\" }> {\n return run.type === \"value_diff_detail\";\n}\n\nexport function isSchemaDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"schema_diff\" }> {\n return run.type === \"schema_diff\";\n}\n\nexport function isProfileRun(\n run: Run,\n): run is Extract<Run, { type: \"profile\" }> {\n return run.type === \"profile\";\n}\n\nexport function isProfileDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"profile_diff\" }> {\n return run.type === \"profile_diff\";\n}\n\nexport function isRowCountRun(\n run: Run,\n): run is Extract<Run, { type: \"row_count\" }> {\n return run.type === \"row_count\";\n}\n\nexport function isRowCountDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"row_count_diff\" }> {\n return run.type === \"row_count_diff\";\n}\n\nexport function isLineageDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"lineage_diff\" }> {\n return run.type === \"lineage_diff\";\n}\n\nexport function isTopKDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"top_k_diff\" }> {\n return run.type === \"top_k_diff\";\n}\n\nexport function isHistogramDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"histogram_diff\" }> {\n return run.type === \"histogram_diff\";\n}\n","import { AxiosResponse } from \"axios\";\nimport { RunType } from \"@/components/run/registry\";\nimport { axiosClient } from \"./axiosClient\";\nimport { getExperimentTrackingBreakingChangeEnabled } from \"./track\";\nimport { AxiosQueryParams, isQueryRun, Run, RunParamTypes } from \"./types\";\n\nexport interface SubmitRunTrackProps {\n breaking_change_analysis?: boolean;\n source?: \"lineage_model_node\" | \"lineage_column_node\";\n [key: string]: unknown;\n}\n\nexport interface SubmitOptions {\n nowait?: boolean;\n trackProps?: SubmitRunTrackProps;\n}\n\ninterface SubmitRunBody {\n type: RunType;\n params?: Record<string, unknown>;\n nowait?: boolean;\n track_props: SubmitRunTrackProps;\n}\n\nfunction mutateAddKey(run: Run): Run {\n if (run.result == null) {\n // no result, don't do anything\n return run;\n }\n if (isQueryRun(run)) {\n run.result.columns = run.result.columns.map((c) => {\n if (c.key) {\n return c;\n }\n c.key = c.name;\n return c;\n });\n }\n return run;\n}\n\nexport async function submitRun(\n type: RunType,\n params?: RunParamTypes,\n options?: SubmitOptions,\n) {\n const track_props = options?.trackProps ? { ...options.trackProps } : {};\n if (getExperimentTrackingBreakingChangeEnabled()) {\n track_props.breaking_change_analysis = true;\n }\n\n const response = await axiosClient.post<\n SubmitRunBody,\n AxiosResponse<Run | Pick<Run, \"run_id\">>\n >(\"/api/runs\", {\n type,\n params,\n nowait: options?.nowait,\n track_props,\n });\n\n return response.data;\n}\n\nexport async function getRun(runId: string) {\n const response = await axiosClient.get<never, AxiosResponse<Run>>(\n `/api/runs/${runId}`,\n );\n return response.data;\n}\n\ninterface WaitRunBody {\n params: {\n timeout?: number;\n };\n}\n\nexport async function waitRun(runId: string, timeout?: number) {\n const response = await axiosClient.get<WaitRunBody, AxiosResponse<Run>>(\n `/api/runs/${runId}/wait`,\n {\n params: {\n timeout,\n },\n },\n );\n\n return mutateAddKey(response.data);\n}\n\nexport async function cancelRun(runId: string) {\n return await axiosClient.post<never, AxiosResponse<never>>(\n `/api/runs/${runId}/cancel`,\n );\n}\n\nexport async function submitRunFromCheck(\n checkId: string,\n options?: SubmitOptions,\n) {\n const response = await axiosClient.post<\n { nowait?: boolean },\n AxiosResponse<Run | Pick<Run, \"run_id\">>\n >(`/api/checks/${checkId}/run`, {\n nowait: options?.nowait,\n });\n\n return response.data;\n}\n\ninterface SearchRunsBody {\n type: string;\n params: Record<string, unknown>;\n limit?: number;\n}\n\nexport async function searchRuns(\n type: string,\n params?: AxiosQueryParams,\n limit?: number,\n) {\n const response = await axiosClient.post<SearchRunsBody, AxiosResponse<Run[]>>(\n `/api/runs/search`,\n {\n type,\n params,\n limit,\n },\n );\n\n return response.data;\n}\n\nexport async function listRuns(): Promise<Run[]> {\n const response = await axiosClient.get<never, AxiosResponse<Run[]>>(\n \"/api/runs\",\n );\n return response.data;\n}\n\nexport type RunsAggregated = Record<\n string,\n Record<\n \"row_count_diff\" | \"value_diff\" | \"row_count\",\n {\n run_id: string;\n result: unknown;\n }\n >\n>;\nexport async function aggregateRuns(): Promise<RunsAggregated> {\n // input should be AggregateRunsIn\n const response = await axiosClient.post<\n unknown,\n AxiosResponse<RunsAggregated>\n >(`/api/runs/aggregate`, {});\n\n return response.data;\n}\n","import { SubmitOptions, submitRun } from \"./runs\";\nimport { ColumnRenderMode, DataFrame } from \"./types\";\n\nexport interface QueryParams\n extends QueryRunParams,\n QueryDiffParams,\n QueryPreviewChangeParams {}\n\nexport interface QueryPreviewChangeParams {\n current_model?: string;\n sql_template: string;\n primary_keys?: string[];\n}\n\nexport interface QueryRunParams {\n sql_template: string;\n}\n\nexport interface QueryViewOptions {\n pinned_columns?: string[];\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport type QueryResult = DataFrame;\n\nexport interface QueryDiffParams {\n sql_template: string;\n base_sql_template?: string;\n primary_keys?: string[];\n}\n\nexport interface QueryDiffResult {\n base?: DataFrame;\n current?: DataFrame;\n diff?: DataFrame;\n}\n\nexport interface QueryDiffViewOptions {\n changed_only?: boolean;\n primary_keys?: string[];\n pinned_columns?: string[];\n display_mode?: \"inline\" | \"side_by_side\";\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport async function submitQuery(\n params: QueryRunParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"query\", params, options);\n}\n\nexport async function submitQueryBase(\n params: QueryRunParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"query_base\", params, options);\n}\n\nexport async function submitQueryDiff(\n params: QueryDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"query_diff\", params, options);\n}\n","export const cacheKeys = {\n rowCount: (model: string) => [\"row_count\", model],\n lineage: () => [\"lineage\"],\n checks: () => [\"checks\", \"list\"],\n check: (checkId: string) => [\"checks\", checkId],\n checkEvents: (checkId: string) => [\"checks\", checkId, \"events\"],\n runs: () => [\"runs\"],\n run: (runId: string) => [\"runs\", runId],\n runsAggregated: () => [\"runs_aggregated\"],\n flag: () => [\"flag\"],\n instanceInfo: () => [\"instance_info\"],\n user: () => [\"user\"],\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { AxiosResponse } from \"axios\";\nimport { RunType } from \"@/components/run/registry\";\nimport { axiosClient } from \"./axiosClient\";\nimport { cacheKeys } from \"./cacheKeys\";\nimport { getExperimentTrackingBreakingChangeEnabled } from \"./track\";\nimport { Run, RunParamTypes } from \"./types\";\n\nexport interface Check<PT = unknown, VO = unknown> {\n check_id: string;\n name: string;\n description?: string;\n type: RunType;\n params?: PT;\n view_options?: VO;\n is_checked?: boolean;\n is_preset?: boolean;\n last_run?: Run;\n}\n\nexport interface CreateCheckBody {\n name?: string;\n description?: string;\n run_id?: string;\n type?: RunType;\n params?: Record<string, string | boolean>;\n view_options?: Record<string, string | boolean>;\n track_props?: Record<string, string | boolean>;\n}\n\nexport async function createSimpleCheck(): Promise<Check> {\n const response = await axiosClient.post<\n CreateCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n type: \"simple\",\n });\n return response.data;\n}\n\nexport async function createCheckByRun(\n runId: string,\n viewOptions?: Record<string, unknown>,\n): Promise<Check> {\n const track_props = getExperimentTrackingBreakingChangeEnabled()\n ? { breaking_change_analysis: true }\n : {};\n const response = await axiosClient.post<\n CreateCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n run_id: runId,\n view_options: viewOptions,\n track_props,\n });\n return response.data;\n}\n\nexport async function listChecks(): Promise<Check[]> {\n return (await axiosClient.get<never, AxiosResponse<Check[]>>(\"/api/checks\"))\n .data;\n}\n\nexport function useChecks(enabled: boolean) {\n return useQuery({\n queryKey: cacheKeys.checks(),\n queryFn: listChecks,\n enabled,\n });\n}\n\nexport async function getCheck(checkId: string): Promise<Check<RunParamTypes>> {\n const response = await axiosClient.get<\n never,\n AxiosResponse<Check<RunParamTypes>>\n >(`/api/checks/${checkId}`);\n return response.data;\n}\n\nexport async function updateCheck(\n checkId: string,\n payload: Partial<Check>,\n): Promise<Check> {\n const response = await axiosClient.patch<\n Partial<Check>,\n AxiosResponse<Check>\n >(`/api/checks/${checkId}`, payload);\n return response.data;\n}\n\nexport async function deleteCheck(checkId: string) {\n const response = await axiosClient.delete<\n never,\n AxiosResponse<Pick<Check, \"check_id\">>\n >(`/api/checks/${checkId}`);\n return response.data;\n}\n\nexport async function reorderChecks(order: {\n source: number;\n destination: number;\n}) {\n return await axiosClient.post<\n { source: number; destination: number },\n AxiosResponse<unknown>\n >(\"/api/checks/reorder\", order);\n}\n\nexport async function markAsPresetCheck(checkId: string): Promise<void> {\n await axiosClient.post(`/api/checks/${checkId}/mark-as-preset`);\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\nimport { NodeColumnData } from \"./info\";\n\nexport interface CllInput {\n node_id?: string;\n column?: string;\n change_analysis?: boolean;\n no_cll?: boolean;\n no_upstream?: boolean;\n no_downstream?: boolean;\n}\n\nexport interface ImpactRadiusParams {\n node_id: string;\n}\n\nexport interface CllNodeData {\n id: string;\n name: string;\n source_name: string;\n resource_type: string;\n raw_code?: string;\n change_status?: \"added\" | \"removed\" | \"modified\";\n change_category?:\n | \"breaking\"\n | \"non_breaking\"\n | \"partial_breaking\"\n | \"unknown\";\n impacted?: boolean;\n columns?: Record<string, NodeColumnData>;\n}\n\nexport interface ColumnLineageData {\n current: {\n nodes: Record<string, CllNodeData>;\n columns: Record<string, NodeColumnData>;\n parent_map: Record<string, Set<string>>;\n child_map: Record<string, Set<string>>;\n };\n}\n\nexport async function getCll(input: CllInput): Promise<ColumnLineageData> {\n const response = await axiosClient.post<\n CllInput,\n AxiosResponse<ColumnLineageData>\n >(\"/api/cll\", input);\n\n return response.data;\n}\n","import { axiosClient } from \"./axiosClient\";\n\nexport interface ConnectToCloud {\n connection_url: string;\n}\n\nexport async function connectToCloud(): Promise<ConnectToCloud> {\n const data = await axiosClient.post<ConnectToCloud>(\"/api/connect\");\n return data.data;\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface RecceServerFlags {\n single_env_onboarding: boolean;\n show_relaunch_hint: boolean;\n}\n\nexport async function getServerFlag(): Promise<RecceServerFlags> {\n return (\n await axiosClient.get<never, AxiosResponse<RecceServerFlags>>(\"/api/flag\")\n ).data;\n}\n\n// This was used for showing onboarding guide. Check DRC-1320 for more detials\nexport async function markOnboardingCompleted(): Promise<void> {\n try {\n await axiosClient.post<never, AxiosResponse<never>>(\n \"/api/onboarding/completed\",\n );\n } catch (_error) {\n // skip any errors\n }\n}\n\nexport async function markRelaunchHintCompleted(): Promise<void> {\n try {\n await axiosClient.post<never, AxiosResponse<never>>(\n \"/api/relaunch-hint/completed\",\n );\n } catch (_error) {\n // skip any errors\n }\n}\n","import { AxiosError, AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\n/**\n * The data from the API\n */\nexport interface NodeColumnData {\n name: string;\n type: string;\n transformation_type?: string;\n change_status?: \"added\" | \"removed\" | \"modified\";\n not_null?: boolean;\n unique?: boolean;\n}\nexport interface NodeData {\n id: string;\n unique_id: string;\n name: string;\n schema?: string;\n checksum?: {\n name: string;\n checksum: string;\n };\n raw_code?: string;\n resource_type?: string;\n package_name?: string;\n columns?: Record<string, NodeColumnData | undefined>;\n primary_key?: string;\n}\n\n// https://docs.getdbt.com/reference/artifacts/dbt-artifacts#common-metadata\ninterface ArtifactMetadata {\n dbt_version: string;\n dbt_schema_version: string;\n generated_at: string;\n adapter_type: string;\n env: Record<string, string>;\n invocation_id: string;\n}\nexport interface ManifestMetadata extends ArtifactMetadata {\n project_id?: string;\n project_name?: string;\n user_id?: string;\n}\nexport interface SQLMeshInfo {\n base_env: string;\n current_env: string;\n}\n\nexport type CatalogMetadata = ArtifactMetadata;\n\nexport interface LineageData {\n metadata: {\n pr_url: string;\n git_branch?: string;\n };\n nodes: Record<string, NodeData>;\n parent_map: Record<string, string[]>;\n manifest_metadata?: ManifestMetadata | null;\n catalog_metadata?: CatalogMetadata | null;\n}\n\nexport interface LineageDataFromMetadata extends Omit<LineageData, \"nodes\"> {\n nodes: Record<string, NodeData | undefined>;\n}\n\nexport type LineageDiffData = Record<\n string,\n {\n change_status: \"added\" | \"removed\" | \"modified\";\n change: {\n category: \"breaking\" | \"non_breaking\" | \"partial_breaking\" | \"unknown\";\n columns: Record<string, \"added\" | \"removed\" | \"modified\"> | null;\n } | null;\n }\n>;\n\ninterface LineageOutput {\n error?: string;\n data?: LineageData;\n}\n\nexport async function getLineage(base = false): Promise<LineageData> {\n const response = await axiosClient.get<LineageData>(\n `/api/lineage?base=${base}`,\n );\n return response.data;\n}\n\nexport async function getLineageWithError(\n base = false,\n): Promise<LineageOutput> {\n try {\n const data = await getLineage(base);\n return { data };\n } catch (err: unknown) {\n if (err instanceof AxiosError) {\n const data = err.response?.data as Record<string, unknown> | undefined;\n const detail = data?.detail as string | undefined;\n if (detail) {\n return { error: detail };\n } else {\n return { error: err.message };\n }\n } else if (err instanceof Error) {\n return { error: err.message };\n } else {\n return { error: \"An unknown error occurred\" };\n }\n }\n}\n\nexport interface LineageDiffResult {\n base?: LineageData;\n current?: LineageData;\n base_error?: string;\n current_error?: string;\n}\n\nexport async function getLineageDiff(): Promise<LineageDiffResult> {\n const [base, current] = await Promise.all([\n getLineageWithError(true),\n getLineageWithError(false),\n ]);\n\n return {\n base: base.data,\n current: current.data,\n base_error: base.error,\n current_error: current.error,\n };\n}\n\nexport interface stateMetadata {\n schema_version: string;\n recce_version: string;\n generated_at: string;\n}\n\nexport interface gitInfo {\n branch?: string;\n}\n\nexport interface pullRequestInfo {\n id?: string | number;\n title?: string;\n url?: string;\n branch?: string;\n base_branch?: string;\n}\n\nexport interface ServerInfoResult {\n state_metadata: stateMetadata;\n adapter_type: string;\n review_mode: boolean;\n cloud_mode: boolean;\n file_mode: boolean;\n filename?: string;\n git?: gitInfo;\n pull_request?: pullRequestInfo;\n sqlmesh?: SQLMeshInfo;\n lineage: {\n base: LineageData;\n current: LineageData;\n diff: LineageDiffData;\n };\n demo: boolean;\n codespace: boolean;\n support_tasks: Record<string, boolean>;\n}\n\nexport async function getServerInfo(): Promise<ServerInfoResult> {\n return (\n await axiosClient.get<never, AxiosResponse<ServerInfoResult>>(`/api/info`)\n ).data;\n}\n\nexport interface ModelInfoResult {\n model: {\n base: {\n columns?: Record<string, NodeColumnData>;\n primary_key?: string;\n };\n current: {\n columns?: Record<string, NodeColumnData>;\n primary_key?: string;\n };\n };\n}\n\nexport async function getModelInfo(model: string): Promise<ModelInfoResult> {\n return (\n await axiosClient.get<never, AxiosResponse<ModelInfoResult>>(\n `/api/model/${model}`,\n )\n ).data;\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\nimport { Check } from \"./checks\";\nimport { CllInput } from \"./cll\";\n\nexport interface LineageDiffViewOptions {\n view_mode?: \"changed_models\" | \"all\";\n node_ids?: string[];\n packages?: string[];\n select?: string;\n exclude?: string;\n column_level_lineage?: CllInput;\n}\n\ninterface CreateLineageDiffCheckBody {\n type: string;\n params: Record<string, string | boolean | number>;\n view_options: LineageDiffViewOptions;\n}\n\nexport async function createLineageDiffCheck(\n viewOptions: LineageDiffViewOptions,\n): Promise<Check> {\n const response = await axiosClient.post<\n CreateLineageDiffCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n type: \"lineage_diff\",\n params: {},\n view_options: viewOptions,\n });\n\n return response.data;\n}\n","import { RowCount, RowCountDiff } from \"./models\";\nimport { SubmitOptions, submitRun } from \"./runs\";\nexport interface RowCountParams {\n node_names: string[];\n}\nexport type RowCountResult = Record<string, RowCount>;\nexport interface RowCountDiffParams {\n node_names: string[];\n}\nexport type RowCountDiffResult = Record<string, RowCountDiff>;\nexport async function submitRowCountDiff(\n params: RowCountDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"row_count_diff\", params, options);\n}\n","import { axiosClient } from \"./axiosClient\";\nimport { RowCountDiffResult, submitRowCountDiff } from \"./rowcount\";\nimport { waitRun } from \"./runs\";\n\nexport interface RowCount {\n name?: string;\n curr: number | null;\n}\n\nexport interface RowCountDiff {\n name?: string;\n base: number | null;\n curr: number | null;\n}\n\nexport interface QueryRowCountResult {\n runId: string;\n result: RowCountDiffResult;\n}\n\nexport async function fetchModelRowCount(\n modelName: string,\n): Promise<RowCountDiff> {\n const response = await axiosClient.get<RowCountDiff>(\n `/api/models/${modelName}/row_count`,\n );\n return response.data;\n}\n\nexport async function queryModelRowCount(\n modelName: string,\n): Promise<RowCountDiff> {\n const { result } = await queryRowCount([modelName]);\n return result[modelName];\n}\n\nexport async function queryRowCount(\n modelNames: string[],\n): Promise<QueryRowCountResult> {\n if (modelNames.length === 0) {\n throw new Error(\"No model names provided\");\n }\n\n const { run_id } = await submitRowCountDiff(\n { node_names: modelNames },\n { nowait: true },\n );\n const run = await waitRun(run_id);\n\n return {\n runId: run_id,\n result: run.result as RowCountDiffResult,\n };\n}\n","import { SubmitOptions, submitRun } from \"./runs\";\nimport { ColumnRenderMode, DataFrame } from \"./types\";\n\nexport interface ProfileDiffParams {\n model: string;\n columns?: string[];\n}\n\nexport interface ProfileDiffResult {\n base?: DataFrame;\n current?: DataFrame;\n}\n\nexport interface ProfileDiffViewOptions {\n pinned_columns?: string[];\n display_mode?: \"side_by_side\" | \"inline\";\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport async function submitProfileDiff(\n params: ProfileDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"profile_diff\", params, options);\n}\n\nexport interface TopKDiffParams {\n model: string;\n column_name: string;\n k: number;\n}\n\nexport interface TopKResult {\n values: (string | number | undefined)[];\n counts: number[];\n valids: number;\n}\n\nexport interface TopKDiffResult {\n base: TopKResult;\n current: TopKResult;\n}\n\nexport interface HistogramDiffParams {\n model: string;\n column_name: string;\n column_type: string;\n}\n\nexport interface HistogramResult {\n counts: number[];\n total: number;\n}\n\nexport interface HistogramDiffResult {\n base: HistogramResult;\n current: HistogramResult;\n min: number;\n max: number;\n bin_edges: number[];\n labels?: string[];\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\nimport { Check } from \"./checks\";\n\nexport interface SchemaDiffViewParams {\n node_id?: string | string[];\n select?: string;\n exclude?: string;\n view_mode?: \"all\" | \"changed_models\";\n packages?: string[];\n}\n\ninterface CreateSchemaDiffCheckBody {\n type: string;\n params: SchemaDiffViewParams;\n}\n\nexport async function createSchemaDiffCheck(\n params: SchemaDiffViewParams,\n): Promise<Check> {\n const response = await axiosClient.post<\n CreateSchemaDiffCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n type: \"schema_diff\",\n params: params,\n });\n\n return response.data;\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface SelectInput {\n select?: string;\n exclude?: string;\n packages?: string[];\n view_mode?: \"all\" | \"changed_models\";\n}\n\nexport interface SelectOutput {\n nodes: string[];\n}\n\nexport async function select(input: SelectInput): Promise<SelectOutput> {\n return (\n await axiosClient.post<SelectInput, AxiosResponse<SelectOutput>>(\n `/api/select`,\n input,\n )\n ).data;\n}\n","import { AxiosResponse, isAxiosError } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface SaveAsInput {\n filename: string;\n overwrite?: boolean;\n}\n\nexport interface ImportedState {\n runs: number;\n checks: number;\n}\n\nexport async function saveAs(input: SaveAsInput): Promise<void> {\n return (\n await axiosClient.post<SaveAsInput, AxiosResponse<void>>(\n \"/api/save-as\",\n input,\n )\n ).data;\n}\n\nexport async function rename(input: SaveAsInput): Promise<void> {\n return (\n await axiosClient.post<SaveAsInput, AxiosResponse<void>>(\n \"/api/rename\",\n input,\n )\n ).data;\n}\n\nexport async function exportState(): Promise<string> {\n return (await axiosClient.post<never, AxiosResponse<string>>(\"/api/export\"))\n .data;\n}\n\ninterface ImportStateBody {\n file: File;\n checks_only: \"true\" | \"false\";\n}\n\nexport async function importState(\n file: File,\n checksOnly?: boolean,\n): Promise<ImportedState> {\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"checks_only\", (!!checksOnly).toString());\n\n return (\n await axiosClient.post<ImportStateBody, AxiosResponse<ImportedState>>(\n \"/api/import\",\n formData,\n )\n ).data;\n}\n\nexport async function isStateSyncing(): Promise<boolean> {\n const response = await axiosClient.get<never, AxiosResponse<boolean>>(\n \"/api/sync\",\n );\n return response.status === 208;\n}\n\nexport interface SyncStateInput {\n method?: \"overwrite\" | \"revert\" | \"merge\";\n}\nexport interface SyncStateResponse {\n status: \"accepted\" | \"conflict\" | \"syncing\";\n}\n\nexport async function syncState(\n input: SyncStateInput,\n): Promise<SyncStateResponse> {\n try {\n const response = await axiosClient.post<\n SyncStateInput,\n AxiosResponse<SyncStateResponse>\n >(\"/api/sync\", input);\n\n if (response.status === 202) {\n return {\n status: \"accepted\",\n };\n }\n if (response.status === 208) {\n return {\n status: \"syncing\",\n };\n }\n } catch (error) {\n if (isAxiosError(error)) {\n if (error.response?.status === 409) {\n // 409 conflict case\n return { status: \"conflict\" };\n }\n }\n }\n throw new Error(\"Failed to sync state\");\n}\n\nexport interface ShareStateResponse {\n status: string;\n message: string;\n share_url?: string;\n}\n\nexport async function shareState(): Promise<ShareStateResponse> {\n return (\n await axiosClient.post<never, AxiosResponse<ShareStateResponse>>(\n \"/api/share\",\n )\n ).data;\n}\n","import axios, { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface User {\n id: string;\n login: string;\n login_type: string;\n email: string;\n onboarding_state: string;\n}\n\ninterface GitHubUser {\n login: string;\n id: number;\n avatar_url: string;\n}\n\nexport async function fetchUser(): Promise<User> {\n try {\n const response = await axiosClient.get<never, AxiosResponse<User>>(\n \"/api/users\",\n );\n return response.data;\n } catch (error) {\n console.error(\"Error fetching user data:\", error);\n throw error;\n }\n}\n\nexport async function fetchGitHubAvatar(\n userId: string,\n): Promise<string | null> {\n try {\n const response = await axios.get<GitHubUser>(\n `https://api.github.com/user/${userId}`,\n );\n return response.data.avatar_url;\n } catch (error) {\n console.warn(\"Failed to fetch GitHub avatar:\", error);\n return null;\n }\n}\n","import { SubmitOptions, submitRun } from \"./runs\";\nimport { ColumnRenderMode, DataFrame } from \"./types\";\n\nexport interface ValueDiffResult {\n summary: {\n total: number;\n added: number;\n removed: number;\n };\n data: DataFrame;\n}\n\nexport interface ValueDiffParams {\n model: string;\n primary_key: string | string[];\n columns?: string[];\n}\n\nexport async function submitValueDiff(\n params: ValueDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"value_diff\", params, options);\n}\n\nexport type ValueDiffDetailResult = DataFrame;\n\nexport type ValueDiffDetailParams = ValueDiffParams;\n\nexport interface ValueDiffDetailViewOptions {\n changed_only?: boolean;\n pinned_columns?: string[];\n display_mode?: \"inline\" | \"side_by_side\";\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport async function submitValueDiffDetail(\n params: ValueDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"value_diff_detail\", params, options);\n}\n","import { AxiosResponse } from \"axios\";\nimport { useEffect, useState } from \"react\";\nimport { axiosClient } from \"./axiosClient\";\n\ninterface VersionResponse {\n version: string;\n latestVersion: string;\n}\n\nexport function useVersionNumber() {\n const [version, setVersion] = useState(\"\");\n const [latestVersion, setLatestVersion] = useState(\"\");\n\n useEffect(() => {\n async function fetchVersion() {\n try {\n const { version, latestVersion } = (\n await axiosClient.get<never, AxiosResponse<VersionResponse>>(\n \"/api/version\",\n )\n ).data;\n\n setVersion(version);\n setLatestVersion(latestVersion);\n } catch (error) {\n console.error(\"Error fetching version number:\", error);\n }\n }\n void fetchVersion();\n }, []);\n\n return { version, latestVersion };\n}\n","const prefix = \"recce-\";\n\nexport const localStorageKeys = {\n bypassSaveOverwrite: `${prefix}-bypass-save-overwrite`,\n previewChangeFeedbackID: `${prefix}-preview-change-feedback`,\n prepareEnvGuideID: `${prefix}-prepare-env`,\n};\n","const prefix = \"recce\";\n\nexport const sessionStorageKeys = {\n recommendationIgnored: `${prefix}-recommendation-ignored`,\n recommendationShowed: `${prefix}-recommendation-showed`,\n prevRefreshTimeStamp: `${prefix}-prev-refresh-timestamp`,\n lineageNotificationDismissed: `${prefix}-lineage-notification-dismissed`,\n};\n"]}
1
+ {"version":3,"sources":["../recce-source/js/src/lib/const.ts","../recce-source/js/src/lib/api/axiosClient.ts","../recce-source/js/src/lib/api/types.ts","../recce-source/js/src/lib/api/runs.ts","../recce-source/js/src/lib/api/adhocQuery.ts","../recce-source/js/src/lib/api/cacheKeys.ts","../recce-source/js/src/lib/api/checks.ts","../recce-source/js/src/lib/api/cll.ts","../recce-source/js/src/lib/api/connectToCloud.ts","../recce-source/js/src/lib/api/flag.ts","../recce-source/js/src/lib/api/info.ts","../recce-source/js/src/lib/api/lineagecheck.ts","../recce-source/js/src/lib/api/rowcount.ts","../recce-source/js/src/lib/api/models.ts","../recce-source/js/src/lib/api/profile.ts","../recce-source/js/src/lib/api/schemacheck.ts","../recce-source/js/src/lib/api/select.ts","../recce-source/js/src/lib/api/state.ts","../recce-source/js/src/lib/api/user.ts","../recce-source/js/src/lib/api/valuediff.ts","../recce-source/js/src/lib/api/version.ts","../recce-source/js/src/lib/api/localStorageKeys.ts","../recce-source/js/src/lib/api/sessionStorageKeys.ts"],"names":["axios","QueryClient","useQuery","AxiosError","isAxiosError","useState","useEffect","version","latestVersion","prefix"],"mappings":"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","file":"api.js","sourcesContent":["let apiUrl = process.env.NEXT_PUBLIC_API_URL;\napiUrl ??= typeof window !== \"undefined\" ? window.location.origin : \"\";\n\nexport const PUBLIC_API_URL = apiUrl;\n\nlet cloudWebUrl = process.env.NEXT_PUBLIC_CLOUD_WEB_URL;\ncloudWebUrl ??= \"https://cloud.datarecce.io\";\n\nexport const PUBLIC_CLOUD_WEB_URL = cloudWebUrl;\n","import { QueryClient } from \"@tanstack/react-query\";\nimport axios from \"axios\";\nimport { PUBLIC_API_URL } from \"@/lib/const\";\n\nexport const axiosClient = axios.create({\n baseURL: PUBLIC_API_URL,\n});\n\nexport const reactQueryClient = new QueryClient();\n","// ============================================================================\n// Base Types\n// ============================================================================\n\nexport type AxiosQueryParams = Record<\n string,\n string | string[] | number | number[] | undefined\n>;\n\nexport type RowDataTypes = number | string | boolean | null | undefined;\nexport type RowData = RowDataTypes[];\n\nexport type RowObjectType = Record<string, RowDataTypes> & {\n __status: \"added\" | \"removed\" | \"modified\" | undefined;\n _index?: number;\n};\n\nexport type ColumnType =\n | \"number\"\n | \"integer\"\n | \"text\"\n | \"boolean\"\n | \"date\"\n | \"datetime\"\n | \"timedelta\"\n | \"unknown\";\n\nexport type ColumnRenderMode = \"raw\" | \"percent\" | \"delta\" | 2;\nexport interface DataFrame {\n columns: {\n key: string;\n name: string;\n type: ColumnType;\n }[];\n data: RowData[];\n limit?: number;\n more?: boolean;\n}\n\n// ============================================================================\n// Run Types - Strict enum without string union\n// ============================================================================\n\n// ============================================================================\n// Inline Param Definitions (defined here to avoid circular dependencies)\n// ============================================================================\n\n// Import types that are defined in other files\nimport { RunType } from \"@/components/run/registry\";\nimport type {\n QueryDiffParams,\n QueryDiffResult,\n QueryResult,\n QueryRunParams,\n} from \"./adhocQuery\";\nimport type { LineageDiffResult } from \"./info\";\nimport type {\n HistogramDiffParams,\n HistogramDiffResult,\n ProfileDiffParams,\n ProfileDiffResult,\n TopKDiffParams,\n TopKDiffResult,\n} from \"./profile\";\nimport type {\n RowCountDiffParams,\n RowCountDiffResult,\n RowCountParams,\n RowCountResult,\n} from \"./rowcount\";\nimport type {\n ValueDiffDetailParams,\n ValueDiffDetailResult,\n ValueDiffParams,\n ValueDiffResult,\n} from \"./valuediff\";\n\n// Define params that don't have their own files yet\nexport interface SchemaDiffParams {\n node_id?: string | string[];\n select?: string;\n exclude?: string;\n packages?: string[];\n view_mode?: \"all\" | \"changed_models\";\n}\n\nexport interface LineageDiffParams {\n select?: string;\n exclude?: string;\n packages?: string[];\n view_mode?: \"all\" | \"changed_models\";\n}\n\n// ============================================================================\n// Run - Discriminated Union Type\n// ============================================================================\n\nexport type RunParamTypes =\n | QueryRunParams\n | QueryDiffParams\n | ValueDiffParams\n | SchemaDiffParams\n | ProfileDiffParams\n | RowCountParams\n | RowCountDiffParams\n | LineageDiffParams\n | TopKDiffParams\n | HistogramDiffParams\n | undefined;\n\ninterface BaseRun {\n type: RunType;\n run_id: string;\n run_at: string;\n name?: string;\n check_id?: string;\n progress?: {\n message?: string;\n percentage?: number;\n };\n error?: string;\n status?: \"finished\" | \"failed\" | \"cancelled\" | \"running\";\n}\n\nexport type Run =\n | (BaseRun & {\n type: \"simple\";\n params?: undefined;\n result?: undefined;\n })\n | (BaseRun & {\n type: \"sandbox\";\n params?: undefined;\n result?: undefined;\n })\n | (BaseRun & {\n type: \"query\";\n params?: QueryRunParams;\n result?: QueryResult;\n })\n | (BaseRun & {\n type: \"query_base\";\n params?: QueryRunParams;\n result?: QueryResult;\n })\n | (BaseRun & {\n type: \"query_diff\";\n params?: QueryDiffParams;\n result?: QueryDiffResult;\n })\n | (BaseRun & {\n type: \"value_diff\";\n params?: ValueDiffParams;\n result?: ValueDiffResult;\n })\n | (BaseRun & {\n type: \"value_diff_detail\";\n params?: ValueDiffDetailParams;\n result?: ValueDiffDetailResult;\n })\n | (BaseRun & {\n type: \"schema_diff\";\n params?: SchemaDiffParams;\n result?: undefined;\n })\n | (BaseRun & {\n type: \"profile\";\n params?: ProfileDiffParams;\n result?: ProfileDiffResult;\n })\n | (BaseRun & {\n type: \"profile_diff\";\n params?: ProfileDiffParams;\n result?: ProfileDiffResult;\n })\n | (BaseRun & {\n type: \"row_count\";\n params?: RowCountParams;\n result?: RowCountResult;\n })\n | (BaseRun & {\n type: \"row_count_diff\";\n params?: RowCountDiffParams;\n result?: RowCountDiffResult;\n })\n | (BaseRun & {\n type: \"lineage_diff\";\n params?: LineageDiffParams;\n result?: LineageDiffResult;\n })\n | (BaseRun & {\n type: \"top_k_diff\";\n params?: TopKDiffParams;\n result?: TopKDiffResult;\n })\n | (BaseRun & {\n type: \"histogram_diff\";\n params?: HistogramDiffParams;\n result?: HistogramDiffResult;\n });\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isSimpleRun(run: Run): run is Extract<Run, { type: \"simple\" }> {\n return run.type === \"simple\";\n}\n\nexport function isQueryRun(run: Run): run is Extract<Run, { type: \"query\" }> {\n return run.type === \"query\";\n}\n\nexport function isQueryBaseRun(\n run: Run,\n): run is Extract<Run, { type: \"query_base\" }> {\n return run.type === \"query_base\";\n}\n\nexport function isQueryDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"query_diff\" }> {\n return run.type === \"query_diff\";\n}\n\nexport function isValueDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"value_diff\" }> {\n return run.type === \"value_diff\";\n}\n\nexport function isValueDiffDetailRun(\n run: Run,\n): run is Extract<Run, { type: \"value_diff_detail\" }> {\n return run.type === \"value_diff_detail\";\n}\n\nexport function isSchemaDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"schema_diff\" }> {\n return run.type === \"schema_diff\";\n}\n\nexport function isProfileRun(\n run: Run,\n): run is Extract<Run, { type: \"profile\" }> {\n return run.type === \"profile\";\n}\n\nexport function isProfileDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"profile_diff\" }> {\n return run.type === \"profile_diff\";\n}\n\nexport function isRowCountRun(\n run: Run,\n): run is Extract<Run, { type: \"row_count\" }> {\n return run.type === \"row_count\";\n}\n\nexport function isRowCountDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"row_count_diff\" }> {\n return run.type === \"row_count_diff\";\n}\n\nexport function isLineageDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"lineage_diff\" }> {\n return run.type === \"lineage_diff\";\n}\n\nexport function isTopKDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"top_k_diff\" }> {\n return run.type === \"top_k_diff\";\n}\n\nexport function isHistogramDiffRun(\n run: Run,\n): run is Extract<Run, { type: \"histogram_diff\" }> {\n return run.type === \"histogram_diff\";\n}\n","import { AxiosResponse } from \"axios\";\nimport { RunType } from \"@/components/run/registry\";\nimport { axiosClient } from \"./axiosClient\";\nimport { getExperimentTrackingBreakingChangeEnabled } from \"./track\";\nimport { AxiosQueryParams, isQueryRun, Run, RunParamTypes } from \"./types\";\n\nexport interface SubmitRunTrackProps {\n breaking_change_analysis?: boolean;\n source?: \"lineage_model_node\" | \"lineage_column_node\";\n [key: string]: unknown;\n}\n\nexport interface SubmitOptions {\n nowait?: boolean;\n trackProps?: SubmitRunTrackProps;\n}\n\ninterface SubmitRunBody {\n type: RunType;\n params?: Record<string, unknown>;\n nowait?: boolean;\n track_props: SubmitRunTrackProps;\n}\n\nfunction mutateAddKey(run: Run): Run {\n if (run.result == null) {\n // no result, don't do anything\n return run;\n }\n if (isQueryRun(run)) {\n run.result.columns = run.result.columns.map((c) => {\n if (c.key) {\n return c;\n }\n c.key = c.name;\n return c;\n });\n }\n return run;\n}\n\nexport async function submitRun(\n type: RunType,\n params?: RunParamTypes,\n options?: SubmitOptions,\n) {\n const track_props = options?.trackProps ? { ...options.trackProps } : {};\n if (getExperimentTrackingBreakingChangeEnabled()) {\n track_props.breaking_change_analysis = true;\n }\n\n const response = await axiosClient.post<\n SubmitRunBody,\n AxiosResponse<Run | Pick<Run, \"run_id\">>\n >(\"/api/runs\", {\n type,\n params,\n nowait: options?.nowait,\n track_props,\n });\n\n return response.data;\n}\n\nexport async function getRun(runId: string) {\n const response = await axiosClient.get<never, AxiosResponse<Run>>(\n `/api/runs/${runId}`,\n );\n return response.data;\n}\n\ninterface WaitRunBody {\n params: {\n timeout?: number;\n };\n}\n\nexport async function waitRun(runId: string, timeout?: number) {\n const response = await axiosClient.get<WaitRunBody, AxiosResponse<Run>>(\n `/api/runs/${runId}/wait`,\n {\n params: {\n timeout,\n },\n },\n );\n\n return mutateAddKey(response.data);\n}\n\nexport async function cancelRun(runId: string) {\n return await axiosClient.post<never, AxiosResponse<never>>(\n `/api/runs/${runId}/cancel`,\n );\n}\n\nexport async function submitRunFromCheck(\n checkId: string,\n options?: SubmitOptions,\n) {\n const response = await axiosClient.post<\n { nowait?: boolean },\n AxiosResponse<Run | Pick<Run, \"run_id\">>\n >(`/api/checks/${checkId}/run`, {\n nowait: options?.nowait,\n });\n\n return response.data;\n}\n\ninterface SearchRunsBody {\n type: string;\n params: Record<string, unknown>;\n limit?: number;\n}\n\nexport async function searchRuns(\n type: string,\n params?: AxiosQueryParams,\n limit?: number,\n) {\n const response = await axiosClient.post<SearchRunsBody, AxiosResponse<Run[]>>(\n `/api/runs/search`,\n {\n type,\n params,\n limit,\n },\n );\n\n return response.data;\n}\n\nexport async function listRuns(): Promise<Run[]> {\n const response = await axiosClient.get<never, AxiosResponse<Run[]>>(\n \"/api/runs\",\n );\n return response.data;\n}\n\nexport type RunsAggregated = Record<\n string,\n Record<\n \"row_count_diff\" | \"value_diff\" | \"row_count\",\n {\n run_id: string;\n result: unknown;\n }\n >\n>;\nexport async function aggregateRuns(): Promise<RunsAggregated> {\n // input should be AggregateRunsIn\n const response = await axiosClient.post<\n unknown,\n AxiosResponse<RunsAggregated>\n >(`/api/runs/aggregate`, {});\n\n return response.data;\n}\n","import { SubmitOptions, submitRun } from \"./runs\";\nimport { ColumnRenderMode, DataFrame } from \"./types\";\n\nexport interface QueryParams\n extends QueryRunParams,\n QueryDiffParams,\n QueryPreviewChangeParams {}\n\nexport interface QueryPreviewChangeParams {\n current_model?: string;\n sql_template: string;\n primary_keys?: string[];\n}\n\nexport interface QueryRunParams {\n sql_template: string;\n}\n\nexport interface QueryViewOptions {\n pinned_columns?: string[];\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport type QueryResult = DataFrame;\n\nexport interface QueryDiffParams {\n sql_template: string;\n base_sql_template?: string;\n primary_keys?: string[];\n}\n\nexport interface QueryDiffResult {\n base?: DataFrame;\n current?: DataFrame;\n diff?: DataFrame;\n}\n\nexport interface QueryDiffViewOptions {\n changed_only?: boolean;\n primary_keys?: string[];\n pinned_columns?: string[];\n display_mode?: \"inline\" | \"side_by_side\";\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport async function submitQuery(\n params: QueryRunParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"query\", params, options);\n}\n\nexport async function submitQueryBase(\n params: QueryRunParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"query_base\", params, options);\n}\n\nexport async function submitQueryDiff(\n params: QueryDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"query_diff\", params, options);\n}\n","export const cacheKeys = {\n rowCount: (model: string) => [\"row_count\", model],\n lineage: () => [\"lineage\"],\n checks: () => [\"checks\", \"list\"],\n check: (checkId: string) => [\"checks\", checkId],\n checkEvents: (checkId: string) => [\"checks\", checkId, \"events\"],\n runs: () => [\"runs\"],\n run: (runId: string) => [\"runs\", runId],\n runsAggregated: () => [\"runs_aggregated\"],\n flag: () => [\"flag\"],\n instanceInfo: () => [\"instance_info\"],\n user: () => [\"user\"],\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { AxiosResponse } from \"axios\";\nimport { RunType } from \"@/components/run/registry\";\nimport { axiosClient } from \"./axiosClient\";\nimport { cacheKeys } from \"./cacheKeys\";\nimport { getExperimentTrackingBreakingChangeEnabled } from \"./track\";\nimport { Run, RunParamTypes } from \"./types\";\n\nexport interface Check<PT = unknown, VO = unknown> {\n check_id: string;\n name: string;\n description?: string;\n type: RunType;\n params?: PT;\n view_options?: VO;\n is_checked?: boolean;\n is_preset?: boolean;\n last_run?: Run;\n}\n\nexport interface CreateCheckBody {\n name?: string;\n description?: string;\n run_id?: string;\n type?: RunType;\n params?: Record<string, string | boolean>;\n view_options?: Record<string, string | boolean>;\n track_props?: Record<string, string | boolean>;\n}\n\nexport async function createSimpleCheck(): Promise<Check> {\n const response = await axiosClient.post<\n CreateCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n type: \"simple\",\n });\n return response.data;\n}\n\nexport async function createCheckByRun(\n runId: string,\n viewOptions?: Record<string, unknown>,\n): Promise<Check> {\n const track_props = getExperimentTrackingBreakingChangeEnabled()\n ? { breaking_change_analysis: true }\n : {};\n const response = await axiosClient.post<\n CreateCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n run_id: runId,\n view_options: viewOptions,\n track_props,\n });\n return response.data;\n}\n\nexport async function listChecks(): Promise<Check[]> {\n return (await axiosClient.get<never, AxiosResponse<Check[]>>(\"/api/checks\"))\n .data;\n}\n\nexport function useChecks(enabled: boolean) {\n return useQuery({\n queryKey: cacheKeys.checks(),\n queryFn: listChecks,\n enabled,\n });\n}\n\nexport async function getCheck(checkId: string): Promise<Check<RunParamTypes>> {\n const response = await axiosClient.get<\n never,\n AxiosResponse<Check<RunParamTypes>>\n >(`/api/checks/${checkId}`);\n return response.data;\n}\n\nexport async function updateCheck(\n checkId: string,\n payload: Partial<Check>,\n): Promise<Check> {\n const response = await axiosClient.patch<\n Partial<Check>,\n AxiosResponse<Check>\n >(`/api/checks/${checkId}`, payload);\n return response.data;\n}\n\nexport async function deleteCheck(checkId: string) {\n const response = await axiosClient.delete<\n never,\n AxiosResponse<Pick<Check, \"check_id\">>\n >(`/api/checks/${checkId}`);\n return response.data;\n}\n\nexport async function reorderChecks(order: {\n source: number;\n destination: number;\n}) {\n return await axiosClient.post<\n { source: number; destination: number },\n AxiosResponse<unknown>\n >(\"/api/checks/reorder\", order);\n}\n\nexport async function markAsPresetCheck(checkId: string): Promise<void> {\n await axiosClient.post(`/api/checks/${checkId}/mark-as-preset`);\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\nimport { NodeColumnData } from \"./info\";\n\nexport interface CllInput {\n node_id?: string;\n column?: string;\n change_analysis?: boolean;\n no_cll?: boolean;\n no_upstream?: boolean;\n no_downstream?: boolean;\n}\n\nexport interface ImpactRadiusParams {\n node_id: string;\n}\n\nexport interface CllNodeData {\n id: string;\n name: string;\n source_name: string;\n resource_type: string;\n raw_code?: string;\n change_status?: \"added\" | \"removed\" | \"modified\";\n change_category?:\n | \"breaking\"\n | \"non_breaking\"\n | \"partial_breaking\"\n | \"unknown\";\n impacted?: boolean;\n columns?: Record<string, NodeColumnData>;\n}\n\nexport interface ColumnLineageData {\n current: {\n nodes: Record<string, CllNodeData>;\n columns: Record<string, NodeColumnData>;\n parent_map: Record<string, Set<string>>;\n child_map: Record<string, Set<string>>;\n };\n}\n\nexport async function getCll(input: CllInput): Promise<ColumnLineageData> {\n const response = await axiosClient.post<\n CllInput,\n AxiosResponse<ColumnLineageData>\n >(\"/api/cll\", input);\n\n return response.data;\n}\n","import { axiosClient } from \"./axiosClient\";\n\nexport interface ConnectToCloud {\n connection_url: string;\n}\n\nexport async function connectToCloud(): Promise<ConnectToCloud> {\n const data = await axiosClient.post<ConnectToCloud>(\"/api/connect\");\n return data.data;\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface RecceServerFlags {\n single_env_onboarding: boolean;\n show_relaunch_hint: boolean;\n}\n\nexport async function getServerFlag(): Promise<RecceServerFlags> {\n return (\n await axiosClient.get<never, AxiosResponse<RecceServerFlags>>(\"/api/flag\")\n ).data;\n}\n\n// This was used for showing onboarding guide. Check DRC-1320 for more detials\nexport async function markOnboardingCompleted(): Promise<void> {\n try {\n await axiosClient.post<never, AxiosResponse<never>>(\n \"/api/onboarding/completed\",\n );\n } catch (_error) {\n // skip any errors\n }\n}\n\nexport async function markRelaunchHintCompleted(): Promise<void> {\n try {\n await axiosClient.post<never, AxiosResponse<never>>(\n \"/api/relaunch-hint/completed\",\n );\n } catch (_error) {\n // skip any errors\n }\n}\n","import { AxiosError, AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\n/**\n * The data from the API\n */\nexport interface NodeColumnData {\n name: string;\n type: string;\n transformation_type?: string;\n change_status?: \"added\" | \"removed\" | \"modified\";\n not_null?: boolean;\n unique?: boolean;\n}\nexport interface NodeData {\n id: string;\n unique_id: string;\n name: string;\n schema?: string;\n checksum?: {\n name: string;\n checksum: string;\n };\n raw_code?: string;\n resource_type?: string;\n package_name?: string;\n columns?: Record<string, NodeColumnData | undefined>;\n primary_key?: string;\n}\n\n// https://docs.getdbt.com/reference/artifacts/dbt-artifacts#common-metadata\ninterface ArtifactMetadata {\n dbt_version: string;\n dbt_schema_version: string;\n generated_at: string;\n adapter_type: string;\n env: Record<string, string>;\n invocation_id: string;\n}\nexport interface ManifestMetadata extends ArtifactMetadata {\n project_id?: string;\n project_name?: string;\n user_id?: string;\n}\nexport interface SQLMeshInfo {\n base_env: string;\n current_env: string;\n}\n\nexport type CatalogMetadata = ArtifactMetadata;\n\nexport interface LineageData {\n metadata: {\n pr_url: string;\n git_branch?: string;\n };\n nodes: Record<string, NodeData>;\n parent_map: Record<string, string[]>;\n manifest_metadata?: ManifestMetadata | null;\n catalog_metadata?: CatalogMetadata | null;\n}\n\nexport interface LineageDataFromMetadata extends Omit<LineageData, \"nodes\"> {\n nodes: Record<string, NodeData | undefined>;\n}\n\nexport type LineageDiffData = Record<\n string,\n {\n change_status: \"added\" | \"removed\" | \"modified\";\n change: {\n category: \"breaking\" | \"non_breaking\" | \"partial_breaking\" | \"unknown\";\n columns: Record<string, \"added\" | \"removed\" | \"modified\"> | null;\n } | null;\n }\n>;\n\ninterface LineageOutput {\n error?: string;\n data?: LineageData;\n}\n\nexport async function getLineage(base = false): Promise<LineageData> {\n const response = await axiosClient.get<LineageData>(\n `/api/lineage?base=${base}`,\n );\n return response.data;\n}\n\nexport async function getLineageWithError(\n base = false,\n): Promise<LineageOutput> {\n try {\n const data = await getLineage(base);\n return { data };\n } catch (err: unknown) {\n if (err instanceof AxiosError) {\n const data = err.response?.data as Record<string, unknown> | undefined;\n const detail = data?.detail as string | undefined;\n if (detail) {\n return { error: detail };\n } else {\n return { error: err.message };\n }\n } else if (err instanceof Error) {\n return { error: err.message };\n } else {\n return { error: \"An unknown error occurred\" };\n }\n }\n}\n\nexport interface LineageDiffResult {\n base?: LineageData;\n current?: LineageData;\n base_error?: string;\n current_error?: string;\n}\n\nexport async function getLineageDiff(): Promise<LineageDiffResult> {\n const [base, current] = await Promise.all([\n getLineageWithError(true),\n getLineageWithError(false),\n ]);\n\n return {\n base: base.data,\n current: current.data,\n base_error: base.error,\n current_error: current.error,\n };\n}\n\nexport interface stateMetadata {\n schema_version: string;\n recce_version: string;\n generated_at: string;\n}\n\nexport interface gitInfo {\n branch?: string;\n}\n\nexport interface pullRequestInfo {\n id?: string | number;\n title?: string;\n url?: string;\n branch?: string;\n base_branch?: string;\n}\n\nexport interface ServerInfoResult {\n state_metadata: stateMetadata;\n adapter_type: string;\n review_mode: boolean;\n cloud_mode: boolean;\n file_mode: boolean;\n filename?: string;\n git?: gitInfo;\n pull_request?: pullRequestInfo;\n sqlmesh?: SQLMeshInfo;\n lineage: {\n base: LineageData;\n current: LineageData;\n diff: LineageDiffData;\n };\n demo: boolean;\n codespace: boolean;\n support_tasks: Record<string, boolean>;\n}\n\nexport async function getServerInfo(): Promise<ServerInfoResult> {\n return (\n await axiosClient.get<never, AxiosResponse<ServerInfoResult>>(`/api/info`)\n ).data;\n}\n\nexport interface ModelInfoResult {\n model: {\n base: {\n columns?: Record<string, NodeColumnData>;\n primary_key?: string;\n };\n current: {\n columns?: Record<string, NodeColumnData>;\n primary_key?: string;\n };\n };\n}\n\nexport async function getModelInfo(model: string): Promise<ModelInfoResult> {\n return (\n await axiosClient.get<never, AxiosResponse<ModelInfoResult>>(\n `/api/model/${model}`,\n )\n ).data;\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\nimport { Check } from \"./checks\";\nimport { CllInput } from \"./cll\";\n\nexport interface LineageDiffViewOptions {\n view_mode?: \"changed_models\" | \"all\";\n node_ids?: string[];\n packages?: string[];\n select?: string;\n exclude?: string;\n column_level_lineage?: CllInput;\n}\n\ninterface CreateLineageDiffCheckBody {\n type: string;\n params: Record<string, string | boolean | number>;\n view_options: LineageDiffViewOptions;\n}\n\nexport async function createLineageDiffCheck(\n viewOptions: LineageDiffViewOptions,\n): Promise<Check> {\n const response = await axiosClient.post<\n CreateLineageDiffCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n type: \"lineage_diff\",\n params: {},\n view_options: viewOptions,\n });\n\n return response.data;\n}\n","import { RowCount, RowCountDiff } from \"./models\";\nimport { SubmitOptions, submitRun } from \"./runs\";\nexport interface RowCountParams {\n node_names: string[];\n}\nexport type RowCountResult = Record<string, RowCount>;\nexport interface RowCountDiffParams {\n node_names: string[];\n}\nexport type RowCountDiffResult = Record<string, RowCountDiff>;\nexport async function submitRowCountDiff(\n params: RowCountDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"row_count_diff\", params, options);\n}\n","import { axiosClient } from \"./axiosClient\";\nimport { RowCountDiffResult, submitRowCountDiff } from \"./rowcount\";\nimport { waitRun } from \"./runs\";\n\nexport interface RowCount {\n name?: string;\n curr: number | null;\n}\n\nexport interface RowCountDiff {\n name?: string;\n base: number | null;\n curr: number | null;\n}\n\nexport interface QueryRowCountResult {\n runId: string;\n result: RowCountDiffResult;\n}\n\nexport async function fetchModelRowCount(\n modelName: string,\n): Promise<RowCountDiff> {\n const response = await axiosClient.get<RowCountDiff>(\n `/api/models/${modelName}/row_count`,\n );\n return response.data;\n}\n\nexport async function queryModelRowCount(\n modelName: string,\n): Promise<RowCountDiff> {\n const { result } = await queryRowCount([modelName]);\n return result[modelName];\n}\n\nexport async function queryRowCount(\n modelNames: string[],\n): Promise<QueryRowCountResult> {\n if (modelNames.length === 0) {\n throw new Error(\"No model names provided\");\n }\n\n const { run_id } = await submitRowCountDiff(\n { node_names: modelNames },\n { nowait: true },\n );\n const run = await waitRun(run_id);\n\n return {\n runId: run_id,\n result: run.result as RowCountDiffResult,\n };\n}\n","import { SubmitOptions, submitRun } from \"./runs\";\nimport { ColumnRenderMode, DataFrame } from \"./types\";\n\nexport interface ProfileDiffParams {\n model: string;\n columns?: string[];\n}\n\nexport interface ProfileDiffResult {\n base?: DataFrame;\n current?: DataFrame;\n}\n\nexport interface ProfileDiffViewOptions {\n pinned_columns?: string[];\n display_mode?: \"side_by_side\" | \"inline\";\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport async function submitProfileDiff(\n params: ProfileDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"profile_diff\", params, options);\n}\n\nexport interface TopKDiffParams {\n model: string;\n column_name: string;\n k: number;\n}\n\nexport interface TopKResult {\n values: (string | number | undefined)[];\n counts: number[];\n valids: number;\n}\n\nexport interface TopKDiffResult {\n base: TopKResult;\n current: TopKResult;\n}\n\nexport interface HistogramDiffParams {\n model: string;\n column_name: string;\n column_type: string;\n}\n\nexport interface HistogramResult {\n counts: number[];\n total: number;\n}\n\nexport interface HistogramDiffResult {\n base: HistogramResult;\n current: HistogramResult;\n min: number;\n max: number;\n bin_edges: number[];\n labels?: string[];\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\nimport { Check } from \"./checks\";\n\nexport interface SchemaDiffViewParams {\n node_id?: string | string[];\n select?: string;\n exclude?: string;\n view_mode?: \"all\" | \"changed_models\";\n packages?: string[];\n}\n\ninterface CreateSchemaDiffCheckBody {\n type: string;\n params: SchemaDiffViewParams;\n}\n\nexport async function createSchemaDiffCheck(\n params: SchemaDiffViewParams,\n): Promise<Check> {\n const response = await axiosClient.post<\n CreateSchemaDiffCheckBody,\n AxiosResponse<Check>\n >(\"/api/checks\", {\n type: \"schema_diff\",\n params: params,\n });\n\n return response.data;\n}\n","import { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface SelectInput {\n select?: string;\n exclude?: string;\n packages?: string[];\n view_mode?: \"all\" | \"changed_models\";\n}\n\nexport interface SelectOutput {\n nodes: string[];\n}\n\nexport async function select(input: SelectInput): Promise<SelectOutput> {\n return (\n await axiosClient.post<SelectInput, AxiosResponse<SelectOutput>>(\n `/api/select`,\n input,\n )\n ).data;\n}\n","import { AxiosResponse, isAxiosError } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface SaveAsInput {\n filename: string;\n overwrite?: boolean;\n}\n\nexport interface ImportedState {\n runs: number;\n checks: number;\n}\n\nexport async function saveAs(input: SaveAsInput): Promise<void> {\n return (\n await axiosClient.post<SaveAsInput, AxiosResponse<void>>(\n \"/api/save-as\",\n input,\n )\n ).data;\n}\n\nexport async function rename(input: SaveAsInput): Promise<void> {\n return (\n await axiosClient.post<SaveAsInput, AxiosResponse<void>>(\n \"/api/rename\",\n input,\n )\n ).data;\n}\n\nexport async function exportState(): Promise<string> {\n return (await axiosClient.post<never, AxiosResponse<string>>(\"/api/export\"))\n .data;\n}\n\ninterface ImportStateBody {\n file: File;\n checks_only: \"true\" | \"false\";\n}\n\nexport async function importState(\n file: File,\n checksOnly?: boolean,\n): Promise<ImportedState> {\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"checks_only\", (!!checksOnly).toString());\n\n return (\n await axiosClient.post<ImportStateBody, AxiosResponse<ImportedState>>(\n \"/api/import\",\n formData,\n )\n ).data;\n}\n\nexport async function isStateSyncing(): Promise<boolean> {\n const response = await axiosClient.get<never, AxiosResponse<boolean>>(\n \"/api/sync\",\n );\n return response.status === 208;\n}\n\nexport interface SyncStateInput {\n method?: \"overwrite\" | \"revert\" | \"merge\";\n}\nexport interface SyncStateResponse {\n status: \"accepted\" | \"conflict\" | \"syncing\";\n}\n\nexport async function syncState(\n input: SyncStateInput,\n): Promise<SyncStateResponse> {\n try {\n const response = await axiosClient.post<\n SyncStateInput,\n AxiosResponse<SyncStateResponse>\n >(\"/api/sync\", input);\n\n if (response.status === 202) {\n return {\n status: \"accepted\",\n };\n }\n if (response.status === 208) {\n return {\n status: \"syncing\",\n };\n }\n } catch (error) {\n if (isAxiosError(error)) {\n if (error.response?.status === 409) {\n // 409 conflict case\n return { status: \"conflict\" };\n }\n }\n }\n throw new Error(\"Failed to sync state\");\n}\n\nexport interface ShareStateResponse {\n status: string;\n message: string;\n share_url?: string;\n}\n\nexport async function shareState(): Promise<ShareStateResponse> {\n return (\n await axiosClient.post<never, AxiosResponse<ShareStateResponse>>(\n \"/api/share\",\n )\n ).data;\n}\n","import axios, { AxiosResponse } from \"axios\";\nimport { axiosClient } from \"./axiosClient\";\n\nexport interface User {\n id: string;\n login: string;\n login_type: string;\n email: string;\n onboarding_state: string;\n}\n\ninterface GitHubUser {\n login: string;\n id: number;\n avatar_url: string;\n}\n\nexport async function fetchUser(): Promise<User> {\n try {\n const response = await axiosClient.get<never, AxiosResponse<User>>(\n \"/api/users\",\n );\n return response.data;\n } catch (error) {\n console.error(\"Error fetching user data:\", error);\n throw error;\n }\n}\n\nexport async function fetchGitHubAvatar(\n userId: string,\n): Promise<string | null> {\n try {\n const response = await axios.get<GitHubUser>(\n `https://api.github.com/user/${userId}`,\n );\n return response.data.avatar_url;\n } catch (error) {\n console.warn(\"Failed to fetch GitHub avatar:\", error);\n return null;\n }\n}\n","import { SubmitOptions, submitRun } from \"./runs\";\nimport { ColumnRenderMode, DataFrame } from \"./types\";\n\nexport interface ValueDiffResult {\n summary: {\n total: number;\n added: number;\n removed: number;\n };\n data: DataFrame;\n}\n\nexport interface ValueDiffParams {\n model: string;\n primary_key: string | string[];\n columns?: string[];\n}\n\nexport async function submitValueDiff(\n params: ValueDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"value_diff\", params, options);\n}\n\nexport type ValueDiffDetailResult = DataFrame;\n\nexport type ValueDiffDetailParams = ValueDiffParams;\n\nexport interface ValueDiffDetailViewOptions {\n changed_only?: boolean;\n pinned_columns?: string[];\n display_mode?: \"inline\" | \"side_by_side\";\n columnsRenderMode?: Record<string, ColumnRenderMode>;\n}\n\nexport async function submitValueDiffDetail(\n params: ValueDiffParams,\n options?: SubmitOptions,\n) {\n return await submitRun(\"value_diff_detail\", params, options);\n}\n","import { AxiosResponse } from \"axios\";\nimport { useEffect, useState } from \"react\";\nimport { axiosClient } from \"./axiosClient\";\n\ninterface VersionResponse {\n version: string;\n latestVersion: string;\n}\n\nexport function useVersionNumber() {\n const [version, setVersion] = useState(\"\");\n const [latestVersion, setLatestVersion] = useState(\"\");\n\n useEffect(() => {\n async function fetchVersion() {\n try {\n const { version, latestVersion } = (\n await axiosClient.get<never, AxiosResponse<VersionResponse>>(\n \"/api/version\",\n )\n ).data;\n\n setVersion(version);\n setLatestVersion(latestVersion);\n } catch (error) {\n console.error(\"Error fetching version number:\", error);\n }\n }\n void fetchVersion();\n }, []);\n\n return { version, latestVersion };\n}\n","const prefix = \"recce-\";\n\nexport const localStorageKeys = {\n bypassSaveOverwrite: `${prefix}-bypass-save-overwrite`,\n previewChangeFeedbackID: `${prefix}-preview-change-feedback`,\n prepareEnvGuideID: `${prefix}-prepare-env`,\n};\n","const prefix = \"recce\";\n\nexport const sessionStorageKeys = {\n recommendationIgnored: `${prefix}-recommendation-ignored`,\n recommendationShowed: `${prefix}-recommendation-showed`,\n prevRefreshTimeStamp: `${prefix}-prev-refresh-timestamp`,\n lineageNotificationDismissed: `${prefix}-lineage-notification-dismissed`,\n};\n"]}