Skip to content

feat: use oxlint and prettier #19

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 25, 2025
Merged

feat: use oxlint and prettier #19

merged 4 commits into from
Mar 25, 2025

Conversation

fengmk2
Copy link
Member

@fengmk2 fengmk2 commented Mar 24, 2025

Summary by CodeRabbit

  • New Features
    • Enabled automated code quality checks during commits.
    • Introduced new linting and formatting configurations for consistent styling.
  • Chores
    • Removed outdated linting configurations.
    • Updated dependency versions and build scripts.
  • Refactor
    • Enhanced error handling, type safety, and default behaviors for improved stability.
    • Streamlined code style and organization.
  • Tests
    • Revised test cases with stricter assertions and clearer syntax for increased reliability.
    • Improved readability of assertions and structured formatting in test cases.

@fengmk2 fengmk2 requested a review from Copilot March 24, 2025 13:46
Copy link

coderabbitai bot commented Mar 24, 2025

Walkthrough

The pull request removes the ESLint configuration file and adds new configuration files for linting and code formatting. The pre-commit hook has been updated to execute linting via npx lint-staged. Multiple source files have been refactored with improved type annotations, error handling, and import/export statements. Updates in package.json add new dependencies and adjust scripts, while numerous test files receive changes for stricter assertions, improved readability, and syntax refinements.

Changes

File(s) Change Summary
Configuration Files
.eslintrc
.husky/pre-commit
.oxlintrc.json
.prettierrc
.prettierignore
tsconfig.json
Removed ESLint config (.eslintrc); Added pre-commit hook command (npx lint-staged); Introduced new linting and formatting configs; Removed several strict compiler options in tsconfig.
Example Files
example/extend/middleware.ts
example/helloworld.cjs
Updated import statement to use the type keyword in middleware; Removed ESLint disable comment in hello world file.
Package File
package.json
Updated lint script (switched to oxlint), added a prepare script for husky, introduced new dependencies (e.g., husky, lint-staged, oxlint, prettier) and updated dependency versions.
Source Files
src/application.ts
src/context.ts
src/index.ts
src/request.ts
src/response.ts
src/types.ts
Refined type annotations and method signatures; Improved error handling (e.g., using replaceAll, explicit null checks); Adjusted import/export declarations; Changed AnyProto from type alias to interface; Extended CustomError.
Test Files
test/application.test-d.ts
test/application/index.test.ts
test/application/respond.test.ts
test/context/cookies.test.ts
test/request/accepts.test.ts
test/request/acceptsCharsets.test.ts
test/request/charset.test.ts
test/request/query.test.ts
test/response/attachment.test.ts
test/response/body.test.ts
test/response/flushHeaders.test.ts
test/response/header.test.ts
test/response/redirect.test.ts
test/test-helpers/context.ts
Changed imports to type-only where applicable; Updated assertions and error messages; Reformatted numeric literals and syntax (using spread instead of Object.assign, replacing regex with string methods); Enhanced clarity in cookie, query, and header handling.

Sequence Diagram(s)

sequenceDiagram
    participant Dev as Developer
    participant Git as Git Commit
    participant Husky as Husky Pre-commit Hook
    participant Lint as lint-staged
    participant Formatter as Prettier/oxlint

    Dev->>Git: Initiate Commit
    Git->>Husky: Trigger pre-commit hook
    Husky->>Lint: Execute "npx lint-staged"
    Lint->>Formatter: Run formatting and linting checks on staged files
    Formatter-->>Lint: Return results
    Lint-->>Husky: Pass validation results
    Husky-->>Git: Allow commit if checks pass
Loading

Poem

In a field of code, I hop along,
Trimming lint and syntax, keeping it strong.
Configs and hooks now dance in tune,
Type checks and tests brighten the afternoon.
With each refactor, my spirit sings a song,
Hoppy coding—where clean code belongs! 🐇

Possibly related PRs

  • fix: let MiddlewareFunc can extend by custom Context interface #13: The changes in the main PR, which involve the removal of the .eslintrc file and the introduction of new linting configurations, are related to the modifications in the retrieved PR that enhance the MiddlewareFunc type to allow for custom context interfaces, as both PRs focus on improving type safety and linting practices within the codebase.
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai plan to trigger planning for file edits and PR creation.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

socket-security bot commented Mar 24, 2025

New and updated dependencies detected. Learn more about Socket for GitHub ↗︎

Package New capabilities Transitives Size Publisher
npm/@eggjs/[email protected]2.0.0 None 0 4.54 kB fengmk2
npm/[email protected] None 0 4.04 kB typicode
npm/[email protected] Transitive: environment, filesystem, shell +52 2.07 MB
npm/[email protected] None +8 123 MB boshen
npm/[email protected] None 0 0 B

View full report↗︎

Copy link

pkg-pr-new bot commented Mar 24, 2025

Open in Stackblitz

npm i https://pkg.pr.new/eggjs/koa/@eggjs/koa@19

commit: 2d79370

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link

codecov bot commented Mar 24, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 98.43%. Comparing base (ce79a68) to head (2d79370).
Report is 2 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master      #19      +/-   ##
==========================================
+ Coverage   98.35%   98.43%   +0.07%     
==========================================
  Files           6        5       -1     
  Lines        1946     2042      +96     
  Branches      373      380       +7     
==========================================
+ Hits         1914     2010      +96     
  Misses         32       32              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (4)
example/extend/middleware.ts (1)

1-15: Enhanced Type Import
The update to import MiddlewareFunc using the type keyword improves type clarification and may aid tree shaking. The rest of the middleware implementation is clear. Optionally, consider adding explicit return types for your async functions for even better type safety.

.husky/pre-commit (1)

