Release/260330#53
Conversation
…original query will be returned
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
📝 WalkthroughWalkthroughThis 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 ( Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
| 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
Show autofix suggestion
Hide autofix suggestion
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: readYou only need to edit .github/workflows/build-multiplatform.yml, inserting these lines near the top; no imports or additional methods are required.
| @@ -1,5 +1,8 @@ | ||
| name: Multi-Platform Build | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| on: | ||
| workflow_dispatch: | ||
| push: |
| @@ -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
Show autofix suggestion
Hide autofix suggestion
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: readafter 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.
| @@ -8,6 +8,9 @@ | ||
| branches: | ||
| - main | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| # Fast smoke tests run first to fail fast | ||
| smoke: |
Check warning
Code scanning / CodeQL
Workflow does not contain permissions Medium
Show autofix suggestion
Hide autofix suggestion
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: readThis 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.
| @@ -8,6 +8,9 @@ | ||
| branches: | ||
| - main | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| # Fast smoke tests run first to fail fast | ||
| smoke: |
Check warning
Code scanning / CodeQL
Workflow does not contain permissions Medium
Show autofix suggestion
Hide autofix suggestion
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: CIandon:, keeping existing indentation and structure unchanged.
| @@ -1,5 +1,8 @@ | ||
| name: CI | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: |
CI Feedback 🧐A test triggered by this PR failed. Here is an AI-generated analysis of the failure:
|
There was a problem hiding this comment.
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 | 🟡 MinorReject out-of-range embedded ports before overriding the form port.
This now replaces a valid
fallbackPortfor any digit-only suffix, including0or values above65535.host="db:99999"will normalize to an invalid port instead of keeping the separateportfield.🔢 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 existingvite.config.ts.This
.d.tsfile is a TypeScript declaration for the compiledvite.config.js. However, sincevite.config.tsalready exists and Vite prioritizes.tsover.js, both this file andvite.config.jswill be ignored. See the review comment onvite.config.jsfor 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:webis narrower than its callers imply.
test:smokeand the CI smoke job treatlintas the web lint gate, but this command only checks root/config/workflow files and skipssrc/**/*. Sinceformatstill targets the source tree, source formatting drift will not failbun 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 followinglatest.Using
bun-version: latestmakes tag builds drift over time: the samev*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
⛔ Files ignored due to path filters (1)
bun.lockis excluded by!**/*.lock
📒 Files selected for processing (39)
.github/workflows/build-multiplatform.yml.github/workflows/ci.ymlCLAUDE.mdTESTING.mddocs/zh/Community/CONTRIBUTING.mddocs/zh/Development/DBPAW_HARNESS_ADOPTION_PLAN.mddocs/zh/Development/DEVELOPMENT.mdpackage.jsonscripts/test-integration.shsrc-tauri/src/commands/metadata.rssrc-tauri/src/commands/transfer.rssrc-tauri/src/connection_input/mod.rssrc-tauri/src/db/drivers/mysql.rssrc-tauri/src/db/local.rssrc-tauri/tauri.conf.jsonsrc-tauri/tests/clickhouse_command_integration.rssrc-tauri/tests/clickhouse_integration.rssrc-tauri/tests/common/postgres_context.rssrc-tauri/tests/common/shared.rssrc-tauri/tests/duckdb_command_integration.rssrc-tauri/tests/mariadb_command_integration.rssrc-tauri/tests/mssql_command_integration.rssrc-tauri/tests/mysql_integration.rssrc-tauri/tests/mysql_stateful_command_integration.rssrc-tauri/tests/postgres_integration.rssrc-tauri/tests/sqlite_command_integration.rssrc-tauri/tests/sqlite_integration.rssrc/components/business/DataGrid/TableView.tsxsrc/components/business/DataGrid/tableView/utils.unit.test.tssrc/components/business/Sidebar/ConnectionList.tsxsrc/lib/connection-form/rules.tssrc/lib/connection-form/rules.unit.test.tssrc/lib/i18n/locales/ja.tstsconfig.node.jsontsconfig.node.tsbuildinfotsconfig.tsbuildinfovite.config.d.tsvite.config.jsvite.config.ts
| - name: Upload artifacts | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: dbpaw-${{ matrix.platform }} | ||
| path: | | ||
| src-tauri/target/release/bundle/ | ||
| retention-days: 7 |
There was a problem hiding this comment.
🧩 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:
- 1: https://github.com/actions/upload-artifact
- 2: https://git.telodendria.io/actions/upload-artifact/src/branch/v4-beta/README.md?display=source
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.
| - 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.
| 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 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Locate and read the CI workflow file
fd 'ci\.yml' --type fRepository: 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.
| 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.
| 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 | ||
| } |
There was a problem hiding this comment.
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.
| 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()); | ||
| } | ||
| } |
There was a problem hiding this comment.
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.
| 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; |
There was a problem hiding this comment.
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.
| 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) | ||
| } |
There was a problem hiding this comment.
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.
| ### 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 |
There was a problem hiding this comment.
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.
| @@ -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 | |||
There was a problem hiding this comment.
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
+*.tsbuildinfoAlso 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.
| @@ -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 | |||
There was a problem hiding this comment.
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.
| 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/**"], | ||
| }, | ||
| }, | ||
| })]; | ||
| }); | ||
| }); }); |
There was a problem hiding this comment.
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:
- Redundancy:
vite.config.tsis the source of truth and takes precedence - Drift risk: If
.tsis modified, this.jsfile becomes stale - 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.tsIf 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.
Summary by CodeRabbit
Release Notes
New Features
Bug Fixes
Improvements
Chores