Skip to content

Release/260330#53

Merged
codeErrorSleep merged 7 commits into
mainfrom
release/260330
Apr 1, 2026
Merged

Release/260330#53
codeErrorSleep merged 7 commits into
mainfrom
release/260330

Conversation

@codeErrorSleep

@codeErrorSleep codeErrorSleep commented Apr 1, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

Release Notes

  • New Features

    • Added multi-platform build support (Linux, macOS, Windows).
    • Enhanced connection string parsing to respect embedded host:port notation.
  • Bug Fixes

    • Improved MySQL connection resilience with fallback for environments with prepared statement protocol limitations.
  • Improvements

    • Expanded integration testing coverage for MariaDB, ClickHouse, MSSQL, DuckDB, and SQLite databases.
    • Restructured CI pipeline for faster feedback and more granular quality gates.
  • Chores

    • Bumped version to 0.3.1.

codeErrorSleep and others added 7 commits March 30, 2026 20:44
Extends command layer test coverage from MySQL/PostgreSQL to all
remaining databases (MariaDB, MSSQL, ClickHouse, SQLite, DuckDB).

Each database now has comprehensive P0 command tests covering:
- Connection validation (success and error paths)
- Table and database listing
- Query execution (SELECT, INSERT with row counts)
- Data grid pagination and validation
- Error handling for invalid SQL and credentials

Added comprehensive testing documentation:
- CLAUDE.md: Guidance for AI-assisted development
- TESTING.md: Complete testing guide with database coverage matrix

Updated test-integration.sh to include all new command tests in
CI pipeline for each database and the 'all' target.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ontrol

-Add independent quality check portals such as' typecheck ',' lint ',' trust: check '
-Add 'test: smoke' unified quick quality gate and 'test: ci' complete access control script
-Reconstruct CI to hierarchical access control: run smoke tests first, and then execute multi database integration tests in parallel
-New multi platform construction workflow, supporting Linux/macOS/Windows
-Update development documents to reflect new testing strategies and workflows
-Fix the problem of missing newline characters at the end of the tauri.conf.json file
-Add Node.js type definition for tsconfig.node.json
-Add vite.config.d.ts type declaration file
-Apply consistent code formatting rules to Rust and TypeScript/JSX files
-Automatically split long statements that exceed the maximum line width into multiple lines to improve readability
-Fix the string quote escaping problem caused by line breaking in the test file
-Adjust the indent and newline of conditional rendering in JSX to keep the code style consistent
@coderabbitai

coderabbitai Bot commented Apr 1, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR establishes a comprehensive multi-layered testing and CI/CD infrastructure for DbPaw. It introduces restructured GitHub Actions workflows with parallel job execution, adds new test orchestration scripts (test:smoke, test:ci), implements database-specific integration test suites for ClickHouse/MariaDB/MSSQL/DuckDB/SQLite, fixes embedded port parsing and MySQL prepared-statement fallback behavior, updates development/contribution documentation, and bumps the version to 0.3.1.

Changes

Cohort / File(s) Summary
CI/CD Workflows
.github/workflows/build-multiplatform.yml, .github/workflows/ci.yml
Added new multi-platform build workflow for Linux/macOS/Windows. Restructured CI from single sequential job to three parallel jobs (smoke → integration → ci-success aggregator) with per-database integration test matrix and improved Docker failure diagnostics.
Documentation & Guidance
TESTING.md, CLAUDE.md, docs/zh/Development/DEVELOPMENT.md, docs/zh/Community/CONTRIBUTING.md, docs/zh/Development/DBPAW_HARNESS_ADOPTION_PLAN.md
Added comprehensive testing strategy and architecture documentation. Updated development workflow recommendations to use new test:smoke gate. Introduced Harness-based quality and process improvement roadmap.
Build & Version Configuration
package.json, src-tauri/tauri.conf.json, tsconfig.node.json, vite.config.js, vite.config.ts, tsconfig.node.tsbuildinfo, tsconfig.tsbuildinfo, vite.config.d.ts
Bumped version 0.3.0 → 0.3.1. Updated build scripts to run typecheck before Vite build. Added new test orchestration scripts (test:smoke, test:ci). Added Vite/Tailwind config and TypeScript build metadata.
Connection & Driver Logic
src-tauri/src/connection_input/mod.rs, src/lib/connection-form/rules.ts, src-tauri/src/db/drivers/mysql.rs
Fixed embedded port parsing to always use embedded port when present. Added MySQL test_connection fallback when prepared-statement protocol is unsupported (via raw_sql retry).
Database Integration Tests (Command-Layer)
src-tauri/tests/clickhouse_command_integration.rs, src-tauri/tests/mariadb_command_integration.rs, src-tauri/tests/mssql_command_integration.rs, src-tauri/tests/duckdb_command_integration.rs, src-tauri/tests/sqlite_command_integration.rs
Added comprehensive command-layer integration tests for five databases, covering connection validation, table/database listing, query execution, pagination, and error handling via ephemeral containers or local files.
Existing Test Updates
src-tauri/tests/mysql_integration.rs, src-tauri/tests/clickhouse_integration.rs, src-tauri/tests/sqlite_integration.rs, src-tauri/tests/postgres_integration.rs, src-tauri/tests/mysql_stateful_command_integration.rs, src-tauri/tests/common/...
Added MySQL prepared-statement fallback test. Reformatted test assertions and SQL construction for readability. Updated import ordering in stateful tests.
Test Infrastructure
scripts/test-integration.sh
Added *_command_integration test executions for MariaDB, ClickHouse, MSSQL, DuckDB, and SQLite to the test matrix.
Frontend Components & Formatting
src/components/business/DataGrid/TableView.tsx, src/components/business/DataGrid/tableView/utils.unit.test.ts, src/components/business/Sidebar/ConnectionList.tsx, src/lib/i18n/locales/ja.ts
Reformatted SQL generation callbacks and JSX rendering for readability. Removed file-picker filters from SSH key selection. Updated expected SQL test outputs for quoting consistency. Reformatted Japanese translation string.
Rust Code Formatting
src-tauri/src/commands/metadata.rs, src-tauri/src/commands/transfer.rs, src-tauri/src/db/local.rs
Reformatted function signatures and struct literals for multi-line readability without logic changes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • Release/260325 #49: Overlaps in modified files and functions (CI workflows, command modules, driver logic, connection input parsing, MySQL fallback, numerous test suites, and version bumps), suggesting this PR is part of a coordinated release cycle.

Poem

🐰 A testing warren takes shape,
Smoke gates and integrations in every cape,
Five databases dance, connection strings heed,
Quality layers bloom where tests plant their seed,
From ClickHouse to SQLite, the harness runs deep—
Now DbPaw's assurance runs wider and steep! 🧪

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'Release/260330' is vague and generic, using a branch-naming convention that doesn't clearly convey the purpose or scope of the release to someone scanning PR history. Replace with a descriptive title that summarizes the main changes, such as 'Release v0.3.1: Add multi-platform CI/CD and testing improvements' or similar.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/260330

Comment @coderabbitai help to get the list of available commands and usage tips.

Comment on lines +11 to +71
name: Build (${{ matrix.platform }})
runs-on: ${{ matrix.os }}
timeout-minutes: 30

strategy:
fail-fast: false
matrix:
include:
- platform: linux
os: ubuntu-22.04
- platform: macos
os: macos-latest
- platform: windows
os: windows-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Cache Bun dependencies
uses: actions/cache@v4
with:
path: |
node_modules
~/.bun/install/cache
key: ${{ runner.os }}-bun-${{ hashFiles('bun.lock') }}
restore-keys: |
${{ runner.os }}-bun-

