@datarecce/ui 0.1.30 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.mts +1 -1
- package/dist/api.d.ts +1 -1
- package/dist/components.d.mts +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/hooks.d.mts +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/{index-BNUP2V_N.d.ts → index-B9lSPJTi.d.ts} +184 -2
- package/dist/index-B9lSPJTi.d.ts.map +1 -0
- package/dist/{index-DOPZuhD8.d.mts → index-IIXVIoOL.d.mts} +253 -71
- package/dist/index-IIXVIoOL.d.mts.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +4 -0
- package/dist/theme.d.mts +2 -185
- package/dist/theme.d.ts +2 -185
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +4 -2
- package/recce-source/.editorconfig +26 -0
- package/recce-source/.flake8 +37 -0
- package/recce-source/.github/ISSUE_TEMPLATE/bug_report.yml +67 -0
- package/recce-source/.github/ISSUE_TEMPLATE/custom.md +10 -0
- package/recce-source/.github/ISSUE_TEMPLATE/feature_request.yml +42 -0
- package/recce-source/.github/PULL_REQUEST_TEMPLATE.md +21 -0
- package/recce-source/.github/copilot-instructions.md +331 -0
- package/recce-source/.github/instructions/backend-instructions.md +541 -0
- package/recce-source/.github/instructions/frontend-instructions.md +317 -0
- package/recce-source/.github/workflows/build-statics.yaml +72 -0
- package/recce-source/.github/workflows/bump.yaml +48 -0
- package/recce-source/.github/workflows/integration-tests-cloud.yaml +92 -0
- package/recce-source/.github/workflows/integration-tests-sqlmesh.yaml +33 -0
- package/recce-source/.github/workflows/integration-tests.yaml +52 -0
- package/recce-source/.github/workflows/nightly.yaml +246 -0
- package/recce-source/.github/workflows/release.yaml +196 -0
- package/recce-source/.github/workflows/tests-js.yaml +58 -0
- package/recce-source/.github/workflows/tests-python.yaml +128 -0
- package/recce-source/.pre-commit-config.yaml +26 -0
- package/recce-source/CLAUDE.md +483 -0
- package/recce-source/CODE_OF_CONDUCT.md +128 -0
- package/recce-source/CONTRIBUTING.md +107 -0
- package/recce-source/LICENSE +201 -0
- package/recce-source/Makefile +126 -0
- package/recce-source/README.md +182 -0
- package/recce-source/RECCE_CLOUD.md +81 -0
- package/recce-source/SECURITY.md +25 -0
- package/recce-source/docs/PACKAGING.md +340 -0
- package/recce-source/docs/README.md +1 -0
- package/recce-source/integration_tests/dbt/dbt_project.yml +26 -0
- package/recce-source/integration_tests/dbt/models/customers.sql +69 -0
- package/recce-source/integration_tests/dbt/models/docs.md +14 -0
- package/recce-source/integration_tests/dbt/models/orders.sql +56 -0
- package/recce-source/integration_tests/dbt/models/schema.yml +82 -0
- package/recce-source/integration_tests/dbt/models/staging/schema.yml +31 -0
- package/recce-source/integration_tests/dbt/models/staging/stg_customers.sql +22 -0
- package/recce-source/integration_tests/dbt/models/staging/stg_orders.sql +23 -0
- package/recce-source/integration_tests/dbt/models/staging/stg_payments.sql +25 -0
- package/recce-source/integration_tests/dbt/packages.yml +7 -0
- package/recce-source/integration_tests/dbt/profiles.yml +8 -0
- package/recce-source/integration_tests/dbt/seeds/raw_customers.csv +101 -0
- package/recce-source/integration_tests/dbt/seeds/raw_orders.csv +100 -0
- package/recce-source/integration_tests/dbt/seeds/raw_payments.csv +114 -0
- package/recce-source/integration_tests/dbt/seeds/raw_statuses.csv +5 -0
- package/recce-source/integration_tests/dbt/smoke_test.sh +72 -0
- package/recce-source/integration_tests/dbt/smoke_test_cloud.sh +71 -0
- package/recce-source/integration_tests/sqlmesh/__init__.py +0 -0
- package/recce-source/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +9 -0
- package/recce-source/integration_tests/sqlmesh/audits/items.sql +7 -0
- package/recce-source/integration_tests/sqlmesh/audits/order_items.sql +7 -0
- package/recce-source/integration_tests/sqlmesh/config.py +171 -0
- package/recce-source/integration_tests/sqlmesh/helper.py +20 -0
- package/recce-source/integration_tests/sqlmesh/hooks/__init__.py +0 -0
- package/recce-source/integration_tests/sqlmesh/macros/__init__.py +0 -0
- package/recce-source/integration_tests/sqlmesh/macros/macros.py +8 -0
- package/recce-source/integration_tests/sqlmesh/macros/macros.sql +8 -0
- package/recce-source/integration_tests/sqlmesh/macros/utils.py +11 -0
- package/recce-source/integration_tests/sqlmesh/metrics/metrics.sql +25 -0
- package/recce-source/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +41 -0
- package/recce-source/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +60 -0
- package/recce-source/integration_tests/sqlmesh/models/customers.sql +32 -0
- package/recce-source/integration_tests/sqlmesh/models/items.py +95 -0
- package/recce-source/integration_tests/sqlmesh/models/marketing.sql +15 -0
- package/recce-source/integration_tests/sqlmesh/models/order_items.py +95 -0
- package/recce-source/integration_tests/sqlmesh/models/orders.py +70 -0
- package/recce-source/integration_tests/sqlmesh/models/raw_marketing.py +62 -0
- package/recce-source/integration_tests/sqlmesh/models/top_waiters.sql +23 -0
- package/recce-source/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +29 -0
- package/recce-source/integration_tests/sqlmesh/models/waiter_names.sql +10 -0
- package/recce-source/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +29 -0
- package/recce-source/integration_tests/sqlmesh/models/waiters.py +62 -0
- package/recce-source/integration_tests/sqlmesh/prep_env.sh +16 -0
- package/recce-source/integration_tests/sqlmesh/schema.yaml +5 -0
- package/recce-source/integration_tests/sqlmesh/seeds/waiter_names.csv +11 -0
- package/recce-source/integration_tests/sqlmesh/test_server.sh +29 -0
- package/recce-source/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +63 -0
- package/recce-source/integration_tests/sqlmesh/tests/test_order_items.yaml +72 -0
- package/recce-source/js/.editorconfig +27 -0
- package/recce-source/js/.env.development +5 -0
- package/recce-source/js/.husky/pre-commit +29 -0
- package/recce-source/js/.nvmrc +1 -0
- package/recce-source/js/README.md +39 -0
- package/recce-source/js/app/(mainComponents)/DisplayModeToggle.tsx +65 -0
- package/recce-source/js/app/(mainComponents)/NavBar.tsx +228 -0
- package/recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx +107 -0
- package/recce-source/js/app/(mainComponents)/TopBar.tsx +252 -0
- package/recce-source/js/app/@lineage/default.tsx +20 -0
- package/recce-source/js/app/@lineage/page.tsx +14 -0
- package/recce-source/js/app/MainLayout.tsx +170 -0
- package/recce-source/js/app/Providers.tsx +49 -0
- package/recce-source/js/app/checks/page.tsx +296 -0
- package/recce-source/js/app/error.tsx +93 -0
- package/recce-source/js/app/favicon.ico +0 -0
- package/recce-source/js/app/global-error.tsx +115 -0
- package/recce-source/js/app/global.css +82 -0
- package/recce-source/js/app/layout.tsx +48 -0
- package/recce-source/js/app/lineage/page.tsx +15 -0
- package/recce-source/js/app/page.tsx +12 -0
- package/recce-source/js/app/query/page.tsx +8 -0
- package/recce-source/js/biome.json +313 -0
- package/recce-source/js/jest.config.js +34 -0
- package/recce-source/js/jest.globals.d.ts +32 -0
- package/recce-source/js/jest.setup.js +91 -0
- package/recce-source/js/next.config.js +16 -0
- package/recce-source/js/package-lock.json +13843 -0
- package/recce-source/js/package.json +123 -0
- package/recce-source/js/pnpm-lock.yaml +9235 -0
- package/recce-source/js/pnpm-workspace.yaml +6 -0
- package/recce-source/js/postcss.config.js +5 -0
- package/recce-source/js/public/auth_callback.html +68 -0
- package/recce-source/js/public/imgs/feedback/thumbs-down.png +0 -0
- package/recce-source/js/public/imgs/feedback/thumbs-up.png +0 -0
- package/recce-source/js/public/imgs/reload-image.svg +4 -0
- package/recce-source/js/public/logo/recce-logo-white.png +0 -0
- package/recce-source/js/src/components/AuthModal/AuthModal.tsx +202 -0
- package/recce-source/js/src/components/app/AvatarDropdown.tsx +159 -0
- package/recce-source/js/src/components/app/EnvInfo.tsx +357 -0
- package/recce-source/js/src/components/app/Filename.tsx +388 -0
- package/recce-source/js/src/components/app/SetupConnectionPopover.tsx +91 -0
- package/recce-source/js/src/components/app/StateExporter.tsx +57 -0
- package/recce-source/js/src/components/app/StateImporter.tsx +198 -0
- package/recce-source/js/src/components/app/StateSharing.tsx +145 -0
- package/recce-source/js/src/components/app/StateSynchronizer.tsx +205 -0
- package/recce-source/js/src/components/charts/HistogramChart.tsx +291 -0
- package/recce-source/js/src/components/charts/SquareIcon.tsx +51 -0
- package/recce-source/js/src/components/charts/TopKSummaryList.tsx +457 -0
- package/recce-source/js/src/components/charts/chartTheme.ts +74 -0
- package/recce-source/js/src/components/check/CheckBreadcrumb.tsx +97 -0
- package/recce-source/js/src/components/check/CheckDescription.tsx +134 -0
- package/recce-source/js/src/components/check/CheckDetail.tsx +797 -0
- package/recce-source/js/src/components/check/CheckEmptyState.tsx +84 -0
- package/recce-source/js/src/components/check/CheckList.tsx +320 -0
- package/recce-source/js/src/components/check/LineageDiffView.tsx +32 -0
- package/recce-source/js/src/components/check/PresetCheckTemplateView.tsx +48 -0
- package/recce-source/js/src/components/check/SchemaDiffView.tsx +290 -0
- package/recce-source/js/src/components/check/check.ts +25 -0
- package/recce-source/js/src/components/check/timeline/CheckTimeline.tsx +163 -0
- package/recce-source/js/src/components/check/timeline/CommentInput.tsx +84 -0
- package/recce-source/js/src/components/check/timeline/TimelineEvent.tsx +468 -0
- package/recce-source/js/src/components/check/timeline/index.ts +12 -0
- package/recce-source/js/src/components/check/utils.ts +12 -0
- package/recce-source/js/src/components/data-grid/ScreenshotDataGrid.tsx +333 -0
- package/recce-source/js/src/components/data-grid/agGridStyles.css +55 -0
- package/recce-source/js/src/components/data-grid/agGridTheme.ts +43 -0
- package/recce-source/js/src/components/editor/CodeEditor.tsx +107 -0
- package/recce-source/js/src/components/editor/DiffEditor.tsx +162 -0
- package/recce-source/js/src/components/editor/index.ts +12 -0
- package/recce-source/js/src/components/errorboundary/ErrorBoundary.tsx +87 -0
- package/recce-source/js/src/components/histogram/HistogramDiffForm.tsx +147 -0
- package/recce-source/js/src/components/histogram/HistogramDiffResultView.tsx +63 -0
- package/recce-source/js/src/components/icons/index.tsx +142 -0
- package/recce-source/js/src/components/lineage/ActionControl.tsx +63 -0
- package/recce-source/js/src/components/lineage/ActionTag.tsx +141 -0
- package/recce-source/js/src/components/lineage/ChangeStatusLegend.tsx +46 -0
- package/recce-source/js/src/components/lineage/ColumnLevelLineageControl.tsx +327 -0
- package/recce-source/js/src/components/lineage/ColumnLevelLineageLegend.tsx +57 -0
- package/recce-source/js/src/components/lineage/GraphColumnNode.tsx +199 -0
- package/recce-source/js/src/components/lineage/GraphEdge.tsx +59 -0
- package/recce-source/js/src/components/lineage/GraphNode.tsx +555 -0
- package/recce-source/js/src/components/lineage/LineagePage.tsx +10 -0
- package/recce-source/js/src/components/lineage/LineageView.tsx +1384 -0
- package/recce-source/js/src/components/lineage/LineageViewContext.tsx +86 -0
- package/recce-source/js/src/components/lineage/LineageViewContextMenu.tsx +637 -0
- package/recce-source/js/src/components/lineage/LineageViewNotification.tsx +64 -0
- package/recce-source/js/src/components/lineage/LineageViewTopBar.tsx +596 -0
- package/recce-source/js/src/components/lineage/NodeSqlView.tsx +136 -0
- package/recce-source/js/src/components/lineage/NodeTag.tsx +278 -0
- package/recce-source/js/src/components/lineage/NodeView.tsx +642 -0
- package/recce-source/js/src/components/lineage/SandboxView.tsx +436 -0
- package/recce-source/js/src/components/lineage/ServerDisconnectedModalContent.tsx +105 -0
- package/recce-source/js/src/components/lineage/SetupConnectionBanner.tsx +52 -0
- package/recce-source/js/src/components/lineage/SingleEnvironmentQueryView.tsx +152 -0
- package/recce-source/js/src/components/lineage/graph.test.ts +31 -0
- package/recce-source/js/src/components/lineage/graph.ts +58 -0
- package/recce-source/js/src/components/lineage/lineage.test.ts +169 -0
- package/recce-source/js/src/components/lineage/lineage.ts +521 -0
- package/recce-source/js/src/components/lineage/styles.css +42 -0
- package/recce-source/js/src/components/lineage/styles.tsx +165 -0
- package/recce-source/js/src/components/lineage/useMultiNodesAction.ts +352 -0
- package/recce-source/js/src/components/lineage/useValueDiffAlertDialog.tsx +108 -0
- package/recce-source/js/src/components/onboarding-guide/Notification.tsx +62 -0
- package/recce-source/js/src/components/profile/ProfileDiffForm.tsx +134 -0
- package/recce-source/js/src/components/profile/ProfileDiffResultView.tsx +245 -0
- package/recce-source/js/src/components/query/ChangedOnlyCheckbox.tsx +29 -0
- package/recce-source/js/src/components/query/DiffText.tsx +120 -0
- package/recce-source/js/src/components/query/QueryDiffResultView.tsx +470 -0
- package/recce-source/js/src/components/query/QueryForm.tsx +80 -0
- package/recce-source/js/src/components/query/QueryPage.tsx +282 -0
- package/recce-source/js/src/components/query/QueryResultView.tsx +180 -0
- package/recce-source/js/src/components/query/SetupConnectionGuide.tsx +57 -0
- package/recce-source/js/src/components/query/SqlEditor.tsx +245 -0
- package/recce-source/js/src/components/query/ToggleSwitch.tsx +84 -0
- package/recce-source/js/src/components/query/styles.css +21 -0
- package/recce-source/js/src/components/routing/DirectUrlAccess.test.tsx +428 -0
- package/recce-source/js/src/components/routing/LineageStatePreservation.test.tsx +311 -0
- package/recce-source/js/src/components/routing/Navigation.test.tsx +256 -0
- package/recce-source/js/src/components/rowcount/RowCountDiffResultView.tsx +109 -0
- package/recce-source/js/src/components/rowcount/delta.ts +11 -0
- package/recce-source/js/src/components/run/RunList.tsx +303 -0
- package/recce-source/js/src/components/run/RunModal.tsx +191 -0
- package/recce-source/js/src/components/run/RunPage.tsx +26 -0
- package/recce-source/js/src/components/run/RunResultPane.tsx +454 -0
- package/recce-source/js/src/components/run/RunStatusAndDate.tsx +106 -0
- package/recce-source/js/src/components/run/RunToolbar.tsx +70 -0
- package/recce-source/js/src/components/run/RunView.tsx +196 -0
- package/recce-source/js/src/components/run/registry.ts +214 -0
- package/recce-source/js/src/components/run/types.ts +14 -0
- package/recce-source/js/src/components/schema/ColumnNameCell.test.tsx +169 -0
- package/recce-source/js/src/components/schema/ColumnNameCell.tsx +198 -0
- package/recce-source/js/src/components/schema/SchemaView.tsx +337 -0
- package/recce-source/js/src/components/schema/schemaDiff.ts +32 -0
- package/recce-source/js/src/components/schema/style.css +134 -0
- package/recce-source/js/src/components/screenshot/ScreenshotBox.tsx +39 -0
- package/recce-source/js/src/components/shared/HistoryToggle.tsx +35 -0
- package/recce-source/js/src/components/split/Split.tsx +40 -0
- package/recce-source/js/src/components/split/styles.css +24 -0
- package/recce-source/js/src/components/summary/ChangeSummary.tsx +264 -0
- package/recce-source/js/src/components/summary/SchemaSummary.tsx +123 -0
- package/recce-source/js/src/components/summary/SummaryView.tsx +29 -0
- package/recce-source/js/src/components/timeout/IdleTimeoutBadge.tsx +48 -0
- package/recce-source/js/src/components/top-k/TopKDiffForm.tsx +58 -0
- package/recce-source/js/src/components/top-k/TopKDiffResultView.tsx +73 -0
- package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnGroupHeader.tsx +228 -0
- package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnHeader.tsx +113 -0
- package/recce-source/js/src/components/ui/dataGrid/defaultRenderCell.tsx +72 -0
- package/recce-source/js/src/components/ui/dataGrid/index.ts +23 -0
- package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.test.tsx +607 -0
- package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.tsx +211 -0
- package/recce-source/js/src/components/ui/dataGrid/schemaCells.test.tsx +452 -0
- package/recce-source/js/src/components/ui/dataGrid/schemaCells.tsx +142 -0
- package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.test.tsx +178 -0
- package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.tsx +275 -0
- package/recce-source/js/src/components/ui/markdown/ExternalLinkConfirmDialog.tsx +134 -0
- package/recce-source/js/src/components/ui/markdown/MarkdownContent.tsx +364 -0
- package/recce-source/js/src/components/ui/mui/index.ts +13 -0
- package/recce-source/js/src/components/ui/mui-provider.tsx +67 -0
- package/recce-source/js/src/components/ui/mui-theme.ts +1039 -0
- package/recce-source/js/src/components/ui/mui-utils.ts +113 -0
- package/recce-source/js/src/components/ui/toaster.tsx +288 -0
- package/recce-source/js/src/components/valuediff/ValueDiffDetailResultView.tsx +217 -0
- package/recce-source/js/src/components/valuediff/ValueDiffForm.tsx +246 -0
- package/recce-source/js/src/components/valuediff/ValueDiffResultView.tsx +82 -0
- package/recce-source/js/src/components/valuediff/shared.ts +33 -0
- package/recce-source/js/src/constants/tooltipMessage.ts +3 -0
- package/recce-source/js/src/constants/urls.ts +1 -0
- package/recce-source/js/src/lib/UrlHash.ts +12 -0
- package/recce-source/js/src/lib/api/adhocQuery.ts +70 -0
- package/recce-source/js/src/lib/api/axiosClient.ts +9 -0
- package/recce-source/js/src/lib/api/cacheKeys.ts +13 -0
- package/recce-source/js/src/lib/api/checkEvents.ts +252 -0
- package/recce-source/js/src/lib/api/checks.ts +129 -0
- package/recce-source/js/src/lib/api/cll.ts +53 -0
- package/recce-source/js/src/lib/api/connectToCloud.ts +13 -0
- package/recce-source/js/src/lib/api/flag.ts +37 -0
- package/recce-source/js/src/lib/api/info.ts +198 -0
- package/recce-source/js/src/lib/api/instanceInfo.ts +25 -0
- package/recce-source/js/src/lib/api/keepAlive.ts +108 -0
- package/recce-source/js/src/lib/api/lineagecheck.ts +35 -0
- package/recce-source/js/src/lib/api/localStorageKeys.ts +7 -0
- package/recce-source/js/src/lib/api/models.ts +59 -0
- package/recce-source/js/src/lib/api/profile.ts +65 -0
- package/recce-source/js/src/lib/api/rowcount.ts +19 -0
- package/recce-source/js/src/lib/api/runs.ts +174 -0
- package/recce-source/js/src/lib/api/schemacheck.ts +31 -0
- package/recce-source/js/src/lib/api/select.ts +25 -0
- package/recce-source/js/src/lib/api/sessionStorageKeys.ts +8 -0
- package/recce-source/js/src/lib/api/state.ts +117 -0
- package/recce-source/js/src/lib/api/track.ts +281 -0
- package/recce-source/js/src/lib/api/types.ts +284 -0
- package/recce-source/js/src/lib/api/user.ts +42 -0
- package/recce-source/js/src/lib/api/valuediff.ts +46 -0
- package/recce-source/js/src/lib/api/version.ts +40 -0
- package/recce-source/js/src/lib/const.ts +9 -0
- package/recce-source/js/src/lib/dataGrid/crossFunctionConsistency.test.ts +626 -0
- package/recce-source/js/src/lib/dataGrid/dataGridFactory.test.ts +2140 -0
- package/recce-source/js/src/lib/dataGrid/dataGridFactory.ts +397 -0
- package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.test.ts +132 -0
- package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.ts +126 -0
- package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.test.ts +1627 -0
- package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.ts +140 -0
- package/recce-source/js/src/lib/dataGrid/generators/toDataGrid.ts +67 -0
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.test.ts +142 -0
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.ts +71 -0
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.test.ts +258 -0
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.ts +153 -0
- package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.test.ts +951 -0
- package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.ts +221 -0
- package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.test.ts +395 -0
- package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.ts +184 -0
- package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.test.ts +884 -0
- package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.ts +113 -0
- package/recce-source/js/src/lib/dataGrid/index.ts +51 -0
- package/recce-source/js/src/lib/dataGrid/propertyBased.test.ts +858 -0
- package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.test.ts +482 -0
- package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.ts +345 -0
- package/recce-source/js/src/lib/dataGrid/shared/dataTypeEdgeCases.test.ts +698 -0
- package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.test.tsx +820 -0
- package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.tsx +277 -0
- package/recce-source/js/src/lib/dataGrid/shared/gridUtils.test.ts +785 -0
- package/recce-source/js/src/lib/dataGrid/shared/gridUtils.ts +370 -0
- package/recce-source/js/src/lib/dataGrid/shared/index.ts +81 -0
- package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.test.ts +909 -0
- package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.ts +325 -0
- package/recce-source/js/src/lib/dataGrid/shared/simpleColumnBuilder.tsx +240 -0
- package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.test.tsx +719 -0
- package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.tsx +231 -0
- package/recce-source/js/src/lib/dataGrid/shared/validation.test.ts +559 -0
- package/recce-source/js/src/lib/dataGrid/shared/validation.ts +367 -0
- package/recce-source/js/src/lib/dataGrid/warehouseNamingConventions.test.ts +1117 -0
- package/recce-source/js/src/lib/formatSelect.ts +50 -0
- package/recce-source/js/src/lib/hooks/ApiConfigContext.tsx +181 -0
- package/recce-source/js/src/lib/hooks/IdleTimeoutContext.tsx +177 -0
- package/recce-source/js/src/lib/hooks/LineageGraphContext.tsx +512 -0
- package/recce-source/js/src/lib/hooks/RecceActionContext.tsx +269 -0
- package/recce-source/js/src/lib/hooks/RecceCheckContext.tsx +33 -0
- package/recce-source/js/src/lib/hooks/RecceContextProvider.tsx +54 -0
- package/recce-source/js/src/lib/hooks/RecceInstanceContext.tsx +129 -0
- package/recce-source/js/src/lib/hooks/RecceQueryContext.tsx +98 -0
- package/recce-source/js/src/lib/hooks/RecceShareStateContext.tsx +59 -0
- package/recce-source/js/src/lib/hooks/ScreenShot.tsx +399 -0
- package/recce-source/js/src/lib/hooks/useAppRouter.test.ts +211 -0
- package/recce-source/js/src/lib/hooks/useAppRouter.ts +200 -0
- package/recce-source/js/src/lib/hooks/useCheckEvents.ts +99 -0
- package/recce-source/js/src/lib/hooks/useCheckToast.tsx +14 -0
- package/recce-source/js/src/lib/hooks/useClipBoardToast.tsx +27 -0
- package/recce-source/js/src/lib/hooks/useCountdownToast.tsx +102 -0
- package/recce-source/js/src/lib/hooks/useFeedbackCollectionToast.tsx +130 -0
- package/recce-source/js/src/lib/hooks/useGuideToast.tsx +45 -0
- package/recce-source/js/src/lib/hooks/useIdleDetection.tsx +185 -0
- package/recce-source/js/src/lib/hooks/useModelColumns.tsx +113 -0
- package/recce-source/js/src/lib/hooks/useRecceInstanceInfo.tsx +13 -0
- package/recce-source/js/src/lib/hooks/useRecceServerFlag.tsx +13 -0
- package/recce-source/js/src/lib/hooks/useRun.tsx +89 -0
- package/recce-source/js/src/lib/hooks/useThemeColors.ts +115 -0
- package/recce-source/js/src/lib/mergeKeys.test.ts +89 -0
- package/recce-source/js/src/lib/mergeKeys.ts +86 -0
- package/recce-source/js/src/lib/result/ResultErrorFallback.tsx +9 -0
- package/recce-source/js/src/lib/utils/formatTime.ts +84 -0
- package/recce-source/js/src/lib/utils/urls.ts +16 -0
- package/recce-source/js/src/utils/DropdownValuesInput.tsx +297 -0
- package/recce-source/js/src/utils/formatters.tsx +237 -0
- package/recce-source/js/src/utils/transforms.ts +81 -0
- package/recce-source/js/tsconfig.json +47 -0
- package/recce-source/macros/README.md +8 -0
- package/recce-source/macros/recce_athena.sql +73 -0
- package/recce-source/pyproject.toml +109 -0
- package/recce-source/recce/VERSION +1 -0
- package/recce-source/recce/__init__.py +84 -0
- package/recce-source/recce/adapter/__init__.py +0 -0
- package/recce-source/recce/adapter/base.py +109 -0
- package/recce-source/recce/adapter/dbt_adapter/__init__.py +1699 -0
- package/recce-source/recce/adapter/dbt_adapter/dbt_version.py +42 -0
- package/recce-source/recce/adapter/sqlmesh_adapter.py +141 -0
- package/recce-source/recce/apis/__init__.py +0 -0
- package/recce-source/recce/apis/check_api.py +203 -0
- package/recce-source/recce/apis/check_events_api.py +353 -0
- package/recce-source/recce/apis/check_func.py +130 -0
- package/recce-source/recce/apis/run_api.py +130 -0
- package/recce-source/recce/apis/run_func.py +258 -0
- package/recce-source/recce/artifact.py +266 -0
- package/recce-source/recce/cli.py +1846 -0
- package/recce-source/recce/config.py +127 -0
- package/recce-source/recce/connect_to_cloud.py +138 -0
- package/recce-source/recce/core.py +334 -0
- package/recce-source/recce/diff.py +26 -0
- package/recce-source/recce/event/CONFIG +1 -0
- package/recce-source/recce/event/SENTRY_DNS +1 -0
- package/recce-source/recce/event/__init__.py +304 -0
- package/recce-source/recce/event/collector.py +184 -0
- package/recce-source/recce/event/track.py +158 -0
- package/recce-source/recce/exceptions.py +21 -0
- package/recce-source/recce/git.py +77 -0
- package/recce-source/recce/github.py +222 -0
- package/recce-source/recce/mcp_server.py +861 -0
- package/recce-source/recce/models/__init__.py +6 -0
- package/recce-source/recce/models/check.py +473 -0
- package/recce-source/recce/models/run.py +46 -0
- package/recce-source/recce/models/types.py +218 -0
- package/recce-source/recce/pull_request.py +124 -0
- package/recce-source/recce/run.py +390 -0
- package/recce-source/recce/server.py +877 -0
- package/recce-source/recce/state/__init__.py +31 -0
- package/recce-source/recce/state/cloud.py +644 -0
- package/recce-source/recce/state/const.py +26 -0
- package/recce-source/recce/state/local.py +56 -0
- package/recce-source/recce/state/state.py +119 -0
- package/recce-source/recce/state/state_loader.py +174 -0
- package/recce-source/recce/summary.py +575 -0
- package/recce-source/recce/tasks/__init__.py +23 -0
- package/recce-source/recce/tasks/core.py +134 -0
- package/recce-source/recce/tasks/dataframe.py +170 -0
- package/recce-source/recce/tasks/histogram.py +433 -0
- package/recce-source/recce/tasks/lineage.py +19 -0
- package/recce-source/recce/tasks/profile.py +298 -0
- package/recce-source/recce/tasks/query.py +450 -0
- package/recce-source/recce/tasks/rowcount.py +277 -0
- package/recce-source/recce/tasks/schema.py +65 -0
- package/recce-source/recce/tasks/top_k.py +172 -0
- package/recce-source/recce/tasks/utils.py +147 -0
- package/recce-source/recce/tasks/valuediff.py +497 -0
- package/recce-source/recce/util/__init__.py +4 -0
- package/recce-source/recce/util/api_token.py +80 -0
- package/recce-source/recce/util/breaking.py +330 -0
- package/recce-source/recce/util/cache.py +25 -0
- package/recce-source/recce/util/cll.py +355 -0
- package/recce-source/recce/util/cloud/__init__.py +15 -0
- package/recce-source/recce/util/cloud/base.py +115 -0
- package/recce-source/recce/util/cloud/check_events.py +190 -0
- package/recce-source/recce/util/cloud/checks.py +242 -0
- package/recce-source/recce/util/io.py +120 -0
- package/recce-source/recce/util/lineage.py +83 -0
- package/recce-source/recce/util/logger.py +25 -0
- package/recce-source/recce/util/onboarding_state.py +45 -0
- package/recce-source/recce/util/perf_tracking.py +85 -0
- package/recce-source/recce/util/pydantic_model.py +22 -0
- package/recce-source/recce/util/recce_cloud.py +454 -0
- package/recce-source/recce/util/singleton.py +18 -0
- package/recce-source/recce/util/startup_perf.py +121 -0
- package/recce-source/recce/yaml/__init__.py +58 -0
- package/recce-source/recce_cloud/README.md +780 -0
- package/recce-source/recce_cloud/VERSION +1 -0
- package/recce-source/recce_cloud/__init__.py +24 -0
- package/recce-source/recce_cloud/api/__init__.py +17 -0
- package/recce-source/recce_cloud/api/base.py +132 -0
- package/recce-source/recce_cloud/api/client.py +186 -0
- package/recce-source/recce_cloud/api/exceptions.py +26 -0
- package/recce-source/recce_cloud/api/factory.py +63 -0
- package/recce-source/recce_cloud/api/github.py +106 -0
- package/recce-source/recce_cloud/api/gitlab.py +111 -0
- package/recce-source/recce_cloud/artifact.py +57 -0
- package/recce-source/recce_cloud/ci_providers/__init__.py +9 -0
- package/recce-source/recce_cloud/ci_providers/base.py +82 -0
- package/recce-source/recce_cloud/ci_providers/detector.py +147 -0
- package/recce-source/recce_cloud/ci_providers/github_actions.py +136 -0
- package/recce-source/recce_cloud/ci_providers/gitlab_ci.py +130 -0
- package/recce-source/recce_cloud/cli.py +434 -0
- package/recce-source/recce_cloud/download.py +230 -0
- package/recce-source/recce_cloud/hatch_build.py +20 -0
- package/recce-source/recce_cloud/pyproject.toml +49 -0
- package/recce-source/recce_cloud/upload.py +214 -0
- package/recce-source/test.py +0 -0
- package/recce-source/tests/__init__.py +0 -0
- package/recce-source/tests/adapter/__init__.py +0 -0
- package/recce-source/tests/adapter/dbt_adapter/__init__.py +0 -0
- package/recce-source/tests/adapter/dbt_adapter/conftest.py +17 -0
- package/recce-source/tests/adapter/dbt_adapter/dbt_test_helper.py +298 -0
- package/recce-source/tests/adapter/dbt_adapter/test_dbt_adapter.py +25 -0
- package/recce-source/tests/adapter/dbt_adapter/test_dbt_cll.py +717 -0
- package/recce-source/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +4 -0
- package/recce-source/tests/adapter/dbt_adapter/test_proj/manifest.json +1 -0
- package/recce-source/tests/adapter/dbt_adapter/test_proj/package-lock.yml +8 -0
- package/recce-source/tests/adapter/dbt_adapter/test_proj/packages.yml +7 -0
- package/recce-source/tests/adapter/dbt_adapter/test_proj/profiles.yml +6 -0
- package/recce-source/tests/adapter/dbt_adapter/test_selector.py +205 -0
- package/recce-source/tests/apis/__init__.py +0 -0
- package/recce-source/tests/apis/row_count_diff.json +59 -0
- package/recce-source/tests/apis/test_check_events_api.py +615 -0
- package/recce-source/tests/apis/test_run_func.py +433 -0
- package/recce-source/tests/catalog.json +527 -0
- package/recce-source/tests/data/manifest/base/catalog.json +1 -0
- package/recce-source/tests/data/manifest/base/manifest.json +1 -0
- package/recce-source/tests/data/manifest/pr2/catalog.json +1 -0
- package/recce-source/tests/data/manifest/pr2/manifest.json +1 -0
- package/recce-source/tests/manifest.json +10655 -0
- package/recce-source/tests/models/__init__.py +0 -0
- package/recce-source/tests/models/test_check.py +731 -0
- package/recce-source/tests/models/test_run_models.py +295 -0
- package/recce-source/tests/recce_cloud/__init__.py +0 -0
- package/recce-source/tests/recce_cloud/test_ci_providers.py +351 -0
- package/recce-source/tests/recce_cloud/test_cli.py +735 -0
- package/recce-source/tests/recce_cloud/test_client.py +379 -0
- package/recce-source/tests/recce_cloud/test_platform_clients.py +483 -0
- package/recce-source/tests/recce_state.json +1 -0
- package/recce-source/tests/state/test_cloud.py +719 -0
- package/recce-source/tests/state/test_local.py +164 -0
- package/recce-source/tests/state/test_state_loader.py +211 -0
- package/recce-source/tests/tasks/__init__.py +0 -0
- package/recce-source/tests/tasks/conftest.py +4 -0
- package/recce-source/tests/tasks/test_histogram.py +129 -0
- package/recce-source/tests/tasks/test_lineage.py +55 -0
- package/recce-source/tests/tasks/test_preset_checks.py +64 -0
- package/recce-source/tests/tasks/test_profile.py +397 -0
- package/recce-source/tests/tasks/test_query.py +528 -0
- package/recce-source/tests/tasks/test_row_count.py +133 -0
- package/recce-source/tests/tasks/test_schema.py +122 -0
- package/recce-source/tests/tasks/test_top_k.py +77 -0
- package/recce-source/tests/tasks/test_utils.py +439 -0
- package/recce-source/tests/tasks/test_valuediff.py +361 -0
- package/recce-source/tests/test_cli.py +236 -0
- package/recce-source/tests/test_cli_mcp_optional.py +45 -0
- package/recce-source/tests/test_cloud_listing_cli.py +324 -0
- package/recce-source/tests/test_config.py +43 -0
- package/recce-source/tests/test_connect_to_cloud.py +82 -0
- package/recce-source/tests/test_core.py +174 -0
- package/recce-source/tests/test_dbt.py +36 -0
- package/recce-source/tests/test_mcp_server.py +505 -0
- package/recce-source/tests/test_pull_request.py +130 -0
- package/recce-source/tests/test_server.py +202 -0
- package/recce-source/tests/test_server_lifespan.py +138 -0
- package/recce-source/tests/test_summary.py +73 -0
- package/recce-source/tests/util/__init__.py +0 -0
- package/recce-source/tests/util/cloud/__init__.py +0 -0
- package/recce-source/tests/util/cloud/test_check_events.py +255 -0
- package/recce-source/tests/util/cloud/test_checks.py +204 -0
- package/recce-source/tests/util/test_api_token.py +119 -0
- package/recce-source/tests/util/test_breaking.py +1427 -0
- package/recce-source/tests/util/test_cll.py +706 -0
- package/recce-source/tests/util/test_lineage.py +122 -0
- package/recce-source/tests/util/test_onboarding_state.py +84 -0
- package/recce-source/tests/util/test_recce_cloud.py +231 -0
- package/recce-source/tox.ini +40 -0
- package/recce-source/uv.lock +3928 -0
- package/src/api/index.ts +32 -0
- package/src/components/index.ts +154 -0
- package/src/global.d.ts +14 -0
- package/src/hooks/index.ts +56 -0
- package/src/index.ts +17 -0
- package/src/lib/hooks/RouteConfigContext.ts +139 -0
- package/src/lib/hooks/useAppRouter.ts +240 -0
- package/src/mui-augmentation.d.ts +139 -0
- package/src/theme/index.ts +13 -0
- package/src/theme.ts +23 -0
- package/src/types/index.ts +23 -0
- package/dist/index-BNUP2V_N.d.ts.map +0 -1
- package/dist/index-DOPZuhD8.d.mts.map +0 -1
- package/dist/theme.d.mts.map +0 -1
- package/dist/theme.d.ts.map +0 -1
package/src/api/index.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides API client utilities and functions
|
|
5
|
+
* for interacting with the Recce backend.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// API Client
|
|
9
|
+
export { axiosClient, reactQueryClient } from '@/lib/api/axiosClient';
|
|
10
|
+
|
|
11
|
+
// API Functions
|
|
12
|
+
export * from '@/lib/api/adhocQuery';
|
|
13
|
+
export * from '@/lib/api/checks';
|
|
14
|
+
export * from '@/lib/api/cll';
|
|
15
|
+
export * from '@/lib/api/connectToCloud';
|
|
16
|
+
export * from '@/lib/api/flag';
|
|
17
|
+
export * from '@/lib/api/info';
|
|
18
|
+
export * from '@/lib/api/lineagecheck';
|
|
19
|
+
export * from '@/lib/api/models';
|
|
20
|
+
export * from '@/lib/api/profile';
|
|
21
|
+
export * from '@/lib/api/rowcount';
|
|
22
|
+
export * from '@/lib/api/runs';
|
|
23
|
+
export * from '@/lib/api/schemacheck';
|
|
24
|
+
export * from '@/lib/api/select';
|
|
25
|
+
export * from '@/lib/api/state';
|
|
26
|
+
export * from '@/lib/api/user';
|
|
27
|
+
export * from '@/lib/api/valuediff';
|
|
28
|
+
export * from '@/lib/api/version';
|
|
29
|
+
|
|
30
|
+
// Storage Keys
|
|
31
|
+
export * from '@/lib/api/localStorageKeys';
|
|
32
|
+
export * from '@/lib/api/sessionStorageKeys';
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Components Module
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports React components from the Recce submodule.
|
|
5
|
+
* Components are organized by feature area for easy discovery.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Core / Foundation
|
|
10
|
+
// =============================================================================
|
|
11
|
+
export {
|
|
12
|
+
MuiProvider,
|
|
13
|
+
default as MuiProviderDefault,
|
|
14
|
+
} from "@/components/ui/mui-provider";
|
|
15
|
+
export { Toaster, ToasterProvider, useToaster } from "@/components/ui/toaster";
|
|
16
|
+
export { ErrorBoundary } from "@/components/errorboundary/ErrorBoundary";
|
|
17
|
+
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Layout
|
|
20
|
+
// =============================================================================
|
|
21
|
+
export { HSplit, VSplit } from "@/components/split/Split";
|
|
22
|
+
export { ScreenshotBox } from "@/components/screenshot/ScreenshotBox";
|
|
23
|
+
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// Lineage
|
|
26
|
+
// =============================================================================
|
|
27
|
+
export { LineagePage } from "@/components/lineage/LineagePage";
|
|
28
|
+
export { LineageView } from "@/components/lineage/LineageView";
|
|
29
|
+
export {
|
|
30
|
+
LineageViewContext,
|
|
31
|
+
useLineageViewContext,
|
|
32
|
+
} from "@/components/lineage/LineageViewContext";
|
|
33
|
+
export { LineageViewTopBar } from "@/components/lineage/LineageViewTopBar";
|
|
34
|
+
export { GraphNode } from "@/components/lineage/GraphNode";
|
|
35
|
+
export { default as GraphEdge } from "@/components/lineage/GraphEdge";
|
|
36
|
+
export { GraphColumnNode } from "@/components/lineage/GraphColumnNode";
|
|
37
|
+
export { NodeView } from "@/components/lineage/NodeView";
|
|
38
|
+
export { NodeSqlView } from "@/components/lineage/NodeSqlView";
|
|
39
|
+
export {
|
|
40
|
+
ResourceTypeTag,
|
|
41
|
+
ModelRowCount,
|
|
42
|
+
RowCountDiffTag,
|
|
43
|
+
type RowCountDiffTagProps,
|
|
44
|
+
type RowCountTagProps,
|
|
45
|
+
} from "@/components/lineage/NodeTag";
|
|
46
|
+
export { default as SetupConnectionBanner } from "@/components/lineage/SetupConnectionBanner";
|
|
47
|
+
|
|
48
|
+
// =============================================================================
|
|
49
|
+
// Query
|
|
50
|
+
// =============================================================================
|
|
51
|
+
export { QueryPage } from "@/components/query/QueryPage";
|
|
52
|
+
export { QueryForm } from "@/components/query/QueryForm";
|
|
53
|
+
export { default as SqlEditor } from "@/components/query/SqlEditor";
|
|
54
|
+
export { QueryResultView } from "@/components/query/QueryResultView";
|
|
55
|
+
export { QueryDiffResultView } from "@/components/query/QueryDiffResultView";
|
|
56
|
+
export { DiffText } from "@/components/query/DiffText";
|
|
57
|
+
export { default as SetupConnectionGuide } from "@/components/query/SetupConnectionGuide";
|
|
58
|
+
|
|
59
|
+
// =============================================================================
|
|
60
|
+
// Editor
|
|
61
|
+
// =============================================================================
|
|
62
|
+
export { default as CodeEditor } from "@/components/editor/CodeEditor";
|
|
63
|
+
export { default as DiffEditor } from "@/components/editor/DiffEditor";
|
|
64
|
+
|
|
65
|
+
// =============================================================================
|
|
66
|
+
// Schema
|
|
67
|
+
// =============================================================================
|
|
68
|
+
export { SchemaView } from "@/components/schema/SchemaView";
|
|
69
|
+
export { ColumnNameCell } from "@/components/schema/ColumnNameCell";
|
|
70
|
+
|
|
71
|
+
// =============================================================================
|
|
72
|
+
// Check / Checklist
|
|
73
|
+
// =============================================================================
|
|
74
|
+
export { CheckList } from "@/components/check/CheckList";
|
|
75
|
+
export { CheckDetail } from "@/components/check/CheckDetail";
|
|
76
|
+
export { CheckBreadcrumb } from "@/components/check/CheckBreadcrumb";
|
|
77
|
+
export { CheckDescription } from "@/components/check/CheckDescription";
|
|
78
|
+
export { CheckEmptyState } from "@/components/check/CheckEmptyState";
|
|
79
|
+
export { LineageDiffView } from "@/components/check/LineageDiffView";
|
|
80
|
+
export { SchemaDiffView } from "@/components/check/SchemaDiffView";
|
|
81
|
+
|
|
82
|
+
// =============================================================================
|
|
83
|
+
// Run
|
|
84
|
+
// =============================================================================
|
|
85
|
+
export { RunPage } from "@/components/run/RunPage";
|
|
86
|
+
export { RunList } from "@/components/run/RunList";
|
|
87
|
+
export { RunView } from "@/components/run/RunView";
|
|
88
|
+
export { RunModal } from "@/components/run/RunModal";
|
|
89
|
+
export { RunToolbar } from "@/components/run/RunToolbar";
|
|
90
|
+
export { RunResultPane } from "@/components/run/RunResultPane";
|
|
91
|
+
export { RunStatusAndDate } from "@/components/run/RunStatusAndDate";
|
|
92
|
+
|
|
93
|
+
// =============================================================================
|
|
94
|
+
// Data Diff Components
|
|
95
|
+
// =============================================================================
|
|
96
|
+
|
|
97
|
+
// Profile Diff
|
|
98
|
+
export { ProfileDiffForm } from "@/components/profile/ProfileDiffForm";
|
|
99
|
+
export { ProfileDiffResultView } from "@/components/profile/ProfileDiffResultView";
|
|
100
|
+
|
|
101
|
+
// Value Diff
|
|
102
|
+
export { ValueDiffForm } from "@/components/valuediff/ValueDiffForm";
|
|
103
|
+
export { ValueDiffResultView } from "@/components/valuediff/ValueDiffResultView";
|
|
104
|
+
export { ValueDiffDetailResultView } from "@/components/valuediff/ValueDiffDetailResultView";
|
|
105
|
+
|
|
106
|
+
// Histogram Diff
|
|
107
|
+
export { HistogramDiffForm } from "@/components/histogram/HistogramDiffForm";
|
|
108
|
+
export { HistogramDiffResultView } from "@/components/histogram/HistogramDiffResultView";
|
|
109
|
+
|
|
110
|
+
// Top-K Diff
|
|
111
|
+
export { TopKDiffForm } from "@/components/top-k/TopKDiffForm";
|
|
112
|
+
export { TopKDiffResultView } from "@/components/top-k/TopKDiffResultView";
|
|
113
|
+
|
|
114
|
+
// Row Count Diff
|
|
115
|
+
export { RowCountDiffResultView } from "@/components/rowcount/RowCountDiffResultView";
|
|
116
|
+
|
|
117
|
+
// =============================================================================
|
|
118
|
+
// Data Grid
|
|
119
|
+
// =============================================================================
|
|
120
|
+
export { ScreenshotDataGrid } from "@/components/data-grid/ScreenshotDataGrid";
|
|
121
|
+
|
|
122
|
+
// =============================================================================
|
|
123
|
+
// Charts
|
|
124
|
+
// =============================================================================
|
|
125
|
+
export { HistogramChart } from "@/components/charts/HistogramChart";
|
|
126
|
+
export { TopKSummaryList } from "@/components/charts/TopKSummaryList";
|
|
127
|
+
export { SquareIcon } from "@/components/charts/SquareIcon";
|
|
128
|
+
|
|
129
|
+
// =============================================================================
|
|
130
|
+
// Summary
|
|
131
|
+
// =============================================================================
|
|
132
|
+
export { default as SummaryView } from "@/components/summary/SummaryView";
|
|
133
|
+
export { ChangeSummary } from "@/components/summary/ChangeSummary";
|
|
134
|
+
export { SchemaSummary } from "@/components/summary/SchemaSummary";
|
|
135
|
+
|
|
136
|
+
// =============================================================================
|
|
137
|
+
// App Components
|
|
138
|
+
// =============================================================================
|
|
139
|
+
export { EnvInfo } from "@/components/app/EnvInfo";
|
|
140
|
+
export { default as TopBar } from "../../recce-source/js/app/(mainComponents)/TopBar";
|
|
141
|
+
export { default as NavBar } from "../../recce-source/js/app/(mainComponents)/NavBar";
|
|
142
|
+
export { default as DisplayModeToggle } from "../../recce-source/js/app/(mainComponents)/DisplayModeToggle";
|
|
143
|
+
export { default as RecceVersionBadge } from "../../recce-source/js/app/(mainComponents)/RecceVersionBadge";
|
|
144
|
+
|
|
145
|
+
// =============================================================================
|
|
146
|
+
// Shared / Utilities
|
|
147
|
+
// =============================================================================
|
|
148
|
+
export { default as HistoryToggle } from "@/components/shared/HistoryToggle";
|
|
149
|
+
export { IdleTimeoutBadge } from "@/components/timeout/IdleTimeoutBadge";
|
|
150
|
+
|
|
151
|
+
// =============================================================================
|
|
152
|
+
// Icons
|
|
153
|
+
// =============================================================================
|
|
154
|
+
export * from "@/components/icons";
|
package/src/global.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare module '*.svg' {
|
|
2
|
+
const content: any;
|
|
3
|
+
export default content;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
declare module '*.css' {
|
|
7
|
+
const content: { [className: string]: string };
|
|
8
|
+
export default content;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare module 'public/imgs/reload-image.svg' {
|
|
12
|
+
const content: any;
|
|
13
|
+
export default content;
|
|
14
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hooks Module
|
|
3
|
+
*
|
|
4
|
+
* This module exports custom React hooks from the Recce library.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Custom Hooks
|
|
8
|
+
export { useRecceInstanceInfo } from '@/lib/hooks/useRecceInstanceInfo';
|
|
9
|
+
export { useCheckToast } from '@/lib/hooks/useCheckToast';
|
|
10
|
+
export { useClipBoardToast } from '@/lib/hooks/useClipBoardToast';
|
|
11
|
+
|
|
12
|
+
// Re-export component-specific hooks
|
|
13
|
+
export { useLineageViewContext } from '@/components/lineage/LineageViewContext';
|
|
14
|
+
export { default as useValueDiffAlertDialog } from '@/components/lineage/useValueDiffAlertDialog';
|
|
15
|
+
|
|
16
|
+
// Context Providers
|
|
17
|
+
export { default as RecceContextProvider } from '@/lib/hooks/RecceContextProvider';
|
|
18
|
+
export { RecceInstanceInfoProvider, useRecceInstanceContext } from '@/lib/hooks/RecceInstanceContext';
|
|
19
|
+
export { LineageGraphContextProvider, useLineageGraphContext, useRunsAggregated } from '@/lib/hooks/LineageGraphContext';
|
|
20
|
+
export { RecceShareStateContextProvider, useRecceShareStateContext } from '@/lib/hooks/RecceShareStateContext';
|
|
21
|
+
export { RecceQueryContextProvider, RowCountStateContextProvider, useRecceQueryContext, useRowCountStateContext } from '@/lib/hooks/RecceQueryContext';
|
|
22
|
+
export {
|
|
23
|
+
RecceActionContext,
|
|
24
|
+
RecceActionContextProvider,
|
|
25
|
+
useRecceActionContext,
|
|
26
|
+
type RecceActionContextType,
|
|
27
|
+
} from '@/lib/hooks/RecceActionContext';
|
|
28
|
+
export { RecceCheckContextProvider, useRecceCheckContext } from '@/lib/hooks/RecceCheckContext';
|
|
29
|
+
export { IdleTimeoutProvider, useIdleTimeout } from '@/lib/hooks/IdleTimeoutContext';
|
|
30
|
+
|
|
31
|
+
// API Configuration
|
|
32
|
+
export {
|
|
33
|
+
ApiConfigProvider,
|
|
34
|
+
useApiConfig,
|
|
35
|
+
useApiClient,
|
|
36
|
+
useApiConfigSafe,
|
|
37
|
+
type ApiConfig
|
|
38
|
+
} from '@/lib/hooks/ApiConfigContext';
|
|
39
|
+
|
|
40
|
+
// Route Configuration (for recce-cloud path prefixing)
|
|
41
|
+
export {
|
|
42
|
+
RouteConfigProvider,
|
|
43
|
+
useRouteConfig,
|
|
44
|
+
useRouteConfigSafe,
|
|
45
|
+
type RouteConfig,
|
|
46
|
+
type RouteConfigContextType,
|
|
47
|
+
} from '../lib/hooks/RouteConfigContext';
|
|
48
|
+
|
|
49
|
+
// App Router hooks (custom version with RouteConfigContext support)
|
|
50
|
+
export {
|
|
51
|
+
useAppLocation,
|
|
52
|
+
useAppLocationWithSearch,
|
|
53
|
+
useAppRoute,
|
|
54
|
+
useAppNavigation,
|
|
55
|
+
navigateTo,
|
|
56
|
+
} from '../lib/hooks/useAppRouter';
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @datarecce/ui - Recce UI Components Library
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for the Recce UI component library.
|
|
5
|
+
* This library provides reusable React components for building
|
|
6
|
+
* data validation and review interfaces.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Re-export everything from submodules
|
|
10
|
+
export * from "./components";
|
|
11
|
+
export * from "./api";
|
|
12
|
+
export * from "./hooks";
|
|
13
|
+
export * from "./types";
|
|
14
|
+
export * from "./theme";
|
|
15
|
+
|
|
16
|
+
// Export a version constant
|
|
17
|
+
export const VERSION = "0.1.0";
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import React, { createContext, useCallback, useContext, useMemo } from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Route Configuration for path prefix customization.
|
|
7
|
+
*
|
|
8
|
+
* This context allows recce-cloud to configure a base path prefix
|
|
9
|
+
* for all navigation within OSS components.
|
|
10
|
+
*
|
|
11
|
+
* Default behavior (OSS):
|
|
12
|
+
* - basePath: "" (uses absolute paths like /query, /checks)
|
|
13
|
+
*
|
|
14
|
+
* Cloud usage example:
|
|
15
|
+
* - basePath: "/oss/abc123" or "/preview/abc123"
|
|
16
|
+
* - Navigation to "/query" becomes "/oss/abc123/query"
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export interface RouteConfig {
|
|
20
|
+
/**
|
|
21
|
+
* Base path prefix for navigation.
|
|
22
|
+
* For OSS: "" (empty string, uses absolute paths like /query)
|
|
23
|
+
* For Cloud: "/oss/<sessionId>" or "/preview/<sessionId>"
|
|
24
|
+
*/
|
|
25
|
+
basePath: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface RouteConfigContextType extends RouteConfig {
|
|
29
|
+
/**
|
|
30
|
+
* Resolves a path with the base path prefix.
|
|
31
|
+
* @param path - The path to resolve (e.g., "/query")
|
|
32
|
+
* @returns The resolved path (e.g., "/oss/abc123/query")
|
|
33
|
+
*/
|
|
34
|
+
resolvePath: (path: string) => string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const defaultConfig: RouteConfig = {
|
|
38
|
+
basePath: "",
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const RouteConfigContext = createContext<RouteConfigContextType | null>(null);
|
|
42
|
+
|
|
43
|
+
interface RouteConfigProviderProps extends Partial<RouteConfig> {
|
|
44
|
+
children: React.ReactNode;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Provider for route configuration.
|
|
49
|
+
*
|
|
50
|
+
* Wrap your application (or RecceContextProvider) with this provider
|
|
51
|
+
* to configure path prefixes for navigation.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* // In recce-cloud
|
|
55
|
+
* <RouteConfigProvider basePath={`/oss/${sessionId}`}>
|
|
56
|
+
* <RecceContextProvider>
|
|
57
|
+
* {children}
|
|
58
|
+
* </RecceContextProvider>
|
|
59
|
+
* </RouteConfigProvider>
|
|
60
|
+
*/
|
|
61
|
+
export function RouteConfigProvider({
|
|
62
|
+
children,
|
|
63
|
+
basePath = defaultConfig.basePath,
|
|
64
|
+
}: RouteConfigProviderProps) {
|
|
65
|
+
const resolvePath = useCallback(
|
|
66
|
+
(path: string): string => {
|
|
67
|
+
// If no basePath configured, return path as-is (OSS mode)
|
|
68
|
+
if (!basePath) {
|
|
69
|
+
return path;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Handle paths that already start with the basePath (avoid double-prefixing)
|
|
73
|
+
if (path.startsWith(basePath)) {
|
|
74
|
+
return path;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Handle absolute URLs (http://, https://, etc.) - don't prefix
|
|
78
|
+
if (path.match(/^https?:\/\//)) {
|
|
79
|
+
return path;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Handle hash-only paths - don't prefix
|
|
83
|
+
if (path.startsWith("#")) {
|
|
84
|
+
return path;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Ensure proper joining (no double slashes)
|
|
88
|
+
const cleanBasePath = basePath.endsWith("/")
|
|
89
|
+
? basePath.slice(0, -1)
|
|
90
|
+
: basePath;
|
|
91
|
+
const cleanPath = path.startsWith("/") ? path : `/${path}`;
|
|
92
|
+
|
|
93
|
+
return `${cleanBasePath}${cleanPath}`;
|
|
94
|
+
},
|
|
95
|
+
[basePath],
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
const contextValue: RouteConfigContextType = useMemo(
|
|
99
|
+
() => ({
|
|
100
|
+
basePath,
|
|
101
|
+
resolvePath,
|
|
102
|
+
}),
|
|
103
|
+
[basePath, resolvePath],
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
return React.createElement(
|
|
107
|
+
RouteConfigContext.Provider,
|
|
108
|
+
{ value: contextValue },
|
|
109
|
+
children,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Default context for OSS mode (no prefix)
|
|
114
|
+
const defaultRouteConfigContext: RouteConfigContextType = {
|
|
115
|
+
basePath: "",
|
|
116
|
+
resolvePath: (path: string) => path,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Hook to access route configuration.
|
|
121
|
+
*
|
|
122
|
+
* When used outside RouteConfigProvider, returns default config
|
|
123
|
+
* (for OSS backward compatibility).
|
|
124
|
+
*
|
|
125
|
+
* @returns RouteConfigContextType with basePath and resolvePath function
|
|
126
|
+
*/
|
|
127
|
+
export function useRouteConfig(): RouteConfigContextType {
|
|
128
|
+
const context = useContext(RouteConfigContext);
|
|
129
|
+
// Return default config if outside provider (OSS mode)
|
|
130
|
+
return context ?? defaultRouteConfigContext;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Safe hook that returns null if context not available.
|
|
135
|
+
* Useful for components that need to detect if RouteConfigProvider is present.
|
|
136
|
+
*/
|
|
137
|
+
export function useRouteConfigSafe(): RouteConfigContextType | null {
|
|
138
|
+
return useContext(RouteConfigContext);
|
|
139
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useAppRouter - Navigation utilities for Next.js App Router with RouteConfig support
|
|
3
|
+
*
|
|
4
|
+
* This is a custom version that wraps the OSS useAppRouter to add
|
|
5
|
+
* RouteConfigContext support for path prefixing in recce-cloud.
|
|
6
|
+
*
|
|
7
|
+
* The key difference from OSS:
|
|
8
|
+
* - setLocation() automatically prefixes paths with the configured basePath
|
|
9
|
+
* - This allows OSS components to use setLocation("/query") while
|
|
10
|
+
* recce-cloud can configure basePath="/oss/abc123" to get "/oss/abc123/query"
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
"use client";
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
useParams,
|
|
17
|
+
usePathname,
|
|
18
|
+
useRouter,
|
|
19
|
+
useSearchParams,
|
|
20
|
+
} from "next/navigation";
|
|
21
|
+
import { useCallback, useMemo } from "react";
|
|
22
|
+
import { useRouteConfig } from "./RouteConfigContext";
|
|
23
|
+
|
|
24
|
+
interface NavigateOptions {
|
|
25
|
+
replace?: boolean;
|
|
26
|
+
scroll?: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Hook that provides Wouter-compatible location API using Next.js App Router
|
|
31
|
+
* with RouteConfigContext support for path prefixing.
|
|
32
|
+
*
|
|
33
|
+
* NOTE: This returns only the pathname (not search params) to avoid
|
|
34
|
+
* triggering Suspense boundaries on every navigation.
|
|
35
|
+
*
|
|
36
|
+
* @returns [pathname, setLocation] tuple similar to Wouter's useLocation
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* const [location, setLocation] = useAppLocation();
|
|
40
|
+
* setLocation("/checks?id=123"); // In cloud mode with basePath="/oss/abc123"
|
|
41
|
+
* // navigates to "/oss/abc123/checks?id=123"
|
|
42
|
+
*/
|
|
43
|
+
export function useAppLocation(): [
|
|
44
|
+
string,
|
|
45
|
+
(to: string, options?: NavigateOptions) => void,
|
|
46
|
+
] {
|
|
47
|
+
const router = useRouter();
|
|
48
|
+
const pathname = usePathname();
|
|
49
|
+
const { resolvePath } = useRouteConfig();
|
|
50
|
+
|
|
51
|
+
// Navigation function compatible with Wouter's setLocation
|
|
52
|
+
// Automatically applies basePath prefix from RouteConfigContext
|
|
53
|
+
const setLocation = useCallback(
|
|
54
|
+
(to: string, options?: NavigateOptions) => {
|
|
55
|
+
// Separate path and query string for proper handling
|
|
56
|
+
const [pathPart, queryPart] = to.split("?");
|
|
57
|
+
const resolvedPath = resolvePath(pathPart);
|
|
58
|
+
const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
|
|
59
|
+
|
|
60
|
+
if (options?.replace) {
|
|
61
|
+
router.replace(fullPath, { scroll: options?.scroll ?? true });
|
|
62
|
+
} else {
|
|
63
|
+
router.push(fullPath, { scroll: options?.scroll ?? true });
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
[router, resolvePath],
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
return [pathname, setLocation];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Hook that includes search params in the location string.
|
|
74
|
+
* Also supports RouteConfigContext path prefixing.
|
|
75
|
+
*
|
|
76
|
+
* WARNING: This hook uses useSearchParams() which triggers Suspense.
|
|
77
|
+
* Only use this in components that are wrapped in a <Suspense> boundary,
|
|
78
|
+
* or in leaf components where suspension is acceptable.
|
|
79
|
+
*
|
|
80
|
+
* @returns [fullLocation, setLocation] tuple with search params included
|
|
81
|
+
*/
|
|
82
|
+
export function useAppLocationWithSearch(): [
|
|
83
|
+
string,
|
|
84
|
+
(to: string, options?: NavigateOptions) => void,
|
|
85
|
+
] {
|
|
86
|
+
const router = useRouter();
|
|
87
|
+
const pathname = usePathname();
|
|
88
|
+
const searchParams = useSearchParams();
|
|
89
|
+
const { resolvePath } = useRouteConfig();
|
|
90
|
+
|
|
91
|
+
// Construct full location string including search params
|
|
92
|
+
const location = useMemo(() => {
|
|
93
|
+
const search = searchParams?.toString();
|
|
94
|
+
return search ? `${pathname}?${search}` : pathname;
|
|
95
|
+
}, [pathname, searchParams]);
|
|
96
|
+
|
|
97
|
+
// Navigation function with RouteConfigContext support
|
|
98
|
+
const setLocation = useCallback(
|
|
99
|
+
(to: string, options?: NavigateOptions) => {
|
|
100
|
+
const [pathPart, queryPart] = to.split("?");
|
|
101
|
+
const resolvedPath = resolvePath(pathPart);
|
|
102
|
+
const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
|
|
103
|
+
|
|
104
|
+
if (options?.replace) {
|
|
105
|
+
router.replace(fullPath, { scroll: options?.scroll ?? true });
|
|
106
|
+
} else {
|
|
107
|
+
router.push(fullPath, { scroll: options?.scroll ?? true });
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
[router, resolvePath],
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
return [location, setLocation];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Hook to check if current path matches a pattern
|
|
118
|
+
* Similar to Wouter's useRoute
|
|
119
|
+
*
|
|
120
|
+
* @param pattern - The route pattern to match (e.g., "/checks/:checkId")
|
|
121
|
+
* @returns [isMatch, params] tuple
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* const [isMatch, params] = useAppRoute("/checks/:checkId");
|
|
125
|
+
* if (isMatch) {
|
|
126
|
+
* console.log(params.checkId); // "abc-123"
|
|
127
|
+
* }
|
|
128
|
+
*/
|
|
129
|
+
export function useAppRoute(
|
|
130
|
+
pattern: string,
|
|
131
|
+
): [boolean, Record<string, string>] {
|
|
132
|
+
const pathname = usePathname();
|
|
133
|
+
const params = useParams();
|
|
134
|
+
|
|
135
|
+
const isMatch = useMemo(() => {
|
|
136
|
+
// Convert Next.js dynamic route pattern to regex
|
|
137
|
+
// /checks/[checkId] -> /checks/:checkId -> /checks/([^/]+)
|
|
138
|
+
const regexPattern = pattern
|
|
139
|
+
.replace(/:\w+/g, "([^/]+)") // :param -> capture group
|
|
140
|
+
.replace(/\*/g, ".*"); // * -> wildcard
|
|
141
|
+
|
|
142
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
143
|
+
return regex.test(pathname);
|
|
144
|
+
}, [pattern, pathname]);
|
|
145
|
+
|
|
146
|
+
// Convert Next.js params to plain object
|
|
147
|
+
const paramsObj = useMemo(() => {
|
|
148
|
+
if (!params) return {};
|
|
149
|
+
return Object.fromEntries(
|
|
150
|
+
Object.entries(params).map(([key, value]) => [
|
|
151
|
+
key,
|
|
152
|
+
Array.isArray(value) ? value.join("/") : value,
|
|
153
|
+
]),
|
|
154
|
+
);
|
|
155
|
+
}, [params]);
|
|
156
|
+
|
|
157
|
+
return [isMatch, paramsObj as Record<string, string>];
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Imperative navigation function for use outside React components
|
|
162
|
+
* Use sparingly - prefer useAppLocation hook in components
|
|
163
|
+
*
|
|
164
|
+
* NOTE: This function does NOT support RouteConfigContext because
|
|
165
|
+
* it's used outside of React component tree. If you need path prefixing,
|
|
166
|
+
* use useAppLocation hook instead.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* // In an event handler or utility function
|
|
170
|
+
* import { navigateTo } from "@/lib/hooks/useAppRouter";
|
|
171
|
+
* navigateTo("/checks?id=123");
|
|
172
|
+
*/
|
|
173
|
+
export function navigateTo(path: string, replace = false): void {
|
|
174
|
+
if (typeof window !== "undefined") {
|
|
175
|
+
if (replace) {
|
|
176
|
+
window.history.replaceState(null, "", path);
|
|
177
|
+
} else {
|
|
178
|
+
window.history.pushState(null, "", path);
|
|
179
|
+
}
|
|
180
|
+
// Trigger Next.js to recognize the navigation
|
|
181
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Hook for programmatic navigation with more options
|
|
187
|
+
* Provides direct access to Next.js router methods with RouteConfigContext support
|
|
188
|
+
*
|
|
189
|
+
* NOTE: Does not include searchParams to avoid Suspense.
|
|
190
|
+
* Use useSearchParams() directly in components that need it.
|
|
191
|
+
*/
|
|
192
|
+
export function useAppNavigation() {
|
|
193
|
+
const router = useRouter();
|
|
194
|
+
const pathname = usePathname();
|
|
195
|
+
const params = useParams();
|
|
196
|
+
const { resolvePath } = useRouteConfig();
|
|
197
|
+
|
|
198
|
+
// Wrap router.push and router.replace with path resolution
|
|
199
|
+
const push = useCallback(
|
|
200
|
+
(href: string, options?: { scroll?: boolean }) => {
|
|
201
|
+
const [pathPart, queryPart] = href.split("?");
|
|
202
|
+
const resolvedPath = resolvePath(pathPart);
|
|
203
|
+
const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
|
|
204
|
+
router.push(fullPath, options);
|
|
205
|
+
},
|
|
206
|
+
[router, resolvePath],
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
const replace = useCallback(
|
|
210
|
+
(href: string, options?: { scroll?: boolean }) => {
|
|
211
|
+
const [pathPart, queryPart] = href.split("?");
|
|
212
|
+
const resolvedPath = resolvePath(pathPart);
|
|
213
|
+
const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
|
|
214
|
+
router.replace(fullPath, options);
|
|
215
|
+
},
|
|
216
|
+
[router, resolvePath],
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
/** Current pathname */
|
|
221
|
+
pathname,
|
|
222
|
+
/** Current route params */
|
|
223
|
+
params: params as Record<string, string>,
|
|
224
|
+
/** Navigate to a new path (with RouteConfigContext support) */
|
|
225
|
+
push,
|
|
226
|
+
/** Replace current history entry (with RouteConfigContext support) */
|
|
227
|
+
replace,
|
|
228
|
+
/** Go back in history */
|
|
229
|
+
back: router.back,
|
|
230
|
+
/** Go forward in history */
|
|
231
|
+
forward: router.forward,
|
|
232
|
+
/** Refresh the current route */
|
|
233
|
+
refresh: router.refresh,
|
|
234
|
+
/** Prefetch a route for faster navigation */
|
|
235
|
+
prefetch: router.prefetch,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Re-export Next.js hooks for convenience
|
|
240
|
+
export { useRouter, usePathname, useParams, useSearchParams };
|