1-2: Shebang Missing in Pre-commit Hook
It is recommended to add a shebang (e.g., #!/bin/sh) at the top of this file to ensure the script executes consistently across different environments.

+#!/bin/sh
 npx lint-staged
.oxlintrc.json (2)

26-26: Consider using block comments for sections

Line comments with // might cause issues with some JSON parsers. While oxlint supports them, using block comments (/* */) is generally safer for JSON with comments.

🧰 Tools
🪛 Biome (1.9.4)

[error] 26-26: Expected a property but instead found '// eslint'.

Expected a property here.

(parse)


99-99: Remove commented out rule

There's a commented-out duplicate unicorn rule on line 99 that should be removed to avoid confusion.

-    // "unicorn/no-null": "error",
🧰 Tools
🪛 Biome (1.9.4)

[error] 98-99: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0e590fe and 2f76e03.

📒 Files selected for processing (29)
  • .eslintrc (0 hunks)
  • .husky/pre-commit (1 hunks)
  • .oxlintrc.json (1 hunks)
  • .prettierignore (1 hunks)
  • .prettierrc (1 hunks)
  • example/extend/middleware.ts (1 hunks)
  • example/helloworld.cjs (0 hunks)
  • package.json (4 hunks)
  • src/application.ts (8 hunks)
  • src/context.ts (8 hunks)
  • src/index.ts (1 hunks)
  • src/request.ts (12 hunks)
  • src/response.ts (11 hunks)
  • src/types.ts (1 hunks)
  • test/application.test-d.ts (1 hunks)
  • test/application/index.test.ts (3 hunks)
  • test/application/respond.test.ts (1 hunks)
  • test/context/cookies.test.ts (3 hunks)
  • test/request/accepts.test.ts (1 hunks)
  • test/request/acceptsCharsets.test.ts (4 hunks)
  • test/request/charset.test.ts (1 hunks)
  • test/request/query.test.ts (1 hunks)
  • test/response/attachment.test.ts (3 hunks)
  • test/response/body.test.ts (1 hunks)
  • test/response/flushHeaders.test.ts (1 hunks)
  • test/response/header.test.ts (1 hunks)
  • test/response/redirect.test.ts (2 hunks)
  • test/test-helpers/context.ts (1 hunks)
  • tsconfig.json (0 hunks)
💤 Files with no reviewable changes (3)
  • .eslintrc
  • example/helloworld.cjs
  • tsconfig.json
🧰 Additional context used
🧬 Code Definitions (4)
test/response/header.test.ts (3)
src/context.ts (1)
  • header (374-376)
src/response.ts (1)
  • header (46-48)
src/request.ts (2)
  • header (42-44)
  • header (50-52)
test/request/charset.test.ts (2)
test/test-helpers/context.ts (1)
  • request (28-30)
src/context.ts (1)
  • assert (83-94)
src/response.ts (2)
src/request.ts (1)
  • type (582-586)
src/context.ts (2)
  • type (472-474)
  • type (476-478)
src/context.ts (2)
src/application.ts (1)
  • Application (32-310)
src/response.ts (3)
  • status (62-64)
  • status (69-81)
  • headerSent (208-210)
🪛 Biome (1.9.4)
.oxlintrc.json

[error] 26-26: Expected a property but instead found '// eslint'.

Expected a property here.

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-70: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-81: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-90: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-99: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-116: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-123: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-138: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 141-141: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-145: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 145-146: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

🔇 Additional comments (82)
.prettierrc (1)

1-7: Prettier Configuration is Well-Defined
The new Prettier configuration correctly sets single quotes, trailing commas (compatible with ES5), tab width, and arrow function parentheses. This will help ensure consistent formatting across the project.

.prettierignore (1)

1-3: Prettier Ignore Configuration Looks Good
The file correctly instructs Prettier to ignore CHANGELOG.md and the __snapshots__ directory, which is useful for preventing undesired formatting changes on these files.

test/request/accepts.test.ts (1)

1-3: Consistent Import Style
The inserted blank line after the import assert from 'node:assert'; statement enhances readability and maintains consistency with other test files.

test/application/respond.test.ts (1)

7-7: Encoding format updated to canonical form

Changed from 'utf-8' to 'utf8' (without the dash) which is the canonical encoding format in Node.js. Both formats are functionally equivalent.

test/response/header.test.ts (1)

27-27: Modern syntax improvement

Changed from Object.assign({}, ctx.response.header) to use the spread operator { ...ctx.response.header }. This is a more concise syntax for creating a shallow copy of an object, while maintaining the same functionality.

test/response/flushHeaders.test.ts (1)

98-98: Improved numeric readability

Changed the timeout value from 10000 to 10_000 using numeric separators (ES2021 feature). This improves code readability while maintaining the exact same value.

test/request/query.test.ts (1)

8-8: More explicit assertion

Changed from assert(!Object.keys(ctx.query).length) to assert(Object.keys(ctx.query).length === 0). The new version explicitly checks that the length is zero rather than relying on falsy evaluation, making the test's intent clearer.

src/index.ts (1)

9-9: Improved type exports with explicit type imports

The change from wildcard exports to explicit type exports enhances the public API by making it clear which types are intended for external use. This change follows TypeScript best practices by being more selective with type exports.

test/response/body.test.ts (1)

82-82: Enhanced readability with numeric separator

The numeric separator _ in 10_000_000 improves code readability without changing functionality. This is a good practice when working with large numbers.

src/types.ts (2)

7-7: Added headerSent property to CustomError type

This addition improves error handling by allowing tracking of whether headers have been sent, which is useful for HTTP response handling.


10-13: Changed AnyProto from type to interface

Converting from type to interface makes the code more extensible for future additions. The oxlint-disable comment properly addresses the unavoidable use of any in this context.

test/context/cookies.test.ts (3)

25-25: Improved cookie validation with string method

Replacing regex with startsWith() improves both readability and performance. String methods are generally more efficient than regular expressions for simple pattern matching.


68-68: Improved cookie validation with string method

Using startsWith() instead of regex is more readable and efficient for this simple prefix check.


96-96: Improved cookie validation with string method

Consistently using startsWith() instead of regex for cookie prefix validation improves code consistency and readability across test cases.

test/request/acceptsCharsets.test.ts (4)

10-11: Good practice adding consistent linting comments.

These oxlint-disable comments are appropriate to suppress case sensitivity warnings for encoding identifiers while maintaining the existing test assertions.


22-23: LGTM - Consistent linting approach.

The oxlint-disable comment is correctly placed before the assertion containing encoding identifiers.


39-40: LGTM - Consistent linting suppression.

The linting comment follows the same pattern as other test cases.


49-50: LGTM - Proper linting exemption.

Consistent with the pattern used throughout the file.

test/application.test-d.ts (1)

2-3: Improved TypeScript imports by using type-only imports.

Changing to type-only imports is a good practice as these imports are only used for type checking and not at runtime, which can help with tree-shaking.

test/request/charset.test.ts (5)

1-2: Good update to import strict assert.

Using assert/strict is beneficial as it enforces stricter equality checks by default.


9-9: Improved assertion style.

Changed from inline assertion to explicit assert.equal method, which is more consistent with the project's assertion style.


17-17: Consistent assertion style applied.

Standardizing on assert.equal improves code readability and consistency.


25-26: Good practice with both linting and assertion changes.

The linting suppression addresses the encoding identifier case issue, while the assertion style change improves consistency.


32-32: Consistent assertion style applied.

This completes the standardization of using assert.equal throughout this test file.

test/response/attachment.test.ts (3)

1-2: Good update to import strict assert.

Using assert/strict ensures stricter equality checks by default.


56-58: Appropriate type assertion with linting suppression.

The use of as any with a corresponding linting suppression is appropriate here since you're testing for type validation in the function.


154-156: Consistent approach to type assertions.

Following the same pattern as earlier in the file with appropriate linting suppression.

test/test-helpers/context.ts (1)

6-7: Great modernization of object creation!

The change from Object.assign() to the spread operator (...) improves code readability and maintainability. This modern JavaScript approach is more concise while maintaining the same functionality.

.oxlintrc.json (1)

1-146:

❓ Verification inconclusive

Good addition of oxlint configuration

The comprehensive linting configuration establishes strong code quality standards for the project. This aligns well with the PR's objective of moving from ESLint to oxlint.

The Biome static analysis is reporting JSON parsing errors due to the comments in the file. However, these are false positives as oxlint supports JSON with comments. You can verify this works correctly by running:


🏁 Script executed:

#!/bin/bash
# Check if oxlint recognizes the config file correctly
npx oxlint --print-config

Length of output: 121


Action Required: Manually verify oxlint config processing

The oxlint configuration establishes robust linting standards and aligns well with the PR’s objective of transitioning from ESLint to oxlint. Note that the verification command failed due to the missing npx utility in the current environment. Please manually verify that oxlint correctly processes the configuration file (including support for JSON with comments) by running the appropriate command (e.g., ensuring the environment has npx or using an alternative method).

  • The configuration file appears complete and well-structured.
  • The npx oxlint --print-config execution failed with npx: command not found; thus, its output cannot confirm the correct parsing.
  • Please ensure that the environment used for verification has npx installed or run the equivalent command to view the processed configuration.
🧰 Tools
🪛 Biome (1.9.4)

[error] 26-26: Expected a property but instead found '// eslint'.

Expected a property here.

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-70: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-81: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-90: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-99: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-116: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-123: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-138: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 141-141: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-145: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 145-146: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

package.json (3)

17-20: Good update to use oxlint for linting

Replacing ESLint with oxlint in the scripts section aligns with the PR's objectives. Adding the husky prepare script ensures git hooks are installed properly.


22-27: Well-configured lint-staged setup

The lint-staged configuration properly sets up Prettier and oxlint to run on appropriate file types during the pre-commit phase, ensuring code quality standards are maintained.


44-44: Dependencies updated appropriately

The addition of type definitions for content-disposition, updating dependency versions, and adding new tooling dependencies (husky, lint-staged, oxlint, prettier) is well-aligned with the PR objectives.

Also applies to: 65-68, 85-88

test/response/redirect.test.ts (2)

16-16: Good use of String.raw for URL with backslash

Using String.raw for the URL with a backslash ensures the backslash is treated literally, which is important for URL handling in tests. This improves the clarity of the test's intention.


137-140: Improved string escaping with replaceAll

Replacing multiple replace() calls with replaceAll() makes the code more concise and readable. This is a good modernization that takes advantage of newer JavaScript features.

test/application/index.test.ts (9)

1-2: Improved import using node: protocol and strict assertions.

Using the node: protocol prefix for imports is a good practice as it ensures Node.js built-in modules are explicitly identified. The switch to assert/strict ensures all assertions use strict equality by default.


5-5: Better import of http-errors with named exports.

Importing both the default export and the named HttpError export provides better clarity about what's being used from the package.


65-65: Improved type safety with explicit type assertion.

The explicit type assertion makes it clear that you're intentionally setting the writable property to false for testing purposes.


68-70: More descriptive error message for writeHead.

The improved error message makes it clearer that the response has already been sent.


72-72: More descriptive error message for end.

Similar to the writeHead error message improvement, this makes debugging easier.


120-120: Simplified assertion for HttpError.

Changed from deepEqual to direct equality comparison which is more appropriate for this case since we're comparing references.


122-122: Updated error creation approach.

Using createHttpError instead of constructing with new follows the recommended API pattern of the http-errors package.


126-126: Fixed grammar in test description.

Minor improvement to test readability.


128-132: Enhanced type safety in context creation.

Added proper type assertions for the mock request and response objects, making the test more type-safe and explicit about the expected interface.

src/response.ts (12)

7-7: Improved type safety with specific type import.

Importing the Options type as ContentDispositionOptions makes the code more self-documenting and type-safe.


75-77: Enhanced status message handling.

The code now checks both HTTP version and the existence of status message before assignment, preventing potential undefined values.


78-80: Improved body null handling for empty status codes.

Explicitly setting the body to null when the status code indicates an empty response ensures consistent behavior.


87-87: Better fallback with nullish coalescing.

Using ?? instead of || ensures fallback only happens for null/undefined, not for all falsy values like empty strings.


116-123: More explicit null/undefined handling.

The updated code more clearly distinguishes between null and undefined, maintaining a flag for explicit null values.


152-159: Documented intentional loose equality.

Added a lint-disable comment to acknowledge the intentional use of loose equality, while making the null/undefined checks more explicit in the following lines.


161-164: Clearer content type setting for streams.

The content type setting is now wrapped in a conditional block, improving readability.


189-189: Improved parseInt usage.

Using Number.parseInt instead of the global parseInt is a better practice as it's more explicit about the source and avoids potential issues with global objects.


262-262: Enhanced type safety for options parameter.

Using the ContentDispositionOptions type instead of any provides better type checking and documentation.


308-313: Clearer initialization in is() method.

The refactored code initializes testTypes more explicitly and handles the condition more clearly.


397-409: Improved type safety and variable naming in set() method.

Changed parameter type from any[] to unknown[] for better type safety, and used consistent variable naming throughout the method.


427-430: Added explicit type and better variable naming in append().

The explicit type for prev improves type safety, and the more descriptive variable name adds clarity.

src/application.ts (5)

1-1: Consolidated util imports.

Combining the default and named imports from node:util reduces duplicate import statements.


206-209: Improved type safety in error handling.

The error handler now has a more specific type (CustomError instead of any), enhancing type safety.


218-218: Explicit error casting.

Added explicit casting to CustomError type when handling caught errors, ensuring consistent error handling.


247-249: Better string replacement in error logging.

Using replaceAll instead of replace with a global regex makes the intent clearer.


279-280: More explicit null/undefined checks.

Changed from loose equality (==) to explicit checks for both null and undefined using strict equality, which is clearer and more intentional.

src/request.ts (12)

35-35: Safer default for originalUrl.

Using nullish coalescing (??) ensures a fallback to '/' only when the URL is null or undefined.


75-75: Safer default for URL getter.

Similar to originalUrl, this ensures a valid URL string is always returned.


111-111: Default method value for robustness.

Providing a default 'GET' when method is missing improves robustness.


125-126: Safer path handling with optional chaining.

Using optional chaining and nullish coalescing prevents errors when parsing fails.


131-139: Improved path setter with null checks.

Added an early return if the URL can't be parsed, preventing potential errors.


172-172: Safer querystring getter.

Using optional chaining and nullish coalescing ensures the method won't throw when the URL can't be parsed.


178-186: Improved querystring setter.

Similar to the path setter, this now includes a null check to prevent errors.


193-196: Cleaner search getter implementation.

The refactored implementation is more readable by storing the intermediate result.


329-329: Better parseInt usage.

As in other parts of the codebase, using Number.parseInt is clearer than the global parseInt.


474-478: Improved method signature for accepts().

The overloaded signatures provide better type checking while maintaining the same functionality.


571-576: Clearer initialization in is() method.

Similar to the response.ts change, this makes the code more readable by initializing the array first and then conditionally filling it.


652-652: More explicit empty string filtering.

Replaced implicit Boolean conversion with an explicit length check for better readability.

src/context.ts (10)

3-4: Good use of import type for type-only imports.

The change to use import type for ParsedUrlQuery and Accepts follows TypeScript best practices. Type-only imports improve tree-shaking during compilation, potentially reducing bundle size.

Also applies to: 8-9


32-32: Improved initialization with nullish coalescing operator.

The use of ?? operator for this.originalUrl adds robustness by providing a default value when req.url is null or undefined, preventing potential runtime errors.

Also applies to: 35-35


81-83: Enhanced type safety using unknown instead of any.

Replacing any with unknown in the assert method parameters is a significant type safety improvement. The unknown type forces explicit type checking before operations, unlike any which bypasses type checks.


133-134: Appropriate use of linter directive.

The oxlint-disable-next-line comment is correctly applied to suppress warnings for intentional use of any type in this specific context.


173-174: Improved error handling clarity.

Separating the assignments to headerSent and err.headerSent improves code readability.


190-192: Modern JavaScript syntax with for...of loop.

The change from a likely forEach to a for...of loop is a good modernization that maintains the same functionality while using more idiomatic JavaScript.


195-197: Better conditional statement structure with curly braces.

Adding curly braces to if statements improves code readability and prevents potential bugs when statements are added to the blocks in the future.

Also applies to: 205-207, 210-212, 217-218


251-251: Improved type casting for accept methods.

Explicit type casting to string instead of any improves type safety while maintaining the required functionality.

Also applies to: 258-258, 265-265


268-271: Clearer method signature for the accepts method.

The updated signature more clearly communicates that the method can accept either a string or an array of strings, improving API clarity and type safety.


454-455: Appropriate suppression of linting rules for body getter/setter.

The oxlint-disable-next-line directives are correctly applied to suppress warnings for the intentional use of any type, which is necessary for flexibility in handling various body types.

Also applies to: 459-460

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🔭 Outside diff range comments (1)
.oxlintrc.json (1)

1-149: 💡 Verification agent

❓ Verification inconclusive

Overall Configuration and Static Analysis Compatibility
This new configuration is comprehensive and aligns with your move from ESLint to oxlint (in tandem with prettier). However, the static analysis issues reported (e.g., repeated "End of file expected" errors) point to problems with using inline comments in a file that is expected to be strictly JSON. To ensure smooth integration across your toolchain, consider either converting the file to a JSONC format (renaming it accordingly) or refactoring the inline comments into JSON-compatible properties.


Update .oxlintrc.json Inline Comment Practices

The current configuration introduces inline comments—which aren’t valid in strict JSON—leading to static analysis errors (such as the “End of file expected” issue). To resolve this, please consider one of the following:

  • Rename the file to use a JSONC extension (e.g., .oxlintrc.jsonc) if you wish to retain the comments.
  • Remove the inline comments and adjust the configuration as needed to comply with strict JSON syntax.

This adjustment will help ensure smoother integration with your toolchain, especially during the migration from ESLint to oxlint alongside prettier.

🧰 Tools
🪛 Biome (1.9.4)

[error] 26-26: Expected a property but instead found '// eslint'.

Expected a property here.

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-70: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-81: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-90: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-99: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-116: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-123: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-138: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 141-141: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-147: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 147-148: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

🧹 Nitpick comments (6)
.oxlintrc.json (1)

92-99: Clarify Conflicting Rule for unicorn/no-null
Notice that "unicorn/no-null" is set to "allow" on line 92, while there is a commented-out alternative (// "unicorn/no-null": "error",) on line 99. To avoid potential confusion in the future, it is advisable to remove the commented-out entry if the intended configuration is indeed "allow".

🧰 Tools
🪛 Biome (1.9.4)

[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-99: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

test/context/toJSON.test.ts (1)

15-16: Lint suppression for JSON serialization

The comment disables the oxlint rule that would otherwise suggest using structuredClone() instead of JSON.parse(JSON.stringify()).

Note: Consider replacing this pattern with structuredClone() in a future update if browser compatibility allows, as it's more efficient and handles more data types.

test/request/inspect.test.ts (1)

11-11: Improved type casting pattern

Replacing direct type casting with as unknown as { req: unknown } follows TypeScript best practices by using unknown as an intermediate type, making the code more type-safe.

However, Biome flagged a performance concern with the delete operator. Consider:

-delete (request as unknown as { req: unknown }).req;
+(request as unknown as { req: unknown }).req = undefined;
🧰 Tools
🪛 Biome (1.9.4)

[error] 11-11: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)

test/request/whatwg-url.test.ts (1)

21-21: Consider maintaining strict assertion consistency.

While switching from assert.deepStrictEqual to assert.deepEqual works with the strict assert module, it's slightly inconsistent with the pattern in other files where strict equality is preferred.

-assert.deepEqual(req.URL, Object.create(null));
+assert.deepStrictEqual(req.URL, Object.create(null));
test/context/throw.test.ts (1)

45-49: Inconsistent assertion style.

Some assertions have been changed to use assert.equal while others still use assert.strictEqual. For consistency with the changes in other files, consider standardizing on assert.equal.

-      assert.strictEqual(err.status, 422);
-      assert.strictEqual(err.message, 'test');
-      assert.strictEqual(err.expose, true);
+      assert.equal(err.status, 422);
+      assert.equal(err.message, 'test');
+      assert.equal(err.expose, true);

Also applies to: 61-65, 75-80, 90-95, 105-111, 121-126, 150-155, 167-172, 184-190, 201-207, 217-223, 233-239

test/response/redirect.test.ts (1)

145-148: Rename the escape function to avoid shadowing global property

The escape function shadows the global escape property, which can lead to confusion.

Consider renaming this function to be more specific, like escapeHtml:

-function escape(html: string) {
+function escapeHtml(html: string) {
   return String(html)
     .replaceAll('&', '&amp;')
     .replaceAll('"', '&quot;')
     .replaceAll('<', '&lt;')
     .replaceAll('>', '&gt;');
}

Also update any references to this function in the code.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2f76e03 and 4957cc9.

📒 Files selected for processing (30)
  • .oxlintrc.json (1 hunks)
  • src/application.ts (10 hunks)
  • test/application.test-d.ts (1 hunks)
  • test/application/context.test.ts (3 hunks)
  • test/application/currentContext.test.ts (3 hunks)
  • test/application/onerror.test.ts (3 hunks)
  • test/application/respond.test.ts (39 hunks)
  • test/application/use.test.ts (5 hunks)
  • test/context/cookies.test.ts (4 hunks)
  • test/context/onerror.test.ts (12 hunks)
  • test/context/state.test.ts (2 hunks)
  • test/context/throw.test.ts (16 hunks)
  • test/context/toJSON.test.ts (2 hunks)
  • test/request/idempotent.test.ts (2 hunks)
  • test/request/inspect.test.ts (2 hunks)
  • test/request/ip.test.ts (3 hunks)
  • test/request/protocol.test.ts (2 hunks)
  • test/request/querystring.test.ts (2 hunks)
  • test/request/secure.test.ts (1 hunks)
  • test/request/whatwg-url.test.ts (1 hunks)
  • test/response/attachment.test.ts (4 hunks)
  • test/response/flushHeaders.test.ts (8 hunks)
  • test/response/header.test.ts (3 hunks)
  • test/response/headers.test.ts (1 hunks)
  • test/response/inspect.test.ts (2 hunks)
  • test/response/message.test.ts (2 hunks)
  • test/response/redirect.test.ts (7 hunks)
  • test/response/status.test.ts (4 hunks)
  • test/response/writable.test.ts (4 hunks)
  • test/test-helpers/context.ts (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (8)
  • test/response/header.test.ts
  • test/context/cookies.test.ts
  • test/response/flushHeaders.test.ts
  • test/application.test-d.ts
  • test/response/attachment.test.ts
  • test/application/respond.test.ts
  • test/test-helpers/context.ts
  • src/application.ts
🧰 Additional context used
🧬 Code Definitions (14)
test/response/inspect.test.ts (5)
test/test-helpers/context.ts (1)
  • response (35-37)
src/context.ts (2)
  • assert (83-94)
  • util (49-51)
src/application.ts (1)
  • util (155-157)
src/response.ts (1)
  • util (477-479)
src/request.ts (1)
  • util (627-629)
test/request/querystring.test.ts (3)
test/test-helpers/context.ts (1)
  • context (6-29)
src/context.ts (2)
  • url (330-332)
  • url (334-336)
src/request.ts (2)
  • url (74-76)
  • url (82-84)
test/request/idempotent.test.ts (3)
src/request.ts (2)
  • method (110-112)
  • method (117-119)
src/context.ts (3)
  • method (306-308)
  • method (310-312)
  • assert (83-94)
test/test-helpers/context.ts (1)
  • request (31-33)
test/request/secure.test.ts (2)
test/test-helpers/context.ts (1)
  • request (31-33)
src/context.ts (1)
  • assert (83-94)
test/context/state.test.ts (2)
src/context.ts (1)
  • assert (83-94)
test/test-helpers/context.ts (1)
  • request (31-33)
test/response/message.test.ts (2)
test/test-helpers/context.ts (1)
  • response (35-37)
src/context.ts (1)
  • assert (83-94)
test/response/headers.test.ts (2)
test/test-helpers/context.ts (1)
  • response (35-37)
src/context.ts (1)
  • assert (83-94)
test/context/throw.test.ts (1)
src/context.ts (1)
  • assert (83-94)
test/request/protocol.test.ts (2)
test/test-helpers/context.ts (1)
  • request (31-33)
src/context.ts (1)
  • assert (83-94)
test/application/onerror.test.ts (1)
src/context.ts (1)
  • assert (83-94)
test/application/currentContext.test.ts (2)
src/context.ts (1)
  • assert (83-94)
test/test-helpers/context.ts (1)
  • request (31-33)
test/response/writable.test.ts (2)
src/context.ts (1)
  • assert (83-94)
test/test-helpers/context.ts (1)
  • request (31-33)
test/request/whatwg-url.test.ts (2)
src/context.ts (1)
  • assert (83-94)
test/test-helpers/context.ts (1)
  • request (31-33)
test/application/use.test.ts (3)
test/test-helpers/context.ts (1)
  • request (31-33)
src/context.ts (1)
  • assert (83-94)
src/application.ts (1)
  • MiddlewareFunc (26-28)
🪛 Biome (1.9.4)
test/response/inspect.test.ts

[error] 12-12: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)

test/request/inspect.test.ts

[error] 11-11: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)

.oxlintrc.json

[error] 26-26: Expected a property but instead found '// eslint'.

Expected a property here.

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 27-27: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 43-43: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 47-47: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 60-60: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-70: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 71-71: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-81: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 82-82: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 83-83: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 84-84: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 85-85: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 86-86: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 87-87: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-88: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 88-90: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 91-91: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 92-92: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 93-93: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 94-94: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 95-95: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 96-96: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 97-97: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-98: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 98-99: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 100-100: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 101-101: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 102-102: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 103-103: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 104-104: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 105-105: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 106-106: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 107-107: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 108-108: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 109-109: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 110-110: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 111-111: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 112-112: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 113-113: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-114: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 114-116: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 117-117: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 118-118: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 119-119: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 120-120: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-121: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 121-123: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 124-124: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 125-125: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 126-126: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 127-127: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 128-128: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 129-129: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 130-130: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 131-131: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 132-132: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 133-133: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 134-134: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 135-135: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-136: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 136-138: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 139-139: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 140-140: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 141-141: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-147: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 147-148: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

test/response/redirect.test.ts

[error] 143-143: Do not shadow the global "escape" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Node.js / Test (windows-latest, 22)
  • GitHub Check: Node.js / Test (windows-latest, 18.19.0)
🔇 Additional comments (86)
.oxlintrc.json (4)

1-6: Environment and Schema Configuration Verification
The $schema property and the environment settings (node: true, mocha: true) are correctly specified. This ensures that your configuration is aligned with the required oxlint schema and the target runtime/testing environment.


7-15: Categories Block Inspection
The “categories” object is neatly defined with each linting category set to "error". This enforces a strict policy on issues like correctness and performance. Just verify that these severity levels match your team’s coding standards.


16-24: Plugins Configuration Overview
The plugins array lists a comprehensive set of tools (e.g., "import", "typescript", "unicorn", "jsdoc", "node", "promise", "oxc") that should enhance your linting capabilities. Make sure these plugins are installed and kept in sync with your package manager configuration.


142-147: Ignore Patterns Configuration
The ignorePatterns array is appropriately configured to exclude files and directories (such as test fixtures, snapshots, and example files) from linting. This should help in focusing the linting process on your main source files.

🧰 Tools
🪛 Biome (1.9.4)

[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-142: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 142-147: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

test/response/inspect.test.ts (2)

2-2: Standardizing imports to use strict assertions.

The change to import from 'node:assert/strict' aligns with modern Node.js practices for stricter type checking and more predictable behavior in tests.


13-14:

❓ Verification inconclusive

Note the method change from deepStrictEqual to deepEqual.

While the import is now from 'node:assert/strict', the assertion methods have been changed from strict variants to non-strict ones. This seems counterintuitive but may be intentional as part of the linting standards.

Is this pattern consistent across the codebase? Let's check:

Also applies to: 32-33


🏁 Script executed:

#!/bin/bash
# Check for consistent use of assertion methods
rg -t ts "assert\.deepEqual" --glob="test/**/*.ts" | wc -l
rg -t ts "assert\.deepStrictEqual" --glob="test/**/*.ts" | wc -l

Length of output: 133


Action: Verify Consistency of Assertion Methods

The change from using strict assertions (i.e., deepStrictEqual) to non-strict ones (i.e., deepEqual) in test/response/inspect.test.ts on lines 13–14 (and similarly on lines 32–33) stands out. A quick search shows there are 21 occurrences of assert.deepEqual compared to 34 of assert.deepStrictEqual across the test files. This imbalance suggests that the bulk of tests still rely on the strict variant.

Please double-check that the intentional use of non-strict methods in these specific test cases is aligned with your linting or design standards. If this change was made deliberately for those tests, ensure that its rationale is documented; otherwise, consider standardizing the assertion methods across the codebase.

test/request/secure.test.ts (3)

1-1: Consistent use of strict assertion imports.

Switching to 'node:assert/strict' ensures consistent usage across test files and aligns with modern Node.js practices.


8-9: Improved type handling with explicit error suppression.

The addition of @ts-expect-error provides better documentation than using type assertions, making it clear this is an intentional testing technique rather than a type issue.


10-10:

❓ Verification inconclusive

Changed assertion method from strictEqual to equal.

While importing from 'node:assert/strict', the code now uses the less strict equal method. This is part of the PR's pattern, but worth noting that equal allows type coercion whereas strictEqual does not.

Is this a consistent pattern as part of the linting standards? Let's check:


🏁 Script executed:

#!/bin/bash
# Check for consistency in assertion method usage
rg -t ts "assert\.equal\(" --glob="test/**/*.ts" | wc -l
rg -t ts "assert\.strictEqual\(" --glob="test/**/*.ts" | wc -l

Length of output: 131


Action: Verify consistency of assertion methods

Our investigation shows that across the test suite there are 313 instances of assert.strictEqual versus 145 of assert.equal, indicating that the stricter assertion is used significantly more often. If the change in test/request/secure.test.ts—switching from strictEqual to equal—is intentional (to allow type coercion in specific cases), please ensure this is clearly documented and aligned with our linting and testing standards. Otherwise, consider reverting to assert.strictEqual for consistency with the majority of tests.

test/response/headers.test.ts (3)

1-1: Standardizing assertion imports.

Changing to 'node:assert/strict' is consistent with the changes across other test files in this PR.


15-16: Better TypeScript practices with explicit error suppression.

The addition of @ts-expect-error with a comment explaining its purpose provides better documentation than relying on any type assertions. This makes the testing intent clearer.


9-9: Consistent assertion method changes.

Changing from deepStrictEqual to deepEqual follows the pattern seen in other files in this PR. While using non-strict assertions after importing from 'node:assert/strict' seems paradoxical, it appears to be a deliberate choice for this codebase.

Also applies to: 17-17

test/request/querystring.test.ts (3)

1-1: Standardized strict assertion import.

The change to import from 'node:assert/strict' is consistent with the pattern across the PR and follows modern Node.js practices.


16-17: Improved type safety with explicit error suppression.

Adding the @ts-expect-error comment with context enhances code clarity by documenting why this code intentionally breaks type safety for testing purposes.


10-10:

✅ Verification successful

Consistent assertion method changes throughout.

All strictEqual assertions have been changed to equal throughout the file. This is consistent with the pattern in other files and appears to be a deliberate standardization choice in this PR.

Let's check if this is part of a broader change across the codebase:

Also applies to: 18-18, 27-28, 34-37, 43-45, 52-52


🏁 Script executed:

#!/bin/bash
# Get statistics about assertion method usage before and after changes
echo "Files using equal vs strictEqual:"
rg -l "assert\.equal\(" --glob="test/**/*.ts" | wc -l
rg -l "assert\.strictEqual\(" --glob="test/**/*.ts" | wc -l

echo "Total assertion count:"
rg "assert\.equal\(" --glob="test/**/*.ts" | wc -l
rg "assert\.strictEqual\(" --glob="test/**/*.ts" | wc -l

Length of output: 375


Assertion Method Standardization Confirmed in test/request/querystring.test.ts
The changes in this file—updating all assertions from assert.strictEqual to assert.equal at line 10 (as well as at lines 18, 27–28, 34–37, 43–45, and 52)—are correctly implemented and consistent with the intended pattern for these tests. Verification shows that while this file now exclusively uses assert.equal, broader searches in the repository still reveal many instances of assert.strictEqual (313 total assertions in 38 files versus 145 assertions using assert.equal in 18 files). If the PR’s goal is to standardize assertion methods globally, additional updates outside this file might be necessary; otherwise, the changes here are sound and deliberate.

test/request/ip.test.ts (3)

1-3: Good migration to strict assertions

The switch to node:assert/strict aligns with modern Node.js practices and provides better type checking for assertions, which helps catch potential issues earlier.


11-14: Improved type annotations for request object

Using Record<string, string> for headers provides better type safety than implicit typing, making the test more robust.


17-18: Better type casting pattern

Replacing as any with as unknown as { remoteAddress: string } is a safer approach to type casting that follows TypeScript best practices. Using unknown as an intermediate step forces explicit casting and makes the intent clearer.

test/context/toJSON.test.ts (2)

1-2: Good migration to strict assertions

The switch to node:assert/strict aligns with modern Node.js practices and provides better type checking.


20-29: Standardized assertion method

Changed from deepStrictEqual to deepEqual. This is functionally equivalent when using node:assert/strict since both perform strict equality checks, but helps standardize the assertion style across the codebase.

test/request/protocol.test.ts (3)

1-2: Good migration to strict assertions

The switch to node:assert/strict aligns with modern Node.js practices and provides better type checking.


9-11: Improved type safety with explicit error annotations

Adding @ts-expect-error comments clearly indicates where TypeScript errors are expected and intentional for testing purposes, which is better than silently casting to any to bypass type checking.


11-11: Standardized assertion method

Changed from strictEqual to equal. When using node:assert/strict, both perform strict equality checks, providing consistency without changing behavior.

test/request/inspect.test.ts (2)

1-3: Good migration to strict assertions

The switch to node:assert/strict aligns with modern Node.js practices and provides better type checking.


31-32: Standardized assertion method

Changed from deepStrictEqual to deepEqual. When using node:assert/strict, both perform strict equality checks, providing consistency without changing behavior.

test/application/currentContext.test.ts (5)

1-1: Switching to strict assertions is a good practice.

The change from using regular assert to assert/strict ensures stricter equality checks, which helps catch subtle bugs caused by type coercion.


11-12: Improved assertion clarity with assert.equal.

Changing from assert(ctx === app.currentContext) to assert.equal(ctx, app.currentContext) improves readability and provides better error messages on test failures.

Also applies to: 16-17, 22-23, 24-25, 28-29


13-14: Good use of lint directives for Promise constructor.

The added oxlint-disable-next-line promise/avoid-new comments are appropriate since these specific cases require direct Promise construction for testing asynchronous behavior.

Also applies to: 20-21, 55-56


34-36: Improved assertion for undefined checks.

Changing from assert(app.currentContext === undefined) to assert.equal(app.currentContext, undefined) improves test readability and failure messages.


59-60: Improved error handling assertion clarity.

Using assert.equal for error message and context assertions makes the test expectations clearer and provides better error messages when tests fail.

test/request/idempotent.test.ts (3)

1-2: Switching to strict assertions is a good practice.

The change from using regular assert to assert/strict ensures stricter equality checks, which helps catch subtle bugs caused by type coercion.


8-19: Improved test structure with direct iteration.

Changing from forEach with a separate function to an inline for...of loop simplifies the code and makes it more readable. This is a modern JavaScript pattern that improves maintainability.


18-18: Consistent assertion style with assert.equal.

Changing from assert.strictEqual to assert.equal while using the strict assertion module maintains the same functionality but provides a more consistent style throughout the codebase.

Also applies to: 27-27

test/request/whatwg-url.test.ts (2)

1-2: Switching to strict assertions is a good practice.

The change from using regular assert to assert/strict ensures stricter equality checks, which helps catch subtle bugs caused by type coercion.


8-8: Improved test explicitness with assert().

Making the assertions explicit with assert(request().URL) and assert(req.URL) clarifies that these tests are checking for the truthiness of the URL property, not just accessing it.

Also applies to: 15-15

test/context/throw.test.ts (3)

1-4: Improved type safety with HttpError import.

Adding the explicit HttpError type import and using strict assertions enhances type safety and test reliability.


13-17: Enhanced error type safety in catch blocks.

Changing from using err: any to e as HttpError improves type safety and makes the code more robust. The variable rename also follows common conventions.

Also applies to: 28-33


148-148: Improved type assertion for better type safety.

Adding the type assertion (err as unknown as { status: number }) makes the type manipulation more explicit and avoids TypeScript errors when assigning to the status property.

test/application/use.test.ts (8)

1-2: Updated assertion import to use strict mode

Good change to use node:assert/strict instead of the regular assert. This enforces stricter equality checks and is more consistent with the lint rules introduced in this PR.


6-6: Good addition of MiddlewareFunc type import

Adding the explicit type import for MiddlewareFunc improves type safety and makes the type casting in the test cases clearer.


21-22: Appropriate linter comments for promise handling

The added oxlint-disable-next-line comments are necessary to maintain the existing promise-based code pattern while using the new linter. This is a good interim solution that allows incremental migration.

Also applies to: 29-30, 48-49, 62-63


37-37: Improved async request handling

Using await with the request calls improves readability and makes the asynchronous flow clearer.

Also applies to: 70-70, 81-81


39-39: Updated deep equality assertion

Using assert.deepStrictEqual provides more precise equality checks for arrays.

Also applies to: 72-72


88-102: Improved type safety in generator middleware test

Good refinement of the generator middleware test with:

  1. Proper TypeScript typing using unknown instead of implicit any
  2. Stronger error validation checking both the error type and message pattern
  3. Explicit type casting to MiddlewareFunc

This makes the test more type-safe and robust.


108-113: Enhanced readability with modern loop syntax

Replacing forEach with a for...of loop improves readability and follows modern JavaScript patterns. Also good use of the unknown type with explicit type casting for better type safety.


118-130: Consistent error handling pattern

This follows the same improved pattern as the generator middleware test, with proper type assertions and error validation. The consistency across similar tests is excellent.

test/application/context.test.ts (4)

1-1: Consistent use of strict assertions

Good change to use node:assert/strict across test files. This ensures consistent assertion behavior throughout the codebase.


14-18: Updated assertion methods for clarity

Changed from strictEqual to equal/notEqual. Since you're now using the strict assertion import, these methods provide the same strictness but with cleaner syntax.


23-24: Consistent assertion method usage

Consistently using assert.equal instead of assert.strictEqual throughout the test cases improves readability and maintains the same assertion strictness via the strict import.

Also applies to: 33-34


28-28: Improved promise handling and type safety

Good changes:

  1. Direct return of the promise from request calls
  2. Adding type annotation for the ctx parameter
  3. Simplified promise chain syntax

These changes improve both readability and type safety.

Also applies to: 38-38, 56-58, 61-61

test/context/state.test.ts (4)

1-1: Consistent use of strict assertions

Good change to use node:assert/strict across test files. This ensures consistent assertion behavior throughout the codebase.


12-12: Standardized deep equality assertions

Changed from deepStrictEqual to deepEqual. Since you're now using the strict assertion import, deepEqual provides the same strictness but with cleaner syntax.

Also applies to: 17-17, 34-35, 40-40


35-36: Properly annotated TypeScript error suppression

Good addition of the @ts-expect-error comment to explicitly indicate that this line intentionally causes a TypeScript error for testing purposes. This helps other developers understand that the error is expected.


22-22: Simplified request chains

Improved readability by consolidating request chains into a single line. This makes the test more concise without sacrificing clarity.

Also applies to: 45-45

test/response/status.test.ts (5)

1-1: Consistent use of strict assertions

Good change to use node:assert/strict across test files. This ensures consistent assertion behavior throughout the codebase.


62-63: Properly annotated TypeScript error suppression

Good addition of the @ts-expect-error comment to explicitly indicate that this line intentionally causes a TypeScript error for testing purposes. This helps other developers understand that the error is expected.


78-80: Standardized equality assertions

Changed from strictEqual to equal. Since you're now using the strict assertion import, these methods provide the same strictness but with cleaner syntax.


83-83: Improved async request handling

Using await with the request calls improves readability and makes the asynchronous flow clearer.

Also applies to: 102-102


85-88: Modernized property existence checks

Replacing hasOwnProperty with Object.hasOwn is a good practice. The newer method is more reliable as it cannot be overridden and works better with objects that may not inherit from Object.prototype.

Using equal instead of strictEqual makes the assertions more consistent while maintaining the same strictness due to the strict import.

Also applies to: 104-107

test/response/message.test.ts (4)

1-1: Good switch to strict assertion module

Using node:assert/strict is a better practice as it ensures that all equality checks are strict by default, preventing potential type coercion issues in tests.


9-9: LGTM: Consistent assertion style

The change from strictEqual to equal maintains the same behavior since you're using the strict assertion module.


16-16: LGTM: Consistent assertion style

The change from strictEqual to equal maintains the same behavior since you're using the strict assertion module.


26-27: Improved type safety with optional chaining

Good change from non-null assertion (!) to optional chaining (?). This is safer as it handles the case where inspect() might return undefined.

test/application/onerror.test.ts (6)

1-1: Good switch to strict assertion module

Using node:assert/strict is a better practice as it ensures that all equality checks are strict by default, preventing potential type coercion issues in tests.


4-4: Corrected import style for mm module

Changed from default import to named import, which is more accurate if mm is an exported member rather than a default export.


14-22: Improved type safety with proper TypeScript annotations

Good addition of TypeScript-specific comments to suppress expected errors and improve type safety in the test.


39-49: Enhanced error handling with proper Error instantiation

Creating Error objects with explicit messages and improving type assertions makes the code more robust and type-safe.


54-63: Better type safety with TypeScript annotations

Good use of TypeScript type assertions and error suppressions where necessary for testing protected methods.


70-76: Consistent approach to error handling

The consistent approach to error handling across test cases with proper type assertions improves code clarity.

test/response/redirect.test.ts (3)

1-1: Good switch to strict assertion module

Using node:assert/strict is a better practice as it ensures that all equality checks are strict by default, preventing potential type coercion issues in tests.


18-18: Better URL handling with String.raw

Using String.raw is a better approach for handling URLs with special characters like backslashes, ensuring they're treated as literal characters.


23-38: Modernized async code with async/await

Good refactoring to use async/await instead of callbacks, making the asynchronous test code more readable and maintainable.

test/response/writable.test.ts (6)

1-5: Enhanced type safety with explicit imports

Good addition of TypeScript type imports for improved type safety and code clarity.


10-19: Improved type safety with proper function signatures

Adding explicit type annotations for function parameters and return values provides better documentation and helps catch potential errors at compile time.


40-44: Type-safe callback handling

Properly typing the callback parameters improves the code reliability and maintainability.


50-56: Type-safe server address handling

Good use of type assertion for server.address() to AddressInfo ensures type safety when accessing the port property.


66-71: Modernized async code with async/await

Good refactoring to use async/await instead of promise chaining, making the asynchronous code more readable and maintainable.


78-84: Consistent type safety improvements

The consistent approach to adding type annotations throughout the file demonstrates good TypeScript practices.

test/context/onerror.test.ts (8)

1-2: Import statements updated for better type safety and modern practices.

The import statements have been improved:

  • Using node:assert/strict instead of regular assert ensures stricter assertion checks
  • Explicitly importing ServerResponse type provides better type safety
  • Proper spacing between import groups improves readability
  • Adding explicit type import from the index file strengthens type checking

Also applies to: 4-7


14-14: Type annotations added to middleware function parameters.

Adding explicit type annotations (ctx: Context) to all middleware functions eliminates the use of implicit any types, which enhances type safety and makes the code more maintainable. This change aligns with TypeScript best practices.

Also applies to: 32-32, 55-55, 90-90, 104-104, 125-125, 148-148, 168-168, 188-188


48-49: Updated property existence check to use Object.hasOwn.

Changed from hasOwnProperty to the more modern Object.hasOwn method. This is a good improvement as:

  • Object.hasOwn is safer, avoiding issues when the property name is "hasOwnProperty"
  • It's the recommended approach in modern JavaScript
  • It protects against cases where hasOwnProperty might have been overridden

Also applies to: 77-78


107-107: Improved type casting for error properties.

Using as unknown as for type casting is a safer approach in TypeScript when dealing with properties that might have different types. This pattern ensures proper type checking while allowing necessary type conversions for error properties like statusCode, status, and code.

Also applies to: 128-128, 151-151, 171-171, 191-191


220-221: Added oxlint directive and type annotation for Promise.

The oxlint directive prevents false positive warnings for the new Promise usage, and the explicit type annotation Promise<void> improves type clarity. Both changes contribute to better code quality and documentation.


259-259: Type casting for ctx.app and ctx.res.

Proper type casting using as unknown as for both ctx.app and ctx.res ensures type safety while allowing the mock implementations needed for testing. The explicit typing of ctx.res as ServerResponse improves type clarity and consistency.

Also applies to: 271-271


232-232: Simplified test assertion with await.

Changed from implicit Promise handling to explicit await syntax, which makes the test more readable and follows modern async/await practices.


263-263: Updated mock implementation with arrow function.

Using an arrow function for the getHeaderNames mock improves consistency with modern JavaScript practices and matches the style used throughout the file.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (24)
Readme.md (1)

117-119: Punctuation refinement for clarity.
The sentence "reduces conflicts between different middleware and with Node itself as well as providing better support for stream handling" might benefit from an added comma after "with Node itself" to enhance readability. For example:
"... conflicts between different middleware and with Node itself, as well as providing better support ..."

🧰 Tools
🪛 LanguageTool

[uncategorized] ~118-~118: Possible missing comma found.
Context: ...ween different middleware and with Node itself as well as providing better support for...

(AI_HYDRA_LEO_MISSING_COMMA)

CODE_OF_CONDUCT.md (1)

27-27: Consider Refining Terminology for Clarity

The bullet point “Trolling, insulting/derogatory comments, and personal or political attacks” could benefit from using a stronger synonym for “trolling” to enhance the tone, as suggested by static analysis. Please verify that any revision remains consistent with the standard Contributor Covenant language.

🧰 Tools
🪛 LanguageTool

[style] ~27-~27: Try using a synonym here to strengthen your wording.
Context: ...vances - Trolling, insulting/derogatory comments, and personal or political attacks - Pu...

(COMMENT_REMARK)

docs/migration.md (5)

23-23: Middleware Guidance: Potential 'this' vs 'ctx' Inconsistency
The snippet uses this.session.userid with a comment suggesting a replacement of this by ctx. For clarity and consistency with Koa v2 conventions, consider revising to ctx.session.userid.


73-73: Async Middleware Example Completion
The async middleware example is now neatly closed with });. Note that it still uses this.session.user_id—consider updating to ctx.session.user_id for consistency with the new signature.


95-96: Refactoring Recommendation Clarification
The added guidance to refactor your logic outside of Koa middleware functions is valuable. For brevity, you might consider rephrasing “outside of Koa middleware functions” to “outside Koa middleware functions” (per the static analysis hint).

🧰 Tools
🪛 LanguageTool

[style] ~95-~95: This phrase is redundant. Consider using “outside”.
Context: ...})` You could also refactor your logic outside of Koa middleware functions. Create functi...

(OUTSIDE_OF)


117-117: Typographical Consistency: ENV-specific Logging
Consider hyphenating “ENV specific” to “ENV-specific” in the header for improved typographical consistency.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~117-~117: When ‘ENV-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...= (module.exports = new koa()); ``` ## ENV specific logging behavior removed An explicit c...