- name: Install frontend dependencies
run: bun install --frozen-lockfile

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri -> src-tauri/target

- name: Install Linux dependencies
if: matrix.platform == 'linux'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev

- name: Build Tauri app
run: bun tauri build

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dbpaw-${{ matrix.platform }}
path: |
src-tauri/target/release/bundle/
retention-days: 7

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 2 months ago

In general, the fix is to add a permissions: block to the workflow (either at the root level or for the specific job) specifying the minimal permissions the GITHUB_TOKEN needs. For a pure build-and-artifact-upload workflow like this, contents: read is typically sufficient, since no step pushes code, creates releases, or modifies issues or pull requests.

The single best way to fix this without changing functionality is to add a root-level permissions: block right after the name: declaration. This will apply to all jobs in the workflow that do not set their own permissions. Based on the shown steps (checkout, caching, installing dependencies, building, and uploading artifacts), the workflow only needs read access to repository contents, so we set:

permissions:
  contents: read

You only need to edit .github/workflows/build-multiplatform.yml, inserting these lines near the top; no imports or additional methods are required.

Suggested changeset 1
.github/workflows/build-multiplatform.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/build-multiplatform.yml b/.github/workflows/build-multiplatform.yml
--- a/.github/workflows/build-multiplatform.yml
+++ b/.github/workflows/build-multiplatform.yml
@@ -1,5 +1,8 @@
 name: Multi-Platform Build
 
+permissions:
+  contents: read
+
 on:
   workflow_dispatch:
   push:
EOF
@@ -1,5 +1,8 @@
name: Multi-Platform Build

permissions:
contents: read

on:
workflow_dispatch:
push:
Copilot is powered by AI and may make mistakes. Always verify output.
Comment thread .github/workflows/ci.yml
Comment on lines 14 to +54
@@ -34,33 +39,94 @@ jobs:

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt

- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri -> src-tauri/target

- name: Run unit tests
run: bun run test:unit
- name: Run smoke tests
run: bun run test:smoke

# Parallel database integration tests
integration:
name: Integration Tests (${{ matrix.database }})
runs-on: ubuntu-22.04
needs: smoke
timeout-minutes: 15

- name: Run service tests
run: bun run test:service
strategy:
fail-fast: false
matrix:
database:
- mysql
- postgres
- mariadb
- clickhouse
- mssql
- sqlite
- duckdb

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 2 months ago

In general, this is fixed by explicitly defining a permissions block for the workflow (or each job) that grants only the minimal required scopes to GITHUB_TOKEN. For pure CI (checkout, cache, build, test, diagnostics), contents: read is typically sufficient. Since nothing in the provided workflow needs to write to the repository or perform privileged GitHub API operations, we can safely set permissions: contents: read at the workflow root so it applies to all jobs.

The best minimal fix without changing existing functionality is to add a root-level permissions block between the on: section and the jobs: section in .github/workflows/ci.yml. Concretely, insert:

permissions:
  contents: read

after line 10 (the last line of the on: block). This will cause all jobs (smoke, integration, and ci-success) to run with a read-only GITHUB_TOKEN. No additional methods, imports, or definitions are needed, and no existing steps need modification.

Suggested changeset 1
.github/workflows/ci.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,6 +8,9 @@
     branches:
       - main
 
+permissions:
+  contents: read
+
 jobs:
   # Fast smoke tests run first to fail fast
   smoke:
EOF
@@ -8,6 +8,9 @@
branches:
- main

permissions:
contents: read

jobs:
# Fast smoke tests run first to fail fast
smoke:
Copilot is powered by AI and may make mistakes. Always verify output.
Comment thread .github/workflows/ci.yml Outdated
Comment on lines 55 to 115

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 2 months ago

In general, the fix is to add an explicit permissions block that grants only the minimal required scopes to the GITHUB_TOKEN. For a pure CI workflow that only reads the repository contents and runs tests, contents: read is typically sufficient. Adding this at the workflow root means all jobs (including integration) inherit these restricted permissions unless overridden.

The single best fix here without changing existing functionality is to add a root-level permissions section after the on: block and before jobs::

permissions:
  contents: read

This documents that the workflow needs only read access to repository contents and constrains GITHUB_TOKEN for smoke, integration, and ci-success. No other scopes appear needed given the current steps: all jobs only use actions/checkout, caching, language toolchains, and shell commands; none interact with issues, PRs, or packages. All modifications are within .github/workflows/ci.yml around the top of the file; no additional methods, imports, or definitions are required.

Suggested changeset 1
.github/workflows/ci.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,6 +8,9 @@
     branches:
       - main
 
+permissions:
+  contents: read
+
 jobs:
   # Fast smoke tests run first to fail fast
   smoke:
EOF
@@ -8,6 +8,9 @@
branches:
- main

permissions:
contents: read

jobs:
# Fast smoke tests run first to fail fast
smoke:
Copilot is powered by AI and may make mistakes. Always verify output.
Comment thread .github/workflows/ci.yml Outdated
Comment on lines 116 to 132

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {}

Copilot Autofix

AI 2 months ago

In general, the problem is fixed by explicitly specifying a permissions block in the workflow, limiting the GITHUB_TOKEN to only what is needed. For a pure CI workflow that just checks out code, uses caches, runs tests, and prints logs, contents: read is typically sufficient. Since none of the jobs perform write operations against the GitHub API (no pushes, PR writes, or issue updates), we can safely set read-only permissions at the workflow root, which then apply to all jobs (smoke, integration, and ci-success).

The best fix with minimal functional change is to add a top-level permissions section right after the name: CI (or anywhere at the root level) in .github/workflows/ci.yml and set contents: read. This documents the intended permissions and ensures that the workflow remains constrained even if organization defaults change. No additional imports, methods, or other changes are needed: only that YAML addition. All existing steps (checkout, cache, bun, rust, Docker diagnostics, and shell checks) will continue to work with read-only repository contents permissions.

Concretely:

  • Edit .github/workflows/ci.yml.
  • Insert:
permissions:
  contents: read
  • Place it at the root level, between name: CI and on:, keeping existing indentation and structure unchanged.
Suggested changeset 1
.github/workflows/ci.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,5 +1,8 @@
 name: CI
 
+permissions:
+  contents: read
+
 on:
   pull_request:
     branches:
EOF
@@ -1,5 +1,8 @@
name: CI

permissions:
contents: read

on:
pull_request:
branches:
Copilot is powered by AI and may make mistakes. Always verify output.
@qodo-code-review

Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: CI Success

Failed stage: Check all jobs succeeded [❌]

Failed test name: ""

Failure summary:

The workflow step explicitly failed the job because it detected that the smoke test job result was
not success.
- In the script shown around lines 41–45, it checks if [ "failure" != "success" ]; then
and then prints Smoke tests failed and exits with code 1.
- This is confirmed by the log line Smoke
tests failed (line 53) followed by Process completed with exit code 1 (line 54).

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

