npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

autowire-dsl

v0.3.5

Published

DSL para descrever e gerar diagramas elétricos automotivos em SVG

Downloads

1,541

Readme

AUTOWIRE DSL ⚡🚗

Uma linguagem textual para descrever e gerar diagramas elétricos automotivos

AUTOWIRE é uma DSL (Domain-Specific Language) open-source criada para descrever circuitos elétricos automotivos com conectores, pinos, fios, relés, fusíveis e emendas, e gerar diagramas técnicos profissionais no padrão de manuais automotivos.


🎯 Motivação

Ferramentas open-source atuais são ótimas para eletrônica de placas, mas falham ao representar chicotes automotivos:

  • conectores com pinagem (B01, A14…)
  • fios com cor e bitola
  • fusíveis e relés automotivos (30 / 85 / 86 / 87)
  • fontes +30 / +15 / GND
  • emendas (splices)
  • diagramas voltados a diagnóstico, não simulação

As soluções que fazem isso bem (EPLAN, AutoCAD Electrical) são proprietárias, caras e não automatizáveis em escala.

AUTOWIRE nasce para preencher esse vazio.


✨ O que é o AUTOWIRE

  • 📄 Linguagem textual própria (fácil de escrever e gerar por IA)
  • 🧠 Modelo semântico automotivo (não genérico)
  • 🔍 Validação estrutural e elétrica
  • 🎨 Renderização padronizada estilo manual técnico
  • 📤 Exporta para SVG / PDF / PNG
  • ⚙️ Pensado para geração em massa

🧩 Conceitos principais

| Conceito | Descrição | | ---------- | ----------------------------------------- | | node | Qualquer componente elétrico | | conn | Conector com pinagem | | net | Uma rede elétrica (fio/circuito) | | endpoint | Um ponto elétrico (pino, terminal, porta) | | splice | Emenda/junção | | wire | Propriedades do fio |


📐 Exemplo completo

@version 1.0
@system "ABS"
@vehicle "VW Gol 2012"

node abs_ecu : module "UC do ABS"
  conn B pins { B01 B02 B03 B04 B05 B06 B07 B09 B11 B12 B13 B14 B15 }

node rly_abs : relay "Relé do ABS" {
  conn COIL pins { 85 86 }
  conn CONTACTS pins { 30 87 }
  conn GND pins { 86 }
}
node f10     : fuse  "F10A" rating 10A
node ign_15  : power "+15"
node gnd_01  : ground "GND"

net IGN_TO_ECU:
  ign_15 -> f10.in -> f10.out -> abs_ecu.B.B01
  wire color azul_claro gauge 0.75 circuit IGN15

net ECU_GND:
  abs_ecu.B.B14 -> gnd_01
  wire color marrom gauge 1.0 circuit GND

➡️ Isso gera automaticamente um diagrama elétrico funcional automotivo com:

  • conector B em coluna
  • fios identificados
  • fusível em série
  • layout legível para diagnóstico

🧠 Sintaxe da linguagem

Definição de node

node <id> : <kind> "<label>"

Tipos (kind) suportados:

module | relay | fuse | motor | lamp | sensor | switch
power | ground | splice | dlc | generic

Conectores

conn B pins { B01 B02 B03 }

Quando o mesmo numero de pino precisa aparecer mais de uma vez no mesmo conector, use pino@alias. O texto antes de @ e o que aparece no SVG; o alias depois de @ e o identificador usado nas ligacoes.

node abs : module "Modulo de Controle do ABS" {
  conn T right pins { 05@sem_esp_05 33@sem_esp_33 32@sem_esp_32 05@com_esp_05 37@com_esp_37 32@com_esp_32 }
}

net SENSOR_SEM_ESP: {
  abs.T.sem_esp_05 -> sensor_vacuo.A.01
  wire color preto circuit SENSOR_SEM_ESP
}

net SENSOR_COM_ESP: {
  abs.T.com_esp_05 -> sensor_vacuo_esp.A.01
  wire color preto circuit SENSOR_COM_ESP
}

Fusíveis internos em componente

Use fuse dentro do bloco de um node (ex.: caixa de fusíveis/módulo):

node fb1 : module "Fuse Box 1" {
  conn X pins { 02 36A 36 02A }
  fuse S163 rating 110A
  fuse SA36 rating 36A
  fuse SA02 rating 05A
}

Cada fusível interno expõe terminais fixos IN e OUT:

net SUPPLY: {
  p30 -> fb1.S163.IN
  wire color vermelho circuit SUPPLY
}

net OUTPUT: {
  fb1.S163.OUT -> fb1.X.02
  wire color vermelho/preto circuit OUTPUT
}

Quando os dois endpoints pertencem ao mesmo node, a ligacao e desenhada dentro do proprio componente. Isso permite representar barramentos e derivacoes internas de caixas de fusiveis:

node pdc : module "PDC Externa" {
  conn A right pins { 36A 36 02A 22A }
  fuse SA36 rating 36A
  fuse SA02 rating 05A
  fuse SA22 rating 05A
}

net PDC_INTERNAL_FEED: {
  pdc.A.36A -> { pdc.SA36.IN, pdc.SA02.IN, pdc.SA22.IN }
  wire color cinza circuit PDC_INTERNAL_FEED
}

