Emitter framework: make the language-specific Alloy peer dependencies optional

Abierto Apto para principiantes
#12,476 1 comentario 2 reacciones 2 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@timotheeguerin ya está trabajando en esto.

Desde el 4/11/2026.

  • #12495 de @copilot-swe-agent — abierto

Evaluación

Dificultad
1/5
Tiempo estimado
Menos de una hora
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
csharp, python, typescript
Área
tooling

Línea de trabajo

La solución está en el package.json del framework de emisores, donde los peers de lenguaje de Alloy se declaran sin peerDependenciesMeta. Marca @alloy-js/csharp, @alloy-js/python y @alloy-js/typescript como opcionales, manteniendo @alloy-js/core y @typespec/compiler como requeridos. Comprueba que la página de documentación para autores de emisores siga siendo correcta y, después, confirma que una instalación con solo el paquete de TypeScript no produce advertencias de peers faltantes.

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

Descripción

emitter-framework feature triaged:core
Clear and concise description of the problem

@typespec/emitter-framework declares all of its Alloy language packages as peer dependencies, with no peerDependenciesMeta, so every one of them is required:

"peerDependencies": {
  "@alloy-js/core": "...",
  "@alloy-js/csharp": "...",
  "@alloy-js/python": "...",
  "@alloy-js/typescript": "...",
  "@typespec/compiler": "..."
}

An emitter for a single language therefore gets the other languages' packages too: package managers that install peers automatically (npm 7+, pnpm by default) download them, and the others print a missing-peer warning. A TypeScript-only emitter installs about 32 MB of C# and Python packages (27 MB and 4.8 MB unpacked) that it never loads.

Each language package is used by exactly one entry point (0.21.0, runtime imports in dist/src):

Entry point @alloy-js packages imported
@typespec/emitter-framework (root) core
@typespec/emitter-framework/typescript core, typescript
@typespec/emitter-framework/csharp core, csharp
@typespec/emitter-framework/python core, python
@typespec/emitter-framework/testing core/testing

I checked that an emitter that imports from the root and from /typescript generates and runs correctly with @alloy-js/csharp and @alloy-js/python absent. The same peers and the missing peerDependenciesMeta are on main and in 0.22.0-dev.1.

The emitter framework docs already tell emitter authors to install the packages they use as peers (npm install --save-peer @alloy-js/core @alloy-js/typescript @typespec/emitter-framework), so making the language packages optional would not change that workflow.

Proposal

Mark the language-specific peers as optional, keeping @alloy-js/core and @typespec/compiler required:

"peerDependenciesMeta": {
  "@alloy-js/csharp": { "optional": true },
  "@alloy-js/python": { "optional": true },
  "@alloy-js/typescript": { "optional": true }
}
Checklist
  • Follow our Code of Conduct
  • Read the docs.
  • Check that there isn't already an issue that request the same feature to avoid creating a duplicate.
Lenguaje dominante
Java
Estrellas
5.9k
Forks
421
Merge medio
2 d 3 h
PR fusionados (30 d)
176

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

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 microsoft/typespec

Todos los issues de microsoft/typespec

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.