mf1ToMessageData: number-skeleton options produce numeric literal values; stringifyMessage throws
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 88/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- tooling
Línea de trabajo
Comienza en parseNumberArgStyle en la ruta de conversión de MF1-to-MF2 e inspecciona cómo las opciones numéricas y booleanas de Intl.NumberFormat se convierten en valores Model.Literal. Reproduce el problema con el mensaje ::.00 proporcionado y la llamada a stringifyMessage. Se considera terminado cuando las opciones del skeleton convertido siguen siendo strings válidos y stringifyMessage ya no lanza una excepción al formatear, mientras la salida permanece sin cambios.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
parseNumberArgStyle maps MF1 number skeletons to Intl.NumberFormat options and copies the option values into Model.Literals as-is — so ::.00 produces { type: 'literal', value: 2 }, a number. Model.Literal.value is typed as a string. The formatter tolerates the numeric value, but stringifyMessage crashes on it (isValidUnquotedLiteral calls str.match). Consequence: an MF1 source with a number
skeleton cannot be converted to MF2 source text, which is exactly what an MF1 → MF2 migration needs to commit.
Reproduction
import { parse } from '@messageformat/parser'
import { mf1ToMessage, mf1ToMessageData } from '@messageformat/icu-messageformat-1'
import { stringifyMessage } from 'messageformat'
const data = mf1ToMessageData(parse('{n, number, ::.00}'))
data.pattern[0].functionRef.options
// { minimumFractionDigits: { type: 'literal', value: 2 },
// maximumFractionDigits: { type: 'literal', value: 2 } }
stringifyMessage(data)
// TypeError: str.match is not a function (isValidUnquotedLiteral)
mf1ToMessage('en', '{n, number, ::.00}').format({ n: 3.14159 })
// '3.14' — formatting works; only serialization fails
Versions
@messageformat/[email protected](latest published)[email protected],@messageformat/[email protected]- Runtime: Bun 1.4.2
Affected skeletons
Any skeleton mapping to a numeric or boolean Intl.NumberFormat option: fraction and significant digits and so on. useGrouping: false is already special-cased to the string 'never' and is unaffected.
Suggested fix
In parseNumberArgStyle, write String(value) for every option literal. MF2's :number function parses digit-string options, so rendering does not change.
- Lenguaje dominante
- TypeScript
- Estrellas
- 1.8k
- Forks
- 160
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de messageformat/messageformat
-
Dificultad 4/5 3-5 días Aptitud para principiantes 58/100
messageformat/messageformat#472 ·
-
help wanted
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
messageformat/messageformat#462 · 4 comentarios ·
-
Xliff: use a real namespaceAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
messageformat/messageformat#455 · 1 comentario ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
messageformat/messageformat#439 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
messageformat/messageformat#434 ·
Todos los issues de messageformat/messageformat
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
external-issue to-triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
diegosouzapw/OmniRoute#15401 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
code-yeongyu/oh-my-openagent#9454 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
smart-village-solutions/sva-studio#1654 ·
Los mantenedores suelen responder en 1 día