net PDC_SA36_OUT: {
  pdc.SA36.OUT -> pdc.A.36
  wire color cinza circuit PDC_SA36_OUT
}

Definição de net

net <ID>:
  <endpoint> -> <endpoint> -> <endpoint>
  wire color <cor> gauge <mm²> [circuit <nome>]

Endpoints

| Tipo | Exemplo | | --------------- | --------------- | | Node simples | gnd_01 | | Conector + pino | abs_ecu.B.B06 | | Terminal | rly_abs.86 | | Porta | f10.in |


🎨 Layout padrão (manual técnico)

O AUTOWIRE usa layout determinístico, inspirado em manuais automotivos:

  • ⚡ Potência / relés / fusíveis → esquerda
  • 🧠 ECUs → centro
  • 💡 Sensores / atuadores → direita
  • ⏚ Grounds / +30 / +15 → rails
  • 🔗 Fios roteados em “L” (Manhattan)
  • 📌 Conectores como colunas de pinos

O objetivo é diagnóstico rápido, não estética artística.


🔍 Validação elétrica

Além da sintaxe, o AUTOWIRE valida:

  • IDs duplicados
  • referência a nodes inexistentes
  • pinos que não existem no conector
  • terminais inválidos em relés
  • nets sem endpoints suficientes
  • fusíveis sem rating
  • uso incorreto de splice

⚙️ Pipeline técnico

.autowire
   ↓
Parser (AST)
   ↓
Validador estrutural
   ↓
Validador semântico
   ↓
Normalizador
   ↓
Renderer (SVG / PDF)

🛠️ Stack (referência)

  • Parser: Peggy (PEG grammar)
  • AST & Validator: TypeScript
  • Renderer v1: Graphviz (SVG)
  • Renderer v2: SVG custom
  • Export PDF: SVG → PDF

🚀 Roadmap

v0.1 — MVP

  • DSL textual
  • Parser + validator
  • SVG via Graphviz

v0.2

  • SVG custom (layout manual)
  • Biblioteca de símbolos
  • Splices avançados

v0.3

  • Cross-reference (circuit IDs)
  • Localização PT/EN/ES
  • Render “diagnóstico” vs “compacto”

v1.0

  • Estável
  • Versionamento de DSL
  • Geração em massa confiável

🧪 Casos de uso

  • 📘 Manuais técnicos automotivos
  • 🔧 Oficinas mecânicas
  • 🏭 Engenharia de chicotes
  • 🤖 Geração automática por IA
  • 📚 Educação técnica

📜 Filosofia do projeto

  • Automotivo first
  • Legibilidade acima de estética
  • Texto → Diagrama
  • Escalável por design
  • Open e extensível

Script

Como buildar o projeto

Install via npm

Prerequisite: Node.js 18 or newer.

CLI

npm install autowire-dsl
npx autowire ./examples/fixtures/npm-consumption-minimal.aw > out.svg

Optional size:

npx autowire ./examples/fixtures/npm-consumption-minimal.aw --width 1200 --height 900 > out.svg

API (ESM)

import fs from 'node:fs';
import { renderAwToSvg } from 'autowire-dsl';

const awText = fs.readFileSync('./examples/fixtures/npm-consumption-minimal.aw', 'utf8');
const svg = await renderAwToSvg(awText, { width: 1200, height: 900 });
fs.writeFileSync('out.svg', svg);

Package smoke

npm run package:smoke
npm run build:parser

Rodando o projeto

npm run -s render -- examples/abs.aw > out.svg

MCP (LLM Automation)

O projeto inclui servidor MCP local em stdio para fluxo LLM:

  • autowire_create_model
  • autowire_add_node
  • autowire_add_connector
  • autowire_add_internal_fuse
  • autowire_add_connection
  • autowire_add_split_connection
  • autowire_generate_aw
  • autowire_validate_aw
  • autowire_render_aw

Scripts:

npm run mcp:start
npm run mcp:api
npm run mcp:smoke
npm run mcp:smoke:validation

Transporte HTTP (API MCP):

  • Endpoint MCP: POST /mcp
  • Healthcheck: GET /health
  • Porta padrão: 3000 (configure com PORT)

Formato de payload (resumo):

{
  "schema_version": "1.0",
  "content": "@version 1.0\n..."
}

Erros retornam diagnósticos estruturados com códigos como:

  • AW_INVALID_INPUT
  • AW_SYNTAX_ERROR
  • AW_SEMANTIC_ERROR
  • AW_INVALID_INTERNAL_FUSE
  • AW_RENDER_ERROR

Exemplo de fluxo incremental via ferramentas:

  1. autowire_create_model
  2. autowire_add_node (module/relay/switch/lamp/fuse/etc.)
  3. autowire_add_connector
  4. autowire_add_internal_fuse (quando aplicável)
  5. autowire_add_connection e/ou autowire_add_split_connection
  6. autowire_generate_aw
  7. autowire_validate_aw
  8. autowire_render_aw

🤝 Contribuindo

Contribuições são bem-vindas, especialmente:

  • novos tipos de node
  • validações elétricas
  • melhorias de layout
  • exemplos reais de diagramas

📄 Licença

MIT License © AUTOWIRE Contributors