(SPECIFIC_HYPHEN)


119-119: Logging Behavior Update
The note regarding the removal of an explicit check for the test environment in error handling is clear. A brief rationale behind this removal might further aid user understanding.

docs/faq.md (2)

11-14: Punctuation Nitpick: Add a Comma After "Typically"
In line 11, consider inserting a comma after "Typically" (i.e. “Typically, many middleware would…”) to enhance clarity.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~12-~12: A comma might be missing here.
Context: ... re-implement similar features, or even worse incorrectly implement them, when featur...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


25-27: Link Formatting Suggestion
Line 26 contains a bare URL (https://github.com/koajs/koa/wiki). For consistency with markdown best practices (MD034), consider wrapping it in a proper markdown link (e.g., [Koa Wiki](https://github.com/koajs/koa/wiki)).

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

26-26: Bare URL used
null

(MD034, no-bare-urls)

docs/troubleshooting.md (1)

14-14: Typo Alert: "afterwords" Should be "afterwards"
In line 14, the word “afterwords” appears; please correct it to “afterwards” for grammatical accuracy.

🧰 Tools
🪛 LanguageTool

[style] ~14-~14: The phrase ‘in many cases’ is used quite frequently. Consider using a less frequent alternative to set your writing apart.
Context: ...e which or how much middleware was run, in many cases a 200 and 404 trigger the same number o...

(IN_MANY_STYLE_CASES)

docs/guide.md (5)

23-25: Punctuation Suggestion: Insert a Comma After "For example"
In line 23, consider adding a comma after "For example" (i.e. “For example, if you wanted to…”) for improved readability.

🧰 Tools
🪛 LanguageTool

[typographical] ~23-~23: After the expression ‘for example’ a comma is usually used.
Context: ...o run the "downstream" middleware. For example if you wanted to track how long it take...

(COMMA_FOR_EXAMPLE)


[uncategorized] ~24-~24: A comma might be missing here.
Context: ...a by adding an X-Response-Time header field the middleware would look like the foll...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


37-40: Punctuation Nitpick: Add a Comma After "developer"
In line 37, adding a comma after "developer" (i.e. “If you're a front-end developer, you can think…”) would improve the natural pause and clarity.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~37-~37: A comma might be missing here.
Context: ...sponseTime); ``` If you're a front-end developer you can think any code before next();...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[uncategorized] ~37-~37: Possible missing preposition found.
Context: ...'re a front-end developer you can think any code before next(); as the "capture" ...

(AI_EN_LECTOR_MISSING_PREPOSITION)


136-140: Sentence Restructuring for Better Flow
In the Response Middleware section (lines 136–140), consider inserting a pause after “For example,” and possibly restructuring the use of “however” to improve overall flow.

🧰 Tools
🪛 LanguageTool

[typographical] ~137-~137: Consider adding a comma after ‘Typically’ for more clarity.
Context: ...am middleware may simply omit next(). Typically this will be in routing middleware, but...

(RB_LY_COMMA)


[typographical] ~138-~138: After the expression ‘for example’ a comma is usually used.
Context: ..., but this can be performed by any. For example the following will respond with "two", ...

(COMMA_FOR_EXAMPLE)


190-192: Punctuation Improvement Needed
In the Async Operations section (lines 190–192), inserting a comma after “For example” (i.e. “For example, this middleware…”) would enhance readability.

🧰 Tools
🪛 LanguageTool

[typographical] ~191-~191: After the expression ‘for example’ a comma is usually used.
Context: ...write non-blocking sequential code. For example this middleware reads the filenames fro...

(COMMA_FOR_EXAMPLE)


210-214: Comma After "For example"
In the Debugging Koa section (lines 210–214), consider adding a comma after “For example” to align with standard punctuation practices.

🧰 Tools
🪛 LanguageTool

[typographical] ~212-~212: After the expression ‘for example’ a comma is usually used.
Context: ...ovides simple conditional logging. For example to see all Koa-specific debugging infor...

(COMMA_FOR_EXAMPLE)


[uncategorized] ~213-~213: A comma might be missing here.
Context: ...ample to see all Koa-specific debugging information just pass DEBUG=koa* and upon boot yo...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)

docs/error-handling.md (1)

51-62: Grammatical Suggestion in Error Event Section
In line 59, the phrase “which simply log the error…” should be updated to “which simply logs the error…” to ensure subject–verb agreement.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~59-~59: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...app.onerrorwill be used, which simply log the error unlesserror.expose`is true ...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)

