[BUG][typescript-fetch] runtime.ts does not compile with noUncheckedIndexedAccess since 7.26.0 (TS2345/TS2532)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 80/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- typescript
- Lĩnh vực
- backend
Hướng nghiên cứu
Bắt đầu với modules/openapi-generator/src/main/resources/typescript-fetch/runtime.mustache, template được nêu trong issue, và kiểm tra ba lần truy cập theo chỉ số vào các nhóm bắt của regex trong decodeExtValue và parseHeaderParameters. Tạo spec tối thiểu được mô tả trong issue và chạy kiểm tra TypeScript của nó với --noUncheckedIndexedAccess. Hoàn thành khi runtime.ts được tạo có thể biên dịch với tùy chọn này và giữ nguyên hành vi phân tích cú pháp đã mô tả.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug Report Checklist
- Have you provided a full/minimal spec to reproduce the issue?
- Have you validated the input using an OpenAPI validator?
- Have you tested with the latest master to confirm the issue still exists?
- Have you searched for related issues/PRs?
- What's the actual output vs expected output?
- [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
Since 7.26.0 the generated runtime.ts no longer compiles in a project that enables the TypeScript compiler option noUncheckedIndexedAccess. The Content-Disposition parsing added in #24957 and #24974 reads regex capture groups by index without a guard, and under this option every indexed access has the type string | undefined.
runtime.ts(536,43): error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
runtime.ts(552,22): error TS2532: Object is possibly 'undefined'.
runtime.ts(554,90): error TS2532: Object is possibly 'undefined'.
The three lines are:
return match ? decodeURIComponent(match[1]) : undefined; // decodeExtValue
const name = match[1].toLowerCase(); // parseHeaderParameters
params.set(name, match[2] !== undefined ? match[2].replace(/\\(.)/g, '$1') : match[3].trim()); // parseHeaderParameters
The generated client is compiled as part of the consuming project, so the project's compiler options apply to it. The runtime compiled cleanly under this option up to 7.25.0, so the update breaks the build of such projects.
openapi-generator version
Regression. 7.25.0 compiles. 7.26.0, 7.27.0 and 7.28.0-SNAPSHOT (build 20261111.130840-62) fail.
OpenAPI declaration file content or url
Any spec reproduces it, because the code is in the static runtime.
openapi: 3.0.3
info:
title: runtime strictness
version: 1.0.0
paths:
/ping:
get:
operationId: ping
responses:
'204':
description: No content
Generation Details
java -jar openapi-generator-cli.jar generate -i spec.yaml -g typescript-fetch -o out
npx -p [email protected] tsc --ignoreConfig --noEmit --strict --noUncheckedIndexedAccess \
--target es2020 --module esnext --moduleResolution bundler --lib es2020,dom out/runtime.ts
Steps to reproduce
- Generate with the spec and command above.
- Type-check
out/runtime.tswith thetsccommand above.
Expected: no errors, as with 7.25.0. Actual: the three errors above. Without --noUncheckedIndexedAccess the file compiles.
Related issues/PRs
- #24957 and #24974 added the code (feature request #24956). I found no existing report.
Suggest a fix
Guard the three accesses in typescript-fetch/runtime.mustache. The following compiles with and without the option and keeps the behaviour, because the groups in question always participate in a successful match:
return match?.[1] !== undefined ? decodeURIComponent(match[1]) : undefined;
const name = (match[1] ?? '').toLowerCase();
if (!params.has(name)) {
params.set(name, match[2] !== undefined ? match[2].replace(/\\(.)/g, '$1') : (match[3] ?? '').trim());
}
It may also be worth enabling noUncheckedIndexedAccess in the tsconfig.json of one typescript-fetch sample, so that CI catches this class of error.
- Ngôn ngữ chính
- Java
- Star
- 26.9k
- Fork
- 7.8k
- Merge trung bình
- 2 ngày 10 giờ
- Pull request đã merge (30 ngày)
- 180
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Có Dockerfile hoặc tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của OpenAPITools/openapi-generator
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
OpenAPITools/openapi-generator#25640 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG][JAVA] Deprecated properties only get @Deprecated on the getter (base, feign, native, microprofile)Có thể đã có người làm @Inf1mum đã nhận 2 ngày trước. Đang mởIssue: Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
OpenAPITools/openapi-generator#25567 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG][KOTLIN-SERVER] typeInfoAnnotation.mustache uses As.PROPERTY → discriminator property serialized twiceCó thể đã có người làm @Inf1mum đã nhận 9 ngày trước. Đang mởIssue: Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
OpenAPITools/openapi-generator#25524 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[REQ][JAVA][resteasy] Support for Jackson 3 / useJackson3Có thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mởEnhancement: Feature
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
OpenAPITools/openapi-generator#25364 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
OpenAPITools/openapi-generator#25237 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của OpenAPITools/openapi-generator
Issue tương tự
-
bug emitter:client:csharp
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
microsoft/typespec#12572 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
GCC 15.2: -Wcast-qual warning - cast discards const qualifier from pointer target type (H5trace.c)Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug] RemotingHelper.connect swaps the socket send and receive buffer configurationCó thể đã có người làm @amalsaidov đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
needs-area-label
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 2 ngày
-
area/ai area/backend component/zeebe kind/task
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày