Unverified 提交 29028f65 authored 作者: Will Chen's avatar Will Chen 提交者: GitHub

Replace prettier with oxfmt for faster formatting (#2313)

## Summary - Swap prettier for oxfmt in devDependencies for faster formatting - Rename scripts: prettier -> fmt, prettier:check -> fmt:check - Update lint-staged to use oxfmt - Update CLAUDE.md and skill docs to reference npm run fmt ## Test plan - [x] Run npm run fmt to verify formatting works - [x] Run npm run fmt:check to verify check mode works - [x] Verify lint-staged runs oxfmt on commit #skip-bugbot <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Replaced Prettier with oxfmt for faster formatting. Updated to oxfmt 0.26.0, added a project config, renamed scripts to fmt and fmt:check, and refreshed docs; oxfmt’s new rules applied compact formatting across many files. - **Migration** - Use npm run fmt and npm run fmt:check in local workflows and CI. - lint-staged now formats with oxfmt on commit. - Requires Node 20.19+ or 22.12+. <sup>Written for commit a9e3812b02849f8d6357913113fca68ca8b4fcbc. Summary will update on new commits.</sup> <!-- End of auto-generated description by cubic. --> --------- Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
上级 909a00b0
......@@ -39,7 +39,6 @@ Identify and fix flaky E2E tests by running them repeatedly and investigating fa
```
Notes:
- If `$ARGUMENTS` is provided without the `e2e-tests/` prefix, add it
- If `$ARGUMENTS` is provided without the `.spec.ts` suffix, add it
- A test is considered **flaky** if it fails at least once out of 10 runs
......@@ -53,7 +52,6 @@ Identify and fix flaky E2E tests by running them repeatedly and investigating fa
```
Analyze the debug output to understand:
- Timing issues (race conditions, elements not ready)
- Animation/transition interference
- Network timing variability
......@@ -63,7 +61,6 @@ Identify and fix flaky E2E tests by running them repeatedly and investigating fa
6. **Fix the flaky test:**
Common fixes following Playwright best practices:
- Use `await expect(locator).toBeVisible()` before interacting with elements
- Use `await page.waitForLoadState('networkidle')` for network-dependent tests
- Use stable selectors (data-testid, role, text) instead of fragile CSS selectors
......@@ -94,7 +91,6 @@ Identify and fix flaky E2E tests by running them repeatedly and investigating fa
9. **Summarize results:**
Report to the user:
- Which tests were identified as flaky
- What was causing the flakiness
- What fixes were applied
......
......@@ -7,7 +7,6 @@ Rebase E2E test snapshots based on failed tests from the PR comments.
1. Get the current PR number using `gh pr view --json number --jq '.number'`
2. Fetch PR comments and look for the Playwright test results comment. Parse out the failed test filenames from either:
- The "Failed Tests" section (lines starting with `- \`filename.spec.ts`)
- The "Update Snapshot Commands" section (contains `npm run e2e e2e-tests/filename.spec.ts`)
......@@ -36,7 +35,6 @@ Rebase E2E test snapshots based on failed tests from the PR comments.
7. Show the user which snapshots were updated using `git diff` on the snapshot files.
8. Review the snapshot changes to ensure they look reasonable and are consistent with the PR's purpose. Consider:
- Do the changes align with what the PR is trying to accomplish?
- Are there any unexpected or suspicious changes?
......
......@@ -11,7 +11,6 @@ Create a plan to fix a GitHub issue, then send it to be worked on remotely after
1. **Fetch the GitHub issue:**
First, extract the issue number from `$ARGUMENTS`:
- If `$ARGUMENTS` is a number (e.g., `123`), use it directly
- If `$ARGUMENTS` is a URL (e.g., `https://github.com/owner/repo/issues/123`), extract the issue number from the path
......@@ -22,13 +21,11 @@ Create a plan to fix a GitHub issue, then send it to be worked on remotely after
```
2. **Analyze the issue:**
- Understand what the issue is asking for
- Identify the type of work (bug fix, feature, refactor, etc.)
- Note any specific requirements or constraints mentioned
3. **Explore the codebase:**
- Search for relevant files and code related to the issue
- Understand the current implementation
- Identify what needs to change
......@@ -37,7 +34,6 @@ Create a plan to fix a GitHub issue, then send it to be worked on remotely after
4. **Determine testing approach:**
Consider what kind of testing is appropriate for this change:
- **E2E test**: For user-facing features or complete user flows. Prefer this when the change involves UI interactions or would require mocking many dependencies to unit test.
- **Unit test**: For pure business logic, utility functions, or isolated components.
- **No new tests**: Only for trivial changes (typos, config tweaks, etc.)
......@@ -47,7 +43,6 @@ Create a plan to fix a GitHub issue, then send it to be worked on remotely after
5. **Create a detailed plan:**
Write a plan that includes:
- **Summary**: Brief description of the issue and proposed solution
- **Files to modify**: List of files that will need changes
- **Implementation steps**: Ordered list of specific changes to make
......@@ -61,11 +56,9 @@ Create a plan to fix a GitHub issue, then send it to be worked on remotely after
7. **Ask how to proceed:**
After the plan is approved, ask the user whether they want to:
- **Continue locally**: Implement the plan in the current session
- **Send to remote**: Push to a remote Claude session for implementation
8. **Execute based on user choice:**
- If **local**: Proceed to implement the plan step by step, then run `/dyad:pr-push` when complete
- If **remote**: Use `ExitPlanMode` with `pushToRemote: true` and share the remote session URL with the user
......@@ -7,7 +7,7 @@ Run pre-commit checks including formatting, linting, and type-checking, and fix
1. **Run formatting check and fix:**
```
npm run prettier
npm run fmt
```
This will automatically fix any formatting issues.
......@@ -23,7 +23,6 @@ Run pre-commit checks including formatting, linting, and type-checking, and fix
3. **Fix remaining lint errors manually:**
If there are lint errors that could not be auto-fixed, read the affected files and fix the errors manually. Common issues include:
- Unused variables or imports (remove them)
- Missing return types (add them)
- Any other ESLint rule violations
......@@ -37,7 +36,6 @@ Run pre-commit checks including formatting, linting, and type-checking, and fix
5. **Fix any type errors:**
If there are type errors, read the affected files and fix them. Common issues include:
- Type mismatches (correct the types)
- Missing type annotations (add them)
- Null/undefined handling issues (add appropriate checks)
......@@ -47,11 +45,10 @@ Run pre-commit checks including formatting, linting, and type-checking, and fix
After making manual fixes, re-run the checks to ensure everything passes:
```
npm run prettier && npm run lint && npm run ts
npm run fmt && npm run lint && npm run ts
```
7. **Summarize the results:**
- Report which checks passed
- List any fixes that were made manually
- If any errors could not be fixed, explain why and ask the user for guidance
......
......@@ -11,13 +11,11 @@ Address all outstanding issues on a GitHub Pull Request by handling both review
This is a meta-skill that orchestrates two sub-skills to comprehensively fix PR issues.
1. **Run `/dyad:pr-fix:comments`** to handle all unresolved review comments:
- Address valid code review concerns
- Resolve invalid concerns with explanations
- Flag ambiguous issues for human attention
2. **Run `/dyad:pr-fix:actions`** to handle failing CI checks:
- Fix failing tests (unit and E2E)
- Update snapshots if needed
- Ensure all checks pass
......
......@@ -9,7 +9,6 @@ Fix failing CI checks and GitHub Actions on a Pull Request.
## Instructions
1. **Determine the PR to work on:**
- If `$ARGUMENTS` contains a PR number or URL, use that
- Otherwise, get the current branch's PR using `gh pr view --json number,url,title,body --jq '.'`
- If no PR is found, inform the user and stop
......@@ -21,7 +20,6 @@ Fix failing CI checks and GitHub Actions on a Pull Request.
```
Identify which checks are failing:
- Lint/formatting checks
- Type checks
- Unit tests
......@@ -29,19 +27,16 @@ Fix failing CI checks and GitHub Actions on a Pull Request.
- Build checks
3. **For failing lint/formatting checks:**
- Run `npm run lint:fix` to auto-fix lint issues
- Run `npm run prettier` to fix formatting
- Run `npm run fmt` to fix formatting
- Review the changes made
4. **For failing type checks:**
- Run `npm run ts` to identify type errors
- Read the relevant files and fix the type issues
- Re-run type checks to verify fixes
5. **For failing unit tests:**
- Run the failing tests locally to reproduce:
```
npm run test -- <test-file-pattern>
......@@ -50,7 +45,6 @@ Fix failing CI checks and GitHub Actions on a Pull Request.
- Fix the underlying code issues or update tests if the behavior change is intentional
6. **For failing Playwright/E2E tests:**
- Check if the failures are snapshot-related by examining the CI logs or PR comments
- If snapshots need updating, run the `/dyad:e2e-rebase` skill to fix them
- If the failures are not snapshot-related:
......@@ -61,7 +55,6 @@ Fix failing CI checks and GitHub Actions on a Pull Request.
- Investigate and fix the underlying issues
7. **For failing build checks:**
- Run the build locally:
```
npm run build
......@@ -69,7 +62,6 @@ Fix failing CI checks and GitHub Actions on a Pull Request.
- Fix any build errors that appear
8. **After making all fixes, verify:**
- Run the full lint check: `npm run lint`
- Run type checks: `npm run ts`
- Run relevant unit tests
......@@ -93,7 +85,6 @@ Fix failing CI checks and GitHub Actions on a Pull Request.
Then run `/dyad:pr-push` to push the changes.
10. **Provide a summary to the user:**
- List which checks were failing
- Describe what was fixed for each
- Note any checks that could not be fixed and require human attention
......@@ -9,7 +9,6 @@ Read all unresolved GitHub PR comments and address or resolve them appropriately
## Instructions
1. **Determine the PR to work on:**
- If `$ARGUMENTS` is provided:
- If it's a number (e.g., `123`), use it as the PR number
- If it's a URL (e.g., `https://github.com/owner/repo/pull/123`), extract the PR number from the path
......@@ -54,7 +53,6 @@ Read all unresolved GitHub PR comments and address or resolve them appropriately
3. **For each unresolved review thread, categorize it:**
Read the comment(s) in the thread and determine which category it falls into:
- **Valid issue**: A legitimate code review concern that should be addressed (bug, improvement, style issue, etc.)
- **Not a valid issue**: The reviewer may have misunderstood something, the concern is already addressed elsewhere, or the suggestion conflicts with project requirements
- **Ambiguous**: The comment is unclear, requires significant discussion, or involves a judgment call that needs human input
......@@ -62,14 +60,12 @@ Read all unresolved GitHub PR comments and address or resolve them appropriately
4. **Handle each category:**
**For valid issues:**
- Read the relevant file(s) mentioned in the comment
- Understand the context and the requested change
- Make the necessary code changes to address the feedback
- The thread will be marked as resolved when the code is pushed (GitHub auto-resolves when the code changes)
**For not valid issues:**
- Reply to the thread explaining why the concern doesn't apply:
```
......@@ -92,7 +88,6 @@ Read all unresolved GitHub PR comments and address or resolve them appropriately
Note: Replace `<THREAD_ID>` with the thread's `id` field from the GraphQL response.
**For ambiguous issues:**
- Reply to the thread flagging it for human attention:
```
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/comments/<COMMENT_ID>/replies \
......@@ -104,7 +99,6 @@ Read all unresolved GitHub PR comments and address or resolve them appropriately
5. **After processing all comments, verify and commit changes:**
If any code changes were made:
- Run `/dyad:lint` to ensure code passes all checks
- Stage and commit the changes:
......@@ -126,7 +120,6 @@ Read all unresolved GitHub PR comments and address or resolve them appropriately
7. **Provide a summary to the user:**
Report:
- **Addressed**: List of comments that were fixed with code changes
- **Resolved (not valid)**: List of comments that were resolved with explanations
- **Flagged for human attention**: List of ambiguous comments left open
......
......@@ -11,7 +11,6 @@ Commit any uncommitted changes, run lint checks, fix any issues, and push the cu
Run `git status` to check for any uncommitted changes (staged, unstaged, or untracked files).
If there are uncommitted changes:
- Identify files that should NOT be committed (e.g., `.env`, `.env.*`, `credentials.*`, `*.secret`, `*.key`, `*.pem`, `.DS_Store`, `node_modules/`, `*.log`, temporary files, or anything that looks like it contains secrets or personal configuration)
- Stage and commit all OTHER files with a descriptive commit message summarizing the changes
- Keep track of any files you ignored so you can report them at the end
......@@ -23,7 +22,7 @@ Commit any uncommitted changes, run lint checks, fix any issues, and push the cu
Run these commands to ensure the code passes all pre-commit checks:
```
npm run prettier && npm run lint:fix && npm run ts
npm run fmt && npm run lint:fix && npm run ts
```
If there are errors that could not be auto-fixed, read the affected files and fix them manually, then re-run the checks until they pass.
......@@ -58,7 +57,6 @@ Commit any uncommitted changes, run lint checks, fix any issues, and push the cu
Note: `--force-with-lease` is used because the commit may have been amended. It's safer than `--force` as it will fail if someone else has pushed to the branch.
5. **Summarize the results:**
- Report any uncommitted changes that were committed in step 1
- Report any files that were IGNORED and not committed (if any), explaining why they were skipped
- Report any lint fixes that were applied
......
......@@ -28,7 +28,6 @@ Rebase the current branch on the latest upstream changes, resolve conflicts, and
For example: `git rebase upstream/main`
4. **If there are merge conflicts:**
- Identify the conflicting files from the rebase output
- Read each conflicting file and understand both versions of the changes
- Resolve the conflicts by editing the files to combine changes appropriately
......@@ -51,7 +50,6 @@ Rebase the current branch on the latest upstream changes, resolve conflicts, and
Run the `/dyad:pr-push` skill to run lint checks, fix any issues, and push the rebased branch.
6. **Summarize the results:**
- Report that the rebase was successful
- List any conflicts that were resolved
- Note any lint fixes that were applied
......
......@@ -13,7 +13,6 @@ Analyze session debugging data to identify errors and issues that may have cause
1. **Parse and validate the arguments:**
Split `$ARGUMENTS` on whitespace to get exactly two arguments:
- First argument: session data URL (must start with `http://` or `https://`)
- Second argument: GitHub issue identifier (number like `123` or full URL like `https://github.com/owner/repo/issues/123`)
......@@ -31,7 +30,6 @@ Analyze session debugging data to identify errors and issues that may have cause
```
Understand:
- What problem the user is reporting
- Steps to reproduce (if provided)
- Expected vs actual behavior
......@@ -44,7 +42,6 @@ Analyze session debugging data to identify errors and issues that may have cause
4. **Analyze the session data:**
Look for suspicious entries including:
- **Errors**: Any error messages, stack traces, or exception logs
- **Warnings**: Warning-level log entries that may indicate problems
- **Failed requests**: HTTP errors, timeout failures, connection issues
......@@ -55,7 +52,6 @@ Analyze session debugging data to identify errors and issues that may have cause
5. **Correlate with the reported issue:**
For each suspicious entry found, assess:
- Does the timing match when the user reported the issue occurring?
- Does the error message relate to the feature/area the user mentioned?
- Could this error cause the symptoms the user described?
......@@ -80,13 +76,11 @@ Analyze session debugging data to identify errors and issues that may have cause
7. **Provide recommendations:**
For each high-confidence finding, suggest:
- Where in the codebase to investigate
- Potential root causes
- Suggested fixes if apparent
8. **Summarize:**
- Total errors/warnings found
- Top 3 most likely causes
- Recommended next steps for investigation
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 80,
"experimentalSortPackageJson": false,
"ignorePatterns": [
"build",
"coverage",
"drizzle/",
"**/pnpm-lock.yaml",
"**/snapshots/**",
"e2e-tests/fixtures/**"
]
}
......@@ -17,7 +17,9 @@ testSkipIfWindows(
const iframe = po.getPreviewIframeElement();
await expect(
iframe.contentFrame().getByText("Console Logs Test App"),
).toBeVisible({ timeout: Timeout.MEDIUM });
).toBeVisible({
timeout: Timeout.MEDIUM,
});
// Open the system messages console
// Logs are generated in useEffect when component mounts, so they may already exist
......@@ -99,7 +101,9 @@ testSkipIfWindows(
const iframeFrame = iframe.contentFrame();
await expect(
iframeFrame.getByText("Network Requests Test App"),
).toBeVisible({ timeout: Timeout.MEDIUM });
).toBeVisible({
timeout: Timeout.MEDIUM,
});
// Wait for service worker to be ready
// Service worker registration is async, so we wait for it to be active
......@@ -261,7 +265,9 @@ testSkipIfWindows("clear logs button clears all logs", async ({ po }) => {
const iframe = po.getPreviewIframeElement();
await expect(
iframe.contentFrame().getByText("Console Logs Test App"),
).toBeVisible({ timeout: Timeout.MEDIUM });
).toBeVisible({
timeout: Timeout.MEDIUM,
});
// Open the system messages console
const consoleHeader = po.page.locator('text="System Messages"').first();
......
......@@ -11,7 +11,9 @@ test("file tree search finds content matches and surfaces line numbers", async (
// Wait for the code view to finish loading files
await expect(
po.page.getByText("Loading files...", { exact: false }),
).toBeHidden({ timeout: Timeout.LONG });
).toBeHidden({
timeout: Timeout.LONG,
});
const searchInput = po.page.getByTestId("file-tree-search");
await expect(searchInput).toBeVisible({ timeout: Timeout.MEDIUM });
......
......@@ -227,6 +227,8 @@ test.describe("Git Collaboration", () => {
await po.waitForToast("success");
await expect(
po.page.getByTestId(`collaborator-item-${fakeUser}`),
).not.toBeVisible({ timeout: 5000 });
).not.toBeVisible({
timeout: 5000,
});
});
});
......@@ -733,7 +733,9 @@ export class PageObject {
async waitForAnnotatorMode() {
// Wait for the annotator toolbar to be visible
await expect(this.page.getByRole("button", { name: "Select" })).toBeVisible(
{ timeout: Timeout.MEDIUM },
{
timeout: Timeout.MEDIUM,
},
);
}
......
......@@ -24,7 +24,9 @@ testSkipIfWindows(
// The button may not exist if there are no problems, so we check for the "No problems found" text
await expect(
po.page.getByText(/No problems found|No Problems Report/),
).toBeVisible({ timeout: Timeout.MEDIUM });
).toBeVisible({
timeout: Timeout.MEDIUM,
});
// Send prompt that triggers write_file with TS errors, then run_type_checks
await po.sendPrompt("tc=local-agent/run-type-checks");
......
......@@ -38,7 +38,9 @@ testWithConfig({
// Check if the force-close dialog is visible by looking for the heading
await expect(
po.page.getByRole("heading", { name: "Force Close Detected" }),
).toBeVisible({ timeout: Timeout.MEDIUM });
).toBeVisible({
timeout: Timeout.MEDIUM,
});
// Verify the warning message
await expect(
......
......@@ -205,7 +205,9 @@ testSkipIfWindows("discard changes", async ({ po }) => {
// Verify the visual changes dialog is gone
await expect(po.page.getByText(/\d+ component[s]? modified/)).not.toBeVisible(
{ timeout: Timeout.MEDIUM },
{
timeout: Timeout.MEDIUM,
},
);
// Verify that the changes are NOT applied to codebase
......
module.exports = {
"**/*.{ts,tsx}": () => "npm run ts",
"**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx,vue,astro,svelte}": "oxlint",
"*.{js,css,md,ts,tsx,jsx,json,yml,yaml}": "prettier --write",
"*.{js,css,md,ts,tsx,jsx,json,yml,yaml}": "oxfmt",
};
......@@ -137,8 +137,8 @@
"happy-dom": "^17.4.4",
"husky": "^9.1.7",
"lint-staged": "^15.5.2",
"oxfmt": "^0.26.0",
"oxlint": "^1.41.0",
"prettier": "3.5.3",
"rimraf": "^6.0.1",
"typescript": "^5.8.3",
"vite": "^5.4.17",
......@@ -452,7 +452,6 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz",
"integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.3",
......@@ -1366,7 +1365,6 @@
"integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"chalk": "^4.1.1",
"fs-extra": "^9.0.1",
......@@ -2217,6 +2215,7 @@
"os": [
"aix"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2233,6 +2232,7 @@
"os": [
"android"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2249,6 +2249,7 @@
"os": [
"android"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2265,6 +2266,7 @@
"os": [
"android"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2281,6 +2283,7 @@
"os": [
"darwin"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2297,6 +2300,7 @@
"os": [
"darwin"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2313,6 +2317,7 @@
"os": [
"freebsd"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2329,6 +2334,7 @@
"os": [
"freebsd"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2345,6 +2351,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2361,6 +2368,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2377,6 +2385,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2393,6 +2402,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2409,6 +2419,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2425,6 +2436,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2441,6 +2453,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2457,6 +2470,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2473,6 +2487,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2489,6 +2504,7 @@
"os": [
"netbsd"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2505,6 +2521,7 @@
"os": [
"netbsd"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2521,6 +2538,7 @@
"os": [
"openbsd"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2537,6 +2555,7 @@
"os": [
"openbsd"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2553,6 +2572,7 @@
"os": [
"openharmony"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2569,6 +2589,7 @@
"os": [
"sunos"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2585,6 +2606,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2601,6 +2623,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2617,6 +2640,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": ">=18"
}
......@@ -2794,6 +2818,7 @@
"os": [
"darwin"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -2816,6 +2841,7 @@
"os": [
"darwin"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -2838,6 +2864,7 @@
"os": [
"darwin"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2854,6 +2881,7 @@
"os": [
"darwin"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2870,6 +2898,7 @@
"os": [
"linux"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2886,6 +2915,7 @@
"os": [
"linux"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2902,6 +2932,7 @@
"os": [
"linux"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2918,6 +2949,7 @@
"os": [
"linux"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2934,6 +2966,7 @@
"os": [
"linux"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2950,6 +2983,7 @@
"os": [
"linux"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2966,6 +3000,7 @@
"os": [
"linux"
],
"peer": true,
"funding": {
"url": "https://opencollective.com/libvips"
}
......@@ -2982,6 +3017,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3004,6 +3040,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3026,6 +3063,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3048,6 +3086,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3070,6 +3109,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3092,6 +3132,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3114,6 +3155,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3133,6 +3175,7 @@
],
"license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
"optional": true,
"peer": true,
"dependencies": {
"@emnapi/runtime": "^1.4.4"
},
......@@ -3155,6 +3198,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3174,6 +3218,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3193,6 +3238,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
......@@ -3478,7 +3524,6 @@
"integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@inquirer/checkbox": "^3.0.1",
"@inquirer/confirm": "^4.0.1",
......@@ -4120,6 +4165,7 @@
"resolved": "https://registry.npmjs.org/@lexical/utils/-/utils-0.35.0.tgz",
"integrity": "sha512-2H393EYDnFznYCDFOW3MHiRzwEO5M/UBhtUjvTT+9kc+qhX4U3zc8ixQalo5UmZ5B2nh7L/inXdTFzvSRXtsRA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@lexical/list": "0.35.0",
"@lexical/selection": "0.35.0",
......@@ -4132,6 +4178,7 @@
"resolved": "https://registry.npmjs.org/@lexical/clipboard/-/clipboard-0.35.0.tgz",
"integrity": "sha512-ko7xSIIiayvDiqjNDX6fgH9RlcM6r9vrrvJYTcfGVBor5httx16lhIi0QJZ4+RNPvGtTjyFv4bwRmsixRRwImg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@lexical/html": "0.35.0",
"@lexical/list": "0.35.0",
......@@ -4145,6 +4192,7 @@
"resolved": "https://registry.npmjs.org/@lexical/html/-/html-0.35.0.tgz",
"integrity": "sha512-rXGFE5S5rKsg3tVnr1s4iEgOfCApNXGpIFI3T2jGEShaCZ5HLaBY9NVBXnE9Nb49e9bkDkpZ8FZd1qokCbQXbw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@lexical/selection": "0.35.0",
"@lexical/utils": "0.35.0",
......@@ -4156,6 +4204,7 @@
"resolved": "https://registry.npmjs.org/@lexical/list/-/list-0.35.0.tgz",
"integrity": "sha512-owsmc8iwgExBX8sFe8fKTiwJVhYULt9hD1RZ/HwfaiEtRZZkINijqReOBnW2mJfRxBzhFSWc4NG3ISB+fHYzqw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@lexical/selection": "0.35.0",
"@lexical/utils": "0.35.0",
......@@ -4167,6 +4216,7 @@
"resolved": "https://registry.npmjs.org/@lexical/selection/-/selection-0.35.0.tgz",
"integrity": "sha512-mMtDE7Q0nycXdFTTH/+ta6EBrBwxBB4Tg8QwsGntzQ1Cq//d838dpXpFjJOqHEeVHUqXpiuj+cBG8+bvz/rPRw==",
"license": "MIT",
"peer": true,
"dependencies": {
"lexical": "0.35.0"
}
......@@ -4176,6 +4226,7 @@
"resolved": "https://registry.npmjs.org/@lexical/table/-/table-0.35.0.tgz",
"integrity": "sha512-9jlTlkVideBKwsEnEkqkdg7A3mije1SvmfiqoYnkl1kKJCLA5iH90ywx327PU0p+bdnURAytWUeZPXaEuEl2OA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@lexical/clipboard": "0.35.0",
"@lexical/utils": "0.35.0",
......@@ -4186,7 +4237,8 @@
"version": "0.35.0",
"resolved": "https://registry.npmjs.org/lexical/-/lexical-0.35.0.tgz",
"integrity": "sha512-3VuV8xXhh5xJA6tzvfDvE0YBCMkIZUmxtRilJQDDdCgJCc+eut6qAv2qbN+pbqvarqcQqPN1UF+8YvsjmyOZpw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/@lexical/yjs": {
"version": "0.33.1",
......@@ -4314,7 +4366,6 @@
"resolved": "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-1.0.1.tgz",
"integrity": "sha512-O6yC5TT0jbw86VZVkmnzCZJB0hfxBl0JJz6f+3KHoZabjb/X08r9eFA+vuY06z1/qaovykvdkrXYq3SPUuvogA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/node": "^22.15.30",
"@types/pg": "^8.8.0"
......@@ -4327,7 +4378,8 @@
"version": "15.5.2",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.2.tgz",
"integrity": "sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/@next/swc-darwin-arm64": {
"version": "15.5.2",
......@@ -4341,6 +4393,7 @@
"os": [
"darwin"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4357,6 +4410,7 @@
"os": [
"darwin"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4373,6 +4427,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4389,6 +4444,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4405,6 +4461,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4421,6 +4478,7 @@
"os": [
"linux"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4437,6 +4495,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4453,6 +4512,7 @@
"os": [
"win32"
],
"peer": true,
"engines": {
"node": ">= 10"
}
......@@ -4579,7 +4639,6 @@
"integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@octokit/auth-token": "^4.0.0",
"@octokit/graphql": "^7.1.0",
......@@ -4894,6 +4953,118 @@
"node": ">=8.0.0"
}
},
"node_modules/@oxfmt/darwin-arm64": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/darwin-arm64/-/darwin-arm64-0.26.0.tgz",
"integrity": "sha512-AAGc+8CffkiWeVgtWf4dPfQwHEE5c/j/8NWH7VGVxxJRCZFdmWcqCXprvL2H6qZFewvDLrFbuSPRCqYCpYGaTQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@oxfmt/darwin-x64": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/darwin-x64/-/darwin-x64-0.26.0.tgz",
"integrity": "sha512-xFx5ijCTjw577wJvFlZEMmKDnp3HSCcbYdCsLRmC5i3TZZiDe9DEYh3P46uqhzj8BkEw1Vm1ZCWdl48aEYAzvQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@oxfmt/linux-arm64-gnu": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/linux-arm64-gnu/-/linux-arm64-gnu-0.26.0.tgz",
"integrity": "sha512-GubkQeQT5d3B/Jx/IiR7NMkSmXrCZcVI0BPh1i7mpFi8HgD1hQ/LbhiBKAMsMqs5bbugdQOgBEl8bOhe8JhW1g==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxfmt/linux-arm64-musl": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/linux-arm64-musl/-/linux-arm64-musl-0.26.0.tgz",
"integrity": "sha512-OEypUwK69bFPj+aa3/LYCnlIUPgoOLu//WNcriwpnWNmt47808Ht7RJSg+MNK8a7pSZHpXJ5/E6CRK/OTwFdaQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxfmt/linux-x64-gnu": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/linux-x64-gnu/-/linux-x64-gnu-0.26.0.tgz",
"integrity": "sha512-xO6iEW2bC6ZHyOTPmPWrg/nM6xgzyRPaS84rATy6F8d79wz69LdRdJ3l/PXlkqhi7XoxhvX4ExysA0Nf10ZZEQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxfmt/linux-x64-musl": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/linux-x64-musl/-/linux-x64-musl-0.26.0.tgz",
"integrity": "sha512-Z3KuZFC+MIuAyFCXBHY71kCsdRq1ulbsbzTe71v+hrEv7zVBn6yzql+/AZcgfIaKzWO9OXNuz5WWLWDmVALwow==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxfmt/win32-arm64": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/win32-arm64/-/win32-arm64-0.26.0.tgz",
"integrity": "sha512-3zRbqwVWK1mDhRhTknlQFpRFL9GhEB5GfU6U7wawnuEwpvi39q91kJ+SRJvJnhyPCARkjZBd1V8XnweN5IFd1g==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@oxfmt/win32-x64": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/@oxfmt/win32-x64/-/win32-x64-0.26.0.tgz",
"integrity": "sha512-m8TfIljU22i9UEIkD+slGPifTFeaCwIUfxszN3E6ABWP1KQbtwSw9Ak0TdoikibvukF/dtbeyG3WW63jv9DnEg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@oxlint/darwin-arm64": {
"version": "1.41.0",
"resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.41.0.tgz",
......@@ -5029,7 +5200,6 @@
"integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"playwright": "1.55.0"
},
......@@ -6591,6 +6761,7 @@
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
"integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"tslib": "^2.8.0"
}
......@@ -7125,7 +7296,8 @@
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
"integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
......@@ -7174,7 +7346,6 @@
"integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/node": "*"
}
......@@ -7405,7 +7576,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz",
"integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
"license": "MIT",
"peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
......@@ -7416,7 +7586,6 @@
"integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==",
"devOptional": true,
"license": "MIT",
"peer": true,
"peerDependencies": {
"@types/react": "^19.0.0"
}
......@@ -7518,7 +7687,6 @@
"integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "5.62.0",
"@typescript-eslint/types": "5.62.0",
......@@ -7954,7 +8122,6 @@
"integrity": "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@vitest/utils": "3.2.4",
"fflate": "^0.8.2",
......@@ -8258,7 +8425,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"devOptional": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
......@@ -8478,6 +8644,7 @@
"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"dequal": "^2.0.3"
}
......@@ -8730,7 +8897,6 @@
"integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/types": "^7.26.0"
}
......@@ -8807,7 +8973,6 @@
"integrity": "sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==",
"hasInstallScript": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bindings": "^1.5.0",
"prebuild-install": "^7.1.1"
......@@ -8930,7 +9095,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
......@@ -9492,7 +9656,8 @@
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/cliui": {
"version": "8.0.1",
......@@ -9613,6 +9778,7 @@
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"color-convert": "^2.0.1",
"color-string": "^1.9.0"
......@@ -9645,6 +9811,7 @@
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
......@@ -10224,7 +10391,8 @@
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
"integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/dotenv": {
"version": "16.6.1",
......@@ -11858,7 +12026,6 @@
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
......@@ -13259,7 +13426,6 @@
"integrity": "sha512-Newg9X7mRYskoBjSw70l1YnJ/ZGbq64VPyR821H5WVkTGpHG2O0mQILxCeUhxdYERLFY9B4tUyKLyf3uMTjtKw==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"@petamoriken/float16": "^3.8.7",
"debug": "^4.3.4",
......@@ -13752,7 +13918,6 @@
"integrity": "sha512-UVIHeVhxmxedbWPCfgS55Jg2rDfwf2BCKeylcPSqazLz5w3Kri7Q4xdBJubsr/+VUzFLh0VjIvh13RaDA2/Xug==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"webidl-conversions": "^7.0.0",
"whatwg-mimetype": "^3.0.0"
......@@ -14834,6 +14999,7 @@
"resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
"integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==",
"license": "MIT",
"peer": true,
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
......@@ -15137,8 +15303,7 @@
"url": "https://github.com/sponsors/lavrton"
}
],
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/levn": {
"version": "0.4.1",
......@@ -15158,8 +15323,7 @@
"version": "0.33.1",
"resolved": "https://registry.npmjs.org/lexical/-/lexical-0.33.1.tgz",
"integrity": "sha512-+kiCS/GshQmCs/meMb8MQT4AMvw3S3Ef0lSCv2Xi6Itvs59OD+NjQWNfYkDteIbKtVE/w0Yiqh56VyGwIb8UcA==",
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/lexical-beautiful-mentions": {
"version": "0.1.48",
......@@ -15179,6 +15343,7 @@
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.114.tgz",
"integrity": "sha512-gcxmNFzA4hv8UYi8j43uPlQ7CGcyMJ2KQb5kZASw6SnAKAf10hK12i2fjrS3Cl/ugZa5Ui6WwIu1/6MIXiHttQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"isomorphic.js": "^0.2.4"
},
......@@ -15949,6 +16114,7 @@
"integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"lz-string": "bin/bin.js"
}
......@@ -17350,8 +17516,7 @@
"version": "0.52.2",
"resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.2.tgz",
"integrity": "sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==",
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/motion-dom": {
"version": "12.23.12",
......@@ -17998,6 +18163,45 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/oxfmt": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.26.0.tgz",
"integrity": "sha512-UDD1wFNwfeorMm2ZY0xy1KRAAvJ5NjKBfbDmiMwGP7baEHTq65cYpC0aPP+BGHc8weXUbSZaK8MdGyvuRUvS4Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"tinypool": "2.0.0"
},
"bin": {
"oxfmt": "bin/oxfmt"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/sponsors/Boshen"
},
"optionalDependencies": {
"@oxfmt/darwin-arm64": "0.26.0",
"@oxfmt/darwin-x64": "0.26.0",
"@oxfmt/linux-arm64-gnu": "0.26.0",
"@oxfmt/linux-arm64-musl": "0.26.0",
"@oxfmt/linux-x64-gnu": "0.26.0",
"@oxfmt/linux-x64-musl": "0.26.0",
"@oxfmt/win32-arm64": "0.26.0",
"@oxfmt/win32-x64": "0.26.0"
}
},
"node_modules/oxfmt/node_modules/tinypool": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.0.0.tgz",
"integrity": "sha512-/RX9RzeH2xU5ADE7n2Ykvmi9ED3FBGPAjw9u3zucrNNaEBIO0HPSYgL0NT7+3p147ojeSdaVu08F6hjpv31HJg==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^20.0.0 || >=22.0.0"
}
},
"node_modules/oxlint": {
"version": "1.41.0",
"resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.41.0.tgz",
......@@ -18500,6 +18704,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
......@@ -18686,6 +18891,7 @@
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
......@@ -18701,6 +18907,7 @@
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
},
......@@ -18939,7 +19146,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz",
"integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
......@@ -18949,7 +19155,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz",
"integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==",
"license": "MIT",
"peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
......@@ -18978,7 +19183,8 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/react-konva": {
"version": "19.2.1",
......@@ -19704,7 +19910,6 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz",
"integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
......@@ -19893,7 +20098,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
......@@ -20034,7 +20238,6 @@
"resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz",
"integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
}
......@@ -20147,6 +20350,7 @@
"hasInstallScript": true,
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"color": "^4.2.3",
"detect-libc": "^2.0.4",
......@@ -20539,6 +20743,7 @@
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"is-arrayish": "^0.3.1"
}
......@@ -20548,7 +20753,8 @@
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
"license": "MIT",
"optional": true
"optional": true,
"peer": true
},
"node_modules/sirv": {
"version": "3.0.2",
......@@ -21187,6 +21393,7 @@
"resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
"integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
"license": "MIT",
"peer": true,
"dependencies": {
"client-only": "0.0.1"
},
......@@ -21264,8 +21471,7 @@
"version": "4.1.13",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz",
"integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==",
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/tapable": {
"version": "2.3.0",
......@@ -21921,7 +22127,6 @@
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
......@@ -22416,7 +22621,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz",
"integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==",
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.43",
......@@ -22948,7 +23152,6 @@
"integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/chai": "^5.2.2",
"@vitest/expect": "3.2.4",
......@@ -23564,7 +23767,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
......
{
"name": "dyad",
"productName": "dyad",
"version": "0.34.0-beta.1",
"description": "Free, local, open-source AI app builder",
"main": ".vite/build/main.js",
"keywords": [],
"license": "MIT",
"author": {
"name": "Will Chen",
"email": "willchen90@gmail.com"
},
"repository": {
"type": "git",
"url": "https://github.com/dyad-sh/dyad.git"
},
"engines": {
"node": ">=20"
},
"main": ".vite/build/main.js",
"scripts": {
"clean": "rimraf out scaffold/node_modules",
"start": "electron-forge start",
......@@ -28,9 +30,9 @@
"db:generate": "drizzle-kit generate",
"db:push": "drizzle-kit push",
"db:studio": "drizzle-kit studio",
"prettier:check": "npx prettier --check .",
"prettier": "npx prettier --write .",
"presubmit": "npm run prettier:check && npm run lint",
"fmt:check": "npx oxfmt --check",
"fmt": "npx oxfmt",
"presubmit": "npm run fmt:check && npm run lint",
"test": "vitest run",
"test:watch": "vitest",
"test:ui": "vitest --ui",
......@@ -40,52 +42,6 @@
"e2e": "playwright test",
"e2e:shard": "playwright test --shard"
},
"keywords": [],
"author": {
"name": "Will Chen",
"email": "willchen90@gmail.com"
},
"license": "MIT",
"devDependencies": {
"@electron-forge/cli": "^7.11.1",
"@electron-forge/maker-deb": "^7.11.1",
"@electron-forge/maker-rpm": "^7.11.1",
"@electron-forge/maker-squirrel": "^7.11.1",
"@electron-forge/maker-zip": "^7.11.1",
"@electron-forge/plugin-auto-unpack-natives": "^7.11.1",
"@electron-forge/plugin-fuses": "^7.11.1",
"@electron-forge/plugin-vite": "^7.11.1",
"@electron-forge/publisher-github": "^7.11.1",
"@electron/fuses": "^1.8.0",
"@playwright/test": "^1.52.0",
"@testing-library/react": "^16.3.0",
"@types/better-sqlite3": "^7.6.13",
"@types/fs-extra": "^11.0.4",
"@types/glob": "^8.1.0",
"@types/kill-port": "^2.0.3",
"@types/node": "^22.14.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"@typescript/native-preview": "^7.0.0-dev.20260107.1",
"@vitest/ui": "^3.1.1",
"babel-plugin-react-compiler": "^1.0.0",
"cross-env": "^7.0.3",
"drizzle-kit": "^0.30.6",
"electron": "40.0.0",
"eslint": "^8.57.1",
"eslint-plugin-import": "^2.31.0",
"happy-dom": "^17.4.4",
"husky": "^9.1.7",
"lint-staged": "^15.5.2",
"oxlint": "^1.41.0",
"prettier": "3.5.3",
"rimraf": "^6.0.1",
"typescript": "^5.8.3",
"vite": "^5.4.17",
"vitest": "^3.1.1"
},
"dependencies": {
"@ai-sdk/amazon-bedrock": "^4.0.9",
"@ai-sdk/anthropic": "^3.0.7",
......@@ -182,9 +138,53 @@
"uuid": "^11.1.0",
"zod": "^3.25.76"
},
"devDependencies": {
"@electron-forge/cli": "^7.11.1",
"@electron-forge/maker-deb": "^7.11.1",
"@electron-forge/maker-rpm": "^7.11.1",
"@electron-forge/maker-squirrel": "^7.11.1",
"@electron-forge/maker-zip": "^7.11.1",
"@electron-forge/plugin-auto-unpack-natives": "^7.11.1",
"@electron-forge/plugin-fuses": "^7.11.1",
"@electron-forge/plugin-vite": "^7.11.1",
"@electron-forge/publisher-github": "^7.11.1",
"@electron/fuses": "^1.8.0",
"@playwright/test": "^1.52.0",
"@testing-library/react": "^16.3.0",
"@types/better-sqlite3": "^7.6.13",
"@types/fs-extra": "^11.0.4",
"@types/glob": "^8.1.0",
"@types/kill-port": "^2.0.3",
"@types/node": "^22.14.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"@typescript/native-preview": "^7.0.0-dev.20260107.1",
"@vitest/ui": "^3.1.1",
"babel-plugin-react-compiler": "^1.0.0",
"cross-env": "^7.0.3",
"drizzle-kit": "^0.30.6",
"electron": "40.0.0",
"eslint": "^8.57.1",
"eslint-plugin-import": "^2.31.0",
"happy-dom": "^17.4.4",
"husky": "^9.1.7",
"lint-staged": "^15.5.2",
"oxfmt": "^0.26.0",
"oxlint": "^1.41.0",
"rimraf": "^6.0.1",
"typescript": "^5.8.3",
"vite": "^5.4.17",
"vitest": "^3.1.1"
},
"overrides": {
"@vercel/sdk": {
"@modelcontextprotocol/sdk": "$@modelcontextprotocol/sdk"
}
}
},
"engines": {
"node": ">=20"
},
"productName": "dyad"
}
......@@ -2,31 +2,31 @@
"name": "@dyad-sh/nextjs-webpack-component-tagger",
"version": "0.8.0",
"description": "A webpack loader that automatically adds data attributes to your React components in Next.js.",
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"type": "module",
"keywords": [
"dyad",
"nextjs",
"react",
"webpack",
"webpack-loader"
],
"license": "Apache-2.0",
"author": "Dyad",
"files": [
"dist"
],
"type": "module",
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"publishConfig": {
"access": "public"
},
"scripts": {
"build": "tsup src/index.ts --format cjs,esm --dts",
"dev": "npm run build -- --watch",
"lint": "eslint . --max-warnings 0",
"prepublishOnly": "npm run build"
},
"keywords": [
"webpack",
"webpack-loader",
"nextjs",
"react",
"dyad"
],
"author": "Dyad",
"license": "Apache-2.0",
"peerDependencies": {
"webpack": "^5.0.0"
},
"dependencies": {
"@babel/parser": "^7.23.0",
"estree-walker": "^2.0.2",
......@@ -39,7 +39,7 @@
"tsup": "^8.0.2",
"typescript": "^5.2.2"
},
"publishConfig": {
"access": "public"
"peerDependencies": {
"webpack": "^5.0.0"
}
}
......@@ -2,30 +2,30 @@
"name": "@dyad-sh/react-vite-component-tagger",
"version": "0.8.0",
"description": "A Vite plugin that automatically adds data attributes to your React components.",
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"type": "module",
"keywords": [
"dyad",
"react",
"vite",
"vite-plugin"
],
"license": "Apache-2.0",
"author": "Dyad",
"files": [
"dist"
],
"type": "module",
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"publishConfig": {
"access": "public"
},
"scripts": {
"build": "tsup src/index.ts --format cjs,esm --dts",
"dev": "npm run build -- --watch",
"lint": "eslint . --max-warnings 0",
"prepublishOnly": "npm run build"
},
"keywords": [
"vite",
"vite-plugin",
"react",
"dyad"
],
"author": "Dyad",
"license": "Apache-2.0",
"peerDependencies": {
"vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
},
"dependencies": {
"@babel/parser": "^7.23.0",
"estree-walker": "^2.0.2",
......@@ -38,7 +38,7 @@
"typescript": "^5.2.2",
"vite": "^5.0.0"
},
"publishConfig": {
"access": "public"
"peerDependencies": {
"vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
}
}
{
"name": "vite_react_shadcn_ts",
"private": true,
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
......
......@@ -24,7 +24,8 @@ const badgeVariants = cva(
);
export interface BadgeProps
extends React.HTMLAttributes<HTMLDivElement>,
extends
React.HTMLAttributes<HTMLDivElement>,
VariantProps<typeof badgeVariants> {}
function Badge({ className, variant, ...props }: BadgeProps) {
......
......@@ -34,7 +34,8 @@ const buttonVariants = cva(
);
export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
extends
React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
asChild?: boolean;
}
......
......@@ -48,7 +48,8 @@ const sheetVariants = cva(
);
interface SheetContentProps
extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
extends
React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
VariantProps<typeof sheetVariants> {}
const SheetContent = React.forwardRef<
......
......@@ -2,8 +2,7 @@ import * as React from "react";
import { cn } from "@/lib/utils";
export interface TextareaProps
extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
({ className, ...props }, ref) => {
......
......@@ -702,7 +702,9 @@ describe("processFullResponse", () => {
expect(fs.mkdirSync).toHaveBeenCalledWith(
"/mock/user/data/path/mock-app-path/src",
{ recursive: true },
{
recursive: true,
},
);
expect(fs.writeFileSync).toHaveBeenCalledWith(
"/mock/user/data/path/mock-app-path/src/file1.js",
......@@ -759,15 +761,21 @@ describe("processFullResponse", () => {
// Check that directories were created for each file path
expect(fs.mkdirSync).toHaveBeenCalledWith(
"/mock/user/data/path/mock-app-path/src",
{ recursive: true },
{
recursive: true,
},
);
expect(fs.mkdirSync).toHaveBeenCalledWith(
"/mock/user/data/path/mock-app-path/src/utils",
{ recursive: true },
{
recursive: true,
},
);
expect(fs.mkdirSync).toHaveBeenCalledWith(
"/mock/user/data/path/mock-app-path/src/components",
{ recursive: true },
{
recursive: true,
},
);
// Using toHaveBeenNthCalledWith to check each specific call
......@@ -824,7 +832,9 @@ describe("processFullResponse", () => {
expect(fs.mkdirSync).toHaveBeenCalledWith(
"/mock/user/data/path/mock-app-path/src/components",
{ recursive: true },
{
recursive: true,
},
);
expect(fs.renameSync).toHaveBeenCalledWith(
"/mock/user/data/path/mock-app-path/src/components/OldComponent.jsx",
......
......@@ -978,9 +978,8 @@ src/file2.ts
describe("hasExternalChanges", () => {
it("should default to true when no assistant message has commitHash", async () => {
const { getCurrentCommitHash, isGitStatusClean } = await import(
"@/ipc/utils/git_utils"
);
const { getCurrentCommitHash, isGitStatusClean } =
await import("@/ipc/utils/git_utils");
const mockGetCurrentCommitHash = vi.mocked(getCurrentCommitHash);
const mockIsGitStatusClean = vi.mocked(isGitStatusClean);
......@@ -1011,9 +1010,8 @@ src/file2.ts
});
it("should be false when latest assistant commit matches current and git status is clean", async () => {
const { getCurrentCommitHash, isGitStatusClean } = await import(
"@/ipc/utils/git_utils"
);
const { getCurrentCommitHash, isGitStatusClean } =
await import("@/ipc/utils/git_utils");
const mockGetCurrentCommitHash = vi.mocked(getCurrentCommitHash);
const mockIsGitStatusClean = vi.mocked(isGitStatusClean);
......@@ -1047,9 +1045,8 @@ src/file2.ts
});
it("should be true when latest assistant commit differs from current", async () => {
const { getCurrentCommitHash, isGitStatusClean } = await import(
"@/ipc/utils/git_utils"
);
const { getCurrentCommitHash, isGitStatusClean } =
await import("@/ipc/utils/git_utils");
const mockGetCurrentCommitHash = vi.mocked(getCurrentCommitHash);
const mockIsGitStatusClean = vi.mocked(isGitStatusClean);
......@@ -1083,9 +1080,8 @@ src/file2.ts
});
it("should be true when git status is dirty even if commits match", async () => {
const { getCurrentCommitHash, isGitStatusClean } = await import(
"@/ipc/utils/git_utils"
);
const { getCurrentCommitHash, isGitStatusClean } =
await import("@/ipc/utils/git_utils");
const mockGetCurrentCommitHash = vi.mocked(getCurrentCommitHash);
const mockIsGitStatusClean = vi.mocked(isGitStatusClean);
......
......@@ -155,9 +155,7 @@ function ExternalLink({
return (
<a
className={`${baseClasses} ${
variant === "primary" ? primaryClasses : secondaryClasses
}`}
className={`${baseClasses} ${variant === "primary" ? primaryClasses : secondaryClasses}`}
onClick={() => IpcClient.getInstance().openExternalUrl(href)}
>
<span>{children}</span>
......
......@@ -985,25 +985,19 @@ function ProposalSummary({
if (sqlQueries.length) {
parts.push(
`${sqlQueries.length} SQL ${
sqlQueries.length === 1 ? "query" : "queries"
}`,
`${sqlQueries.length} SQL ${sqlQueries.length === 1 ? "query" : "queries"}`,
);
}
if (serverFunctions.length) {
parts.push(
`${serverFunctions.length} Server ${
serverFunctions.length === 1 ? "Function" : "Functions"
}`,
`${serverFunctions.length} Server ${serverFunctions.length === 1 ? "Function" : "Functions"}`,
);
}
if (packagesAdded.length) {
parts.push(
`${packagesAdded.length} ${
packagesAdded.length === 1 ? "package" : "packages"
}`,
`${packagesAdded.length} ${packagesAdded.length === 1 ? "package" : "packages"}`,
);
}
......
......@@ -86,9 +86,7 @@ const ChatMessage = ({ message, isLastMessage }: ChatMessageProps) => {
return (
<div
className={`flex ${
message.role === "assistant" ? "justify-start" : "justify-end"
}`}
className={`flex ${message.role === "assistant" ? "justify-start" : "justify-end"}`}
>
<div className={`mt-2 w-full max-w-3xl mx-auto group`}>
<div
......
......@@ -124,9 +124,7 @@ const ErrorBanner = ({ error, onDismiss, onAIFix }: ErrorBannerProps) => {
>
<ChevronRight
size={14}
className={`mt-0.5 transform transition-transform ${
isCollapsed ? "" : "rotate-90"
}`}
className={`mt-0.5 transform transition-transform ${isCollapsed ? "" : "rotate-90"}`}
/>
{isCollapsed ? getTruncatedError() : error.message}
......@@ -561,9 +559,7 @@ export const PreviewIframe = ({ loading }: { loading: boolean }) => {
type === "iframe-sourcemapped-error"
? payload?.stack?.split("\n").slice(0, 1).join("\n")
: payload?.stack;
const errorMessage = `Error ${
payload?.message || payload?.reason
}\nStack trace: ${stack}`;
const errorMessage = `Error ${payload?.message || payload?.reason}\nStack trace: ${stack}`;
console.error("Iframe error:", errorMessage);
setErrorMessage({ message: errorMessage, source: "preview-app" });
const logEntry = {
......@@ -996,7 +992,7 @@ export const PreviewIframe = ({ loading }: { loading: boolean }) => {
}}
variant="outline"
>
{/* Tooltips placed inside items instead of wrapping
{/* Tooltips placed inside items instead of wrapping
to avoid asChild prop merging that breaks highlighting */}
<ToggleGroupItem value="desktop" aria-label="Desktop view">
<Tooltip>
......
......@@ -100,8 +100,8 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
| undefined;
const isVertexConfigured = Boolean(
vertexSettings?.projectId &&
vertexSettings?.location &&
vertexSettings?.serviceAccountKey?.value,
vertexSettings?.location &&
vertexSettings?.serviceAccountKey?.value,
);
const isAzureConfigured =
......
......@@ -66,9 +66,9 @@ export function VertexConfiguration() {
const isConfigured = Boolean(
(projectId.trim() && location && serviceAccountKey) ||
(existing.projectId &&
existing.location &&
existing.serviceAccountKey?.value),
(existing.projectId &&
existing.location &&
existing.serviceAccountKey?.value),
);
return (
......
......@@ -24,7 +24,8 @@ const badgeVariants = cva(
);
export interface BadgeProps
extends React.HTMLAttributes<HTMLDivElement>,
extends
React.HTMLAttributes<HTMLDivElement>,
VariantProps<typeof badgeVariants> {}
function Badge({ className, variant, ...props }: BadgeProps) {
......
......@@ -2,8 +2,7 @@ import * as React from "react";
import { cn } from "@/lib/utils";
export interface TextareaProps
extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
({ className, ...props }, ref) => {
......
......@@ -168,7 +168,9 @@ export const language_models = sqliteTable("language_models", {
builtinProviderId: text("builtin_provider_id"),
customProviderId: text("custom_provider_id").references(
() => language_model_providers.id,
{ onDelete: "cascade" },
{
onDelete: "cascade",
},
),
description: text("description"),
max_output_tokens: integer("max_output_tokens"),
......
......@@ -41,7 +41,7 @@ export function useLanguageModelProviders() {
const azureSettings = providerSettings as AzureProviderSetting;
const hasSavedSettings = Boolean(
(azureSettings?.apiKey?.value ?? "").trim() &&
(azureSettings?.resourceName ?? "").trim(),
(azureSettings?.resourceName ?? "").trim(),
);
if (hasSavedSettings) {
return true;
......
......@@ -8,10 +8,8 @@ export function useShortcut(
iframeRef?: React.RefObject<HTMLIFrameElement | null>,
): void {
useEffect(() => {
const isModifierActive = (
modKey: boolean | undefined,
eventKey: boolean,
) => (modKey ? eventKey : true);
const isModifierActive = (modKey: boolean | undefined, eventKey: boolean) =>
modKey ? eventKey : true;
const validateShortcut = (
eventKey: string,
......
......@@ -362,9 +362,7 @@ async function pollForAccessToken(event: IpcMainInvokeEvent) {
`Unknown GitHub error: ${data.error_description || data.error}`,
);
event.sender.send("github:flow-error", {
error: `GitHub authorization error: ${
data.error_description || data.error
}`,
error: `GitHub authorization error: ${data.error_description || data.error}`,
});
stopPolling();
break;
......
......@@ -298,9 +298,7 @@ const getProposalHandler = async (
const totalTokens = messagesTokenCount + codebaseTokenCount;
const contextWindow = Math.min(await getContextWindow(), 100_000);
logger.log(
`Token usage: ${totalTokens}/${contextWindow} (${
(totalTokens / contextWindow) * 100
}%)`,
`Token usage: ${totalTokens}/${contextWindow} (${(totalTokens / contextWindow) * 100}%)`,
);
// If we're using more than 80% of the context window, suggest summarizing
......
......@@ -559,8 +559,10 @@ export interface McpServer {
updatedAt: number;
}
export interface CreateMcpServer
extends Omit<McpServer, "id" | "createdAt" | "updatedAt"> {}
export interface CreateMcpServer extends Omit<
McpServer,
"id" | "createdAt" | "updatedAt"
> {}
export type McpServerUpdate = Partial<McpServer> & Pick<McpServer, "id">;
export type McpToolConsentType = "ask" | "always" | "denied";
......
......@@ -29,14 +29,10 @@ export async function executeAddDependency({
// Update the message content with the installation results
const updatedContent = message.content.replace(
new RegExp(
`<dyad-add-dependency packages="${packages.join(
" ",
)}">[^<]*</dyad-add-dependency>`,
`<dyad-add-dependency packages="${packages.join(" ")}">[^<]*</dyad-add-dependency>`,
"g",
),
`<dyad-add-dependency packages="${packages.join(
" ",
)}">${installResults}</dyad-add-dependency>`,
`<dyad-add-dependency packages="${packages.join(" ")}">${installResults}</dyad-add-dependency>`,
);
// Save the updated message back to the database
......
......@@ -224,9 +224,7 @@ export async function processFullResponseActions(
});
} catch (error) {
errors.push({
message: `Failed to add dependencies: ${dyadAddDependencyPackages.join(
", ",
)}`,
message: `Failed to add dependencies: ${dyadAddDependencyPackages.join(", ")}`,
error: error,
});
}
......@@ -573,9 +571,7 @@ export async function processFullResponseActions(
// Just log, but don't throw an error because the user can still
// commit these changes outside of Dyad if needed.
logger.error(
`Failed to commit changes outside of dyad: ${uncommittedFiles.join(
", ",
)}`,
`Failed to commit changes outside of dyad: ${uncommittedFiles.join(", ")}`,
);
extraFilesError = (error as any).toString();
}
......
......@@ -358,16 +358,16 @@ export function isSupabaseConnected(settings: UserSettings | null): boolean {
}
return Boolean(
settings.supabase?.accessToken ||
(settings.supabase?.organizations &&
Object.keys(settings.supabase.organizations).length > 0),
(settings.supabase?.organizations &&
Object.keys(settings.supabase.organizations).length > 0),
);
}
export function isTurboEditsV2Enabled(settings: UserSettings): boolean {
return Boolean(
isDyadProEnabled(settings) &&
settings.enableProLazyEditsMode === true &&
settings.proLazyEditsMode === "v2",
settings.enableProLazyEditsMode === true &&
settings.proLazyEditsMode === "v2",
);
}
......
{
"name": "fake-llm-server",
"version": "1.0.0",
"description": "Fake OpenAI API server for testing",
"keywords": [],
"license": "ISC",
"author": "",
"main": "dist/index.js",
"scripts": {
"build": "tsc",
......@@ -8,10 +12,6 @@
"dev": "ts-node index.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "Fake OpenAI API server for testing",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.18.2",
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论