docs/api/response.md (3)

29-87: Status Codes List Review
The extensive list of status codes is useful. However, note that in line 41 the status description for code 226 is written as “im used” – consider changing it to “I'm used” (or the appropriate phrasing) for consistency and clarity.


174-179: URL Formatting Suggestion for Reference Link
In lines 174–179, a bare URL is used. Consider wrapping the URL in angle brackets or converting it into a markdown link to conform with MD034 guidelines.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~176-~176: Possible missing comma found.
Context: ...setting the body as an HTTP stream in a proxy as it would destroy the underlying conn...

(AI_HYDRA_LEO_MISSING_COMMA)

🪛 markdownlint-cli2 (0.17.2)

178-178: Bare URL used
null

(MD034, no-bare-urls)


344-348: ETag Setter Clarity with Minor Punctuation Note
The explanation for response.etag= (lines 344–348) is clear; however, consider adding a comma after the inline note describing the wrapped quotation marks for improved readability.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~346-~346: Possible missing comma found.
Context: ... ### response.etag= Set the ETag of a response including the wrapped "s. Note that t...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/koa-vs-express.md (3)

20-21: Consider adding a comma after "For example".

For better grammar, consider adding a comma after introductory phrases.

-For example if you'd like to be closer to node.js and traditional node.js-style coding, you probably want to stick to Connect/Express or similar frameworks.
+For example, if you'd like to be closer to node.js and traditional node.js-style coding, you probably want to stick to Connect/Express or similar frameworks.