28:  Metadata: read
29:  Models: read
30:  Packages: write
31:  Pages: write
32:  PullRequests: write
33:  RepositoryProjects: write
34:  SecurityEvents: write
35:  Statuses: write
36:  ##[endgroup]
37:  Secret source: Actions
38:  Prepare workflow directory
39:  Prepare all required actions
40:  Complete job name: CI Success
41:  ##[group]Run if [ "failure" != "success" ]; then
42:  �[36;1mif [ "failure" != "success" ]; then�[0m
43:  �[36;1m  echo "Smoke tests failed"�[0m
44:  �[36;1m  exit 1�[0m
45:  �[36;1mfi�[0m
46:  �[36;1mif [ "skipped" != "success" ]; then�[0m
47:  �[36;1m  echo "Integration tests failed"�[0m
48:  �[36;1m  exit 1�[0m
49:  �[36;1mfi�[0m
50:  �[36;1mecho "All CI checks passed!"�[0m
51:  shell: /usr/bin/bash -e {0}
52:  ##[endgroup]
53:  Smoke tests failed
54:  ##[error]Process completed with exit code 1.
55:  Cleaning up orphan processes

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/lib/connection-form/rules.ts (1)

55-62: ⚠️ Potential issue | 🟡 Minor

Reject out-of-range embedded ports before overriding the form port.

This now replaces a valid fallbackPort for any digit-only suffix, including 0 or values above 65535. host="db:99999" will normalize to an invalid port instead of keeping the separate port field.

🔢 Example guard
   const [hostPart, portPart] = host.split(":");
   if (!hostPart || !portPart || !/^\d+$/.test(portPart)) {
     return { host, port: fallbackPort };
   }
+  const parsedPort = Number(portPart);
+  if (!Number.isInteger(parsedPort) || parsedPort < 1 || parsedPort > 65535) {
+    return { host, port: fallbackPort };
+  }
   return {
     host: hostPart,
-    port: Number(portPart),
+    port: parsedPort,
   };
 };
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/lib/connection-form/rules.ts` around lines 55 - 62, The host/port split
logic currently accepts any digit-only portPart and overrides the form port with
it; change the validation in the block that uses hostPart, portPart and
fallbackPort so it also checks numeric range (1–65535) and treats out-of-range
or zero values as invalid — i.e., if portPart is missing, non-numeric, <=0, or
>65535, return { host, port: fallbackPort } instead of converting portPart to a
Number; only return { host: hostPart, port: Number(portPart) } when the portPart
passes both the /^\d+$/ test and the 1..65535 range check.
🧹 Nitpick comments (3)
vite.config.d.ts (1)

1-2: This declaration file is orphaned given the existing vite.config.ts.

This .d.ts file is a TypeScript declaration for the compiled vite.config.js. However, since vite.config.ts already exists and Vite prioritizes .ts over .js, both this file and vite.config.js will be ignored. See the review comment on vite.config.js for details.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@vite.config.d.ts` around lines 1 - 2, The vite.config.d.ts declaration is
orphaned because vite.config.ts is present; remove this file (and the compiled
vite.config.js if still checked in) to avoid Vite ignoring the TS config and
confusing consumers; if any typings from import("vite").UserConfigFnPromise or
the exported symbol _default are required, move or re-export them from
vite.config.ts or a proper types file instead of keeping vite.config.d.ts.
package.json (1)

14-18: lint:web is narrower than its callers imply.

test:smoke and the CI smoke job treat lint as the web lint gate, but this command only checks root/config/workflow files and skips src/**/*. Since format still targets the source tree, source formatting drift will not fail bun run lint.

♻️ One possible adjustment
-    "lint:web": "prettier --check \"package.json\" \"package-lock.json\" \"tsconfig*.json\" \"vite.config.ts\" \"src-tauri/tauri.conf.json\" \"src-tauri/capabilities/**/*.json\" \".github/workflows/*.{yml,yaml}\"",
+    "lint:web": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\" \"package.json\" \"package-lock.json\" \"tsconfig*.json\" \"vite.config.ts\" \"src-tauri/tauri.conf.json\" \"src-tauri/capabilities/**/*.json\" \".github/workflows/*.{yml,yaml}\"",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` around lines 14 - 18, The lint:web script is too narrow (it
only checks root/config files) but callers like the lint script and test:smoke
expect it to gate source formatting; update the "lint:web" npm script to include
the repository source files (e.g., add patterns for src/**/*, tests/**/* or
specific extensions used by the project) so its file globs match the same tree
that the format script checks and will fail when source formatting drifts;
ensure you modify the "lint:web" entry (notably the "lint:web" and preserve
"lint" -> "bun run lint:web" behavior) to include the source globs.
.github/workflows/build-multiplatform.yml (1)

30-33: Pin Bun instead of following latest.

Using bun-version: latest makes tag builds drift over time: the same v* tag can start producing different artifacts or fail after an upstream Bun release. Prefer a repo-managed version and have both CI and release workflows consume that.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/build-multiplatform.yml around lines 30 - 33, The workflow
uses "Setup Bun" with bun-version: latest which causes drift; change the step to
use a pinned version variable instead (e.g., replace bun-version: latest with
bun-version: ${{ vars.BUN_VERSION }} or a repository secret/variable) and update
any release/CI workflows to consume the same repo-managed BUN_VERSION value;
specifically update the "Setup Bun" step and ensure any references to
bun-version use a shared repo variable or workflow input so CI and release
workflows remain consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/build-multiplatform.yml:
- Around line 65-71: The upload step named "Upload artifacts" using
actions/upload-artifact@v4 should fail when no files are found; update that step
(the "Upload artifacts" job step referencing actions/upload-artifact@v4) to
include the if-no-files-found: error option so the workflow errors out instead
of only warning when the src-tauri/target/release/bundle/ path is empty.

In @.github/workflows/ci.yml:
- Around line 7-16: Add a workflow-level permissions block to restrict the
GITHUB_TOKEN to least privilege by adding "permissions: contents: read" at the
top-level of the YAML (so it applies to all jobs: smoke, integration,
ci-success); locate the root of the workflow (near the existing "push" and
"jobs:" keys) and insert the "permissions" stanza so actions/checkout@v4
continues to work while preventing broader token access.

In `@src-tauri/tests/duckdb_command_integration.rs`:
- Around line 10-17: duckdb_test_path() currently returns the caller-supplied
path verbatim but the test cleanup later always unconditionally deletes that
path; change the API so the code can tell if the file was created by the test
(for example have duckdb_test_path return (PathBuf, bool) or provide an
is_temp_created flag) and update the cleanup blocks in this test file to only
remove the DB file when that flag is true (leave caller-supplied
DUCKDB_IT_DB_PATH untouched); adjust call sites in this file to destructure the
returned tuple (or read the flag) and only perform fs::remove_file when the path
was created by the test.
- Around line 96-112: The test
test_duckdb_command_test_connection_invalid_file_path_returns_error currently
uses a tautological assertion; change it to assert a real failure by making the
input deterministically invalid and asserting result.is_err(). Specifically,
update the ConnectionForm (used by connection::test_connection_ephemeral) to use
a path that DuckDB will always reject as a database file (e.g., a directory path
like "/" or a freshly created tempdir path rather than a nonexistent file) and
replace assert!(result.is_ok() || result.is_err()) with
assert!(result.is_err()); if result.is_err(), keep the existing check that the
error string (from result.err().unwrap_or_default()) is non-empty to ensure
meaningful error reporting.

In `@src-tauri/tests/mssql_command_integration.rs`:
- Around line 35-61: The DDL runs against whatever database is set in
ConnectionForm (currently defaulting to master), so update the test helpers to
avoid touching master: either set the connection to use tempdb before connecting
(modify ConnectionForm to set database = "tempdb" prior to MssqlDriver::connect
in prepare_query_test_table and other test helpers) or fully-qualify object
names with tempdb (use "tempdb..{table}" in the DROP/CREATE/INSERT statements
inside prepare_query_test_table and the other affected blocks at 64-75, 234-251,
276-300) so all DDL runs against tempdb instead of master.

In `@src-tauri/tests/mysql_integration.rs`:
- Around line 1081-1094: The Err branch in the prepare-probe test (the block
starting with "Err(err) =>") should also assert that the environment indicates
fallback mode by checking that the MYSQL_EXPECT_PREPARED_UNSUPPORTED variable is
set to "1"; update the Err(err) arm to, after computing err_text and before
calling driver.test_connection().await, assert that
std::env::var("MYSQL_EXPECT_PREPARED_UNSUPPORTED") yields Ok("1".to_string())
(or otherwise compare to "1"), so failures from an unexpected probe result are
not silently masked, then proceed to call
driver.test_connection().await.expect(...).

In `@src-tauri/tests/sqlite_command_integration.rs`:
- Around line 19-25: The helper unique_table_name currently builds names from
epoch milliseconds which can collide under parallel runs; change
unique_table_name to append a UUID (e.g. Uuid::new_v4()) to the existing
millis-based prefix to guarantee uniqueness, and add the corresponding import
from the uuid crate (Uuid) and ensure the uuid crate is in Cargo.toml; update
references to unique_table_name in tests as needed.

In `@TESTING.md`:
- Around line 332-339: Update the stale P0 checklist entry: remove or replace
the item "Add command integration tests for MariaDB, MSSQL, ClickHouse, SQLite,
DuckDB" under the "P0 (High Priority)" heading and instead state the actual
remaining gap (e.g., flaky tests, missing edge-case command tests, data-setup
patterns, or any other specific DBs not exercised) so it matches the coverage
table and the tests invoked by scripts/test-integration.sh; ensure the new
wording explicitly references the unresolved gap so readers can reconcile
TESTING.md with the coverage table and scripts.

In `@tsconfig.node.tsbuildinfo`:
- Line 1: The committed artifact tsconfig.node.tsbuildinfo is TypeScript
incremental build cache and must be removed from the PR and ignored; remove the
file from the commit (unstage/remove it from the repo), add
tsconfig.node.tsbuildinfo to .gitignore (or update existing ignore patterns like
*.tsbuildinfo), and ensure you run the equivalent of git rm --cached for that
filename so it no longer appears in future commits before amending the PR.

In `@tsconfig.tsbuildinfo`:
- Line 1: The commit improperly includes the generated TypeScript build cache
file tsconfig.tsbuildinfo; remove it from the repository and stop tracking it by
removing it from Git's index (e.g., git rm --cached tsconfig.tsbuildinfo) and
committing that removal, then add tsconfig.tsbuildinfo to .gitignore so it isn't
re-added; ensure the change references the tracked file name
tsconfig.tsbuildinfo so reviewers can verify it was removed and .gitignore
updated.

In `@vite.config.js`:
- Around line 1-75: This file is the compiled JavaScript output of the
TypeScript Vite config (notice __awaiter/__generator shims and export default
defineConfig(...)), so remove this build artifact to avoid redundancy and drift:
delete vite.config.js (and vite.config.d.ts if present) from the repo so Vite
uses the source vite.config.ts (ensure defineConfig/import
react/tailwindcss/path references remain only in the .ts file); if you need JS
config for a special tool, explain why and keep only the intentionally required
file.

---

Outside diff comments:
In `@src/lib/connection-form/rules.ts`:
- Around line 55-62: The host/port split logic currently accepts any digit-only
portPart and overrides the form port with it; change the validation in the block
that uses hostPart, portPart and fallbackPort so it also checks numeric range
(1–65535) and treats out-of-range or zero values as invalid — i.e., if portPart
is missing, non-numeric, <=0, or >65535, return { host, port: fallbackPort }
instead of converting portPart to a Number; only return { host: hostPart, port:
Number(portPart) } when the portPart passes both the /^\d+$/ test and the
1..65535 range check.

---

Nitpick comments:
In @.github/workflows/build-multiplatform.yml:
- Around line 30-33: The workflow uses "Setup Bun" with bun-version: latest
which causes drift; change the step to use a pinned version variable instead
(e.g., replace bun-version: latest with bun-version: ${{ vars.BUN_VERSION }} or
a repository secret/variable) and update any release/CI workflows to consume the
same repo-managed BUN_VERSION value; specifically update the "Setup Bun" step
and ensure any references to bun-version use a shared repo variable or workflow
input so CI and release workflows remain consistent.

In `@package.json`:
- Around line 14-18: The lint:web script is too narrow (it only checks
root/config files) but callers like the lint script and test:smoke expect it to
gate source formatting; update the "lint:web" npm script to include the
repository source files (e.g., add patterns for src/**/*, tests/**/* or specific
extensions used by the project) so its file globs match the same tree that the
format script checks and will fail when source formatting drifts; ensure you
modify the "lint:web" entry (notably the "lint:web" and preserve "lint" -> "bun
run lint:web" behavior) to include the source globs.

In `@vite.config.d.ts`:
- Around line 1-2: The vite.config.d.ts declaration is orphaned because
vite.config.ts is present; remove this file (and the compiled vite.config.js if
still checked in) to avoid Vite ignoring the TS config and confusing consumers;
if any typings from import("vite").UserConfigFnPromise or the exported symbol
_default are required, move or re-export them from vite.config.ts or a proper
types file instead of keeping vite.config.d.ts.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2ad6a8fb-1961-46df-a39b-3a8d77650911

📥 Commits

Reviewing files that changed from the base of the PR and between 1a20667 and c925cab.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (39)
  • .github/workflows/build-multiplatform.yml
  • .github/workflows/ci.yml
  • CLAUDE.md
  • TESTING.md
  • docs/zh/Community/CONTRIBUTING.md
  • docs/zh/Development/DBPAW_HARNESS_ADOPTION_PLAN.md
  • docs/zh/Development/DEVELOPMENT.md
  • package.json
  • scripts/test-integration.sh
  • src-tauri/src/commands/metadata.rs
  • src-tauri/src/commands/transfer.rs
  • src-tauri/src/connection_input/mod.rs
  • src-tauri/src/db/drivers/mysql.rs
  • src-tauri/src/db/local.rs
  • src-tauri/tauri.conf.json
  • src-tauri/tests/clickhouse_command_integration.rs
  • src-tauri/tests/clickhouse_integration.rs
  • src-tauri/tests/common/postgres_context.rs
  • src-tauri/tests/common/shared.rs
  • src-tauri/tests/duckdb_command_integration.rs
  • src-tauri/tests/mariadb_command_integration.rs
  • src-tauri/tests/mssql_command_integration.rs
  • src-tauri/tests/mysql_integration.rs
  • src-tauri/tests/mysql_stateful_command_integration.rs
  • src-tauri/tests/postgres_integration.rs
  • src-tauri/tests/sqlite_command_integration.rs
  • src-tauri/tests/sqlite_integration.rs
  • src/components/business/DataGrid/TableView.tsx
  • src/components/business/DataGrid/tableView/utils.unit.test.ts
  • src/components/business/Sidebar/ConnectionList.tsx
  • src/lib/connection-form/rules.ts
  • src/lib/connection-form/rules.unit.test.ts
  • src/lib/i18n/locales/ja.ts
  • tsconfig.node.json
  • tsconfig.node.tsbuildinfo
  • tsconfig.tsbuildinfo
  • vite.config.d.ts
  • vite.config.js
  • vite.config.ts

Comment on lines +65 to +71
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dbpaw-${{ matrix.platform }}
path: |
src-tauri/target/release/bundle/
retention-days: 7

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

actions/upload-artifact@v4 if-no-files-found parameter

💡 Result:

The if-no-files-found parameter in actions/upload-artifact@v4 controls the action's behavior when no files match the provided path. It is optional with a default value of warn. Available options: - warn: Outputs a warning but does not fail the action (default). - error: Fails the action with an error message. - ignore: Outputs no warnings or errors, and the action does not fail. Example usage: - uses: actions/upload-artifact@v4 with: name: my-artifact path: path/to/artifact/ if-no-files-found: error This feature allows customization of the response when no files are found for upload, improving workflow reliability.

Citations:


Fail the workflow when no bundle is uploaded.

actions/upload-artifact@v4 defaults to warn mode when files are missing, allowing the workflow to pass even if the bundle directory is empty. Add if-no-files-found: error to catch missing artifacts immediately instead of silently passing.

📦 Make missing artifacts fail fast
       - name: Upload artifacts
         uses: actions/upload-artifact@v4
         with:
           name: dbpaw-${{ matrix.platform }}
           path: |
             src-tauri/target/release/bundle/
+          if-no-files-found: error
           retention-days: 7
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dbpaw-${{ matrix.platform }}
path: |
src-tauri/target/release/bundle/
retention-days: 7
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dbpaw-${{ matrix.platform }}
path: |
src-tauri/target/release/bundle/
if-no-files-found: error
retention-days: 7
🧰 Tools
🪛 GitHub Check: CodeQL

[warning] 11-71: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/build-multiplatform.yml around lines 65 - 71, The upload
step named "Upload artifacts" using actions/upload-artifact@v4 should fail when
no files are found; update that step (the "Upload artifacts" job step
referencing actions/upload-artifact@v4) to include the if-no-files-found: error
option so the workflow errors out instead of only warning when the
src-tauri/target/release/bundle/ path is empty.

Comment thread .github/workflows/ci.yml
Comment on lines +7 to +16
push:
branches:
- main

jobs:
test:
# Fast smoke tests run first to fail fast
smoke:
name: Smoke Tests (typecheck, lint, unit)
runs-on: ubuntu-22.04
timeout-minutes: 40
timeout-minutes: 10

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# Locate and read the CI workflow file
fd 'ci\.yml' --type f

Repository: codeErrorSleep/dbpaw

Length of output: 46


🏁 Script executed:

# Read the full CI workflow file to understand structure and existing permissions
cat -n '.github/workflows/ci.yml'

Repository: codeErrorSleep/dbpaw

Length of output: 4280


Set explicit GITHUB_TOKEN permissions in this workflow.

Currently, the workflow lacks an explicit permissions block at the workflow level. This means it depends on the repository or organization's default token policy, which may grant excessive permissions. Adding permissions: contents: read at the workflow level ensures all jobs (smoke, integration, and ci-success) operate with least-privilege access, since the only GitHub API interaction is actions/checkout@v4, which requires only read access to repository contents.

🔐 Suggested hardening
 on:
   pull_request:
     branches:
       - main
   push:
     branches:
       - main
+
+permissions:
+  contents: read
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
push:
branches:
- main
jobs:
test:
# Fast smoke tests run first to fail fast
smoke:
name: Smoke Tests (typecheck, lint, unit)
runs-on: ubuntu-22.04
timeout-minutes: 40
timeout-minutes: 10
push:
branches:
- main
permissions:
contents: read
jobs:
# Fast smoke tests run first to fail fast
smoke:
name: Smoke Tests (typecheck, lint, unit)
runs-on: ubuntu-22.04
timeout-minutes: 10
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/ci.yml around lines 7 - 16, Add a workflow-level
permissions block to restrict the GITHUB_TOKEN to least privilege by adding
"permissions: contents: read" at the top-level of the YAML (so it applies to all
jobs: smoke, integration, ci-success); locate the root of the workflow (near the
existing "push" and "jobs:" keys) and insert the "permissions" stanza so
actions/checkout@v4 continues to work while preventing broader token access.

Comment on lines +10 to +17
fn duckdb_test_path() -> PathBuf {
if let Ok(v) = env::var("DUCKDB_IT_DB_PATH") {
return PathBuf::from(v);
}
let mut p = env::temp_dir();
p.push(format!("dbpaw-duckdb-cmd-{}.db", Uuid::new_v4()));
p
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Don't delete caller-supplied DuckDB databases.

duckdb_test_path() returns DUCKDB_IT_DB_PATH verbatim, but the cleanup blocks later in this file unconditionally remove that path. Pointing the suite at a real database file will delete it after the run. Track whether the path was created by the test and only remove temp-owned files.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src-tauri/tests/duckdb_command_integration.rs` around lines 10 - 17,
duckdb_test_path() currently returns the caller-supplied path verbatim but the
test cleanup later always unconditionally deletes that path; change the API so
the code can tell if the file was created by the test (for example have
duckdb_test_path return (PathBuf, bool) or provide an is_temp_created flag) and
update the cleanup blocks in this test file to only remove the DB file when that
flag is true (leave caller-supplied DUCKDB_IT_DB_PATH untouched); adjust call
sites in this file to destructure the returned tuple (or read the flag) and only
perform fs::remove_file when the path was created by the test.

Comment on lines +96 to +112
async fn test_duckdb_command_test_connection_invalid_file_path_returns_error() {
let form = ConnectionForm {
driver: "duckdb".to_string(),
file_path: Some("/nonexistent/path/to/database.db".to_string()),
..Default::default()
};

let result = connection::test_connection_ephemeral(form).await;

// DuckDB might succeed with nonexistent path (creates file), so we adjust expectations
// Alternative: test with read-only or permissions issue
assert!(result.is_ok() || result.is_err());
if result.is_err() {
let error = result.err().unwrap_or_default();
assert!(!error.trim().is_empty());
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Make the invalid-path test assert a real failure.

assert!(result.is_ok() || result.is_err()) is tautological, so this test never verifies the error path. Use a deterministic bad input and assert is_err().

🧪 Example
 async fn test_duckdb_command_test_connection_invalid_file_path_returns_error() {
+    let invalid_path = env::temp_dir();
     let form = ConnectionForm {
         driver: "duckdb".to_string(),
-        file_path: Some("/nonexistent/path/to/database.db".to_string()),
+        file_path: Some(invalid_path.to_string_lossy().to_string()),
         ..Default::default()
     };

     let result = connection::test_connection_ephemeral(form).await;
-
-    // DuckDB might succeed with nonexistent path (creates file), so we adjust expectations
-    // Alternative: test with read-only or permissions issue
-    assert!(result.is_ok() || result.is_err());
-    if result.is_err() {
-        let error = result.err().unwrap_or_default();
-        assert!(!error.trim().is_empty());
-    }
+    assert!(result.is_err());
+    let error = result.err().unwrap_or_default();
+    assert!(!error.trim().is_empty());
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src-tauri/tests/duckdb_command_integration.rs` around lines 96 - 112, The
test test_duckdb_command_test_connection_invalid_file_path_returns_error
currently uses a tautological assertion; change it to assert a real failure by
making the input deterministically invalid and asserting result.is_err().
Specifically, update the ConnectionForm (used by
connection::test_connection_ephemeral) to use a path that DuckDB will always
reject as a database file (e.g., a directory path like "/" or a freshly created
tempdir path rather than a nonexistent file) and replace assert!(result.is_ok()
|| result.is_err()) with assert!(result.is_err()); if result.is_err(), keep the
existing check that the error string (from result.err().unwrap_or_default()) is
non-empty to ensure meaningful error reporting.

Comment on lines +35 to +61
async fn prepare_query_test_table(form: &ConnectionForm, table: &str) {
let driver = MssqlDriver::connect(form)
.await
.expect("failed to connect mssql driver");

driver
.execute_query(format!(
"IF OBJECT_ID('{}', 'U') IS NOT NULL DROP TABLE {}",
table, table
))
.await
.ok();
driver
.execute_query(format!(
"CREATE TABLE {} (id INT PRIMARY KEY, name NVARCHAR(64))",
table
))
.await
.expect("create table should succeed");
driver
.execute_query(format!(
"INSERT INTO {} (id, name) VALUES (1, N'DbPaw')",
table
))
.await
.expect("insert row should succeed");
driver.close().await;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Don't run scratch-table DDL in master.

These unqualified CREATE/DROP TABLE statements use whatever database is in form. In the current test context that defaults to master (src-tauri/tests/common/mssql_context.rs:40-83 and src-tauri/tests/common/mssql_context.rs:85-97), so a failed or interrupted run can leave junk tables in a system database when IT_REUSE_LOCAL_DB points at a real instance. Please switch the suite to tempdb or a dedicated scratch database before issuing DDL.

Also applies to: 64-75, 234-251, 276-300

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src-tauri/tests/mssql_command_integration.rs` around lines 35 - 61, The DDL
runs against whatever database is set in ConnectionForm (currently defaulting to
master), so update the test helpers to avoid touching master: either set the
connection to use tempdb before connecting (modify ConnectionForm to set
database = "tempdb" prior to MssqlDriver::connect in prepare_query_test_table
and other test helpers) or fully-qualify object names with tempdb (use
"tempdb..{table}" in the DROP/CREATE/INSERT statements inside
prepare_query_test_table and the other affected blocks at 64-75, 234-251,
276-300) so all DDL runs against tempdb instead of master.

Comment on lines +19 to +25
fn unique_table_name(prefix: &str) -> String {
let millis = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("time should be after unix epoch")
.as_millis();
format!("{}_{}", prefix, millis)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

unique_table_name is collision-prone under parallel runs.

Using only epoch milliseconds can generate duplicate table names in concurrent tests; use a UUID suffix for deterministic uniqueness.

Suggested patch
 fn unique_table_name(prefix: &str) -> String {
-    let millis = SystemTime::now()
-        .duration_since(UNIX_EPOCH)
-        .expect("time should be after unix epoch")
-        .as_millis();
-    format!("{}_{}", prefix, millis)
+    format!("{}_{}", prefix, Uuid::new_v4().simple())
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src-tauri/tests/sqlite_command_integration.rs` around lines 19 - 25, The
helper unique_table_name currently builds names from epoch milliseconds which
can collide under parallel runs; change unique_table_name to append a UUID (e.g.
Uuid::new_v4()) to the existing millis-based prefix to guarantee uniqueness, and
add the corresponding import from the uuid crate (Uuid) and ensure the uuid
crate is in Cargo.toml; update references to unique_table_name in tests as
needed.

Comment thread TESTING.md
Comment on lines +332 to +339
### P0 (High Priority)
- [ ] Add command integration tests for MariaDB, MSSQL, ClickHouse, SQLite, DuckDB
- [ ] Document test data setup patterns
- [ ] Create test helper library for common assertions

### P1 (Medium Priority)
- [ ] Add frontend component tests (Playwright or Vitest)
- [ ] Split CI into fast/slow test suites

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Update the stale backlog item.

Line 333 says command integration tests are still missing for MariaDB, MSSQL, ClickHouse, SQLite, and DuckDB, but this file’s coverage table already marks those command suites as covered, and scripts/test-integration.sh includes them as well. This should point at the remaining gap instead.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@TESTING.md` around lines 332 - 339, Update the stale P0 checklist entry:
remove or replace the item "Add command integration tests for MariaDB, MSSQL,
ClickHouse, SQLite, DuckDB" under the "P0 (High Priority)" heading and instead
state the actual remaining gap (e.g., flaky tests, missing edge-case command
tests, data-setup patterns, or any other specific DBs not exercised) so it
matches the coverage table and the tests invoked by scripts/test-integration.sh;
ensure the new wording explicitly references the unresolved gap so readers can
reconcile TESTING.md with the coverage table and scripts.

Comment thread tsconfig.node.tsbuildinfo
@@ -0,0 +1 @@
{"fileNames":["./node_modules/typescript/lib/lib.d.ts","./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseast.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/vite/types/internal/terseroptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/vite/types/internal/csspreprocessoroptions.d.ts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssoptions.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@types/babel__generator/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@types/babel__template/index.d.ts","./node_modules/@types/babel__traverse/index.d.ts","./node_modules/@types/babel__core/index.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./node_modules/@tailwindcss/vite/dist/index.d.mts","./vite.config.ts"],"fileIdsList":[[54,108,125,126,197],[54,108,125,126],[54,108,125,126,196],[54,108,125,126,197,198,199,200,201],[54,108,125,126,197,199],[54,105,106,108,125,126],[54,107,108,125,126],[108,125,126],[54,108,113,125,126,143],[54,108,109,114,119,125,126,128,140,151],[54,108,109,110,119,125,126,128],[54,108,111,125,126,152],[54,108,112,113,120,125,126,129],[54,108,113,125,126,140,148],[54,108,114,116,119,125,126,128],[54,107,108,115,125,126],[54,108,116,117,125,126],[54,108,118,119,125,126],[54,107,108,119,125,126],[54,108,119,120,121,125,126,140,151],[54,108,119,120,121,125,126,135,140,143],[54,100,108,116,119,122,125,126,128,140,151],[54,108,119,120,122,123,125,126,128,140,148,151],[54,108,122,124,125,126,140,148,151],[52,53,54,55,56,57,58,59,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157],[54,108,119,125,126],[54,108,125,126,127,151],[54,108,116,119,125,126,128,140],[54,108,125,126,129],[54,108,125,126,130],[54,107,108,125,126,131],[54,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157],[54,108,125,126,133],[54,108,125,126,134],[54,108,119,125,126,135,136],[54,108,125,126,135,137,152,154],[54,108,120,125,126],[54,108,119,125,126,140,141,143],[54,108,125,126,142,143],[54,108,125,126,140,141],[54,108,125,126,143],[54,108,125,126,144],[54,105,108,125,126,140,145,151],[54,108,119,125,126,146,147],[54,108,125,126,146,147],[54,108,113,125,126,128,140,148],[54,108,125,126,149],[54,108,125,126,128,150],[54,108,122,125,126,134,151],[54,108,113,125,126,152],[54,108,125,126,140,153],[54,108,125,126,127,154],[54,108,125,126,155],[54,108,113,125,126],[54,100,108,125,126],[54,108,125,126,156],[54,100,108,119,121,125,126,131,140,143,151,153,154,156],[54,108,125,126,140,157],[54,108,125,126,196,202],[54,108,125,126,190,191],[54,108,125,126,184],[54,108,125,126,182,184],[54,108,125,126,173,181,182,183,185,187],[54,108,125,126,171],[54,108,125,126,174,179,184,187],[54,108,125,126,170,187],[54,108,125,126,174,175,178,179,180,187],[54,108,125,126,174,175,176,178,179,187],[54,108,125,126,171,172,173,174,175,179,180,181,183,184,185,187],[54,108,125,126,187],[54,108,125,126,169,171,172,173,174,175,176,178,179,180,181,182,183,184,185,186],[54,108,125,126,169,187],[54,108,125,126,174,176,177,179,180,187],[54,108,125,126,178,187],[54,108,125,126,179,180,184,187],[54,108,125,126,172,182],[54,108,125,126,163,195,196],[54,108,125,126,162,163],[54,66,69,72,73,108,125,126,151],[54,69,108,125,126,140,151],[54,69,73,108,125,126,151],[54,108,125,126,140],[54,63,108,125,126],[54,67,108,125,126],[54,65,66,69,108,125,126,151],[54,108,125,126,128,148],[54,108,125,126,158],[54,63,108,125,126,158],[54,65,69,108,125,126,128,151],[54,60,61,62,64,68,108,119,125,126,140,151],[54,69,77,85,108,125,126],[54,61,67,108,125,126],[54,69,94,95,108,125,126],[54,61,64,69,108,125,126,143,151,158],[54,69,108,125,126],[54,65,69,108,125,126,151],[54,60,108,125,126],[54,63,64,65,67,68,69,70,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,99,108,125,126],[54,69,87,90,108,116,125,126],[54,69,77,78,79,108,125,126],[54,67,69,78,80,108,125,126],[54,68,108,125,126],[54,61,63,69,108,125,126],[54,69,73,78,80,108,125,126],[54,73,108,125,126],[54,67,69,72,108,125,126,151],[54,61,65,69,77,108,125,126],[54,69,87,108,125,126],[54,80,108,125,126],[54,63,69,94,108,125,126,143,156,158],[54,108,125,126,159],[54,108,119,120,122,123,124,125,126,128,140,148,151,157,158,159,160,161,163,164,166,167,168,188,189,193,194,195,196],[54,108,125,126,159,160,161,165],[54,108,125,126,161],[54,108,125,126,192],[54,108,125,126,163,196],[54,108,125,126,130,196,203,204]],"fileInfos":[{"version":"a7297ff837fcdf174a9524925966429eb8e5feecc2cc55cc06574e6b092c1eaa","impliedFormat":1},{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"0e5974dfff7a97181c7c376545f126b20acf2f1341db7d3fccea4977bf3ce19c","impliedFormat":1},{"version":"c7f977ea78a1b060a30554c1c4ec0e2269c6e305a349ca2ada14931ac27ecc0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"145dcf25fd4967c610c53d93d7bc4dce8fbb1b6dd7935362472d4ae49363c7ba","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bf3fe89ec8baa335f6370b9fa36308e1bc7a72e2eb2dad1e94f31e27fa28b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"35390d6fa94bdb432c5d0bcb6547bdd11406c2692a6b90b9e47be2105ea19bd6","impliedFormat":1},{"version":"b33b74b97952d9bf4fbd2951dcfbb5136656ddb310ce1c84518aaa77dbca9992","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"8d117798e5228c7fdff887f44851d07320739c5cc0d511afae8f250c51809a36","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ccf3afaeebbeee4ca9092101e99fd6abd681116b6e5ec23e381bbb1e1f32262c","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"ab7818a9d57a9297b90e456fc68b77f84d74395a9210a3cfa9d87db33aff8b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb08062718a5470cd864c1fae0eb5b3a3adc5bcd05dcf87608d6f60b65eca3f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a815b7d1aebc0646b91548eab2fc19dada09ff255d04c71ced00bbd3058c8eb","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"836b36913830645ac3b28fe33731aac3fdb3524ee8adbb4cdab9a5c189f41943","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ee70b8037ecdf0de6c04f35277f253663a536d7e38f1539d270e4e916d225a3f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","impliedFormat":1},{"version":"333caa2bfff7f06017f114de738050dd99a765c7eb16571c6d25a38c0d5365dc","impliedFormat":1},{"version":"e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","impliedFormat":1},{"version":"459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","impliedFormat":1},{"version":"4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","impliedFormat":1},{"version":"7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","impliedFormat":1},{"version":"70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","impliedFormat":1},{"version":"d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","impliedFormat":1},{"version":"a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","impliedFormat":1},{"version":"b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","impliedFormat":1},{"version":"644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","impliedFormat":1},{"version":"dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","impliedFormat":1},{"version":"1251d53755b03cde02466064260bb88fd83c30006a46395b7d9167340bc59b73","impliedFormat":1},{"version":"47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","impliedFormat":1},{"version":"4cdf27e29feae6c7826cdd5c91751cc35559125e8304f9e7aed8faef97dcf572","impliedFormat":1},{"version":"331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":1},{"version":"f7eebe1b25040d805aefe8971310b805cd49b8602ec206d25b38dc48c542f165","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"509f8efdfc5f9f6b52284170e8d7413552f02d79518d1db691ee15acc0088676","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e4af494f7a14b226bbe732e9c130d8811f8c7025911d7c58dd97121a85519715","impliedFormat":1},{"version":"47416e41b1af81e53e8c3cc5bf909d47ff632a7b6eddfe7ff43d187b4dcca047","impliedFormat":99},{"version":"511a5f4f77165dc1b73ceae1e28b4a8f78f3443d8e18a1fd43bfafd2b0133bbe","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"26e0ffceb2198feb1ef460d5d14111c69ad07d44c5a67fd4bfeb74c969aa9afb","impliedFormat":99},{"version":"54895c782637a5cd4696a22ea361c107abe8b9e0655ec1b2881504c05af5f6cf","impliedFormat":99},{"version":"051dc29281dd2a9b9ac647e55581c4bd3c6fe47e739a31760eeb6f58483c53c9","signature":"3e18b6ca0a92c0205c51abafed5c5ce07f741c05b913fc3dd18b7c9f5486eb69"}],"root":[205],"options":{"allowSyntheticDefaultImports":true,"composite":true,"module":99,"skipLibCheck":true},"referencedMap":[[199,1],[197,2],[204,3],[202,4],[198,1],[200,5],[201,1],[162,2],[105,6],[106,6],[107,7],[54,8],[108,9],[109,10],[110,11],[52,2],[111,12],[112,13],[113,14],[114,15],[115,16],[116,17],[117,17],[118,18],[119,19],[120,20],[121,21],[55,2],[53,2],[122,22],[123,23],[124,24],[158,25],[125,26],[126,2],[127,27],[128,28],[129,29],[130,30],[131,31],[132,32],[133,33],[134,34],[135,35],[136,35],[137,36],[138,2],[139,37],[140,38],[142,39],[141,40],[143,41],[144,42],[145,43],[146,44],[147,45],[148,46],[149,47],[150,48],[151,49],[152,50],[153,51],[154,52],[155,53],[56,2],[57,54],[58,2],[59,2],[101,55],[102,56],[103,2],[104,41],[156,57],[157,58],[203,59],[167,2],[190,2],[192,60],[191,2],[185,61],[183,62],[184,63],[172,64],[173,62],[180,65],[171,66],[176,67],[186,2],[177,68],[182,69],[188,70],[187,71],[170,72],[178,73],[179,74],[174,75],[181,61],[175,76],[164,77],[163,78],[169,2],[1,2],[50,2],[51,2],[9,2],[13,2],[12,2],[3,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[4,2],[22,2],[23,2],[5,2],[24,2],[28,2],[25,2],[26,2],[27,2],[29,2],[30,2],[31,2],[6,2],[32,2],[33,2],[34,2],[35,2],[7,2],[39,2],[36,2],[37,2],[38,2],[40,2],[8,2],[41,2],[46,2],[47,2],[42,2],[43,2],[44,2],[45,2],[2,2],[48,2],[49,2],[11,2],[10,2],[77,79],[89,80],[75,81],[90,82],[99,83],[66,84],[67,85],[65,86],[98,87],[93,88],[97,89],[69,90],[86,91],[68,92],[96,93],[63,94],[64,88],[70,95],[71,2],[76,96],[74,95],[61,97],[100,98],[91,99],[80,100],[79,95],[81,101],[84,102],[78,103],[82,104],[94,87],[72,105],[73,106],[85,107],[62,82],[88,108],[87,95],[83,109],[92,2],[60,2],[95,110],[160,111],[196,112],[166,113],[161,111],[159,2],[165,114],[194,2],[189,2],[193,115],[168,2],[195,116],[205,117]],"latestChangedDtsFile":"./vite.config.d.ts","version":"5.8.3"} No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Do not commit TypeScript incremental build cache artifacts.

tsconfig.node.tsbuildinfo is generated state and should be excluded from version control to avoid PR churn and merge conflicts.

Suggested cleanup
# .gitignore
+*.tsbuildinfo

Also remove tsconfig.node.tsbuildinfo from this PR.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tsconfig.node.tsbuildinfo` at line 1, The committed artifact
tsconfig.node.tsbuildinfo is TypeScript incremental build cache and must be
removed from the PR and ignored; remove the file from the commit (unstage/remove
it from the repo), add tsconfig.node.tsbuildinfo to .gitignore (or update
existing ignore patterns like *.tsbuildinfo), and ensure you run the equivalent
of git rm --cached for that filename so it no longer appears in future commits
before amending the PR.

Comment thread tsconfig.tsbuildinfo
@@ -0,0 +1 @@
{"root":["./src/app.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/components/theme-provider.tsx","./src/components/updater-checker.tsx","./src/components/business/datagrid/tableview.tsx","./src/components/business/datagrid/tableview/utils.ts","./src/components/business/datagrid/tableview/utils.unit.test.ts","./src/components/business/editor/savequerydialog.tsx","./src/components/business/editor/sqleditor.tsx","./src/components/business/editor/clickhousekeywords.ts","./src/components/business/editor/codemirrortheme.ts","./src/components/business/editor/sqlselection.ts","./src/components/business/editor/sqlselection.unit.test.ts","./src/components/business/metadata/tablemetadataview.tsx","./src/components/business/sidebar/aihistorypopover.tsx","./src/components/business/sidebar/aimarkdownmessage.tsx","./src/components/business/sidebar/aisidebar.tsx","./src/components/business/sidebar/connectionlist.tsx","./src/components/business/sidebar/savedquerieslist.tsx","./src/components/business/sidebar/sidebar.tsx","./src/components/business/sidebar/chat/chatcomposer.tsx","./src/components/business/sidebar/chat/chatmessageitem.tsx","./src/components/business/sidebar/chat/chatmessagelist.tsx","./src/components/business/sidebar/chat/chattypingindicator.tsx","./src/components/business/sidebar/chat/tableselector.tsx","./src/components/business/sidebar/connection-list/treenode.tsx","./src/components/business/sidebar/connection-list/helpers.tsx","./src/components/business/sqllogs/sqlexecutionlogsdialog.tsx","./src/components/settings/languageselector.tsx","./src/components/settings/settingsdialog.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/aspect-ratio.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/carousel.tsx","./src/components/ui/chart.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/context-menu.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input-otp.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/menubar.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/resizable.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/sonner.tsx","./src/components/ui/sortable-tab.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/components/ui/use-mobile.ts","./src/components/ui/utils.ts","./src/lib/keyboard.ts","./src/lib/queryexecutionstate.ts","./src/lib/queryexecutionstate.unit.test.ts","./src/lib/sqleditordatabase.ts","./src/lib/sqleditordatabase.unit.test.ts","./src/lib/connection-form/rules.ts","./src/lib/connection-form/rules.unit.test.ts","./src/lib/connection-form/validate.ts","./src/lib/connection-form/validate.unit.test.ts","./src/lib/i18n/index.ts","./src/lib/i18n/locales/en.ts","./src/lib/i18n/locales/ja.ts","./src/lib/i18n/locales/zh.ts","./src/services/api.test.ts","./src/services/api.ts","./src/services/mocks.service.test.ts","./src/services/mocks.ts","./src/services/store.ts","./src/services/updater.ts","./src/services/updater.unit.test.ts","./src/theme/themeregistry.ts","./src/theme/themeregistry.unit.test.ts","./src/types/bun-test.d.ts"],"version":"5.8.3"} No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Avoid committing TypeScript build cache artifacts.

tsconfig.tsbuildinfo is generated state and tends to cause noisy, non-deterministic diffs. Please remove it from VCS and add it to .gitignore to keep PRs stable.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tsconfig.tsbuildinfo` at line 1, The commit improperly includes the generated
TypeScript build cache file tsconfig.tsbuildinfo; remove it from the repository
and stop tracking it by removing it from Git's index (e.g., git rm --cached
tsconfig.tsbuildinfo) and committing that removal, then add tsconfig.tsbuildinfo
to .gitignore so it isn't re-added; ensure the change references the tracked
file name tsconfig.tsbuildinfo so reviewers can verify it was removed and
.gitignore updated.

Comment thread vite.config.js
Comment on lines +1 to +75
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";
import path from "path";
var host = process.env.TAURI_DEV_HOST;
// https://vite.dev/config/
export default defineConfig(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, ({
plugins: [react(), tailwindcss()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
//
// 1. prevent Vite from obscuring rust errors
clearScreen: false,
// 2. tauri expects a fixed port, fail if that port is not available
server: {
port: 1420,
strictPort: true,
host: host || false,
hmr: host
? {
protocol: "ws",
host: host,
port: 1421,
}
: undefined,
watch: {
// 3. tell Vite to ignore watching `src-tauri`
ignored: ["**/src-tauri/**"],
},
},
})];
});
}); });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Remove this compiled build artifact — vite.config.ts already exists and takes precedence.

This file appears to be the TypeScript-compiled output of vite.config.ts (note the __awaiter/__generator helper shims). Vite resolves config files in the order: .ts > .mts > .mjs > .js, so this .js file will be silently ignored.

Issues with keeping this file:

  1. Redundancy: vite.config.ts is the source of truth and takes precedence
  2. Drift risk: If .ts is modified, this .js file becomes stale
  3. Build artifacts shouldn't be versioned: Compiled output belongs in .gitignore
Recommended action

Remove vite.config.js and vite.config.d.ts from the repository:

git rm vite.config.js vite.config.d.ts

If there's a specific reason these files are needed (e.g., for a build tool that doesn't support TypeScript configs), please clarify.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@vite.config.js` around lines 1 - 75, This file is the compiled JavaScript
output of the TypeScript Vite config (notice __awaiter/__generator shims and
export default defineConfig(...)), so remove this build artifact to avoid
redundancy and drift: delete vite.config.js (and vite.config.d.ts if present)
from the repo so Vite uses the source vite.config.ts (ensure defineConfig/import
react/tailwindcss/path references remain only in the .ts file); if you need JS
config for a special tool, explain why and keep only the intentionally required
file.

@codeErrorSleep codeErrorSleep merged commit 6625771 into main Apr 1, 2026
13 of 19 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Apr 7, 2026
@codeErrorSleep codeErrorSleep deleted the release/260330 branch April 12, 2026 08:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants