-
Notifications
You must be signed in to change notification settings - Fork 0
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
Conversation
WalkthroughThe 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 Changes
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
Poem
Possibly related PRs
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
New and updated dependencies detected. Learn more about Socket for GitHub ↗︎
|
commit: |
There was a problem hiding this 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.
Codecov ReportAll modified and coverable lines are covered by tests ✅
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. 🚀 New features to boost your workflow:
|
There was a problem hiding this 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 importMiddlewareFunc
using thetype
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 sectionsLine 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 ruleThere'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
📒 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 ignoreCHANGELOG.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 theimport 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 formChanged 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 improvementChanged 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 readabilityChanged the timeout value from
10000
to10_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 assertionChanged from
assert(!Object.keys(ctx.query).length)
toassert(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 importsThe 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 separatorThe numeric separator
_
in10_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 typeThis 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 interfaceConverting from
type
tointerface
makes the code more extensible for future additions. The oxlint-disable comment properly addresses the unavoidable use ofany
in this context.test/context/cookies.test.ts (3)
25-25
: Improved cookie validation with string methodReplacing 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 methodUsing
startsWith()
instead of regex is more readable and efficient for this simple prefix check.
96-96
: Improved cookie validation with string methodConsistently 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-configLength 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 hasnpx
or using an alternative method).
- The configuration file appears complete and well-structured.
- The
npx oxlint --print-config
execution failed withnpx: 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 lintingReplacing 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 setupThe 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 appropriatelyThe 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 backslashUsing
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 replaceAllReplacing multiple
replace()
calls withreplaceAll()
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 toassert/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 withnew
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 globalparseInt
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[]
tounknown[]
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 ofany
), 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 ofreplace
with a global regex makes the intent clearer.
279-280
: More explicit null/undefined checks.Changed from loose equality (
==
) to explicit checks for bothnull
andundefined
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 globalparseInt
.
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 ofimport type
for type-only imports.The change to use
import type
forParsedUrlQuery
andAccepts
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 forthis.originalUrl
adds robustness by providing a default value whenreq.url
is null or undefined, preventing potential runtime errors.Also applies to: 35-35
81-83
: Enhanced type safety usingunknown
instead ofany
.Replacing
any
withunknown
in theassert
method parameters is a significant type safety improvement. Theunknown
type forces explicit type checking before operations, unlikeany
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 ofany
type in this specific context.
173-174
: Improved error handling clarity.Separating the assignments to
headerSent
anderr.headerSent
improves code readability.
190-192
: Modern JavaScript syntax with for...of loop.The change from a likely
forEach
to afor...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 ofany
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 ofany
type, which is necessary for flexibility in handling various body types.Also applies to: 459-460
There was a problem hiding this 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 forunicorn/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 serializationThe comment disables the oxlint rule that would otherwise suggest using
structuredClone()
instead ofJSON.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 patternReplacing direct type casting with
as unknown as { req: unknown }
follows TypeScript best practices by usingunknown
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
toassert.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 useassert.strictEqual
. For consistency with the changes in other files, consider standardizing onassert.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 propertyThe
escape
function shadows the globalescape
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('&', '&') .replaceAll('"', '"') .replaceAll('<', '<') .replaceAll('>', '>'); }Also update any references to this function in the code.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 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
TheignorePatterns
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 -lLength 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
) intest/response/inspect.test.ts
on lines 13–14 (and similarly on lines 32–33) stands out. A quick search shows there are 21 occurrences ofassert.deepEqual
compared to 34 ofassert.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 thatequal
allows type coercion whereasstrictEqual
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 -lLength 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 ofassert.equal
, indicating that the stricter assertion is used significantly more often. If the change intest/request/secure.test.ts
—switching fromstrictEqual
toequal
—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 toassert.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 onany
type assertions. This makes the testing intent clearer.
9-9
: Consistent assertion method changes.Changing from
deepStrictEqual
todeepEqual
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 toequal
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 -lLength of output: 375
Assertion Method Standardization Confirmed in test/request/querystring.test.ts
The changes in this file—updating all assertions fromassert.strictEqual
toassert.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 usesassert.equal
, broader searches in the repository still reveal many instances ofassert.strictEqual
(313 total assertions in 38 files versus 145 assertions usingassert.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 assertionsThe 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 objectUsing
Record<string, string>
for headers provides better type safety than implicit typing, making the test more robust.
17-18
: Better type casting patternReplacing
as any
withas unknown as { remoteAddress: string }
is a safer approach to type casting that follows TypeScript best practices. Usingunknown
as an intermediate step forces explicit casting and makes the intent clearer.test/context/toJSON.test.ts (2)
1-2
: Good migration to strict assertionsThe switch to
node:assert/strict
aligns with modern Node.js practices and provides better type checking.
20-29
: Standardized assertion methodChanged from
deepStrictEqual
todeepEqual
. This is functionally equivalent when usingnode: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 assertionsThe switch to
node:assert/strict
aligns with modern Node.js practices and provides better type checking.
9-11
: Improved type safety with explicit error annotationsAdding
@ts-expect-error
comments clearly indicates where TypeScript errors are expected and intentional for testing purposes, which is better than silently casting toany
to bypass type checking.
11-11
: Standardized assertion methodChanged from
strictEqual
toequal
. When usingnode:assert/strict
, both perform strict equality checks, providing consistency without changing behavior.test/request/inspect.test.ts (2)
1-3
: Good migration to strict assertionsThe switch to
node:assert/strict
aligns with modern Node.js practices and provides better type checking.
31-32
: Standardized assertion methodChanged from
deepStrictEqual
todeepEqual
. When usingnode: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
toassert/strict
ensures stricter equality checks, which helps catch subtle bugs caused by type coercion.
11-12
: Improved assertion clarity withassert.equal
.Changing from
assert(ctx === app.currentContext)
toassert.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)
toassert.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
toassert/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 inlinefor...of
loop simplifies the code and makes it more readable. This is a modern JavaScript pattern that improves maintainability.
18-18
: Consistent assertion style withassert.equal
.Changing from
assert.strictEqual
toassert.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
toassert/strict
ensures stricter equality checks, which helps catch subtle bugs caused by type coercion.
8-8
: Improved test explicitness withassert()
.Making the assertions explicit with
assert(request().URL)
andassert(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
toe 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 modeGood 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 importAdding 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 handlingThe 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 handlingUsing
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 assertionUsing
assert.deepStrictEqual
provides more precise equality checks for arrays.Also applies to: 72-72
88-102
: Improved type safety in generator middleware testGood refinement of the generator middleware test with:
- Proper TypeScript typing using
unknown
instead of implicitany
- Stronger error validation checking both the error type and message pattern
- Explicit type casting to
MiddlewareFunc
This makes the test more type-safe and robust.
108-113
: Enhanced readability with modern loop syntaxReplacing forEach with a
for...of
loop improves readability and follows modern JavaScript patterns. Also good use of theunknown
type with explicit type casting for better type safety.
118-130
: Consistent error handling patternThis 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 assertionsGood change to use
node:assert/strict
across test files. This ensures consistent assertion behavior throughout the codebase.
14-18
: Updated assertion methods for clarityChanged from
strictEqual
toequal
/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 usageConsistently using
assert.equal
instead ofassert.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 safetyGood changes:
- Direct return of the promise from request calls
- Adding type annotation for the ctx parameter
- 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 assertionsGood change to use
node:assert/strict
across test files. This ensures consistent assertion behavior throughout the codebase.
12-12
: Standardized deep equality assertionsChanged from
deepStrictEqual
todeepEqual
. 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 suppressionGood 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 chainsImproved 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 assertionsGood change to use
node:assert/strict
across test files. This ensures consistent assertion behavior throughout the codebase.
62-63
: Properly annotated TypeScript error suppressionGood 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 assertionsChanged from
strictEqual
toequal
. Since you're now using the strict assertion import, these methods provide the same strictness but with cleaner syntax.
83-83
: Improved async request handlingUsing
await
with the request calls improves readability and makes the asynchronous flow clearer.Also applies to: 102-102
85-88
: Modernized property existence checksReplacing
hasOwnProperty
withObject.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 ofstrictEqual
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 moduleUsing
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 styleThe change from
strictEqual
toequal
maintains the same behavior since you're using the strict assertion module.
16-16
: LGTM: Consistent assertion styleThe change from
strictEqual
toequal
maintains the same behavior since you're using the strict assertion module.
26-27
: Improved type safety with optional chainingGood change from non-null assertion (
!
) to optional chaining (?
). This is safer as it handles the case whereinspect()
might return undefined.test/application/onerror.test.ts (6)
1-1
: Good switch to strict assertion moduleUsing
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 moduleChanged 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 annotationsGood addition of TypeScript-specific comments to suppress expected errors and improve type safety in the test.
39-49
: Enhanced error handling with proper Error instantiationCreating Error objects with explicit messages and improving type assertions makes the code more robust and type-safe.
54-63
: Better type safety with TypeScript annotationsGood use of TypeScript type assertions and error suppressions where necessary for testing protected methods.
70-76
: Consistent approach to error handlingThe 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 moduleUsing
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.rawUsing
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/awaitGood 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 importsGood addition of TypeScript type imports for improved type safety and code clarity.
10-19
: Improved type safety with proper function signaturesAdding 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 handlingProperly typing the callback parameters improves the code reliability and maintainability.
50-56
: Type-safe server address handlingGood use of type assertion for
server.address()
toAddressInfo
ensures type safety when accessing the port property.
66-71
: Modernized async code with async/awaitGood refactoring to use async/await instead of promise chaining, making the asynchronous code more readable and maintainable.
78-84
: Consistent type safety improvementsThe 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 regularassert
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 implicitany
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 useObject.hasOwn
.Changed from
hasOwnProperty
to the more modernObject.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 overriddenAlso 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 likestatusCode
,status
, andcode
.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 ofctx.res
asServerResponse
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.
There was a problem hiding this 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 ClarityThe 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 usesthis.session.userid
with a comment suggesting a replacement ofthis
byctx
. For clarity and consistency with Koa v2 conventions, consider revising toctx.session.userid
.
73-73
: Async Middleware Example Completion
The async middleware example is now neatly closed with});
. Note that it still usesthis.session.user_id
—consider updating toctx.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 thetest
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 anX-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 beforenext();
...(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~37-~37: Possible missing preposition found.
Context: ...'re a front-end developer you can think any code beforenext();
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 omitnext()
. 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 passDEBUG=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 unless
error.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 forresponse.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 examplectx.type
andctx.length
delegate to...(COMMA_FOR_EXAMPLE)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 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: ...to
valuewith
options: -
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 unless
error.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 ofctx.type
overctx.response.type
(and similarly forctx.accepts
), which improves the documentation’s clarity.CODE_OF_CONDUCT.md (5)
17-21
: Enhanced Readability for Positive Behavior GuidelinesThe 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 FormattingThe 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 GuidelinesThe 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 ConcernsThe 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 ConductThe 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 afterawait next();
enforces a consistent modern JavaScript style.
17-17
: Error Handling: Consistent Response Object Formatting
The semicolon afterctx.body = { message: err.message };
maintains consistency in the error handling example.
18-18
: Error Status Update: Uniform Code Formatting
The addition of a semicolon afterctx.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'
Assigningctx.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 viactx
(instead of usingthis
) is informative and useful for migration.
41-46
: Generator Middleware Example Update
The generator middleware example usingfunction* (next)
is well presented. The formatting helps illustrate legacy middleware usage before conversion.
54-61
: koa-convert Example Enhancement
The revised code block usingkoa-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 thenew
keyword in Koa v2.
102-102
: Legacy Constructor Explanation
The explanation regarding the legacy method of instantiation withoutnew
is clear and provides helpful context for migration.
103-103
: Illustrative Example: Legacy Instantiation
The legacy instantiation example, which shows instantiating a Koa application withoutnew
, is well preserved for comparison.
107-107
: Legacy Instantiation Code Example
Retaining the legacy examplevar app = (module.exports = koa());
helps illustrate the change required for Koa v2.
114-114
: Modern Instantiation Code Example
The updated example withnew 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 Missingreturn next()
The problematic code in lines 91–105 effectively illustrates the common pitfall of omittingreturn next()
.
107-111
: Clear Cause of Middleware Interruption
The explanation in lines 107–111 pinpoints the issue of the missingreturn 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 addingreturn 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 KoaResponse
object and its enhanced functionality over the native Node.js response.
7-12
: API Overview is Concise and Informative
The description ofresponse.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 thatresponse.headers
is an alias forresponse.header
, which is clear and concise.
17-24
: Property Descriptions are Informative
The sections explainingresponse.socket
and the default value ofresponse.status
are well written and helpful.
25-32
: Detailed Explanation of Setting Response Status
The description in lines 25–32 about how to setresponse.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 configurectx.response.status
, aiding developer understanding.
102-106
: Response Message Getter is Well Documented
The getter forresponse.message
in lines 102–106 is explained simply and clearly.
107-111
: Response Message Setter Explanation
The description for settingresponse.message
(lines 107–111) is straightforward and unambiguous.
111-114
: Content-Length Setter is Clear
The explanation on how to setresponse.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 forresponse.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 forresponse.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 onresponse.get(field)
(lines 191–208) is concise and includes a useful example.
209-212
: Response Header Existence Check
The explanation forresponse.has(field)
in lines 209–212 is accurate and clear.
213-220
: Setting Response Headers Example is Clear
The example for usingctx.set(field, value)
in lines 213–220 is straightforward and useful.
221-227
: Append Header Functionality Described Well
The description forresponse.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 toctx.set
.
239-242
: Delegation Explanation is Clear
The note in lines 239–242 about delegating to Node’ssetHeader
is succinct and informative.
242-246
: Header Removal is Clearly Documented
The brief description ofresponse.remove(field)
(lines 242–246) is clear and to the point.
246-252
: Content-Type Getter Explanation is Informative
The section onresponse.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 settingctx.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 forresponse.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 explainingresponse.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 regardingresponse.attachment
are clear and provide the necessary detail for prompting downloads.
325-330
: Header Sent Check is Concisely Documented
The description forresponse.headerSent
in lines 325–330 is succinct and to the point.
331-334
: Last-Modified Getter is Clearly Explained
The explanation forresponse.lastModified
(lines 331–334) is clear and useful for developers.
335-343
: Last-Modified Setter Instructions are Clear
The guidelines for settingresponse.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 forresponse.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:
- Using the strict version of assert
- Adding explicit type imports for HTTP components
- 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.
[skip ci] ## [2.22.0](v2.21.0...v2.22.0) (2025-03-25) ### Features * use oxlint and prettier ([#19](#19)) ([7911d7b](7911d7b))
Summary by CodeRabbit