41-42: Use "fewer" instead of "less" for countable nouns.

Since "callbacks" is a countable noun, "fewer" would be grammatically correct.

-now that generators allow us to write code with less callbacks. Connect is equally capable, and some may still prefer it,
+now that generators allow us to write code with fewer callbacks. Connect is equally capable, and some may still prefer it,
🧰 Tools
🪛 LanguageTool

[grammar] ~41-~41: Did you mean “fewer”? The noun “callbacks” is countable.
Context: ... generators allow us to write code with less callbacks. Connect is equally capable, ...

(FEWER_LESS)


88-92: Add hyphens to compound adjectives and fix article usage.

Add hyphens to compound adjectives and correct article usage for consistent terminology.

-any in-built routing, there are third party libraries available such as
+any in-built routing, there are third-party libraries available such as
 koa-router and koa-route.
 Similarly, just like we have helmet for security in Express, for Koa
-we have koa-helmet available and the list goes on for Koa available third
-party libraries.
+we have koa-helmet available, and the list goes on for Koa available third-
+party libraries.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~88-~88: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ot have any in-built routing, there are third party libraries available such as koa-router ...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~90-~90: There is an agreement error between ‘have’ and ‘helmet’. Insert ‘a(n)’ or change the noun to plural.
Context: ... and koa-route. Similarly, just like we have helmet for security in Express, for Koa we hav...

