Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[v2] URI template strict expansions leave !'()* unencoded

Abierto Apto para principiantes
#2,919 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@takagibit18 ya está trabajando en esto.

Desde el 2/10/2026.

  • #2922 de @takagibit18 — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
84/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript
Área
api

Línea de trabajo

Comienza con packages/core-internal/src/shared/uriTemplate.ts, centrándote en UriTemplate.expand() y encodeValue(), y luego ejecuta el ejemplo repro.mjs con Node.js 24 o posterior. Se considera terminado cuando las expansiones simple y query codifiquen !'()* mediante codificación porcentual como se muestra, mientras que las expansiones reserved y fragment conserven sus caracteres permitidos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

v1 v2
What happened?

UriTemplate.expand() leaves !'()* unchanged in simple expansions. Query values have the same problem: search{?q} with q: 'hello!' produces search?q=hello!.

encodeURIComponent() leaves these characters unchanged, and encodeValue() returns that output directly for strict expansion operators.

What did you expect?

Expected output from the snippet below:

%21%27%28%29%2A
search?q=hello%21

RFC 6570 section 3.2.1 permits unreserved characters in strict variable expansions. The five characters above are reserved and need percent-encoding. Reserved and fragment expansions can keep them.

Code to reproduce

Save this as repro.mjs at the SDK repository root and run node repro.mjs with Node.js 24 or later. It imports the source module directly.

import { UriTemplate } from './packages/core-internal/src/shared/uriTemplate.ts';

const value = "!'()*";
console.log(new UriTemplate('{value}').expand({ value }));
console.log(new UriTemplate('search{?q}').expand({ q: 'hello!' }));

Current output:

!'()*
search?q=hello!
SDK version

main at e16d27729ea2fae144a6d957fd0372d9eb0e6c58 (v2 source checkout). Tested with Node.js 24.12.0.

Area

Other

Lenguaje dominante
TypeScript
Estrellas
13.5k
Forks
2.3k
Merge medio
2 d 7 h
PR fusionados (30 d)
54

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de modelcontextprotocol/typescript-sdk

Todos los issues de modelcontextprotocol/typescript-sdk

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.