withValidator({ query }) keeps only the last value of a repeated query key
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- typescript
- Bereich
- backend-api-design
Rechercherichtung
Beginne mit runValidation in src/runtime/validator.ts, wo laut Issue Query-Parameter Schlüssel für Schlüssel kopiert werden. Prüfe, wie c.req.queries() wiederholte Schlüssel darstellt, und vergleiche das Verhalten mit Hono's Query-Validator. Die Aufgabe ist abgeschlossen, wenn ein wiederholter Schlüssel das Schema als Array erreicht, ein einzelner Schlüssel ein String bleibt und das bestehende Verhalten der Query-Validierung durch passende Tests abgedeckt ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
What happens
When a query key appears more than once, withValidator({ query }) passes only its last value to the schema. The earlier values are dropped without any error.
export const loader = defineHandler(
withValidator({ query: z.object({ tag: z.union([z.string(), z.array(z.string())]) }) }),
(c) => c.input.query,
);
GET /notes?tag=work&tag=urgent
- Expected:
{ tag: ['work', 'urgent'] } - Actual:
{ tag: 'urgent' }
A schema that expects an array, like z.object({ tag: z.array(z.string()) }), never passes: Void always gives it a string.
Cause
runValidation in src/runtime/validator.ts copies the search params one key at a time, so each repeated key overwrites the one before:
const raw = {};
for (const [key, value] of url.searchParams) raw[key] = value;
Suggested fix
Do what Hono's validator('query') does: a key that appears once stays a string, and a key that repeats becomes an array.
const raw = {};
for (const [key, values] of Object.entries(c.req.queries())) {
raw[key] = values.length === 1 ? values[0] : values;
}
For keys that appear once, this works exactly as before, so existing schemas aren't affected.
Why it matters
Multi-select filters (?tag=a&tag=b) are a common pattern, and HTML forms send a <select multiple> or a group of checkboxes this way. Other frameworks keep every value: Hono's own validator and Nuxt's getQuery() return arrays, and React Router and SvelteKit have searchParams.getAll().
Version: void 1.4.0
- Vorherrschende Sprache
- TypeScript
- Sterne
- 580
- Forks
- 56
- Ø Merge
- 12 Std. 10 Min.
- Gemergte PRs (30 T.)
- 163
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus voidzero-dev/void
-
void deploy cannot deploy a Worker with no URL after its first deploy, and --atomic refuses itOffen
Schwierigkeit 4/5 1-2 Tage Anfängerfreundlichkeit 48/100
voidzero-dev/void#644 ·
Maintainer antworten meist innerhalb von 1 Tag
-
React: `action()` and `router.visit()` never resolve when awaited in a transitionEvtl. vergeben @cpojer hat das heute übernommen. Offen
voidzero-dev/void#643 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 42/100
voidzero-dev/void#638 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 57/100
voidzero-dev/void#636 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 67/100
voidzero-dev/void#635 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in voidzero-dev/void
Ähnliche Issues
-
area:cli bug P4
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug from-studio
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
esengine/DeepSeek-Reasonix#14868 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
linxiv-dev/linXiv#384 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
scope:core type:security
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
-
follow-redirects updateOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
mailgun/mailgun.js#544 ·