(PRP_VB_NN)


[uncategorized] ~91-~91: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...ss, for Koa we have koa-helmet available and the list goes on for Koa available thir...

(COMMA_COMPOUND_SENTENCE_2)


[uncategorized] ~91-~91: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ... and the list goes on for Koa available third party libraries.

(EN_COMPOUND_ADJECTIVE_INTERNAL)

docs/api/request.md (1)

199-200: Add comma after "For example".

For better readability and grammar, consider adding a comma after introductory phrases.

-For example if the value were "client, proxy1, proxy2",
+For example, if the value were "client, proxy1, proxy2",
 you would receive the array `["client", "proxy1", "proxy2"]`.
🧰 Tools
🪛 LanguageTool

[typographical] ~199-~199: After the expression ‘for example’ a comma is usually used.
Context: ...sabled an empty array is returned. For example if the value were "client, proxy1, prox...

(COMMA_FOR_EXAMPLE)

docs/api/context.md (1)

22-24: Add comma after "For example".

For better readability and grammar, consider adding a comma after introductory phrases.

-Many of the context's accessors and methods simply delegate to their `ctx.request` or `ctx.response`
-equivalents for convenience, and are otherwise identical. For example `ctx.type` and `ctx.length`
+Many of the context's accessors and methods simply delegate to their `ctx.request` or `ctx.response`
+equivalents for convenience, and are otherwise identical. For example, `ctx.type` and `ctx.length`
 delegate to the `response` object, and `ctx.path` and `ctx.method` delegate to the `request`.
🧰 Tools
🪛 LanguageTool

[typographical] ~23-~23: After the expression ‘for example’ a comma is usually used.
Context: ...ience, and are otherwise identical. For example ctx.type and ctx.length delegate to...

(COMMA_FOR_EXAMPLE)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4957cc9 and 2d79370.

📒 Files selected for processing (43)
  • .github/workflows/node.js.yml (1 hunks)
  • .github/workflows/release.yml (1 hunks)
  • CODE_OF_CONDUCT.md (1 hunks)
  • Readme.md (6 hunks)
  • docs/api/context.md (5 hunks)
  • docs/api/index.md (7 hunks)
  • docs/api/request.md (14 hunks)
  • docs/api/response.md (8 hunks)
  • docs/error-handling.md (2 hunks)
  • docs/faq.md (1 hunks)
  • docs/guide.md (11 hunks)
  • docs/koa-vs-express.md (1 hunks)
  • docs/migration.md (6 hunks)
  • docs/troubleshooting.md (6 hunks)
  • src/context.ts (8 hunks)
  • src/request.ts (19 hunks)
  • src/response.ts (12 hunks)
  • test/application/index.test.ts (4 hunks)
  • test/application/inspect.test.ts (1 hunks)
  • test/application/request.test.ts (2 hunks)
  • test/application/response.test.ts (4 hunks)
  • test/application/toJSON.test.ts (1 hunks)
  • test/context/assert.test.ts (1 hunks)
  • test/request/accept.test.ts (2 hunks)
  • test/request/accepts.test.ts (3 hunks)
  • test/request/acceptsCharsets.test.ts (4 hunks)
  • test/request/acceptsEncodings.test.ts (2 hunks)
  • test/request/acceptsLanguages.test.ts (2 hunks)
  • test/request/charset.test.ts (1 hunks)
  • test/request/header.test.ts (1 hunks)
  • test/request/headers.test.ts (1 hunks)
  • test/request/href.test.ts (1 hunks)
  • test/request/ips.test.ts (3 hunks)
  • test/request/is.test.ts (1 hunks)
  • test/request/query.test.ts (1 hunks)
  • test/request/subdomains.test.ts (1 hunks)
  • test/response/append.test.ts (2 hunks)
  • test/response/body.test.ts (8 hunks)
  • test/response/is.test.ts (1 hunks)
  • test/response/last-modified.test.ts (1 hunks)
  • test/response/set.test.ts (1 hunks)
  • test/response/type.test.ts (4 hunks)
  • tsconfig.json (1 hunks)
✅ Files skipped from review due to trivial changes (21)
  • test/request/href.test.ts
  • test/application/toJSON.test.ts
  • test/request/header.test.ts
  • test/request/headers.test.ts
  • test/request/accept.test.ts
  • .github/workflows/release.yml
  • test/context/assert.test.ts
  • test/application/request.test.ts
  • test/request/subdomains.test.ts
  • test/request/ips.test.ts
  • test/request/is.test.ts
  • test/response/is.test.ts
  • test/application/inspect.test.ts
  • test/response/set.test.ts
  • test/application/response.test.ts
  • test/request/acceptsEncodings.test.ts
  • test/response/type.test.ts
  • test/request/acceptsLanguages.test.ts
  • test/response/last-modified.test.ts
  • test/response/append.test.ts
  • .github/workflows/node.js.yml
🚧 Files skipped from review as they are similar to previous changes (9)
  • test/request/accepts.test.ts
  • test/request/query.test.ts
  • test/response/body.test.ts
  • test/request/acceptsCharsets.test.ts
  • tsconfig.json
  • src/response.ts
  • test/request/charset.test.ts
  • src/context.ts
  • src/request.ts
🧰 Additional context used
🧬 Code Definitions (1)
test/application/index.test.ts (2)
src/application.ts (2)
  • keys (102-104)
  • keys (106-108)
src/context.ts (1)
  • assert (92-108)
🪛 LanguageTool
CODE_OF_CONDUCT.md

[style] ~27-~27: Try using a synonym here to strengthen your wording.
Context: ...vances - Trolling, insulting/derogatory comments, and personal or political attacks - Pu...

(COMMENT_REMARK)

Readme.md

[uncategorized] ~118-~118: Possible missing comma found.
Context: ...ween different middleware and with Node itself as well as providing better support for...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/api/context.md

[typographical] ~23-~23: After the expression ‘for example’ a comma is usually used.
Context: ...ience, and are otherwise identical. For example ctx.type and ctx.length delegate to...

(COMMA_FOR_EXAMPLE)


[typographical] ~67-~67: It appears that a comma is missing.
Context: ...defined by the first argument. For each event you can hook up "listeners", which is a...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~81-~81: Loose punctuation mark.
Context: ...tovaluewithoptions: - maxAge`: a number representing the milliseconds ...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~82-~82: Loose punctuation mark.
Context: ...rom Date.now() for expiry. - expires: a Date object indicating the cookie's...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~83-~83: Loose punctuation mark.
Context: ...the end of session by default). - path: a string indicating the path of the coo...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~84-~84: Loose punctuation mark.
Context: ... the cookie (/ by default). - domain: a string indicating the domain of the c...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~85-~85: Loose punctuation mark.
Context: ...n of the cookie (no default). - secure: a boolean indicating whether the cookie...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~86-~86: Loose punctuation mark.
Context: ...js/cookies#secure-cookies). - httpOnly: a boolean indicating whether the cookie...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~87-~87: Loose punctuation mark.
Context: ...Script (true by default). - sameSite: a boolean or string indicating whether ...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~88-~88: Loose punctuation mark.
Context: ...(which maps to'strict'). - signed`: a boolean indicating whether the cookie...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~89-~89: Loose punctuation mark.
Context: ...time a cookie is received. - overwrite: a boolean indicating whether to overwri...

(UNLIKELY_OPENING_PUNCTUATION)


[typographical] ~105-~105: After the expression ‘for example’ a comma is usually used.
Context: ...me required', { user: user }); ``` For example ctx.throw(400, 'name required') is eq...

(COMMA_FOR_EXAMPLE)


[uncategorized] ~142-~142: You might be missing the article “the” here.
Context: ...not* supported by Koa. This may break intended functionality of Koa middleware and Koa...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/api/index.md

[uncategorized] ~23-~23: Possible missing comma found.
Context: ...ng a reasonably large number of helpful methods Koa maintains a small footprint, as no ...

(AI_HYDRA_LEO_MISSING_COMMA)


[misspelling] ~44-~44: This word is normally spelled with a hyphen.
Context: ...- this was previously difficult to make user friendly with node's use of callbacks. However w...

(EN_COMPOUNDS_USER_FRIENDLY)


[uncategorized] ~44-~44: A comma may be missing after the conjunctive/linking adverb ‘However’.
Context: ... friendly with node's use of callbacks. However with async functions we can achieve "tr...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[formatting] ~45-~45: Consider inserting a comma here, unless the first half is essential to the meaning of the sentence.
Context: ...'s use of callbacks. However with async functions we can achieve "true" middleware. Contr...

(WITH_THAT_COMMA)


[uncategorized] ~46-~46: Possible missing article found.
Context: ...ion which simply passes control through series of functions until one returns, Koa inv...

(AI_HYDRA_LEO_MISSING_A)


[uncategorized] ~121-~121: The official spelling of this programming framework is “Node.js”.
Context: ...()`. These arguments are documented on [nodejs.org](http://nodejs.org/api/http.html#ht...

(NODE_JS)


[typographical] ~181-~181: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...https://github.com/crypto-utils/keygrip), however you may also pass your own KeyGrip in...

(HOWEVER_SENTENCE)


[typographical] ~182-~182: After the expression ‘for example’ a comma is usually used.
Context: ...o pass your own KeyGrip instance. For example the following are acceptable: ```js ap...

(COMMA_FOR_EXAMPLE)


[misspelling] ~214-~214: This word is normally spelled as one.
Context: ... on ctx, which could be considered an anti-pattern. For example, to add a reference to yo...

(EN_COMPOUNDS_ANTI_PATTERN)


[uncategorized] ~235-~235: Possible missing comma found.
Context: ...rror-handling logic such as centralized logging you can add an "error" event listener: ...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~243-~243: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...``` If an error is in the req/res cycle and it is not possible to respond to the ...

(COMMA_COMPOUND_SENTENCE)


[typographical] ~252-~252: It appears that a comma is missing.
Context: ... 500 "Internal Server Error". In either case an app-level "error" is emitted for log...

(DURING_THAT_TIME_COMMA)

docs/api/request.md

[typographical] ~199-~199: After the expression ‘for example’ a comma is usually used.
Context: ...sabled an empty array is returned. For example if the value were "client, proxy1, prox...

(COMMA_FOR_EXAMPLE)


[typographical] ~271-~271: After the expression ‘for example’ a comma is usually used.
Context: ...' ctx.is('html'); // => false ``` For example if you want to ensure that only images ...

(COMMA_FOR_EXAMPLE)


[style] ~293-~293: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...plied, the best match will be returned. If no matches are found, a false is retu...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

docs/api/response.md

[duplication] ~128-~128: Possible typo: you repeated a word.
Context: ...dy to one of the following: - string written - Buffer written - Stream piped - Object || Array ...

(ENGLISH_WORD_REPEAT_RULE)


[uncategorized] ~176-~176: Possible missing comma found.
Context: ...setting the body as an HTTP stream in a proxy as it would destroy the underlying conn...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~346-~346: Possible missing comma found.
Context: ... ### response.etag= Set the ETag of a response including the wrapped "s. Note that t...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/error-handling.md

[uncategorized] ~59-~59: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...app.onerrorwill be used, which simply log the error unlesserror.expose`is true ...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)

docs/faq.md

[typographical] ~10-~10: Consider adding a comma after ‘Typically’ for more clarity.
Context: ...ck, not just the end application code. Typically many middleware would re-implement simi...

(RB_LY_COMMA)


[uncategorized] ~12-~12: A comma might be missing here.
Context: ... re-implement similar features, or even worse incorrectly implement them, when featur...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)

docs/guide.md

[typographical] ~23-~23: After the expression ‘for example’ a comma is usually used.
Context: ...o run the "downstream" middleware. For example if you wanted to track how long it take...

(COMMA_FOR_EXAMPLE)


[uncategorized] ~24-~24: A comma might be missing here.
Context: ...a by adding an X-Response-Time header field the middleware would look like the foll...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[uncategorized] ~37-~37: A comma might be missing here.
Context: ...sponseTime); ``` If you're a front-end developer you can think any code before next();...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[uncategorized] ~37-~37: Possible missing preposition found.
Context: ...'re a front-end developer you can think any code before next(); as the "capture" ...

(AI_EN_LECTOR_MISSING_PREPOSITION)


[typographical] ~90-~90: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...iddleware Naming middleware is optional, however it's useful for debugging purposes to a...

(HOWEVER_SENTENCE)


[typographical] ~137-~137: Consider adding a comma after ‘Typically’ for more clarity.
Context: ...am middleware may simply omit next(). Typically this will be in routing middleware, but...

(RB_LY_COMMA)


[typographical] ~138-~138: After the expression ‘for example’ a comma is usually used.
Context: ..., but this can be performed by any. For example the following will respond with "two", ...

(COMMA_FOR_EXAMPLE)


[typographical] ~191-~191: After the expression ‘for example’ a comma is usually used.
Context: ...write non-blocking sequential code. For example this middleware reads the filenames fro...

(COMMA_FOR_EXAMPLE)


[typographical] ~212-~212: After the expression ‘for example’ a comma is usually used.
Context: ...ovides simple conditional logging. For example to see all Koa-specific debugging infor...

(COMMA_FOR_EXAMPLE)


[uncategorized] ~213-~213: A comma might be missing here.
Context: ...ample to see all Koa-specific debugging information just pass DEBUG=koa* and upon boot yo...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)

docs/koa-vs-express.md

[typographical] ~32-~32: Consider adding a comma after ‘Typically’ for more clarity.
Context: ...ck, not just the end application code. Typically many middleware would re-implement simi...

(RB_LY_COMMA)


[grammar] ~41-~41: Did you mean “fewer”? The noun “callbacks” is countable.
Context: ... generators allow us to write code with less callbacks. Connect is equally capable, ...

(FEWER_LESS)


[style] ~53-~53: Did you mean ‘different from’? ‘Different than’ is often considered colloquial style.
Context: ...a new library. ## How is Koa different than Connect/Express? ### Promises-based co...

(DIFFERENT_THAN)


[style] ~68-~68: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...like Express, routing is not provided. Unlike Express, many convenience utilities are...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~85-~85: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...oper stream handling. ### Koa routing (third party libraries support) Since Express comes...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~88-~88: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ot have any in-built routing, there are third party libraries available such as koa-router ...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~90-~90: There is an agreement error between ‘have’ and ‘helmet’. Insert ‘a(n)’ or change the noun to plural.
Context: ... and koa-route. Similarly, just like we have helmet for security in Express, for Koa we hav...

(PRP_VB_NN)


[uncategorized] ~91-~91: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...ss, for Koa we have koa-helmet available and the list goes on for Koa available thir...

(COMMA_COMPOUND_SENTENCE_2)


[uncategorized] ~91-~91: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ... and the list goes on for Koa available third party libraries.

(EN_COMPOUND_ADJECTIVE_INTERNAL)

docs/migration.md

[style] ~95-~95: This phrase is redundant. Consider using “outside”.
Context: ...})` You could also refactor your logic outside of Koa middleware functions. Create functi...

(OUTSIDE_OF)


[uncategorized] ~117-~117: When ‘ENV-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...= (module.exports = new koa()); ``` ## ENV specific logging behavior removed An explicit c...

(SPECIFIC_HYPHEN)

docs/troubleshooting.md

[style] ~14-~14: The phrase ‘in many cases’ is used quite frequently. Consider using a less frequent alternative to set your writing apart.
Context: ...e which or how much middleware was run, in many cases a 200 and 404 trigger the same number o...

(IN_MANY_STYLE_CASES)

🪛 markdownlint-cli2 (0.17.2)
docs/api/response.md

178-178: Bare URL used
null

(MD034, no-bare-urls)

docs/faq.md

26-26: Bare URL used
null

(MD034, no-bare-urls)

🔇 Additional comments (101)
Readme.md (4)

22-22: Improved Node version formatting.
The updated message now uses bold formatting (node v18.19.0) which aligns with modern markdown best practices and improves readability.


36-36: Simplified arrow function parameters.
Removing the unnecessary parentheses around the single parameter (ctx) in the middleware example makes the code more concise.


58-58: Enhanced heading formatting for async functions.
The change to async functions clarifies the emphasis on asynchronous functionality and improves consistency with the overall document style.


133-134: Clarified description for Context shortcuts.
The updated statement explicitly demonstrates the use of ctx.type over ctx.response.type (and similarly for ctx.accepts), which improves the documentation’s clarity.

CODE_OF_CONDUCT.md (5)

17-21: Enhanced Readability for Positive Behavior Guidelines

The bullet points under “Examples of behavior that contributes to creating a positive environment” now feature consistent spacing and clear formatting. This improvement enhances readability without altering the intended meaning.


25-26: Improved Multi-line Bullet Formatting

The multi-line bullet addressing “The use of sexualized language or imagery and unwelcome sexual attention or advances” now has clearer line breaks and indentation, which significantly improves clarity.


28-28: Consistent Formatting for Harassment Guidelines

The bullet point “Public or private harassment” adheres to the updated list style and maintains consistency with the rest of the document.


29-29: Clear Delineation for Privacy Concerns

The bullet regarding “Publishing others' private information, such as a physical or electronic address, without explicit permission” is now clearly formatted, which improves readability for this critical guideline.


31-31: Structured Guideline for Other Inappropriate Conduct

The bullet point “Other conduct which could reasonably be considered inappropriate in a professional setting” is well-organized and clearly conveys the intended policy. This formatting update contributes to the overall clarity of the document.

docs/migration.md (18)

3-3: Header Update: New Middleware Signature
The updated header “## New middleware signature” clearly separates the section and improves readability.


15-15: Async Function Syntax: Consistent Semicolon Usage
Adding the semicolon after await next(); enforces a consistent modern JavaScript style.


17-17: Error Handling: Consistent Response Object Formatting
The semicolon after ctx.body = { message: err.message }; maintains consistency in the error handling example.


18-18: Error Status Update: Uniform Code Formatting
The addition of a semicolon after ctx.status = err.status || 500; aligns with the coding style used throughout.


20-20: Closing Block Formatting: Uniform Termination
The updated closing }); clearly terminates the try-catch block, ensuring the code block is properly delimited.


24-24: Response Object Update: Correct Use of 'ctx'
Assigning ctx.body = user; correctly demonstrates the adoption of the new context parameter in middleware.


28-28: Documentation Clarity: Asynchronous Function Note
The note clarifying that a function returning a promise can be used instead of an async function is clear and beneficial for developers.


32-32: Context Parameter Clarification
The explanation that the context is now passed explicitly via ctx (instead of using this) is informative and useful for migration.


41-46: Generator Middleware Example Update
The generator middleware example using function* (next) is well presented. The formatting helps illustrate legacy middleware usage before conversion.


54-61: koa-convert Example Enhancement
The revised code block using koa-convert clearly demonstrates how to wrap generator middleware. The adjustments improve readability and ensure consistency with the migration guide.


100-100: Application Instantiation Update
The header “## Application object constructor requires new” effectively emphasizes the need to use the new keyword in Koa v2.


102-102: Legacy Constructor Explanation
The explanation regarding the legacy method of instantiation without new is clear and provides helpful context for migration.


103-103: Illustrative Example: Legacy Instantiation
The legacy instantiation example, which shows instantiating a Koa application without new, is well preserved for comparison.


107-107: Legacy Instantiation Code Example
Retaining the legacy example var app = (module.exports = koa()); helps illustrate the change required for Koa v2.


114-114: Modern Instantiation Code Example
The updated example with new koa() clearly demonstrates the preferred instantiation method for Koa v2.


123-123: Dependency Change Notification
The update informing users that [co] is no longer bundled with Koa is helpful and properly directs developers to import it directly if needed.


128-129: v1.x Support Clarification
The updated statement regarding v1.x support provides clear guidance on the branch’s maintenance and future updates.


133-134: Community Contribution Encouragement
The final note encouraging documentation pull requests for migration-related issues is a strong call-to-action for community collaboration.

docs/faq.md (4)

5-9: Improved Formatting for Readability
The removal of leading spaces in lines 5–9 improves the flow and overall readability of the FAQ content.


18-21: Content Clarity Maintained
The revised text in lines 18–21 clearly explains Koa’s different approach without altering the intended meaning.


30-34: Consistent Content Update
The block in lines 30–34 has been reformatted without any loss of clarity. The explanation about Express 4.0 is clear and maintains consistency.


38-44: Clear Explanation of Custom Properties
The description in lines 38–44 regarding Koa’s custom objects and their rules is well formatted and informative.

docs/troubleshooting.md (13)

9-10: Friendly Invitation for Contributions
The added invitation in lines 9–10 to contribute improvements to the documentation is welcoming and clear.


16-16: Additional Clarification Added
The sentence in line 16 reinforces why 404 responses might still occur and adds useful detail.


25-27: Clear Explanation of Response Timing
The reformatted text in lines 25–27 explains how timing affects the 404 response very effectively.


30-37: Effective Code Example for Problematic Behavior
The code snippet presented in lines 30–37 clearly demonstrates the issue where the response body is set too late.


39-49: Async Version Code Example is Clear
The async version example in lines 39–49 effectively contrasts with the previous snippet, highlighting the issue well.


51-54: Thorough Cause Explanation
The explanation in lines 51–54 about why the response remains 404 due to asynchronous timing is detailed and well-articulated.


56-64: Useful Logging Example to Identify Issues
The middleware logging demonstration in lines 56–64 provides a practical method for troubleshooting the problem.


74-80: Clear Expected Log Output
The expected log output in lines 74–80 (“Middleware done” and “Body set”) is clearly specified, which should help in debugging the middleware chain.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

76-76: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)


83-89: Clear Introduction to Middleware Chain Issues
The explanation in lines 83–89 concerning the possibility of an interrupted middleware chain is informative and well structured.


91-105: Demonstrative Code Snippet for Missing return next()
The problematic code in lines 91–105 effectively illustrates the common pitfall of omitting return next().


107-111: Clear Cause of Middleware Interruption
The explanation in lines 107–111 pinpoints the issue of the missing return next() that causes the middleware to stop short, which is clear and concise.


113-129: Helpful Debugging with "Route called" Log
The second code snippet (lines 113–129) that adds a log statement ("Route called") is a practical addition for debugging the middleware chain.


133-151: Solution Provided is Clear and Actionable
The solution in lines 133–151, which involves adding return next(), is clearly explained and effectively resolves the issue.

docs/guide.md (1)

3-4: Content Update Enhances Clarity
The introductory text in lines 3–4 now clearly outlines that the guide covers non-API matters such as best practices and middleware usage, improving focus and readability.

docs/error-handling.md (4)

5-7: Clear Try-Catch Example
The explanation in lines 5–7 about using async functions with try-catch is clear and demonstrates the error-handling approach effectively.


8-17: Well-Formatted Code Snippet for Error Propagation
The code snippet in lines 8–17 clearly illustrates how to use try-catch with async functions. The formatting and structure promote readability.


20-34: Comprehensive Explanation of the Default Error Handler
The detailed description in lines 20–34 about how the default error handler works—including header management and status setting—is thorough and easy to follow.


37-49: Custom Error Handler Example Clarity
The custom error handler example in lines 37–49 is clear and demonstrates how to respond with JSON effectively.

docs/api/response.md (41)

1-6: Clear Introduction to the Response Object
The opening section (lines 1–6) provides a concise overview of the Koa Response object and its enhanced functionality over the native Node.js response.


7-12: API Overview is Concise and Informative
The description of response.header in lines 7–12 is clear and establishes a solid foundation for the subsequent API documentation.


13-16: Alias Clarification
Lines 13–16 effectively note that response.headers is an alias for response.header, which is clear and concise.


17-24: Property Descriptions are Informative
The sections explaining response.socket and the default value of response.status are well written and helpful.


25-32: Detailed Explanation of Setting Response Status
The description in lines 25–32 about how to set response.status is thorough and beneficial for developers.


88-90: Note on Memorization is Clear
The note (lines 88–90) advising not to worry about memorizing status strings is concise and clear.


92-100: Effective Example of Setting Response Status
The code snippet in lines 92–100 clearly demonstrates how to configure ctx.response.status, aiding developer understanding.


102-106: Response Message Getter is Well Documented
The getter for response.message in lines 102–106 is explained simply and clearly.


107-111: Response Message Setter Explanation
The description for setting response.message (lines 107–111) is straightforward and unambiguous.


111-114: Content-Length Setter is Clear
The explanation on how to set response.length via the setter is succinct and precise.


115-119: Content-Length Getter Explanation
The description in lines 115–119 on deducing the Content-Length is clear and valuable.


120-124: Response Body Getter is Simple and Clear
The getter for response.body is described in a straightforward manner, making it easy to understand.


125-133: Comprehensive Options for Setting Response Body
The list in lines 125–133 detailing acceptable types for response.body is thorough and informative.

🧰 Tools
🪛 LanguageTool

[duplication] ~128-~128: Possible typo: you repeated a word.
Context: ...dy to one of the following: - string written - Buffer written - Stream piped - Object || Array ...

(ENGLISH_WORD_REPEAT_RULE)


134-141: Clear Description of Default Status Behavior
The explanation in lines 134–141 about how Koa auto-sets the status based on the response body is well written and informative.


159-163: Clear Explanation for String Responses
The “String” section (lines 159–163) clearly outlines the default Content-Type and Content-Length settings for string responses.


164-168: Buffer Response Behavior is Well Explained
The “Buffer” section (lines 164–168) accurately describes the default behavior when sending a Buffer.


169-173: Stream Response Handling is Detailed
The “Stream” section (lines 169–173) explains the default Content-Type and the automatic error and close handling effectively.


180-190: Object Response Section is Comprehensive
The explanation for object responses (lines 180–190) is clear and mentions that plain objects and arrays are automatically JSON‐stringified.


191-208: Clear Description of Response Header Getter
The section on response.get(field) (lines 191–208) is concise and includes a useful example.


209-212: Response Header Existence Check
The explanation for response.has(field) in lines 209–212 is accurate and clear.


213-220: Setting Response Headers Example is Clear
The example for using ctx.set(field, value) in lines 213–220 is straightforward and useful.


221-227: Append Header Functionality Described Well
The description for response.append(field, value) in lines 221–227 is concise and clear.


228-238: Effective Example for Setting Multiple Headers
The multi-header example in lines 228–238 clearly demonstrates how to pass an object to ctx.set.


239-242: Delegation Explanation is Clear
The note in lines 239–242 about delegating to Node’s setHeader is succinct and informative.


242-246: Header Removal is Clearly Documented
The brief description of response.remove(field) (lines 242–246) is clear and to the point.


246-252: Content-Type Getter Explanation is Informative
The section on response.type in lines 246–252 clearly states how the Content-Type is derived.


253-264: Variety of Content-Type Setter Examples Provided
The examples in lines 253–264 for setting ctx.type with different inputs are comprehensive and practical.


265-269: Helpful Note on Charset Selection
The note in lines 265–269 regarding automatic charset selection is useful and clear.


270-274: Response Type Check is Clearly Explained
The explanation for response.is(types...) in lines 270–274 accurately describes its use for middleware purposes.


275-279: Minification Middleware Example is Effective
The brief description in lines 275–279 sets the stage well for the subsequent minification code example.


280-294: Clear Minification Code Example
The code snippet (lines 280–294) demonstrating HTML minification is clear and illustrative of real-world usage.


295-303: Redirect Functionality is Clearly Documented
The description in lines 295–303 explaining response.redirect(url, [alt]) is informative, including its handling of the special "back" parameter.


304-310: Useful Redirect Code Examples
The examples in lines 304–310 provide clear guidance on various redirection scenarios.


311-319: Redirect Customization Example is Clear
The additional example in lines 311–319 shows how to modify the status and body after a redirect effectively.


320-324: Attachment Handling Explained Well
The instructions in lines 320–324 regarding response.attachment are clear and provide the necessary detail for prompting downloads.


325-330: Header Sent Check is Concisely Documented
The description for response.headerSent in lines 325–330 is succinct and to the point.


331-334: Last-Modified Getter is Clearly Explained
The explanation for response.lastModified (lines 331–334) is clear and useful for developers.


335-343: Last-Modified Setter Instructions are Clear
The guidelines for setting response.lastModified in lines 335–343 are straightforward and helpful.


349-353: ETag Code Example is Straightforward
The example in lines 349–353 for setting an ETag using a hash is concise and well presented.


353-357: Vary Header Usage is Clear
The description for response.vary(field) in lines 353–357 is brief and understandable.


357-360: Flush Headers Function Explanation
The explanation in lines 357–360 about flushing headers is succinct and clear.

docs/koa-vs-express.md (1)

3-5: Formatting improvements enhance readability.

The removal of leading spaces improves the document's formatting consistency.

docs/api/request.md (1)

3-5: Formatting improvements enhance readability.

The removal of leading spaces improves the document's formatting consistency.

docs/api/context.md (1)

3-8: Formatting improvements enhance readability.

The removal of leading spaces improves the document's formatting consistency.

docs/api/index.md (3)

3-3: Improved Markdown formatting with asterisks.

Using double asterisks for bold text is more standard in Markdown than double underscores.


92-97: Improved readability with bullet points for settings.

The bullet point formatting for application settings improves scanability and makes the documentation more accessible.


163-164: Added semicolons to JavaScript statements for consistency.

Adding semicolons to JavaScript statements in code examples makes the code style more consistent.

test/application/index.test.ts (5)

1-5: Improved imports with better type safety.

The changes improve type safety by:

  1. Using the strict version of assert
  2. Adding explicit type imports for HTTP components
  3. Importing the HttpError type directly for better type checking

65-65: Improved type safety with specific type assertion.

Replacing any with a more specific type assertion improves type safety and code readability.


68-70: Enhanced error message for better debugging.

The more descriptive error message will help with debugging when the response has already been sent.


120-123: Updated assertion to use direct equality and consistent error creation.

Using direct equality and the consistent createHttpError function improves the test's reliability.


126-135: Improved test clarity with proper type annotations.

The test description is now grammatically correct, and the context creation uses proper type annotations for better type safety.

@fengmk2 fengmk2 merged commit 7911d7b into master Mar 25, 2025
22 checks passed
@fengmk2 fengmk2 deleted the oxlint branch March 25, 2025 12:30
fengmk2 pushed a commit that referenced this pull request Mar 25, 2025
[skip ci]

## [2.22.0](v2.21.0...v2.22.0) (2025-03-25)

### Features

* use oxlint and prettier ([#19](#19)) ([7911d7b](7911d7b))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant