diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 4ceb12f..0336cd4 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -7,6 +7,7 @@ on: branches: [master] schedule: - cron: '40 23 * * 1' + workflow_dispatch: permissions: {} @@ -23,12 +24,12 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Initialize CodeQL - uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8 + uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 with: languages: javascript-typescript build-mode: none - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8 + uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4bf8c38..3bafccd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -126,7 +126,7 @@ jobs: run: echo "file=$(ls *.vsix | head -1)" >> "$GITHUB_OUTPUT" - name: Upload VSIX to GitHub Release - uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 + uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 with: files: ${{ steps.vsix.outputs.file }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 0b406d8..1de7c21 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -36,6 +36,6 @@ jobs: publish_results: true - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8 + uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 with: sarif_file: results.sarif diff --git a/CHANGELOG.md b/CHANGELOG.md index 2872705..2592aeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,32 +12,76 @@ Podem existir falhas ou itens não declarados, causados por falha humana ou por --- -## [Unreleased] - -Ainda não lançada. Versão prevista: **3.5.0**. +## [3.5.0] - 01/09/2026 ### Adicionado +- **Documentação de funções no hover, no signature help e no autocomplete** — o comentário escrito acima de uma função passa a ser lido e formatado, em vez de aparecer como texto cru com os `*` e as tags à mostra. Dois formatos são reconhecidos, detectados pelo próprio conteúdo: o estilo **Javadoc** (`@param`, `@return`) e o **XMLdoc** que o `omp-stdlib` do open.mp usa (``, ``, ``, ``). No XMLdoc, a formatação embutida vira texto formatado de verdade (negrito, trechos de código, quebras de linha) e as tags que só servem ao gerador da wiki do open.mp — ``, `` e os links `` — deixam de poluir o hover. Cada parâmetro é casado **pelo nome**, não pela posição, então um comentário pode omitir parâmetros ou listá-los fora de ordem: ao digitar a chamada, o *signature help* mostra a descrição do parâmetro em que o cursor está; o autocomplete mostra o resumo; e o hover, o bloco inteiro, com os títulos das seções ("Parâmetros", "Retorna") no idioma configurado. Um comentário comum, sem tags, continua aparecendo como descrição - **Prévia de cores nos literais** — literais de cor `0xRRGGBBAA` (e `0xRRGGBB`, tratado como opaco) no código Pawn passam a exibir um *swatch* clicável do editor com a cor real, em vez de apenas a cor de sintaxe. Clicar abre o seletor de cores nativo, que reescreve o valor no formato do open.mp (`0xRRGGBBAA`, alpha por último — ex.: vermelho `0xFF0000FF`). Um literal de 6 dígitos que permaneça opaco é reescrito com 6 dígitos; se ganhar transparência, é promovido a 8. Reconhece também o idioma de ajuste de alpha por aritmética (`0xRRGGBB00 + N`): o *swatch* mostra a cor com o alpha resultante, e a edição preserva a forma `base±N` (a soma só é interpretada quando afeta apenas o byte de alpha, sem transbordar para os demais canais). Reconhece ainda o formato de cor embutida em texto do SA-MP `{RRGGBB}` (chat, textdraws), reescrito no mesmo formato ao editar - **Sugestão do Material Icon Theme** — na ativação, se o **Material Icon Theme** ainda não estiver instalado, a extensão sugere instalá-lo (melhora os ícones das pastas do projeto). É apenas um complemento: a sugestão pode ser dispensada de vez ("Não perguntar de novo") e nunca reaparece quando o tema já está presente - **Realce de sintaxe TOML** — arquivos `.toml` (e `package.lock`) passam a ter destaque de sintaxe próprio, cobrindo tables e array-of-tables, chaves simples e pontuadas, strings básicas/literais e multilinha (triplas), inteiros (decimal, hexadecimal, octal e binário), floats (incluindo `inf`/`nan`), booleanos, datas/horas, arrays e inline tables. Inclui configuração de linguagem (comentário `#`, auto-fechamento de aspas e colchetes). A gramática é adaptada da extensão Even Better TOML (MIT) — as chaves usam escopos de *property-name*, coloridas pelos temas como propriedades (atribuição em `THIRD-PARTY-NOTICES.md`) +- **Padrão próprio de nomenclatura** — cada categoria de identificador (funções, globais, locais, constantes, macros, parâmetros) ganha um campo onde se escreve a própria convenção como expressão regular, no formato `/^g_[a-z][a-zA-Z0-9]*$/`. Convive com os cinco estilos embutidos pela regra que já existia: o nome é aceito se casar com **qualquer** critério da categoria — dá para exigir `camelCase` **ou** o prefixo da casa. O padrão é âncorado como `^(?:…)$`, ou seja, descreve o nome inteiro, e o agrupamento impede que uma alternância no topo ancore só os extremos. A página mostra, junto dos exemplos dos estilos embutidos, um nome real que o padrão aceita, atualizado enquanto se digita; um padrão inválido não é gravado, para não restar uma regra que a engine descartaria em silêncio. Diagnóstico funciona normalmente, mas sem sugestão de renomeação: de um regex arbitrário dá para saber se o nome passa, não como reescrevê-lo. A validação em si é feita pela engine, cujo motor de expressões regulares tem tempo de execução linear garantido — um padrão custoso não degrada a análise; a pré-visualização da página, que roda no editor, tem limites próprios de tamanho e desiste em vez de travar +- **Cor de destaque escolhível** — as páginas da extensão deixam de ser sempre azuis. Seis cores (azul, roxo, verde, âmbar, rosa e ciano) mais o padrão **Automático**, que herda do tema do editor como sempre foi — quem não escolher nada não vê diferença. A cor alcança botões, item ativo da navegação, anéis de foco, badges de versão e a animação do título, nas cinco páginas. A paleta é fechada porque o valor entra direto em CSS: cada tom foi verificado com o texto que vai por cima e passa o mínimo AA de 4,5:1, com o hover escurecendo em vez de clarear, que reduziria o contraste. Não altera o realce de sintaxe, que tem esquema próprio +- **Controle do histórico na página de configurações** — as chaves `server.history.enabled` e `server.history.sensitiveCommands` existiam mas só podiam ser editadas à mão no `config.json`. Ganham lugar na seção Servidor: um interruptor para guardar ou não os comandos enviados, e uma lista para os comandos do gamemode que recebem senha, além dos que a extensão já reconhece sozinha +- **Ícones na navegação da página de Configurações** — cada seção da barra lateral (Compilador, Includes, Build, Análise, Formatação, Nomenclatura, Sintaxe, Interface, Servidor) ganha um ícone que acompanha os estados de hover e ativo. O rótulo trunca com reticências se o painel apertar, e o ícone permanece ### Alterado +- **Painel de comandos do servidor revisto** — "Enviar" e "Limpar" viram ícones, e **Recentes** e **Favoritos** passam a dividir o mesmo espaço em duas abas com a contagem de itens; antes eram duas listas empilhadas, que espremiam o painel. A estrela dos favoritos deixa de ser um emoji e acompanha o tema — contornada quando o comando não é favorito, cheia quando é. O layout encolhe junto com o painel em vez de quebrar +- **Busca e paginação nas listas de comandos** — um campo de busca filtra as listas conforme se digita, e elas passam a carregar 20 itens por vez, com "Mostrar mais". Antes o histórico inteiro (até 200 comandos) era desenhado de uma vez. A contagem na aba mostra "99+" acima de cem, para não empurrar o rótulo +- **Rolagem das listas** — a barra usava o estilo padrão do navegador, larga e clara, destoando do painel; passa a usar as cores do tema e a altura recorta em linhas inteiras, sem cortar um item ao meio +- **Painel de comandos traduzido** — era a única página da extensão com o texto fixo no código, o que também deixava acentos de fora ("historico", "Ultimos"). Passa pelo mesmo caminho das demais e acompanha a configuração "Idioma da interface" nos cinco idiomas - **Mais codificações de caracteres** — os seletores de codificação (saída do compilador e log do servidor) passam a oferecer **UTF-8** e toda a família **Windows-1250 a 1257** (Europeu Central, Cirílico, Europeu Ocidental, Grego, Turco, Hebraico, Árabe, Báltico), além de Latin-1. Cobre projetos e logs em outros alfabetos além do padrão SA-MP. Rótulos regionais traduzidos por idioma - **Traduções completas (EN, ES, RO, RU)** — as mensagens de runtime (`l10n/`) e os títulos de comando/config (`package.nls.*`) foram totalmente traduzidos para inglês, espanhol, romeno e russo (antes só o esqueleto existia, com a maior parte ainda em português). Termos técnicos consagrados (pawncc, RCON, gamemode, filterscript, include, breakpoint, SA-MP, open.mp) mantidos em inglês - **Idioma da interface independente do editor** — nova configuração "Idioma da interface" (`ui.locale`): as páginas da extensão (Configurações, Ajuda, O que há de novo) passam a poder ter um idioma próprio, separado do idioma do editor e do idioma dos diagnósticos. Antes a UI seguia obrigatoriamente o idioma do editor (limitação do `vscode.l10n`); agora as WebViews traduzem a partir dos bundles `l10n/` conforme `ui.locale`. Padrão "Automático" (segue o editor) - **Seletor de idioma com os 5 idiomas** — os seletores de idioma (interface e diagnósticos/debugger) na página de configurações passam a oferecer **Español, Română e Русский** além de Automático, Português e English. O de diagnósticos espelha o que a engine entrega; cada opção aparece no próprio idioma (endônimo) - **Política de uso de IA** — novo `AI-POLICY.md` (referenciado no README, CONTRIBUTING e CODE_OF_CONDUCT): o uso de IA é permitido, quem contribui é o responsável pelo que envia, sem co-autoria de IA e sem preconceito quanto ao seu uso -- **Dependências** — `typescript` para `^7.0.2` e `@types/node` para `^26.1.2` -- **CI — GitHub Actions atualizadas** (pinadas por SHA): `github/codeql-action` 4.36.3 → 4.37.6 (passos `init`, `analyze` e `upload-sarif` mantidos alinhados na mesma versão), `actions/checkout` 7.0.0 → 7.0.1, `actions/setup-node` 6.4.0 → 7.0.0, `actions/stale` 10.3.0 → 11.0.0, `ossf/scorecard-action` 2.4.3 → 2.4.4 e `softprops/action-gh-release` 3.0.1 → 3.0.2 -- **Docs (CI)** — `pymdown-extensions` atualizado no grupo pip da documentação +- **Depreciação por `#pragma deprecated`** — marcar uma função como descontinuada passa a usar a diretiva do próprio compilador Pawn, na linha anterior à declaração, no lugar do comentário `// @DEPRECATED` que a extensão reconhecia antes. O texto após a diretiva é opcional e, quando presente, aparece junto do aviso — normalmente é onde se diz o que usar no lugar: + + ```pawn + #pragma deprecated Use BanPlayerFor em vez desta + stock BanTemporario(playerid, seconds) { } + ``` + + Como no compilador, a diretiva marca a **próxima** declaração e não tem forma na mesma linha. O que é coberto não mudou: `native`, `stock`, `public`, `forward`, `static`, `#define`, variáveis globais e `#include`. **Quem usava `// @DEPRECATED` precisa trocar pela diretiva** — o marcador antigo deixou de ser reconhecido, e o autocomplete do `@`, que existia só para inseri-lo, passou a oferecer as tags de documentação (`@param`, `@return`, `@remarks`) dentro de comentários +- **Compilador: a 3.10.10 também foi testada** — a página de Ajuda afirmava que a 3.10.11 era "a única existente e a testada". A 3.10.10 do compilador do open.mp também funciona, incluindo a depuração; no Windows a depuração ainda não foi verificada. A 3.10.11 segue sendo a recomendada +- **Depurador (PawnPro Debugger) para 0.2.0** — ver o [detalhamento da versão](https://github.com/NullSablex/PawnPro-Debugger/releases/tag/v0.2.0) +- **Motor de análise (engine) para 1.4.0** — ver o [detalhamento da versão](https://github.com/NullSablex/PawnPro-Engine/releases/tag/v1.4.0) +- **Dependências** — `typescript` para `^7.0.2`, `@types/node` para `^26.4.0`, `@types/vscode` para `1.134.0`, `esbuild` para `^0.28.2` e `vscode-languageclient` para `^10.1.1` +- **CI — GitHub Actions atualizadas** (pinadas por SHA): `github/codeql-action` 4.36.3 → 4.37.9 (passos `init`, `analyze` e `upload-sarif` mantidos alinhados na mesma versão), `actions/checkout` 7.0.0 → 7.0.1, `actions/setup-node` 6.4.0 → 7.0.0, `actions/stale` 10.3.0 → 11.0.0, `ossf/scorecard-action` 2.4.3 → 2.4.4 e `softprops/action-gh-release` 3.0.1 → 3.0.3 +- **Docs (CI)** — `mkdocs-material` para 9.7.7 e `pymdown-extensions` para 11.0.2 no grupo pip da documentação (pinados por hash) +- **Dependabot — um PR por ecossistema** — as atualizações passam a ser agrupadas por ecossistema (npm, GitHub Actions, pip) em vez de abrir um PR por dependência, reduzindo o ruído de manutenção +- **Scorecard e CodeQL sob demanda** — os workflows de análise do OpenSSF Scorecard e do CodeQL passam a aceitar disparo manual (`workflow_dispatch`), sem depender do agendamento - **Segurança de dependências** — atualizações de dependências transitivas do npm sinalizadas pelo Dependabot (grupo `npm_and_yarn`, incluindo `brace-expansion` e `js-yaml`) - **Governança do repositório** — templates de *issue* (formulários) e de *pull request*, auto-classificação de PRs por caminho (labels de área), e `SECURITY.md` revisado (deixa de listar dependências empacotadas — o `.vsix` é a fonte da verdade do que é distribuído) +- **Página de configurações em painéis estreitos** — as larguras dos controles eram fixas e, num painel estreito, espremiam o rótulo ao lado; passam a ceder proporcionalmente, mantendo a medida atual em tela larga. O mesmo vale para o recuo lateral das páginas de Ajuda e O que há de novo, onde 3rem fixos consumiam 30% da largura disponível +- **Seta do grupo de estilos de nomenclatura** — era o caractere `▸`, desenhado pela fonte do sistema e destoando dos ícones da página; vira um triângulo próprio, no mesmo traço do resto da interface +- **Refinamentos visuais do painel do servidor** — cada ícone de estado vazio recebe a cor do que representa (a estrela dos favoritos no amarelo da estrela marcada, a lupa da busca sem resultado no tom de aviso), o espaçamento passa a seguir uma escala única em vez de valores avulsos, e o estado vazio ocupa a altura da lista em vez de ficar encostado no campo de busca. +- **Textos do painel mais diretos** — o placeholder e a dica ocupavam mais espaço do que informavam; viram "Digite um comando" e uma linha que responde à dúvida real de quem usa o painel: escreve-se sem barra (`gmx`, `kick 0`), porque o prefixo `rcon` já é removido no envio. + +### Segurança +- **Segurança do envio por RCON** — o protocolo do SA-MP manda a senha em **texto claro** por UDP, sem cifra nem desafio. O envio direto passa a valer só para o servidor **local**; para um remoto, o painel usa o terminal, que não trafega credencial. A resposta passa a ser conferida (origem e assinatura do protocolo) antes de aparecer no painel — antes, qualquer pacote UDP que chegasse à porta era exibido como se fosse do servidor. Senhas com acento deixam de ser corrompidas na montagem do pacote, e campos acima do limite do protocolo falham com erro em vez de gerar um pacote inválido. Um `login ` digitado sem o prefixo `rcon` também tem a senha removida antes de ir para o log e o histórico — antes a limpeza só valia depois de `rcon ` +- **Estado local protegido** — `.pawnpro/state.json` guarda o histórico de comandos do servidor e era criado com a permissão padrão, legível por outros usuários da máquina, e sem nada que impedisse o commit. Passa a ser gravado com permissão restrita ao dono (0600) e a pasta `.pawnpro/` ganha um `.gitignore` próprio cobrindo o arquivo — sem tocar no `.gitignore` da raiz, que é do projeto +- **Comandos com credencial não são mais guardados** — o histórico e os favoritos vão para `.pawnpro/state.json`, em texto claro dentro do projeto; um `login`, `rcon_password` ou `changepassword` ficava registrado ali e podia ser commitado junto. Também é reconhecida a senha passada como **argumento** (`--senha abc123`, `auth token xK9mP2qL`) e um termo solto que só possa ser credencial, sem afetar argumentos comuns como `kick 0` ou `setpos 1.5 -2.0`. O projeto pode listar os próprios comandos em `server.history.sensitiveCommands`, ou desligar o registro por completo com `server.history.enabled`. Esses comandos continuam sendo enviados, só não são gravados — e o que já havia sido guardado é removido ao abrir o painel + ### Corrigido +- **Ícone da busca sem resultado com aparência de campo de texto** — o ícone do estado vazio recebe o tipo como classe; quando a busca não encontrava nada o tipo era `search`, que colidia com o seletor do próprio campo de busca e vestia o ícone de largura, borda e fundo de input. O seletor passa a ser ancorado no elemento +- **Textos do painel encolhiam sem necessidade** — as consultas de tamanho mediam a janela inteira (`vw`), então uma janela estreita reduzia as fontes ao mínimo mesmo com o painel tendo espaço. Passam a medir o próprio painel, e os textos só cedem quando ele realmente aperta +- **Dois scrolls concorrentes no painel** — a página e a lista rolavam separadamente, e o conteúdo podia empurrar o painel além da altura disponível. A lista passa a ocupar o espaço restante e a rolar sozinha +- **Estilos de nomenclatura em grade irregular** — a grade estava fixada em três linhas por duas colunas, seis células para cinco estilos, e o último caía sozinho numa linha com um vão ao lado +- **Rótulo dos comandos sensíveis colapsado** — o campo usa um controle de largura total, mas a linha não tinha a classe que permite a quebra; sem ela o controle disputava o eixo horizontal com o rótulo, que quebrava uma palavra por linha sob o botão de adicionar +- **Blocos de código na página "O que há de novo"** — o renderizador de Markdown da página não conhecia blocos cercados por crases: as cercas apareciam literalmente e o código dentro delas era tratado como texto comum, perdendo a formatação e ganhando destaque em pedaços soltos. Passam a virar blocos de código de verdade, com o conteúdo intacto — dentro deles nada é interpretado como marcação +- **Hierarquia de listas na página "O que há de novo"** — comparado com o renderizador do GitHub, o parser de Markdown da página divergia em dois pontos: a sub-lista era fechada fora do item pai, deixando os sub-itens como irmãos em vez de filhos, e o texto que continuava um item depois de um bloco de código perdia o vínculo com ele, virando um parágrafo solto com a cor de descrição. Uma linha em branco também encerrava a lista, o que em Markdown não acontece +- **X de limpar a busca invisível** — no painel do servidor, o botão de limpar o campo de busca apontava a máscara para uma variável de `:root`, que não alcança o pseudo-elemento do input por ele viver no shadow DOM; restava um quadrado da cor de fundo +- **Detecção de open.mp vs SA-MP trocada** — o tipo do servidor era decidido só pela presença de um `config.json` na pasta, e isso errava nos dois sentidos: um servidor **open.mp recém-baixado ainda não tem `config.json`** (ele é gerado na primeira execução) e era tratado como SA-MP; um servidor **SA-MP com um `config.json` de outra ferramenta** na mesma pasta era tratado como open.mp. O erro se propagava para o arquivo de log acompanhado, a leitura de RCON e o preflight do depurador — que checava a pasta e o registro errados. A detecção passa a olhar, em ordem: o **executável** (`omp-server` vs `samp03svr`/`samp-server`), a pasta **`components/`**, um `config.json` que tenha mesmo as **chaves do open.mp** (e não qualquer JSON homônimo) e, por fim, o `server.cfg`. Definir `server.type` como `samp` ou `omp` na configuração continua tendo precedência sobre a detecção - **Descrição enganosa do seletor de idioma** — dizia "Vazio segue o editor", mas a opção correspondente que o usuário vê é "Automático" (não há opção "vazio" visível). Reescrita para "'Automático' acompanha o idioma do editor" - **CI: saudação a novos contribuidores falhando** — o workflow `Greetings` usava os inputs no formato antigo (`repo-token`, `issue-message`, `pr-message`), ignorados pela `actions/first-interaction` v3.x, o que abortava a action com `Input required and not supplied: issue_message`. Renomeados para `repo_token`, `issue_message` e `pr_message`. Além disso, o job passa a ser pulado quando o autor é um bot (`if: !endsWith(github.actor, '[bot]')`), evitando saudar automações como o Dependabot - **CI: análise CodeQL falhando por versão inconsistente** — nos bumps do `codeql-action`, os passos `init` e `analyze` chegaram a ficar em versões diferentes (o que quebra o job "Analyze TypeScript"). Passam a ser atualizados sempre juntos, no mesmo SHA +### Documentação +- **Guia do servidor** (`docs/server.md`) — página nova: iniciar, parar e reiniciar; envio de comandos por RCON com a senha lida do `server.cfg`/`config.json`; as abas de recentes e favoritos com busca; o que não é guardado no histórico e por quê; e o acompanhamento do log, com a limitação a Linux e macOS. A página de Ajuda já apontava para ela +- **Títulos de comando traduzidos em espanhol, romeno e russo** — os nomes que aparecem na paleta de comandos (`PawnPro: Compilar arquivo atual`, `PawnPro: Iniciar Servidor`, …) ainda estavam em inglês nesses três idiomas: os arquivos `package.nls.*` traziam os valores ingleses como marcador, com um comentário pedindo tradução. As 22 chaves em uso passam a estar traduzidas nos cinco idiomas, e as 36 chaves que sobraram da época em que a configuração vivia no `settings.json` do editor foram removidas +- **Documentação atualizada para a 3.5.0** — o padrão próprio de nomenclatura e a cor de destaque entram no guia de recursos e na referência de configuração; as chaves `server.history.enabled` e `server.history.sensitiveCommands` entram na tabela, onde faltavam; a descrição do painel do servidor deixa de citar botões que viraram abas; o `PP0019` entra na tabela de diagnósticos e a contagem passa de 18 para 19 códigos no README e na página inicial. No guia do assistente de nomes, o exemplo de configuração mostrava os estilos como texto e citava uma categoria `enums` inexistente — são listas, e as categorias são `constants` e `macros` + ## [3.4.2] - 04/07/2026 > As versões **3.4.0** e **3.4.1** foram publicadas sem o binário do depurador no diff --git a/CLAUDE.md b/CLAUDE.md index bf318c0..be06eb0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -142,7 +142,7 @@ O que vai no VSIX: `out/editor/extension.js`, `engines/`, `syntaxes/`, `template ## Diagnósticos conhecidos do motor -Ver [docs/features.md](docs/features.md) para a tabela completa de códigos PP0001–PP0013. +Ver [docs/features.md](docs/features.md) para a tabela completa de códigos PP0001–PP0019. --- diff --git a/README.md b/README.md index 7e3668d..39d2362 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ [![CodeQL](https://img.shields.io/github/actions/workflow/status/NullSablex/PawnPro/codeql.yml?style=flat-square&logo=github&label=CodeQL)](https://github.com/NullSablex/PawnPro/actions/workflows/codeql.yml) [![Security](https://img.shields.io/github/actions/workflow/status/NullSablex/PawnPro/security.yml?style=flat-square&logo=github&label=Security)](https://github.com/NullSablex/PawnPro/actions/workflows/security.yml) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/NullSablex/PawnPro/badge?style=flat-square)](https://scorecard.dev/viewer/?uri=github.com/NullSablex/PawnPro) + [![Downloads](https://img.shields.io/github/downloads/NullSablex/PawnPro/total?style=flat-square&logo=github&label=downloads)](https://github.com/NullSablex/PawnPro/releases) + [![Stars](https://img.shields.io/github/stars/NullSablex/PawnPro?style=flat-square&logo=github&label=stars)](https://github.com/NullSablex/PawnPro/stargazers) [![License](https://img.shields.io/badge/licença-Source--Available-blue?style=flat-square)](LICENSE.md) ![Windows x64](https://img.shields.io/badge/Windows-x64-0078D4?style=flat-square&logo=windows11&logoColor=white) @@ -17,46 +19,143 @@ ![macOS x64](https://img.shields.io/badge/macOS-x64%20·%20arm64-000000?style=flat-square&logo=apple&logoColor=white) -Extensão para desenvolvimento em **Pawn** (SA-MP e open.mp) no Visual Studio Code e VSCodium: IntelliSense e diagnósticos por um motor LSP em Rust, com ferramentas integradas para edição, compilação, depuração e gerenciamento de servidor. - -## Recursos - -- **IntelliSense** — auto-complete, hover, signature help, CodeLens (referências) e coloração semântica para Pawn, cobrindo os includes transitivos. -- **Diagnósticos** — 18 códigos `PP####` para includes não encontrados, erros estruturais, código morto, depreciação, nomenclatura e mais (ver [docs/features.md](docs/features.md)). -- **Compilação** — `Ctrl+Alt+B` compila o `.pwn` ativo; detecção automática do `pawncc` via `$PAWNCC`, `$PATH` e subdiretórios do workspace. -- **Depuração** — sessão de depuração via DAP (`F5`): breakpoints (simples, condicionais, por contagem, logpoints), passo a passo, inspeção de variáveis e watch. Usa um plugin de servidor (SA-MP / open.mp); ver [docs/debugging.md](docs/debugging.md). -- **Formatação** — formatação de documento e de seleção (`Ctrl+K Ctrl+F`), com estilos configuráveis (Allman, K&R, compacto ou personalizado). -- **Assistente de nomenclatura** — avisos opcionais sobre nomes pobres e convenções de caixa por categoria de identificador. -- **Servidor SA-MP / open.mp** — Start, Stop, Restart e envio de comandos RCON pelo terminal integrado; painel lateral com histórico e favoritos. -- **Templates** — Gamemode e Filterscript (open.mp e SA-MP) e Include (open.mp), filtrados pela plataforma configurada. -- **Biblioteca de recursos** — vitrine de plugins, filterscripts e includes (prévia). -- **Painel de configurações** — interface gráfica (`PawnPro: Configurações`) com todas as opções editáveis sem tocar em JSON. -- **Temas de sintaxe** — esquemas claro/escuro (clássico e moderno) com reaplicação automática ao trocar o tema do editor. -- **Multi-idioma** — interface e diagnósticos em português, inglês, espanhol, romeno e russo, configuráveis de forma independente. -- **Realce de sintaxe adicional** — `.toml`/`package.lock` e prévia de cor (`swatch`) em literais `0xRRGGBBAA`. -- **Motor Rust LSP** — análise nativa via [pawnpro-engine](https://github.com/NullSablex/PawnPro-Engine); iniciado automaticamente se o binário estiver presente em `engines/`. -- **Arquivos Pawn** — `.pwn`, `.inc`, `.p` e `.pawn` recebem IntelliSense e diagnósticos. +**Uma IDE completa para Pawn dentro do seu editor.** O PawnPro é uma extensão para +VS Code e VSCodium que traz para o desenvolvimento SA-MP / open.mp o que outras +linguagens têm há anos: um motor de análise que entende o seu código de verdade, +compilação e depuração com um atalho, e o servidor sob controle sem sair do editor. + +> Escrever gamemode não precisa ser editor de texto, terminal e ALT+TAB. + +## Por que existe + +Quem desenvolve em Pawn conhece o ciclo: salvar, trocar de janela, compilar, +ler um erro sem contexto, voltar, procurar a linha. Erro de digitação num nome de +função? Só se descobre no compilador. Quer saber o que aquele native faz? Abre o +`.inc` e lê o código. + +O PawnPro corta esse ciclo. O código é analisado enquanto você escreve — por um +**motor próprio escrito em Rust**, não por expressões regulares — então o erro +aparece na linha onde está, o autocomplete conhece os seus includes, e a +documentação da função aparece ao passar o mouse. + +## O que você ganha + +### Enquanto escreve + +- **Autocomplete que conhece o seu projeto** — funções, natives, constantes e + macros de todos os `.inc` que você inclui, transitivamente. Ordenado por + proximidade: o que está perto do cursor vem primeiro. +- **Documentação no hover e no signature help** — o comentário acima da função + vira texto formatado, nos formatos **Javadoc** (`@param`) e **XMLdoc** + (``, o que o `omp-stdlib` do open.mp usa). Ao digitar a chamada, a + descrição do parâmetro em que você está aparece sozinha. +- **19 diagnósticos** com código próprio (`PP####`) — include que não existe, + chave sem fechar, código inalcançável, função depreciada, variável não usada. + **13 deles têm correção automática** (`Ctrl+.`). +- **Ir para a definição, referências e renomear** em todo o projeto. +- **Prévia de cor** nos literais `0xRRGGBBAA` e `{RRGGBB}`, com seletor de cores. + +### Na hora de compilar e testar + +- **`Ctrl+Alt+B` compila** — o `pawncc` é encontrado sozinho (via `$PAWNCC`, + `PATH` ou dentro do projeto). Os erros voltam clicáveis no painel de problemas. +- **`F5` depura de verdade** — breakpoints (simples, condicionais, por contagem e + logpoints), passo a passo, inspeção de variáveis, watch, call stack e + data breakpoints. Depuração real de gamemode, não `print()` espalhado. +- **Servidor no painel lateral** — iniciar, parar, reiniciar e enviar comandos + RCON sem abrir terminal. Histórico e favoritos com busca, e o log acompanhado + em tempo real. + +### Para o projeto não virar bagunça + +- **Formatação** com estilos configuráveis (Allman, K&R, compacto ou seu próprio). +- **Assistente de nomenclatura** — convenções de caixa por categoria de + identificador, e um **padrão próprio por expressão regular** quando os estilos + prontos não descrevem a convenção da casa (`g_` nas globais, por exemplo). +- **Templates** de gamemode, filterscript e include, já no formato certo da + plataforma que você usa. + +### E porque ninguém programa igual + +- **Cinco idiomas** — português, inglês, espanhol, romeno e russo. A interface e + os diagnósticos são configuráveis **de forma independente**: dá para ter o + editor em português e os erros em inglês. +- **Painel de configurações visual** — todas as opções sem tocar em JSON. +- **Temas de sintaxe** claro e escuro, que acompanham o tema do editor. +- **Cor de destaque** — seis cores para a interface da extensão, ou o padrão que + herda do seu tema. + +## Instalação + +Procure por **PawnPro** no marketplace do seu editor, ou: + +``` +ext install NullSablex.pawnpro +``` + +Também disponível no [Open VSX](https://open-vsx.org/extension/NullSablex/pawnpro) +para VSCodium e editores derivados. + +**Funciona em Windows, Linux e macOS** (x64 e arm64). O motor de análise é um +binário nativo que acompanha a extensão — não precisa instalar Rust, Node nem +nada além do editor. + +## Primeiros passos + +1. Abra a **pasta** do seu gamemode (não o arquivo solto — a extensão precisa da + pasta para achar os includes). +2. Abra um `.pwn`. O motor inicia sozinho e começa a analisar. +3. `Ctrl+Alt+B` para compilar, `F5` para depurar. + +Se os includes não forem encontrados, abra **PawnPro: Configurações** pela barra +de status e aponte o caminho do `pawno/include` — ou deixe a detecção automática +procurar nos lugares usuais. ## Configuração -As configurações são gerenciadas por arquivos JSON independentes do editor: +Independente do editor, em JSON simples: | Arquivo | Escopo | |---------|--------| | `~/.pawnpro/config.json` | Global (todos os projetos) | -| `.pawnpro/config.json` | Projeto (sobrescreve global) | -| `.pawnpro/state.json` | Estado local (favoritos, histórico do servidor) | +| `.pawnpro/config.json` | Projeto (sobrescreve o global) | +| `.pawnpro/state.json` | Estado local (favoritos e histórico do servidor) | + +Nada disso precisa ser editado à mão: o painel de configurações cobre todas as +chaves. A referência completa está em +[docs/configuration.md](docs/configuration.md), e os comandos em +[docs/commands.md](docs/commands.md). + +## Documentação + +| | | +|---|---| +| [Recursos](docs/features.md) | O que a extensão faz, em detalhe | +| [Configuração](docs/configuration.md) | Todas as chaves | +| [Comandos](docs/commands.md) | Paleta e atalhos | +| [Servidor](docs/server.md) | Iniciar, RCON, favoritos e log | +| [Depuração](docs/debugging.md) | Como configurar o depurador | +| [Assistente de nomes](docs/naming-assistant.md) | Convenções e padrões próprios | + +Site completo: **[pawnpro.nullsablex.com](https://pawnpro.nullsablex.com)** + +## Como funciona por dentro -Acesse o painel de configurações pelo item **PawnPro** na barra de status → **Configurações**, ou pelo comando `PawnPro: Configurações` na paleta de comandos. +A análise não roda em JavaScript. É um processo separado — +[**pawnpro-engine**](https://github.com/NullSablex/PawnPro-Engine), escrito em +**Rust** — que conversa com o editor pelo protocolo LSP. Isso é o que permite +analisar um gamemode grande com todos os seus includes sem travar a digitação. -Para a referência completa de chaves, consulte [docs/configuration.md](docs/configuration.md). -Para a lista de comandos, consulte [docs/commands.md](docs/commands.md). +A depuração segue o mesmo princípio: um adaptador DAP na extensão e um plugin +dentro do servidor. -## Notas +## Bom saber -- O monitoramento de log do servidor funciona apenas em **Linux e macOS**. -- Firewalls/antivírus podem bloquear tráfego RCON (UDP) — libere a porta local se necessário. -- `${workspaceFolder}` é substituído automaticamente em caminhos de configuração. +- O acompanhamento de log do servidor funciona em **Linux e macOS**. +- O RCON do SA-MP é um protocolo antigo, que trafega a senha em texto claro. Por + isso o envio direto vale só para servidor **local**; para um remoto, a extensão + usa o terminal. Firewalls podem bloquear a porta UDP local. +- Comandos que pareçam carregar senha nunca são guardados no histórico. ## Contribuindo diff --git a/docs/configuration.md b/docs/configuration.md index 6091010..cf8172d 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -152,6 +152,10 @@ Observações: "clearOnStart": true, "output": { "follow": "visible" + }, + "history": { + "enabled": true, + "sensitiveCommands": [] } } } @@ -167,6 +171,8 @@ Observações: | `server.logEncoding` | `"windows1252"` | Codificação do arquivo de log: `utf8`, `windows1250`–`windows1257` ou `latin1` | | `server.clearOnStart` | `true` | Limpa o painel de saída ao (re)iniciar o servidor | | `server.output.follow` | `"visible"` | Rola automaticamente o painel de log: `"visible"` (quando visível), `"always"` ou `"off"` | +| `server.history.enabled` | `true` | Guarda em `.pawnpro/state.json` os comandos enviados ao servidor. `false` não registra nada. O arquivo é criado com permissão restrita ao seu usuário e não deve entrar no controle de versão | +| `server.history.sensitiveCommands` | `[]` | Comandos do seu gamemode que recebem senha ou token e não devem ser guardados, além dos que a extensão já reconhece (`login`, `rcon_password`, `password`, `changepassword`, `setpassword`, e senha anunciada por rótulo como `--senha abc`). Comparados pelo primeiro termo, sem diferenciar maiúsculas | ## Interface e idioma @@ -191,5 +197,6 @@ Observações: | `syntax.applyOnStartup` | `false` | Reaplicar o esquema ao iniciar (gerenciado automaticamente pelos comandos `applySyntaxScheme` e `resetSyntaxScheme`) | | `ui.showIncludePaths` | `false` | Exibe o caminho relativo de cada arquivo `.inc` na aba Includes da barra lateral | | `ui.animateTitle` | `false` | Anima as letras do título PawnPro no topo das páginas em sequência (teclado → bloco → cair), em loop com pausa | +| `ui.accent` | `""` | Cor de destaque das páginas da extensão (botões, item ativo, foco, badges): `""` (automático, herda do tema do editor), `"blue"`, `"purple"`, `"green"`, `"amber"`, `"pink"` ou `"teal"`. Não altera o realce de sintaxe | | `ui.locale` | `""` | Idioma das **páginas da extensão** (Configurações, Ajuda, O que há de novo): `""` (automático, segue o editor), `"pt-BR"`, `"en"`, `"es"`, `"ro"` ou `"ru"`. Independente de `locale` | | `locale` | `""` | Idioma dos **diagnósticos** do motor LSP e do debugger: `""` (automático, segue o editor), `"pt-BR"`, `"en"`, `"es"`, `"ro"` ou `"ru"` | diff --git a/docs/debugging.md b/docs/debugging.md index d66b7cf..5729edb 100644 --- a/docs/debugging.md +++ b/docs/debugging.md @@ -101,6 +101,32 @@ Pronto — isso é feito **uma única vez** por servidor. A extensão recompila com `-d3`, verifica o plugin, sobe o servidor e conecta. Ao atingir um breakpoint, a execução pausa e você vê as **variáveis** em escopo. +### O que dá para fazer na pausa + +- **Percorrer a pilha de chamadas** — a lista de frames mostra quem chamou quem; + clicar em um frame faz a inspeção seguir para ele. +- **Inspecionar arrays e strings** — arrays expandem elemento a elemento, e um + array de char é mostrado como texto quando o conteúdo é uma string. +- **Avaliar expressões** no watch e no hover: aritmética (`+ - * / %`, com o + truncamento do Pawn) e comparação (`== != < > <= >=`) sobre literais, + variáveis e `arr[i]`. O console e o watch sugerem as variáveis em escopo. +- **Editar valores** — `x = 1` ou `arr[i] = 10`. O array inteiro não é editável, + só os elementos. +- **Ler a memória** — hex view da memória de dados a partir de qualquer variável. + +### Tipos de breakpoint + +Além do breakpoint de linha (**condicional**, por **contagem de acertos** e +**logpoint**): + +- **Data breakpoint** — pausa quando um valor muda, seja global, local ou um + elemento de array (`arr[3]`). Watches de variáveis locais expiram quando a + função dona retorna. +- **Breakpoint de função** — para ao entrar numa função pelo nome. +- **Pausa em erro de runtime** — divisão por zero, índice de array fora do + limite, colisão entre pilha e heap, underflow de heap e acesso inválido à + memória. Liga e desliga pelo painel de breakpoints. + A **saída do servidor** (incluindo `print` e logs do gamemode) aparece no painel **Console de Depuração** do editor — não é preciso abrir um terminal à parte. @@ -134,9 +160,10 @@ Mesmo que você escolha iniciar assim mesmo, a depuração só funciona com o pl correto: um plugin homônimo não abre o canal de depuração, então o adaptador falha ao conectar com uma mensagem explicando as causas prováveis. -## Limitações (v1) +## Limitações - **Alvo é desenvolvimento local.** Não é para servidor de produção com jogadores. - O `.amx` precisa ter sido compilado com `-d3` (a extensão cuida disso). - Sem *hot-reload* / *edit-and-continue*. -- **Call stack ainda mostra só o frame atual** (não percorre a cadeia de chamadas). +- Nas expressões do watch e do hover, um operador de topo por vez — sem + encadear várias operações na mesma expressão. diff --git a/docs/features.md b/docs/features.md index f55233f..a48c09c 100644 --- a/docs/features.md +++ b/docs/features.md @@ -14,8 +14,8 @@ A análise de código é feita por um motor nativo em Rust ([pawnpro-engine](htt | `PP0004` | Aviso | `public`/`stock`/`static` sem corpo | | `PP0005` | Aviso¹ | Variável declarada e não utilizada | | `PP0006` | Aviso¹ | Função `stock`/`static` não utilizada | -| `PP0007` | Aviso | Uso de símbolo marcado com `@DEPRECATED`, ou símbolo de include depreciado | -| `PP0008` | Aviso | `#include` marcado com `@DEPRECATED` | +| `PP0007` | Aviso | Uso de símbolo marcado com `#pragma deprecated`, ou símbolo de include depreciado | +| `PP0008` | Aviso | `#include` precedido de `#pragma deprecated` | | `PP0009` | Hint | Parâmetro de função não utilizado | | `PP0010` | Aviso | Função chamada não declarada em nenhum include ativo | | `PP0011` | Hint | `#define` declarado mas não utilizado | @@ -26,6 +26,7 @@ A análise de código é feita por um motor nativo em Rust ([pawnpro-engine](htt | `PP0016` | Hint | Função sem keyword declarada mas nunca chamada | | `PP0017` | Aviso | Indentação inconsistente dentro de um bloco (equivale ao `warning 217` do compilador) | | `PP0018` | Hint | Nome de identificador pobre (assistente de nomes; desligado por padrão) | +| `PP0019` | Aviso | `#pragma` com nome desconhecido (com sugestão do nome provável) ou `#pragma deprecated` com a mensagem entre aspas. Tem quick fix | > ¹ Marcados com `unnecessary` — o editor exibe o símbolo desbotado/riscado além do sublinhado de aviso. @@ -36,14 +37,50 @@ A análise de código é feita por um motor nativo em Rust ([pawnpro-engine](htt ## IntelliSense - **Auto-complete** — funções (`native`, `stock`, `public`, `forward`, `static`), macros (`#define`) e variáveis de todos os includes transitivos; parâmetros com snippets; itens depreciados marcados visivelmente. -- **Hover** — assinatura e comentário de documentação; em `#include` exibe o caminho resolvido e o doc do topo do arquivo. -- **Signature Help** — parâmetro ativo destacado ao digitar `(` e `,`. +- **Hover** — assinatura e comentário de documentação formatado (ver [Comentários de documentação](#comentários-de-documentação)); em `#include` exibe o caminho resolvido e o doc do topo do arquivo. +- **Signature Help** — parâmetro ativo destacado ao digitar `(` e `,`, com a descrição daquele parâmetro quando a função está documentada. - **CodeLens** — contagem de referências acima de cada função; clique para listar todas no painel. - **Semantic Tokens** — coloração semântica para funções, incluindo chamadas multiline. -- **Semantic Tokens** — coloração semântica para funções, incluindo chamadas multiline. - **Renomeação (`F2`)** — renomeia o símbolo sob o cursor em todas as ocorrências do projeto aberto. - **Snippets** — estruturas prontas para controle de fluxo, funções, variáveis, includes, callbacks SA-MP/open.mp e utilitários como `CMD`, `SetTimer` e `fmsg`. Lista completa em [docs/snippets.md](snippets.md). +## Comentários de documentação + +O comentário escrito imediatamente acima de uma declaração alimenta o hover, o *signature help* e o autocomplete. Dois formatos são reconhecidos, detectados pelo próprio conteúdo. + +**Javadoc** — `@param`, `@return`, `@remarks` (ou `@note`): + +```pawn +/** + * Bane o endereço de um jogador conectado, com um motivo. + * + * @param playerid o jogador a ser banido + * @param reason[] o motivo, mostrado a ele e guardado no registro + * @return 1 sempre + */ +native BanEx(playerid, const reason[]); +``` + +**XMLdoc** — o formato usado pelo `omp-stdlib` do open.mp: + +```pawn +/** + * omp_actor + * Verifica se um ator está transmitido para um jogador. + * O ID do ator + * O ID do jogador + * + * 1 se estiver, 0 caso contrário. + */ +native bool:IsActorStreamedIn(actorid, playerid); +``` + +No XMLdoc, a formatação embutida vira texto formatado (`` negrito, `` código, `
` quebra de linha), e ``, `` e os links `
` — que servem ao gerador da wiki do open.mp — não aparecem no hover. + +Em ambos os formatos, cada parâmetro é casado **pelo nome** (o `[]` de array é ignorado) e não pela posição, então o comentário pode omitir parâmetros ou listá-los fora de ordem. O hover mostra o bloco inteiro com os títulos das seções no idioma configurado; o *signature help*, a descrição do parâmetro sob o cursor; o autocomplete, apenas o resumo. + +Um comentário comum, sem nenhuma tag, continua aparecendo como descrição. + ## Formatação de código Formatação guiada pela estrutura do código (não por heurística de texto), validada contra o compilador `pawncc`. @@ -58,7 +95,8 @@ Verificação de qualidade de nomes, **offline e determinística** (sem IA, sem - Sinaliza nomes **curtos** (com tolerância a índices de loop), **genéricos** (`tmp`, `foo`, … — lista editável) e **fora do estilo** de caixa configurado. - **Estilo por categoria, multi-seleção** — funções, globais, locais, constantes, macros e parâmetros aceitam um ou mais estilos (`camelCase`/`snake_case`/`PascalCase`/`UPPER_CASE`/`Capitalized_Snake`); o nome é aceito se casar com qualquer um deles. A referência de cada convenção (o que casa e o que não casa) está em [Nomenclaturas aceitas](configuration.md#nomenclaturas-aceitas). -- **Quick-fix** — code action que oferece converter o nome para o estilo configurado. +- **Padrão próprio** — além dos estilos embutidos, a categoria aceita uma expressão regular escrita entre barras (`/^g_[a-z][a-zA-Z0-9]*$/`), para convenções que os cinco estilos não descrevem — prefixo de global, notação húngara. Convive com eles: o nome passa se casar com qualquer critério. O padrão é âncorado (descreve o nome inteiro) e um padrão inválido é ignorado sem afetar os demais. +- **Quick-fix** — code action que oferece converter o nome para o estilo configurado. Não se aplica ao padrão próprio: de um regex arbitrário dá para saber se o nome passa, não como reescrevê-lo. - **Listas em arquivos** — nomes proibidos e índices de loop ficam em arquivos `.ban`/`.allow` editáveis (com realce próprio). Ver o [guia de listas](naming-lists.md). ## Idiomas @@ -75,20 +113,23 @@ Vitrine para encontrar plugins, filterscripts e includes, aberta pelo comando ** > Nesta versão é uma **prévia** com catálogo de exemplo — a instalação ainda não está disponível. Fontes previstas: catálogo próprio + `packages.open.mp`. -## Depreciação com `@DEPRECATED` +## Depreciação com `#pragma deprecated` -O marcador `@DEPRECATED` (case-insensitive) pode ser usado de três formas: +A diretiva do compilador Pawn marca a **próxima** declaração. O texto que a segue é opcional e, quando presente, aparece junto do aviso — normalmente é onde se diz o que usar no lugar: ```pawn -// @DEPRECATED +#pragma deprecated stock MinhaFuncaoAntiga() { ... } -stock OutraFuncao() { ... } // @deprecated +#pragma deprecated Use BanPlayerFor em vez desta +stock BanTemporario(playerid, seconds) { ... } -/* @DEPRECATED */ +#pragma deprecated #include ``` +Como no compilador, não há forma na mesma linha da declaração. + - **Símbolo** (`native`, `stock`, `public`, `forward`, `static`, `#define`, variável global) → a declaração recebe PP0007 (hint visual) e qualquer uso também exibe **PP0007**. - **Par `forward`/`public`** — depreciar o `forward` marca automaticamente o `public` correspondente, e vice-versa. - **`#include`** → a linha do `#include` recebe **PP0008** e qualquer uso de qualquer símbolo daquele arquivo exibe **PP0007** com a mensagem *"pertence a um include depreciado"*. @@ -102,8 +143,10 @@ stock OutraFuncao() { ... } // @deprecated ## Servidor SA-MP / open.mp +> Guia de uso completo em [Servidor](server.md). + - **Start / Stop / Restart** via terminal integrado do editor. -- **Painel lateral** com campo de entrada de comandos, histórico (até 200 entradas) navegável por seta, favoritos e botões de limpar histórico/favoritos. +- **Painel lateral** com campo de entrada de comandos, histórico (até 200 entradas) navegável por seta e favoritos, divididos em duas abas com busca e paginação. Comandos que pareçam carregar senha são enviados mas não guardados; o registro pode ser desligado em `server.history.enabled`. - Envio via **RCON (UDP)** quando a senha está configurada (timeout 1500 ms); fallback para stdin do terminal. Bloqueado se a senha for vazia ou `changename`. Prefixos `rcon` e `rcon login ...` são removidos automaticamente antes do envio. - *Tail* do log do servidor com *follow* configurável — **exclusivo para Linux e macOS** (não disponível no Windows). - Detecção automática de executável do servidor nos subdiretórios: raiz do workspace, `server/`, `samp/`, `samp-server/`, `samp03/`, `open.mp/`. @@ -111,7 +154,9 @@ stock OutraFuncao() { ... } // @deprecated ## Depuração (DAP) -- **Depurador visual** para servidor local: breakpoints, *step*, inspeção de variáveis e *call stack* (`F5` / `launch.json` tipo `pawn`). +- **Depurador visual** para servidor local: breakpoints, *step*, inspeção de variáveis e *call stack* multi-frame navegável (`F5` / `launch.json` tipo `pawn`). +- **Breakpoints além da linha** — condicionais, por contagem de acertos, logpoints, **data breakpoints** (pausa quando um valor muda, inclusive em `arr[3]`), **por função** e **pausa em erro de runtime** (divisão por zero, índice fora do limite, colisão pilha/heap, underflow de heap e acesso inválido à memória). +- **Inspeção e edição** — arrays expansíveis, arrays de char mostrados como string, expressões no watch e no hover, autocomplete de variáveis em escopo, edição por expressão (`arr[i] = 10`) e leitura de memória em hex. - **Recompilação automática com debug info** — a extensão adiciona `-d3` ao compilar para depuração se você ainda não usa uma flag `-d` (sua configuração não é alterada). - **Preflight** — verifica se o plugin de depuração está instalado em `plugins/` e registrado (`server.cfg` ou `config.json`) antes de iniciar, avisando o que falta. - **Servidor iniciado automaticamente** com as variáveis de depuração; o adaptador conecta ao plugin via socket local. @@ -125,6 +170,7 @@ stock OutraFuncao() { ... } // @deprecated - **Temas de sintaxe** — cinco esquemas nomeados: `auto`, `classic_white`, `classic_dark`, `modern_white`, `modern_dark` (mais `none` para desativar). O esquema `auto` seleciona automaticamente entre Clássico Claro e Clássico Escuro conforme o tema ativo do editor. Ao escolher um esquema via comando, a reaplicação automática na inicialização é habilitada automaticamente. Reaplica automaticamente ao trocar o tema do editor quando `scheme` é `auto`. - **Templates** — cria Gamemode (open.mp ou SA-MP), Filterscript (open.mp ou SA-MP) e Include (open.mp); filtra automaticamente pela plataforma configurada (`analysis.sdk.platform`). Não há template de Include para SA-MP. - **Biblioteca de Recursos** — WebView para buscar plugins, filterscripts e includes, com modos de visualização em lista e grade, acessível via `pawnpro.openStore`. **Prévia:** atualmente exibe um catálogo de exemplo; a instalação ainda não está disponível. As fontes previstas são o catálogo próprio do PawnPro e `packages.open.mp`. +- **Cor de destaque** — seis cores (azul, roxo, verde, âmbar, rosa e ciano) para botões, item ativo, foco e badges das páginas da extensão, mais o padrão **Automático**, que herda do tema do editor. Não altera o realce de sintaxe. Configurável em `ui.accent`. - **Internacionalização** — interface e diagnósticos em PT-BR, EN, ES, RO e RU; idioma da interface via `ui.locale` e idioma do motor LSP/debugger via `locale` (independentes). - **Sugestão do Material Icon Theme** — na ativação, se o tema não estiver instalado, a extensão sugere instalá-lo (melhora os ícones das pastas). Dispensável de vez; nunca reaparece quando já presente. diff --git a/docs/index.md b/docs/index.md index 36c6dc5..258bae9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,7 +22,7 @@ Extensão moderna para desenvolver **Pawn** — com motor IntelliSense em Rust, ## Recursos - **IntelliSense completo** — auto-complete, hover, signature help, CodeLens e coloração semântica para Pawn, incluindo todos os includes transitivos. -- **Diagnósticos** — 18 códigos `PP####` cobrindo erros de estrutura, símbolos não declarados, código morto, depreciação e nomenclatura (ver [Recursos](features.md)). +- **Diagnósticos** — 19 códigos `PP####` cobrindo erros de estrutura, símbolos não declarados, código morto, depreciação e nomenclatura (ver [Recursos](features.md)). - **Compilação** — `Ctrl+Alt+B` compila o `.pwn` ativo; detecção automática do `pawncc`. - **Depuração** — sessão via DAP (`F5`) com breakpoints, passo a passo e inspeção de variáveis (ver [Depuração](debugging.md)). - **Formatação** — documento e seleção (`Ctrl+K Ctrl+F`), com estilos configuráveis. diff --git a/docs/naming-assistant.md b/docs/naming-assistant.md index c193a36..917a290 100644 --- a/docs/naming-assistant.md +++ b/docs/naming-assistant.md @@ -78,11 +78,14 @@ Em `.pawnpro/config.json`, seção `naming` (genérica, sem domínio): "naming": { "enabled": true, "style": { - "functions": "camelCase", // camelCase | snake_case | PascalCase | off - "globals": "camelCase", - "locals": "camelCase", - "constants": "UPPER_CASE", - "enums": "PascalCase" + // Lista por categoria: o nome passa se casar com QUALQUER item. + // Lista vazia desliga a checagem daquela categoria. + "functions": ["camelCase"], + "globals": ["camelCase", "/^g_[a-z][a-zA-Z0-9]*$/"], + "locals": ["camelCase"], + "constants": ["UPPER_CASE"], + "macros": ["UPPER_CASE"], + "parameters": ["camelCase"] }, "minLength": 2, "allowShortInLoops": ["i", "j", "k"], @@ -144,3 +147,9 @@ src/naming/ `parameters`), cada um `camelCase`/`snake_case`/`PascalCase`/`UPPER_CASE`/`Capitalized_Snake`/`off`. Padrão `off` em todas — só checa o que o usuário pedir. Ordem das regras: placeholder → comprimento → estilo (a mais específica vence). +- **Padrão próprio**: um item da lista entre barras (`/^g_[a-z][a-zA-Z0-9]*$/`) é + lido como expressão regular, e convive com os estilos embutidos — o nome passa + se casar com qualquer critério da categoria. O padrão é âncorado como + `^(?:…)$`: descreve o nome inteiro. Um padrão inválido é ignorado sem derrubar + os demais critérios. Não gera sugestão de renomeação: de um regex arbitrário + dá para saber se o nome passa, não como reescrevê-lo. diff --git a/docs/requirements.txt b/docs/requirements.txt index 6694e96..d443436 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -313,9 +313,9 @@ pygments==2.20.0 \ --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 # via mkdocs-material -pymdown-extensions==11.0.1 \ - --hash=sha256:db3943a62bab7e03af1364f0c4083e64b91fb097675a4b6cceccfbe9a77e5eb2 \ - --hash=sha256:dd2905ae6fc5b75582fafb139a1266ffc754705efa902aa50067fa7ff4f94ec0 +pymdown-extensions==11.0.2 \ + --hash=sha256:259910762019732caa1dfd76f3faa62c59f191d46573e80bcb1d13c0f675bbe5 \ + --hash=sha256:9506fcbe66fa355a775b768084334238dd6805020ac4b92bea0c0dda6f8f223d # via mkdocs-material python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ diff --git a/docs/server.md b/docs/server.md new file mode 100644 index 0000000..976f49e --- /dev/null +++ b/docs/server.md @@ -0,0 +1,94 @@ +# Servidor + +O PawnPro inicia o servidor SA-MP / open.mp, envia comandos por RCON e acompanha +o log — tudo pelo painel lateral, sem sair do editor. + + + +## Iniciar e parar + +Os comandos ficam na paleta (`Ctrl+Shift+P`) e no menu da barra de status: + +| Comando | O que faz | +|---|---| +| **PawnPro: Iniciar Servidor** | Sobe o servidor num terminal do editor | +| **PawnPro: Parar Servidor** | Encerra o processo | +| **PawnPro: Reiniciar Servidor** | Para e sobe de novo | +| **PawnPro: Exibir Console do Servidor** | Abre o painel de comandos | +| **PawnPro: Exibir Log do Servidor** | Abre o acompanhamento do log | + +Não é preciso configurar o caminho do executável: com `server.path` vazio, a +extensão procura nos subdiretórios usuais do projeto — a raiz, `server/`, +`samp/`, `samp-server/`, `samp03/` e `open.mp/`. + + + +## Enviar comandos + +O campo no topo do painel envia comandos ao servidor em execução. A senha do +RCON **não precisa ser digitada**: a extensão a lê do `server.cfg` (chave +`rcon_password`) ou do `config.json` do open.mp, e autentica sozinha. + + + +## Recentes e favoritos + +O painel tem duas abas: + +- **Recentes** — os comandos que você enviou, do mais novo para o mais antigo. +- **Favoritos** — os que você marcou com a estrela, sempre à mão. + +A estrela ao lado de cada linha alterna entre as duas. Com muitos comandos, o +campo de busca filtra por qualquer trecho, e a lista carrega mais sob demanda. + + + +### Onde isso fica guardado + +Em `.pawnpro/state.json`, dentro do projeto. O arquivo é criado com permissão +restrita ao seu usuário e **não deve entrar no controle de versão** — o +`.gitignore` do projeto já o cobre. + +Para não guardar nada, desligue **Guardar comandos enviados** nas configurações +(`server.history.enabled`). + +## Comandos com senha nunca são guardados + +Um comando que pareça carregar credencial é enviado normalmente, mas não entra +no histórico. A extensão reconhece sozinha: + +- comandos conhecidos de autenticação — `login`, `rcon_password`, `password`, + `changepassword`, `setpassword`; +- argumentos anunciados por rótulo — `--senha 1234`, `auth token abc`, `-pwd=x` + (também em inglês: `pass`, `pwd`, `key`, `secret`, `apikey`). + +Se o seu gamemode tem um comando próprio que recebe senha, acrescente-o em +**Comandos que não devem ser guardados** (`server.history.sensitiveCommands`). +A comparação é pelo primeiro termo, sem diferenciar maiúsculas. + + + +## Acompanhar o log + +O painel de log segue o arquivo do servidor em tempo real. + +> **Somente Linux e macOS.** O acompanhamento de log não funciona no Windows. + +Com `server.logPath` vazio, o arquivo é descoberto pelo tipo de servidor: SA-MP +usa `server_log.txt`; open.mp usa o `logging.file` do `config.json` (padrão +`log.txt`). + +A rolagem automática tem três modos em **Acompanhamento do log** +(`server.output.follow`): `visible` (só quando o painel está à vista, o padrão), +`always` e `off`. + +Se o log aparecer com acentos trocados, ajuste `server.logEncoding` — o padrão é +`windows1252`, a codificação usual do ecossistema Pawn. + + + +## Configuração + +As chaves ficam em `.pawnpro/config.json` e todas têm equivalente na página de +configurações. A referência completa está em +[Configuração](configuration.md#servidor). diff --git a/l10n/bundle.l10n.en.json b/l10n/bundle.l10n.en.json index cede0cb..0e3e130 100644 --- a/l10n/bundle.l10n.en.json +++ b/l10n/bundle.l10n.en.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Help and information", "Componentes, links e guia do depurador": "Components, links and debugger guide", "Compilador recomendado": "Recommended compiler", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compile your scripts with the **open.mp compiler** — version **3.10.11**, the only one available and the one currently tested. It is the **only tested compiler** and the **recommended** one, both for engine analysis and for debugging. Other compilers may produce incompatible code or debug information.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compile your scripts with the **open.mp compiler** — version **3.10.11** is the recommended one, and **3.10.10** has also been tested (on Windows, debugging has not been verified yet). It is the recommended compiler both for engine analysis and for debugging; others may produce incompatible code or debug information.", "Baixar o compilador do open.mp": "Download the open.mp compiler", "Componentes": "Components", "Extensão PawnPro": "PawnPro extension", @@ -283,5 +283,32 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Hebrew)", "Windows-1256 (Árabe)": "Windows-1256 (Arabic)", "Windows-1257 (Báltico)": "Windows-1257 (Baltic)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Enviar para o servidor": "Send to the server", + "Favoritos": "Favorites", + "Adicionar aos favoritos": "Add to favorites", + "Remover dos favoritos": "Remove from favorites", + "Recentes": "Recent", + "Digite um comando": "Type a command", + "Buscar comando": "Search command", + "Mostrar mais": "Show more", + "Guia do servidor: comandos, favoritos e log": "Server guide: commands, favorites and log", + "Nenhum comando ainda": "No commands yet", + "Os comandos que você enviar aparecem aqui.": "Commands you send show up here.", + "Nenhum favorito": "No favorites", + "Marque um comando com a estrela para tê-lo sempre à mão.": "Star a command to keep it within reach.", + "Nada encontrado": "Nothing found", + "Tente outro trecho do comando.": "Try another part of the command.", + "Limpar a busca": "Clear search", + "O envio por RCON vale só para o servidor local — a senha trafega em texto claro. Use o terminal para um servidor remoto.": "RCON sending is limited to the local server — the password travels in plain text. Use the terminal for a remote server.", + "Guardar comandos enviados": "Keep sent commands", + "O histórico e os favoritos ficam em .pawnpro/state.json, restrito ao seu usuário e fora do controle de versão. Comandos que pareçam trazer senha nunca são guardados.": "History and favorites live in .pawnpro/state.json, restricted to your user and kept out of version control. Commands that look like they carry a password are never stored.", + "Comandos que não devem ser guardados": "Commands that must not be stored", + "Comandos do seu gamemode que recebem senha ou token. A extensão já reconhece login, rcon_password e senhas passadas como argumento.": "Commands from your gamemode that take a password or token. The extension already recognizes login, rcon_password and passwords passed as arguments.", + "Padrão próprio": "Custom pattern", + "Escreva o padrão entre barras, como /^g_[a-z]+$/.": "Write the pattern between slashes, like /^g_[a-z]+$/.", + "Expressão regular inválida.": "Invalid regular expression.", + "Nenhum dos exemplos passa neste padrão.": "None of the examples match this pattern.", + "Cor de destaque": "Accent color", + "Cor dos botões e do item ativo nas páginas da extensão. Não altera o realce de sintaxe.": "Color of buttons and the active item on the extension pages. Does not change syntax highlighting." } diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json index f172e61..d556349 100644 --- a/l10n/bundle.l10n.es.json +++ b/l10n/bundle.l10n.es.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Ayuda e información", "Componentes, links e guia do depurador": "Componentes, enlaces y guía del depurador", "Compilador recomendado": "Compilador recomendado", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compila tus scripts con el **compilador de open.mp** — versión **3.10.11**, la única existente y la probada por el momento. Es el **único compilador probado** y el **recomendado**, tanto para el análisis del engine como para la depuración. Otros compiladores pueden generar código o información de depuración incompatibles.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compila tus scripts con el **compilador de open.mp** — la versión **3.10.11** es la recomendada, y la **3.10.10** también ha sido probada (en Windows, la depuración aún no se ha verificado). Es el compilador recomendado tanto para el análisis del engine como para la depuración; otros pueden generar código o información de depuración incompatibles.", "Baixar o compilador do open.mp": "Descargar el compilador de open.mp", "Componentes": "Componentes", "Extensão PawnPro": "Extensión PawnPro", @@ -283,5 +283,32 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Hebreo)", "Windows-1256 (Árabe)": "Windows-1256 (Árabe)", "Windows-1257 (Báltico)": "Windows-1257 (Báltico)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Enviar para o servidor": "Enviar al servidor", + "Favoritos": "Favoritos", + "Adicionar aos favoritos": "Añadir a favoritos", + "Remover dos favoritos": "Quitar de favoritos", + "Recentes": "Recientes", + "Digite um comando": "Escribe un comando", + "Buscar comando": "Buscar comando", + "Mostrar mais": "Mostrar más", + "Guia do servidor: comandos, favoritos e log": "Guía del servidor: comandos, favoritos y registro", + "Nenhum comando ainda": "Aún no hay comandos", + "Os comandos que você enviar aparecem aqui.": "Los comandos que envíes aparecen aquí.", + "Nenhum favorito": "Sin favoritos", + "Marque um comando com a estrela para tê-lo sempre à mão.": "Marca un comando con la estrella para tenerlo a mano.", + "Nada encontrado": "No se encontró nada", + "Tente outro trecho do comando.": "Prueba con otra parte del comando.", + "Limpar a busca": "Limpiar la búsqueda", + "O envio por RCON vale só para o servidor local — a senha trafega em texto claro. Use o terminal para um servidor remoto.": "El envío por RCON solo vale para el servidor local — la contraseña viaja en texto plano. Usa la terminal para un servidor remoto.", + "Guardar comandos enviados": "Guardar los comandos enviados", + "O histórico e os favoritos ficam em .pawnpro/state.json, restrito ao seu usuário e fora do controle de versão. Comandos que pareçam trazer senha nunca são guardados.": "El historial y los favoritos están en .pawnpro/state.json, restringido a tu usuario y fuera del control de versiones. Los comandos que parezcan llevar una contraseña nunca se guardan.", + "Comandos que não devem ser guardados": "Comandos que no deben guardarse", + "Comandos do seu gamemode que recebem senha ou token. A extensão já reconhece login, rcon_password e senhas passadas como argumento.": "Comandos de tu gamemode que reciben contraseña o token. La extensión ya reconoce login, rcon_password y contraseñas pasadas como argumento.", + "Padrão próprio": "Patrón propio", + "Escreva o padrão entre barras, como /^g_[a-z]+$/.": "Escribe el patrón entre barras, como /^g_[a-z]+$/.", + "Expressão regular inválida.": "Expresión regular no válida.", + "Nenhum dos exemplos passa neste padrão.": "Ninguno de los ejemplos coincide con este patrón.", + "Cor de destaque": "Color de acento", + "Cor dos botões e do item ativo nas páginas da extensão. Não altera o realce de sintaxe.": "Color de los botones y del elemento activo en las páginas de la extensión. No cambia el resaltado de sintaxis." } diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index de6bec9..e4cb9b0 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Ajuda e informações", "Componentes, links e guia do depurador": "Componentes, links e guia do depurador", "Compilador recomendado": "Compilador recomendado", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.", "Baixar o compilador do open.mp": "Baixar o compilador do open.mp", "Componentes": "Componentes", "Extensão PawnPro": "Extensão PawnPro", @@ -283,5 +283,32 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Hebraico)", "Windows-1256 (Árabe)": "Windows-1256 (Árabe)", "Windows-1257 (Báltico)": "Windows-1257 (Báltico)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Enviar para o servidor": "Enviar para o servidor", + "Favoritos": "Favoritos", + "Adicionar aos favoritos": "Adicionar aos favoritos", + "Remover dos favoritos": "Remover dos favoritos", + "Recentes": "Recentes", + "Digite um comando": "Digite um comando", + "Buscar comando": "Buscar comando", + "Mostrar mais": "Mostrar mais", + "Guia do servidor: comandos, favoritos e log": "Guia do servidor: comandos, favoritos e log", + "Nenhum comando ainda": "Nenhum comando ainda", + "Os comandos que você enviar aparecem aqui.": "Os comandos que você enviar aparecem aqui.", + "Nenhum favorito": "Nenhum favorito", + "Marque um comando com a estrela para tê-lo sempre à mão.": "Marque um comando com a estrela para tê-lo sempre à mão.", + "Nada encontrado": "Nada encontrado", + "Tente outro trecho do comando.": "Tente outro trecho do comando.", + "Limpar a busca": "Limpar a busca", + "O envio por RCON vale só para o servidor local — a senha trafega em texto claro. Use o terminal para um servidor remoto.": "O envio por RCON vale só para o servidor local — a senha trafega em texto claro. Use o terminal para um servidor remoto.", + "Guardar comandos enviados": "Guardar comandos enviados", + "O histórico e os favoritos ficam em .pawnpro/state.json, restrito ao seu usuário e fora do controle de versão. Comandos que pareçam trazer senha nunca são guardados.": "O histórico e os favoritos ficam em .pawnpro/state.json, restrito ao seu usuário e fora do controle de versão. Comandos que pareçam trazer senha nunca são guardados.", + "Comandos que não devem ser guardados": "Comandos que não devem ser guardados", + "Comandos do seu gamemode que recebem senha ou token. A extensão já reconhece login, rcon_password e senhas passadas como argumento.": "Comandos do seu gamemode que recebem senha ou token. A extensão já reconhece login, rcon_password e senhas passadas como argumento.", + "Padrão próprio": "Padrão próprio", + "Escreva o padrão entre barras, como /^g_[a-z]+$/.": "Escreva o padrão entre barras, como /^g_[a-z]+$/.", + "Expressão regular inválida.": "Expressão regular inválida.", + "Nenhum dos exemplos passa neste padrão.": "Nenhum dos exemplos passa neste padrão.", + "Cor de destaque": "Cor de destaque", + "Cor dos botões e do item ativo nas páginas da extensão. Não altera o realce de sintaxe.": "Cor dos botões e do item ativo nas páginas da extensão. Não altera o realce de sintaxe." } diff --git a/l10n/bundle.l10n.ro.json b/l10n/bundle.l10n.ro.json index f97ad37..918ed71 100644 --- a/l10n/bundle.l10n.ro.json +++ b/l10n/bundle.l10n.ro.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Ajutor și informații", "Componentes, links e guia do depurador": "Componente, linkuri și ghidul debugger-ului", "Compilador recomendado": "Compilator recomandat", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compilează-ți scripturile cu **compilatorul open.mp** — versiunea **3.10.11**, singura existentă și cea testată momentan. Este **singurul compilator testat** și cel **recomandat**, atât pentru analiza engine-ului, cât și pentru depanare. Alte compilatoare pot genera cod sau informații de depanare incompatibile.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compilează-ți scripturile cu **compilatorul open.mp** — versiunea **3.10.11** este cea recomandată, iar **3.10.10** a fost de asemenea testată (pe Windows, depanarea nu a fost încă verificată). Este compilatorul recomandat atât pentru analiza engine-ului, cât și pentru depanare; altele pot genera cod sau informații de depanare incompatibile.", "Baixar o compilador do open.mp": "Descarcă compilatorul open.mp", "Componentes": "Componente", "Extensão PawnPro": "Extensia PawnPro", @@ -283,5 +283,32 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Ebraică)", "Windows-1256 (Árabe)": "Windows-1256 (Arabă)", "Windows-1257 (Báltico)": "Windows-1257 (Baltic)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Enviar para o servidor": "Trimite către server", + "Favoritos": "Favorite", + "Adicionar aos favoritos": "Adaugă la favorite", + "Remover dos favoritos": "Elimină de la favorite", + "Recentes": "Recente", + "Digite um comando": "Scrie o comandă", + "Buscar comando": "Caută comandă", + "Mostrar mais": "Arată mai multe", + "Guia do servidor: comandos, favoritos e log": "Ghidul serverului: comenzi, favorite și jurnal", + "Nenhum comando ainda": "Nicio comandă încă", + "Os comandos que você enviar aparecem aqui.": "Comenzile pe care le trimiți apar aici.", + "Nenhum favorito": "Niciun favorit", + "Marque um comando com a estrela para tê-lo sempre à mão.": "Marchează o comandă cu steaua ca s-o ai la îndemână.", + "Nada encontrado": "Nu s-a găsit nimic", + "Tente outro trecho do comando.": "Încearcă altă parte a comenzii.", + "Limpar a busca": "Golește căutarea", + "O envio por RCON vale só para o servidor local — a senha trafega em texto claro. Use o terminal para um servidor remoto.": "Trimiterea prin RCON e limitată la serverul local — parola circulă în text clar. Folosește terminalul pentru un server la distanță.", + "Guardar comandos enviados": "Păstrează comenzile trimise", + "O histórico e os favoritos ficam em .pawnpro/state.json, restrito ao seu usuário e fora do controle de versão. Comandos que pareçam trazer senha nunca são guardados.": "Istoricul și favoritele stau în .pawnpro/state.json, restricționat la utilizatorul tău și în afara controlului versiunilor. Comenzile care par să conțină o parolă nu sunt niciodată păstrate.", + "Comandos que não devem ser guardados": "Comenzi care nu trebuie păstrate", + "Comandos do seu gamemode que recebem senha ou token. A extensão já reconhece login, rcon_password e senhas passadas como argumento.": "Comenzi din gamemode-ul tău care primesc parolă sau token. Extensia recunoaște deja login, rcon_password și parolele date ca argument.", + "Padrão próprio": "Tipar propriu", + "Escreva o padrão entre barras, como /^g_[a-z]+$/.": "Scrieți tiparul între bare oblice, precum /^g_[a-z]+$/.", + "Expressão regular inválida.": "Expresie regulată invalidă.", + "Nenhum dos exemplos passa neste padrão.": "Niciunul dintre exemple nu se potrivește cu acest tipar.", + "Cor de destaque": "Culoare de accent", + "Cor dos botões e do item ativo nas páginas da extensão. Não altera o realce de sintaxe.": "Culoarea butoanelor și a elementului activ din paginile extensiei. Nu schimbă evidențierea sintaxei." } diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index 9c266d9..ce4812f 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Справка и информация", "Componentes, links e guia do depurador": "Компоненты, ссылки и руководство по отладчику", "Compilador recomendado": "Рекомендуемый компилятор", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Компилируйте свои скрипты **компилятором open.mp** — версия **3.10.11**, единственная существующая и протестированная на данный момент. Это **единственный протестированный компилятор** и **рекомендуемый**, как для анализа движком, так и для отладки. Другие компиляторы могут генерировать несовместимый код или отладочную информацию.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Компилируйте свои скрипты **компилятором open.mp** — рекомендуется версия **3.10.11**, версия **3.10.10** также протестирована (на Windows отладка ещё не проверена). Это рекомендуемый компилятор как для анализа движком, так и для отладки; другие могут генерировать несовместимый код или отладочную информацию.", "Baixar o compilador do open.mp": "Скачать компилятор open.mp", "Componentes": "Компоненты", "Extensão PawnPro": "Расширение PawnPro", @@ -283,5 +283,32 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Иврит)", "Windows-1256 (Árabe)": "Windows-1256 (Арабская)", "Windows-1257 (Báltico)": "Windows-1257 (Балтийская)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Enviar para o servidor": "Отправить на сервер", + "Favoritos": "Избранное", + "Adicionar aos favoritos": "Добавить в избранное", + "Remover dos favoritos": "Убрать из избранного", + "Recentes": "Недавние", + "Digite um comando": "Введите команду", + "Buscar comando": "Поиск команды", + "Mostrar mais": "Показать ещё", + "Guia do servidor: comandos, favoritos e log": "Руководство по серверу: команды, избранное и журнал", + "Nenhum comando ainda": "Команд пока нет", + "Os comandos que você enviar aparecem aqui.": "Отправленные команды появятся здесь.", + "Nenhum favorito": "Нет избранного", + "Marque um comando com a estrela para tê-lo sempre à mão.": "Отметьте команду звёздочкой, чтобы держать её под рукой.", + "Nada encontrado": "Ничего не найдено", + "Tente outro trecho do comando.": "Попробуйте другую часть команды.", + "Limpar a busca": "Очистить поиск", + "O envio por RCON vale só para o servidor local — a senha trafega em texto claro. Use o terminal para um servidor remoto.": "Отправка через RCON доступна только для локального сервера — пароль передаётся открытым текстом. Для удалённого сервера используйте терминал.", + "Guardar comandos enviados": "Сохранять отправленные команды", + "O histórico e os favoritos ficam em .pawnpro/state.json, restrito ao seu usuário e fora do controle de versão. Comandos que pareçam trazer senha nunca são guardados.": "История и избранное хранятся в .pawnpro/state.json — доступ только у вашего пользователя, файл не попадает в систему контроля версий. Команды, похожие на содержащие пароль, не сохраняются.", + "Comandos que não devem ser guardados": "Команды, которые не нужно сохранять", + "Comandos do seu gamemode que recebem senha ou token. A extensão já reconhece login, rcon_password e senhas passadas como argumento.": "Команды вашего gamemode, принимающие пароль или токен. Расширение уже распознаёт login, rcon_password и пароли, переданные аргументом.", + "Padrão próprio": "Свой шаблон", + "Escreva o padrão entre barras, como /^g_[a-z]+$/.": "Запишите шаблон между косыми чертами, например /^g_[a-z]+$/.", + "Expressão regular inválida.": "Недопустимое регулярное выражение.", + "Nenhum dos exemplos passa neste padrão.": "Ни один из примеров не подходит под этот шаблон.", + "Cor de destaque": "Акцентный цвет", + "Cor dos botões e do item ativo nas páginas da extensão. Não altera o realce de sintaxe.": "Цвет кнопок и активного элемента на страницах расширения. Не меняет подсветку синтаксиса." } diff --git a/mkdocs.yml b/mkdocs.yml index 5b2743b..262307b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,6 +13,7 @@ nav: - Recursos: features.md - Configuração: configuration.md - Comandos: commands.md + - Servidor: server.md - Depuração: debugging.md - Snippets: snippets.md - Idiomas (i18n): i18n.md diff --git a/package-lock.json b/package-lock.json index 25344a4..65d4014 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "iconv-lite": "^0.7.3", - "vscode-languageclient": "^10.1.0" + "vscode-languageclient": "^10.1.1" }, "devDependencies": { - "@types/node": "^26.2.0", - "@types/vscode": "1.134.0", + "@types/node": "^26.4.0", + "@types/vscode": "^1.106.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/vsce": "^3.9.2", "esbuild": "^0.28.2", @@ -60,144 +60,155 @@ } }, "node_modules/@azure-rest/core-client": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.6.1.tgz", - "integrity": "sha512-KzI10qnkWTsVS2yRBUdc8NLUJ1rOm+292mYs7Pe9wqAj/jv4bRskVm1l8XkKeVTN0OCQtrU5RG0Yhjbz1Wmg7g==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.8.0.tgz", + "integrity": "sha512-F1ybHeN+++QhyFCF/ehLUEvrOB6fehPdFBFtGdj0C3B2lpQ9zkPiO5JDgsqc6IfjuUe6b3dAbXK0a7+VgSGfhw==", "dev": true, "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-rest-pipeline": "^1.24.0", "@azure/core-tracing": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-auth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.0.tgz", - "integrity": "sha512-88Djs5vBvGbHQHf5ZZcaoNHo6Y8BKZkt3cw2iuJIQzLEgH4Ox6Tm4hjFhbqOxyYsgIG/eJbFEHpxRIfEEWv5Ow==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.11.0.tgz", + "integrity": "sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-client": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.0.tgz", - "integrity": "sha512-O4aP3CLFNodg8eTHXECaH3B3CjicfzkxVtnrfLkOq0XNP7TIECGfHpK/C6vADZkWP75wzmdBnsIA8ksuJMk18g==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.11.0.tgz", + "integrity": "sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.20.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-process": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-process/-/core-process-1.0.0.tgz", + "integrity": "sha512-/shnJ+ooO8WPxDhPEeI/2oRQuubn16gZ6CvlbpWbEswZfzwI9tI/sMAHmF3x1LuQ9yZYXfLW3TjzGMLEC5blKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.0.tgz", - "integrity": "sha512-OKHmb3/Kpm06HypvB3g6Q3zJuvyXcpxDpCS1PnU8OV6AJgSFaee/covXBcPbWc6XDDxtEPlbi3EMQ6nUiPaQtw==", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", + "integrity": "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "@typespec/ts-http-runtime": "^0.3.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-tracing": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.0.tgz", - "integrity": "sha512-+XvmZLLWPe67WXNZo9Oc9CrPj/Tm8QnHR92fFAFdnbzwNdCH1h+7UdpaQgRSBsMY+oW1kHXNUZQLdZ1gHX3ROw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.4.0.tgz", + "integrity": "sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-util": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.0.tgz", - "integrity": "sha512-o0psW8QWQ58fq3i24Q1K2XfS/jYTxr7O1HRcyUE9bV9NttLU+kYOH82Ixj8DGlMTOWgxm1Sss2QAfKK5UkSPxw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.14.0.tgz", + "integrity": "sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", + "@azure/abort-controller": "^2.1.2", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/identity": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.1.tgz", - "integrity": "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.2.tgz", + "integrity": "sha512-NXL2/pCJctLxgw8bvrwwgge743kEq8LBT+O1pmV0vyUwetzFPH9auP6jhkU/cgZCPPtWoewAe3ncaGCgPo07fA==", "dev": true, "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", + "@azure/core-process": "^1.0.0", "@azure/core-rest-pipeline": "^1.17.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^5.5.0", - "@azure/msal-node": "^5.1.0", + "@azure/msal-node": "^5.1.5", "open": "^10.1.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.4.0.tgz", + "integrity": "sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==", "dev": true, "license": "MIT", "dependencies": { @@ -205,26 +216,26 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/msal-browser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.9.0.tgz", - "integrity": "sha512-CzE+4PefDSJWj26zU7G1bKchlGRRHMBFreG4tAlGuzyI8hAPiYGobaJvZBgZBf6L63iphX7VH+ityL8VgEQz9Q==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.20.0.tgz", + "integrity": "sha512-mtOKr708E/E/+qhI50QufmhR8GS5C84IeFGEaH/guMOaPXT9B/obEt8TVzX5U8j5OEUgukn0PrRmwVKaigr2wA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.5.2" + "@azure/msal-common": "16.14.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.5.2.tgz", - "integrity": "sha512-GkDEL6TYo3HgT3UuqakdgE9PZfc1hMki6+Hwgy1uddb/EauvAKfu85vVhuofRSo22D1xTnWt8Ucwfg4vSCVwvA==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.14.0.tgz", + "integrity": "sha512-A4rb55hI86Q9tBl/+jBj7TMz7iX2RFgQs/nExFzcAtoI/BFRVdaH5SL/MivrYD7qvweMpN8AgVvVMHV8UBYxew==", "dev": true, "license": "MIT", "engines": { @@ -232,27 +243,37 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.5.tgz", - "integrity": "sha512-ObTeMoNPmq19X3z40et9Xvs4ZoWVeJg43PZMRLG5iwVL+2nCtAerG3YTDItqPp1CfXNwmCXBbg8jn1DOx65c3g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.6.0.tgz", + "integrity": "sha512-uFY9NxrWHw8PwZx7gAX6PDn+9vdfS05+levc/kwkx77IkjfaldnQbbcQzzDIZ5Hq5Zdr6/z92oAIoRWKp6MnOA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.5.2", + "@azure/msal-common": "16.13.0", "jsonwebtoken": "^9.0.0" }, "engines": { "node": ">=20" } }, + "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { + "version": "16.13.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.13.0.tgz", + "integrity": "sha512-rOAy0KUcyBbdwVJ+f3uPpthXatFLLZN+/KWAsTLzk1aB23Xl9DRmmXYwSvBFOZyXj4jUQQ5FKxxRkhAFW1fOow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -261,9 +282,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -730,19 +751,6 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -768,24 +776,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -906,9 +896,9 @@ } }, "node_modules/@secretlint/formatter/node_modules/chalk": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", - "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -1023,33 +1013,35 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.7.1.tgz", - "integrity": "sha512-Wii5UgUKFEh9Uv6wbq1zr4/Kf+dtjiUuzPrrXzKp8H+ifkvKNzi23V4Nz+6wVyHQn5T28AFuc8VH8OtzvGYecA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.8.0.tgz", + "integrity": "sha512-5CiH9COYmovWmExQgs7763DzX6Gy9zjkjJ7JxCC95wyTcjwQn/8poNF6fv3qzRlmx8CRRde8DHr9FcgAAiPzgw==", "dev": true, "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.7.1.tgz", - "integrity": "sha512-TdwZ/debWYFD05K3CcoHtwvnCrza29wZxD+BjDTk/V5N7iRqkK1dTTHSD4A8AIgROLiDkHJmIKQbasbmsg8AvA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.8.0.tgz", + "integrity": "sha512-+oU3A235NATv6Lzi4xa4kJ65PuNJlIxesaO4AvDhDWA9FWm7y4XKWaoQCW1esgaQQ6dwnUiFKArQ8TcJ86mC4w==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.7.1", - "@textlint/resolver": "15.7.1", - "@textlint/types": "15.7.1", - "chalk": "^4.1.2", + "@textlint/module-interop": "15.8.0", + "@textlint/resolver": "15.8.0", + "@textlint/types": "15.8.0", "debug": "^4.4.3", - "js-yaml": "^4.1.1", + "js-yaml": "^4.3.0", "lodash": "^4.18.1", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "table": "^6.9.0", "text-table": "^0.2.0" + }, + "engines": { + "node": ">=20.18.0" } }, "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { @@ -1083,33 +1075,33 @@ } }, "node_modules/@textlint/module-interop": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.7.1.tgz", - "integrity": "sha512-Jg+sQW2L/cRJypk59wtcMUVVpt8vmit5ZMT3gUnFwevP3A6Qp1HfOtUy9ObT4hBX3lOSGT/ekcCDxR1pL7uH1g==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.8.0.tgz", + "integrity": "sha512-rt+OR1WYGoLOY8HkA/aBPrqufF6yUUEsKEAh7XohTsT3lp9IyZFT6zOIbjul9P4FAzsmSPkcrYjVx3Bz/IUfkg==", "dev": true, "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.7.1.tgz", - "integrity": "sha512-8XnO0pgF6mXnm41VvWmBbEIdGPhiCUt31uLZkOis1ECeg/1SoUcIT6Mx/F0e1rukq8l0UlOSeY9a31CsvRMK0g==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.8.0.tgz", + "integrity": "sha512-E88tzfX3K8Jykk+38aJ9cy8RquD8ABVOPTO2rFEESq0wcg8x6/ypdAS8ZgR7OKiGqlRF0hkO/m5PbQwVfKM3VA==", "dev": true, "license": "MIT" }, "node_modules/@textlint/types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.7.1.tgz", - "integrity": "sha512-Vye/GmFNBTgVzZFtIFJTmLB+s2A7oIADxNG6r9UhfPuY+Czv0z5G3xeyFZZudPlfxURsKUyPIU5XsjOFqVp33A==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.8.0.tgz", + "integrity": "sha512-Anhc6y5736YIsvqae0U6k0YmB2M/QVHkEeOv2aydAn/WIkdI69dCOiDbe3/+RagS3qstFTSFWJzNRA2lUjv19w==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1" + "@textlint/ast-node-types": "15.8.0" } }, "node_modules/@types/node": { - "version": "26.2.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", - "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", + "version": "26.4.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.4.0.tgz", + "integrity": "sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1131,9 +1123,9 @@ "license": "MIT" }, "node_modules/@types/vscode": { - "version": "1.134.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.134.0.tgz", - "integrity": "sha512-NDEu0hg4sF7+vvFsADsktqUJ6f80LHSZvVK2Ovo1XiQ0/VHck1O3zst+ZZyVA/uvz6vo6LcuoqU2q48YMqOwWw==", + "version": "1.106.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.106.0.tgz", + "integrity": "sha512-88oUcEl9Wmlyt64pbvjLzyyFuFuPotdjwy+P+5ggg3DyTJSMWJD3ShX2ppya5mqrAYTKEhcaJBerdc5JTeb32w==", "dev": true, "license": "MIT" }, @@ -1478,9 +1470,9 @@ } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.0.tgz", - "integrity": "sha512-sOx1PKSuFwnIl7z4RN0Ls7N9AQawmR9r66eI5rFCzLDIs8HTIYrIpH9QjYWoX0lkgGrkLxXhi4QnK7MizPRrIg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.8.tgz", + "integrity": "sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==", "dev": true, "license": "MIT", "dependencies": { @@ -1489,7 +1481,7 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@vscode/l10n-dev": { @@ -1514,52 +1506,6 @@ "vscode-l10n-dev": "dist/cli.js" } }, - "node_modules/@vscode/l10n-dev/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/l10n-dev/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vscode/l10n-dev/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@vscode/vsce": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.9.2.tgz", @@ -1608,28 +1554,28 @@ } }, "node_modules/@vscode/vsce-sign": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.6.tgz", - "integrity": "sha512-j9Ashk+uOWCDHYDxgGsqzKq5FXW9b9MW7QqOIYZ8IYpneJclWTBeHZz2DJCSKQgo+JAqNcaRRE1hzIx0dswqAw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.1.0.tgz", + "integrity": "sha512-9AQrqazrBgTgRSuwleLVXUrIUphY02/SFCh2TKYoLV/xifJAdblhdmEmw5gUrYSPQ3sRwNs9iyCMD14sATEE6g==", "dev": true, "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE.txt", "optionalDependencies": { - "@vscode/vsce-sign-alpine-arm64": "2.0.5", - "@vscode/vsce-sign-alpine-x64": "2.0.5", - "@vscode/vsce-sign-darwin-arm64": "2.0.5", - "@vscode/vsce-sign-darwin-x64": "2.0.5", - "@vscode/vsce-sign-linux-arm": "2.0.5", - "@vscode/vsce-sign-linux-arm64": "2.0.5", - "@vscode/vsce-sign-linux-x64": "2.0.5", - "@vscode/vsce-sign-win32-arm64": "2.0.5", - "@vscode/vsce-sign-win32-x64": "2.0.5" + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" } }, "node_modules/@vscode/vsce-sign-alpine-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.5.tgz", - "integrity": "sha512-XVmnF40APwRPXSLYA28Ye+qWxB25KhSVpF2eZVtVOs6g7fkpOxsVnpRU1Bz2xG4ySI79IRuapDJoAQFkoOgfdQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", "cpu": [ "arm64" ], @@ -1641,9 +1587,9 @@ ] }, "node_modules/@vscode/vsce-sign-alpine-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.5.tgz", - "integrity": "sha512-JuxY3xcquRsOezKq6PEHwCgd1rh1GnhyH6urVEWUzWn1c1PC4EOoyffMD+zLZtFuZF5qR1I0+cqDRNKyPvpK7Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", "cpu": [ "x64" ], @@ -1655,9 +1601,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.5.tgz", - "integrity": "sha512-z2Q62bk0ptADFz8a0vtPvnm6vxpyP3hIEYMU+i1AWz263Pj8Mc38cm/4sjzxu+LIsAfhe9HzvYNS49lV+KsatQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", "cpu": [ "arm64" ], @@ -1669,9 +1615,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.5.tgz", - "integrity": "sha512-ma9JDC7FJ16SuPXlLKkvOD2qLsmW/cKfqK4zzM2iJE1PbckF3BlR08lYqHV89gmuoTpYB55+z8Y5Fz4wEJBVDA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", "cpu": [ "x64" ], @@ -1683,9 +1629,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-arm": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.5.tgz", - "integrity": "sha512-cdCwtLGmvC1QVrkIsyzv01+o9eR+wodMJUZ9Ak3owhcGxPRB53/WvrDHAFYA6i8Oy232nuen1YqWeEohqBuSzA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", "cpu": [ "arm" ], @@ -1697,9 +1643,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.5.tgz", - "integrity": "sha512-Hr1o0veBymg9SmkCqYnfaiUnes5YK6k/lKFA5MhNmiEN5fNqxyPUCdRZMFs3Ajtx2OFW4q3KuYVRwGA7jdLo7Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", "cpu": [ "arm64" ], @@ -1711,9 +1657,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.5.tgz", - "integrity": "sha512-XLT0gfGMcxk6CMRLDkgqEPTyG8Oa0OFe1tPv2RVbphSOjFWJwZgK3TYWx39i/7gqpDHlax0AP6cgMygNJrA6zg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", "cpu": [ "x64" ], @@ -1725,9 +1671,9 @@ ] }, "node_modules/@vscode/vsce-sign-win32-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.5.tgz", - "integrity": "sha512-hco8eaoTcvtmuPhavyCZhrk5QIcLiyAUhEso87ApAWDllG7djIrWiOCtqn48k4pHz+L8oCQlE0nwNHfcYcxOPw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", "cpu": [ "arm64" ], @@ -1739,9 +1685,9 @@ ] }, "node_modules/@vscode/vsce-sign-win32-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.5.tgz", - "integrity": "sha512-1ixKFGM2FwM+6kQS2ojfY3aAelICxjiCzeg4nTHpkeU1Tfs4RC+lVLrgq5NwcBC7ZLr6UfY3Ct3D6suPeOf7BQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", "cpu": [ "x64" ], @@ -1752,6 +1698,51 @@ "win32" ] }, + "node_modules/@vscode/vsce/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@vscode/vsce/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -1780,9 +1771,9 @@ } }, "node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { @@ -1796,9 +1787,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, "license": "MIT", "engines": { @@ -1919,6 +1910,22 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -2066,9 +2073,9 @@ } }, "node_modules/cheerio": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", - "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", "dev": true, "license": "MIT", "dependencies": { @@ -2077,11 +2084,11 @@ "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.0.0", + "htmlparser2": "^10.1.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", - "undici": "^7.12.0", + "undici": "^7.19.0", "whatwg-mimetype": "^4.0.0" }, "engines": { @@ -2155,6 +2162,24 @@ "node": ">=8" } }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/cockatiel": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", @@ -2317,9 +2342,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -2334,9 +2359,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "dev": true, "license": "MIT", "engines": { @@ -2370,9 +2395,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -2580,9 +2605,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -2696,9 +2721,9 @@ } }, "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz", + "integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==", "dev": true, "funding": [ { @@ -2713,9 +2738,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", "dev": true, "license": "ISC", "dependencies": { @@ -2779,19 +2804,6 @@ "node": ">= 6" } }, - "node_modules/form-data/node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -2801,9 +2813,9 @@ "optional": true }, "node_modules/fs-extra": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", - "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", "dev": true, "license": "MIT", "dependencies": { @@ -2893,18 +2905,22 @@ "optional": true }, "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "18 || 20 || >=22" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3004,9 +3020,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", "dependencies": { @@ -3040,9 +3056,9 @@ } }, "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -3055,14 +3071,14 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -3139,9 +3155,9 @@ "optional": true }, "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.7.tgz", + "integrity": "sha512-dML0wP6oak21rsNYCJpJB6O1BJIEwNpGrTw0URPfAk4hm0e3pRfCtzkfB6olBcXcVlU2rouCyz7lCyRB0OMVCA==", "dev": true, "license": "MIT", "engines": { @@ -3156,9 +3172,9 @@ "license": "MIT" }, "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "dev": true, "license": "MIT", "engines": { @@ -3262,9 +3278,9 @@ } }, "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -3333,9 +3349,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { @@ -3383,9 +3399,9 @@ "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3431,39 +3447,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/jwa": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", @@ -3655,9 +3638,9 @@ } }, "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", "dev": true, "license": "MIT" }, @@ -3802,9 +3785,9 @@ "optional": true }, "node_modules/node-abi": { - "version": "3.75.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", - "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "version": "3.96.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.96.0.tgz", + "integrity": "sha512-rebQ/lz7i0EkoLzUVSrKRzA69zMkwLp95kKMWoMDkkM00Suxz0D7zEQPwRml5fQum24mj7bPvmlgLAmu2JCiYg==", "dev": true, "license": "MIT", "optional": true, @@ -3848,9 +3831,9 @@ } }, "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", - "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", "dev": true, "license": "MIT", "dependencies": { @@ -3858,7 +3841,7 @@ "fs-extra": "^11.1.1" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/normalize-package-data": { @@ -3953,9 +3936,9 @@ } }, "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.7.tgz", + "integrity": "sha512-VaWRu2i4FJNRtiRWCuuQRgfQ1B7a6+gMSrO+3j0EQi/k0ULfS9kosRxGoiqwzIjZTDI02tGfk5mXXltLg6QtfQ==", "dev": true, "license": "MIT", "engines": { @@ -4081,31 +4064,28 @@ } }, "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", - "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } + "license": "ISC" }, "node_modules/path-type": { "version": "6.0.0", @@ -4161,6 +4141,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", "dev": true, "license": "MIT", "optional": true, @@ -4223,9 +4204,9 @@ } }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "license": "MIT", "optional": true, @@ -4299,15 +4280,15 @@ } }, "node_modules/rc-config-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", - "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.4.tgz", + "integrity": "sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "js-yaml": "^4.1.0", - "json5": "^2.2.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "json5": "^2.2.3", "require-from-string": "^2.0.2" } }, @@ -4358,21 +4339,28 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4405,9 +4393,9 @@ } }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, "license": "MIT", "engines": { @@ -4469,11 +4457,14 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/secretlint": { "version": "10.2.2", @@ -4498,9 +4489,9 @@ } }, "node_modules/semver": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.3.tgz", - "integrity": "sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4540,15 +4531,15 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -4560,14 +4551,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -4738,23 +4729,29 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4833,13 +4830,13 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -4964,9 +4961,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.5.tgz", + "integrity": "sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==", "dev": true, "license": "MIT", "optional": true, @@ -4995,6 +4992,22 @@ "node": ">=6" } }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/terminal-link": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", @@ -5242,49 +5255,49 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.1.tgz", - "integrity": "sha512-rfuA6T75H6m5EkbhtEPzre9pT0HPcDI2MMy4+nPFIBks5J8JBAUHD4tRYSgaBOijIEC7SRkC1kKyXTLqbmh9jw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.2.tgz", + "integrity": "sha512-SbQSV9yRemARxeXw6LU5sS6Zq0e9/DgCCX5yelH263ZQWukbTk8EF8fjTrr1dziasf4GwlJbvTwFnTrnQFWZXQ==", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.1.0.tgz", - "integrity": "sha512-XXRx6lqVitQy/oOLr9MfNYRG+MbQkhXkDaxbQMiKxEm8zZNfheRFUKNb8UYNh2stn9btl2wQM5wZFJjJvoc+jA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.1.1.tgz", + "integrity": "sha512-EbwIF+KUbwxD5jumQNpiBCv7BJM3Rierv4hcbw/p5jdsnwFFpR/B2VmwqfH4p5XsK46nkH3ugA3WtwJekHHJEw==", "license": "MIT", "dependencies": { - "minimatch": "^10.2.5", + "minimatch": "^10.2.6", "semver": "^7.8.1", - "vscode-languageserver-protocol": "3.18.2", - "vscode-languageserver-textdocument": "1.0.13" + "vscode-languageserver-protocol": "3.18.3", + "vscode-languageserver-textdocument": "1.0.14" }, "engines": { "vscode": "^1.91.0" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.2.tgz", - "integrity": "sha512-XRyDbT0Pp3sSNti3JmxVEUMySWCSi1hhM+/KUlCy1hV1zmrqpM1OwO12EAki8blhmLuIMpaJrYbo0OzGVfK2Qg==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.3.tgz", + "integrity": "sha512-DF49+WeV5py4zO5hhobp60jjsDSK0lAqA0OuKBLBvp423HPWQcCbhZz3JgyfIewsEz2f8U+X75xNIFHdiXZm2w==", "license": "MIT", "dependencies": { - "vscode-jsonrpc": "9.0.1", - "vscode-languageserver-types": "3.18.0" + "vscode-jsonrpc": "9.0.2", + "vscode-languageserver-types": "3.18.3" } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.13.tgz", - "integrity": "sha512-nx0ZHwMGIsVkzFG3/VLeJYBLTaFBRuNdGDvevvjuoayU5EOS2fEYazOhtCM3PI9ClMMg5igc0uwXtAq4tJj+Dw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.14.tgz", + "integrity": "sha512-EQyqJMi552E4ZTf46izQ4Fj6XquqxCySR3J5ZSD1SisMf6RfpeOWHxGBE8Gr6V0/3GHIGdAzDn8F8+1nTGCnoQ==", "license": "MIT" }, "node_modules/vscode-languageserver-types": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.0.tgz", - "integrity": "sha512-8TsGPNMIMiiBdkORgRSvLjuiEIiAFtO+KssmYWxQ+uSVvlf7RjK8YKCOjPzZ+YA04jXEV7+7LvkSmHkhpNS99g==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.3.tgz", + "integrity": "sha512-XIlzJ7Qp/jzSI1ds7/FwPAWrPeTZA7pAtlW4hdJ1J6xXWJL6dR9QYnDhJOdLzdKhUQ5Mm6mvUMw+3DcOQQasPw==", "license": "MIT" }, "node_modules/web-tree-sitter": { @@ -5298,6 +5311,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, "license": "MIT", "dependencies": { @@ -5347,18 +5361,18 @@ } }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -5406,27 +5420,42 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/wrappy": { @@ -5495,9 +5524,9 @@ "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, "license": "MIT", "dependencies": { @@ -5524,13 +5553,12 @@ } }, "node_modules/yauzl": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.3.0.tgz", - "integrity": "sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.4.0.tgz", + "integrity": "sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==", "dev": true, "license": "MIT", "dependencies": { - "buffer-crc32": "~0.2.3", "pend": "~1.2.0" }, "engines": { diff --git a/package.json b/package.json index ef241d1..b501303 100644 --- a/package.json +++ b/package.json @@ -40,9 +40,9 @@ "url": "https://github.com/NullSablex/PawnPro" }, "icon": "images/logo.png", - "engineVersion": "1.3.0", + "engineVersion": "1.4.0", "engineRepository": "https://github.com/NullSablex/PawnPro-Engine", - "debuggerVersion": "0.1.0", + "debuggerVersion": "0.2.0", "debuggerRepository": "https://github.com/NullSablex/PawnPro-Debugger", "author": { "name": "NullSablex", @@ -402,8 +402,8 @@ "package:pre": "npm run bundle && npx @vscode/vsce package --pre-release --no-dependencies --no-yarn && node scripts/repack-vsix.js" }, "devDependencies": { - "@types/node": "^26.2.0", - "@types/vscode": "1.134.0", + "@types/node": "^26.4.0", + "@types/vscode": "1.106.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/vsce": "^3.9.2", "esbuild": "^0.28.2", @@ -412,7 +412,7 @@ }, "dependencies": { "iconv-lite": "^0.7.3", - "vscode-languageclient": "^10.1.0" + "vscode-languageclient": "^10.1.1" }, "overrides": { "minimatch": "10.2.3", @@ -422,17 +422,17 @@ "underscore": "1.13.8" }, "engineChecksums": { - "pawnpro-engine-linux-x64": "ce0835c9743f0e20f305ed6be36b641c3af073db660893190f77c027bfe3b6cf", - "pawnpro-engine-linux-arm64": "883896ecac93f2333cf7203571768e8212525d60155001456d1dc61e4103ae28", - "pawnpro-engine-win32-x64.exe": "040dda1f08d4491de08324e9c0cc75830e76074961b771ea37b9ede3778bb855", - "pawnpro-engine-darwin-x64": "5525fad77153d11b34a2aebb6031b6b1189e42844d1265dc2b2d3be9e4812833", - "pawnpro-engine-darwin-arm64": "14b3452babc6c49f3f2ee5d0080ca02a0d39b640af582647406da280aa978316" + "pawnpro-engine-linux-x64": "d5abca0556a7ee3258e235d170aa090bf02a101056c603ebeb06bd9c47030737", + "pawnpro-engine-linux-arm64": "237728d0efbac0efc260f6da9bb43780c0ca81642f6e9a82ab0ab2cd404e1324", + "pawnpro-engine-win32-x64.exe": "8dd439f18dcc6deadd508a438553379f16f2790e970964810ae4cc7929f35345", + "pawnpro-engine-darwin-x64": "d5ad4c9261b413f4866065e1c52b1d8018225d80b26686dcd1bc3b295a53f6bc", + "pawnpro-engine-darwin-arm64": "99c7d59cc70dd6274354ef68afb088e0389d8b7a65d7255caa8f47f16f46b3cd" }, "debuggerChecksums": { - "pawnpro-dap-adapter-linux-x64": "b504e2abf410423538eba394b4c4ac3b1fc2e8ba475ea247d8f0471900d09eed", - "pawnpro-dap-adapter-linux-arm64": "f239f1319c0a6dad353978bf8a6f897f20b26ec8de9408a07baa2185b8066ec2", - "pawnpro-dap-adapter-win32-x64.exe": "04b4b2ea785b45b8b2ab7974f3689bf2e0b5c6edaf247ae2f975165bfcc76d10", - "pawnpro-dap-adapter-darwin-x64": "07d11df11a819e37cc2abbfd0a4d96318d398f4d5b064ff7aad7f3604b1adada", - "pawnpro-dap-adapter-darwin-arm64": "84bcc2376bdef1a1da8d57c9a4c1f284cd512bacb04fab818fb7adc954ed1ae7" + "pawnpro-dap-adapter-linux-x64": "494bfc9eb5e725f877ae956ba45912fb6bd2b151ece78b3299d25f1ec0723a7f", + "pawnpro-dap-adapter-linux-arm64": "a93b3cdd97015b8fec3d8d90bb64429a472566175c71e5dd69cb6b42acff2c19", + "pawnpro-dap-adapter-win32-x64.exe": "0d41d41dcc156d2f1dadba289e2eab6df8a31a7fc6135adc596d5e6a409dfadc", + "pawnpro-dap-adapter-darwin-x64": "4cacdbc45c286f03a77c70c4d9cbb988743d633d4e61c1af4658087c46dfc95f", + "pawnpro-dap-adapter-darwin-arm64": "d44963efc3efb56057e7fc79f1df0293be79657b7e06418a40883b48de527eac" } } diff --git a/package.nls.en.json b/package.nls.en.json index e0636b7..0a499f7 100644 --- a/package.nls.en.json +++ b/package.nls.en.json @@ -16,42 +16,6 @@ "command.recoverConfig": "PawnPro: Recover large config (migrate lists)", "command.openSettings": "PawnPro: Settings", "command.openStore": "PawnPro: Resource Library", - "config.includePaths": "Pawn compiler include directories. Use `${workspaceFolder}` for project-relative paths. Example: `[\"${workspaceFolder}/pawno/include\"]`.\n\n> Can also be configured in `.pawnpro/config.json` (takes precedence over this option).", - "config.compiler.path": "Path to the `pawncc` executable. If empty and `autoDetect` is enabled, the extension will try to detect it automatically.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.args": "Extra arguments passed to the compiler. Example: `[\"-d3\", \"-;+\"]`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.autoDetect": "When **enabled**, the extension searches for `pawncc` automatically in standard locations (PATH, `qawno/`, `pawno/`, `tools/`, etc.) if no path is set in `compiler.path`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.output.encoding": "Character encoding used to decode compiler output. Use `windows1252` for standard SA-MP/open.mp compilers.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.build.showCommand": "When **enabled**, displays the full compiler command (with all arguments) in the output panel before compiling.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.syntax.scheme": "Color scheme for Pawn syntax. Use `auto` to detect automatically based on the editor theme.\n\n> When applying a scheme via the `PawnPro: Apply syntax scheme` command, this option is set automatically.", - "config.syntax.scheme.auto": "Auto-detect: uses dark scheme for dark themes, light for light themes", - "config.syntax.scheme.classic_white": "Classic light scheme", - "config.syntax.scheme.modern_white": "Modern light scheme", - "config.syntax.scheme.classic_dark": "Classic dark scheme", - "config.syntax.scheme.modern_dark": "Modern dark scheme", - "config.syntax.scheme.none": "No scheme — uses editor default colors", - "config.syntax.applyOnStartup": "When **enabled**, the scheme configured in `syntax.scheme` is applied automatically when the editor starts.\n\n> Set automatically when applying a scheme via command.", - "config.ui.showIncludePaths": "When **enabled**, shows the resolved include paths in the PawnPro Includes view.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.path": "Path to the server executable (`samp03svr`, `omp-server`, etc.). Leave empty for auto-detection at workspace root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.cwd": "Working directory for the server. Use `${workspaceFolder}` for the project root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.args": "Extra arguments passed to the server executable.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.clearOnStart": "When **enabled**, clears the server terminal on start.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logPath": "Path to the server log file. Leave empty to use the server default (`server_log.txt` for SA-MP, or the file set in `logging.file` for open.mp).\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logEncoding": "Character encoding of the server log file.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow": "Auto-scroll behavior for the server log. `visible` scrolls only when the panel is already visible. `always` scrolls and brings the panel into focus. `off` never scrolls.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow.visible": "Auto-scroll only when the log panel is already visible", - "config.server.output.follow.always": "Always scroll and bring the panel into focus", - "config.server.output.follow.off": "Never auto-scroll", - "config.analysis.warnUnusedInInc": "When **enabled**, emits unused symbol warnings also in include files.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.suppressDiagnosticsInInc": "When **enabled**, include files show no errors or warnings.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.sdk.platform": "SDK platform used in the project. `omp` auto-detects `qawno/include/open.mp.inc` at the workspace root. `samp` has no auto-detection — set the path manually via `analysis.sdk.filePath`. `none` disables SDK support.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.platform`.", - "config.analysis.sdk.platform.omp": "open.mp — auto-detects qawno/include/open.mp.inc at the workspace root", - "config.analysis.sdk.platform.samp": "SA-MP — no auto-detection, set the path in analysis.sdk.filePath", - "config.analysis.sdk.platform.none": "Disabled — no SDK file will be loaded", - "config.analysis.sdk.filePath": "Absolute path (or with `${workspaceFolder}`) to the centralizing `.inc` file for the SDK. For open.mp, leave empty to use auto-detection. For SA-MP, point to the file that centralizes all SDK includes.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.filePath`.", - "config.server.type": "Server type. Select `samp` for SA-MP, `omp` for open.mp, or `auto` to detect automatically from the config file present (`server.cfg` or `config.json`).\n\n> Can also be configured in `.pawnpro/config.json` as `server.type`.", - "config.server.type.auto": "Auto-detect from file present (config.json → open.mp, server.cfg → SA-MP)", - "config.server.type.samp": "SA-MP — uses server.cfg and server_log.txt", - "config.server.type.omp": "open.mp — uses config.json and the log file set in logging.file", "debug.program": "Path of the `.amx` to debug (gamemode, filterscript or other Pawn script). The adjacent `.pwn` source is automatically recompiled with debug info on start.", "debug.server": "Path to the server executable (SA-MP/open.mp). Empty: use the extension's auto-detection.", "debug.cwd": "Working directory when starting the server for debugging.", diff --git a/package.nls.es.json b/package.nls.es.json index 818b6a6..87487a1 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -1,58 +1,21 @@ { - "_comment": "TODO(i18n): Spanish translation. Values below are English placeholders copied from package.nls.en.json. Translate each value; keep placeholders like {0} intact. This _comment key is unused by vscode-nls.", - "text.description": "Compilation and diagnostics for PAWN files, including #include checking and pawncc integration. Settings managed via .pawnpro/config.json.", - "command.compile": "PawnPro: Compile current file", - "command.detect": "PawnPro: Detect compiler (pawncc)", + "text.description": "Compilación y diagnósticos para archivos PAWN, incluyendo verificación de #include e integración con pawncc. Configuración en .pawnpro/config.json.", + "command.compile": "PawnPro: Compilar archivo actual", + "command.detect": "PawnPro: Detectar compilador (pawncc)", "command.whatsNew": "PawnPro: Novedades", "command.help": "PawnPro: Ayuda e información", - "command.newScript": "PawnPro: New Script (Gamemode/Filterscript)", - "command.applySyntaxScheme": "PawnPro: Apply syntax scheme", - "command.resetSyntaxScheme": "PawnPro: Reset syntax (remove PawnPro scheme)", - "command.server.start": "PawnPro: Start Server", - "command.server.stop": "PawnPro: Stop Server", - "command.server.restart": "PawnPro: Restart Server", - "command.server.show": "PawnPro: Show Server Console", - "command.server.showLog": "PawnPro: Show Server Log", - "command.clearEngineCache": "PawnPro: Clear Cache", - "command.recoverConfig": "PawnPro: Recover large config (migrate lists)", - "command.openSettings": "PawnPro: Settings", - "command.openStore": "PawnPro: Resource Library", - "config.includePaths": "Pawn compiler include directories. Use `${workspaceFolder}` for project-relative paths. Example: `[\"${workspaceFolder}/pawno/include\"]`.\n\n> Can also be configured in `.pawnpro/config.json` (takes precedence over this option).", - "config.compiler.path": "Path to the `pawncc` executable. If empty and `autoDetect` is enabled, the extension will try to detect it automatically.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.args": "Extra arguments passed to the compiler. Example: `[\"-d3\", \"-;+\"]`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.autoDetect": "When **enabled**, the extension searches for `pawncc` automatically in standard locations (PATH, `qawno/`, `pawno/`, `tools/`, etc.) if no path is set in `compiler.path`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.output.encoding": "Character encoding used to decode compiler output. Use `windows1252` for standard SA-MP/open.mp compilers.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.build.showCommand": "When **enabled**, displays the full compiler command (with all arguments) in the output panel before compiling.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.syntax.scheme": "Color scheme for Pawn syntax. Use `auto` to detect automatically based on the editor theme.\n\n> When applying a scheme via the `PawnPro: Apply syntax scheme` command, this option is set automatically.", - "config.syntax.scheme.auto": "Auto-detect: uses dark scheme for dark themes, light for light themes", - "config.syntax.scheme.classic_white": "Classic light scheme", - "config.syntax.scheme.modern_white": "Modern light scheme", - "config.syntax.scheme.classic_dark": "Classic dark scheme", - "config.syntax.scheme.modern_dark": "Modern dark scheme", - "config.syntax.scheme.none": "No scheme — uses editor default colors", - "config.syntax.applyOnStartup": "When **enabled**, the scheme configured in `syntax.scheme` is applied automatically when the editor starts.\n\n> Set automatically when applying a scheme via command.", - "config.ui.showIncludePaths": "When **enabled**, shows the resolved include paths in the PawnPro Includes view.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.path": "Path to the server executable (`samp03svr`, `omp-server`, etc.). Leave empty for auto-detection at workspace root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.cwd": "Working directory for the server. Use `${workspaceFolder}` for the project root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.args": "Extra arguments passed to the server executable.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.clearOnStart": "When **enabled**, clears the server terminal on start.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logPath": "Path to the server log file. Leave empty to use the server default (`server_log.txt` for SA-MP, or the file set in `logging.file` for open.mp).\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logEncoding": "Character encoding of the server log file.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow": "Auto-scroll behavior for the server log. `visible` scrolls only when the panel is already visible. `always` scrolls and brings the panel into focus. `off` never scrolls.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow.visible": "Auto-scroll only when the log panel is already visible", - "config.server.output.follow.always": "Always scroll and bring the panel into focus", - "config.server.output.follow.off": "Never auto-scroll", - "config.analysis.warnUnusedInInc": "When **enabled**, emits unused symbol warnings also in include files.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.suppressDiagnosticsInInc": "When **enabled**, include files show no errors or warnings.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.sdk.platform": "SDK platform used in the project. `omp` auto-detects `qawno/include/open.mp.inc` at the workspace root. `samp` has no auto-detection — set the path manually via `analysis.sdk.filePath`. `none` disables SDK support.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.platform`.", - "config.analysis.sdk.platform.omp": "open.mp — auto-detects qawno/include/open.mp.inc at the workspace root", - "config.analysis.sdk.platform.samp": "SA-MP — no auto-detection, set the path in analysis.sdk.filePath", - "config.analysis.sdk.platform.none": "Disabled — no SDK file will be loaded", - "config.analysis.sdk.filePath": "Absolute path (or with `${workspaceFolder}`) to the centralizing `.inc` file for the SDK. For open.mp, leave empty to use auto-detection. For SA-MP, point to the file that centralizes all SDK includes.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.filePath`.", - "config.server.type": "Server type. Select `samp` for SA-MP, `omp` for open.mp, or `auto` to detect automatically from the config file present (`server.cfg` or `config.json`).\n\n> Can also be configured in `.pawnpro/config.json` as `server.type`.", - "config.server.type.auto": "Auto-detect from file present (config.json → open.mp, server.cfg → SA-MP)", - "config.server.type.samp": "SA-MP — uses server.cfg and server_log.txt", - "config.server.type.omp": "open.mp — uses config.json and the log file set in logging.file", + "command.newScript": "PawnPro: Nuevo script (Gamemode/Filterscript)", + "command.applySyntaxScheme": "PawnPro: Aplicar esquema de sintaxis", + "command.resetSyntaxScheme": "PawnPro: Restablecer sintaxis (quitar esquema PawnPro)", + "command.server.start": "PawnPro: Iniciar servidor", + "command.server.stop": "PawnPro: Detener servidor", + "command.server.restart": "PawnPro: Reiniciar servidor", + "command.server.show": "PawnPro: Mostrar consola del servidor", + "command.server.showLog": "PawnPro: Mostrar registro del servidor", + "command.clearEngineCache": "PawnPro: Limpiar caché", + "command.recoverConfig": "PawnPro: Recuperar configuración grande (migrar listas)", + "command.openSettings": "PawnPro: Configuración", + "command.openStore": "PawnPro: Biblioteca de recursos", "debug.program": "Ruta del `.amx` a depurar (gamemode, filterscript u otro script Pawn). El fuente `.pwn` adyacente se recompila automáticamente con información de depuración al iniciar.", "debug.server": "Ruta del ejecutable del servidor (SA-MP/open.mp). Vacío: usa la detección automática de la extensión.", "debug.cwd": "Directorio de trabajo al iniciar el servidor para depuración.", diff --git a/package.nls.json b/package.nls.json index 10c4479..1ed361a 100644 --- a/package.nls.json +++ b/package.nls.json @@ -16,42 +16,6 @@ "command.recoverConfig": "PawnPro: Recuperar configuração grande (migrar listas)", "command.openSettings": "PawnPro: Configurações", "command.openStore": "PawnPro: Biblioteca de Recursos", - "config.includePaths": "Diretórios de includes do compilador Pawn. Use `${workspaceFolder}` para caminhos relativos ao projeto. Exemplo: `[\"${workspaceFolder}/pawno/include\"]`.\n\n> Também pode ser configurado em `.pawnpro/config.json` (tem prioridade sobre esta opção).", - "config.compiler.path": "Caminho para o executável `pawncc`. Se vazio e `autoDetect` estiver ativo, a extensão tentará detectar automaticamente.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.compiler.args": "Argumentos extras passados ao compilador. Exemplo: `[\"-d3\", \"-;+\"]`.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.compiler.autoDetect": "Quando **ativado**, a extensão busca o `pawncc` automaticamente em locais padrão (PATH, `qawno/`, `pawno/`, `tools/`, etc.) se nenhum caminho for configurado em `compiler.path`.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.output.encoding": "Codificação de caracteres usada para decodificar a saída do compilador. Use `windows1252` para compiladores padrão do SA-MP/open.mp.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.build.showCommand": "Quando **ativado**, exibe o comando completo do compilador (com todos os argumentos) no painel de saída antes de compilar.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.syntax.scheme": "Esquema de cores para a sintaxe Pawn. Use `auto` para detectar automaticamente pelo tema do editor.\n\n> Ao aplicar um esquema via comando `PawnPro: Aplicar esquema de sintaxe`, esta opção é definida automaticamente.", - "config.syntax.scheme.auto": "Detecta automaticamente: usa esquema escuro em temas escuros, claro em temas claros", - "config.syntax.scheme.classic_white": "Esquema claro clássico", - "config.syntax.scheme.modern_white": "Esquema claro moderno", - "config.syntax.scheme.classic_dark": "Esquema escuro clássico", - "config.syntax.scheme.modern_dark": "Esquema escuro moderno", - "config.syntax.scheme.none": "Sem esquema — usa as cores padrão do editor", - "config.syntax.applyOnStartup": "Quando **ativado**, o esquema configurado em `syntax.scheme` é aplicado automaticamente ao iniciar o editor.\n\n> Definido automaticamente ao aplicar um esquema via comando.", - "config.ui.showIncludePaths": "Quando **ativado**, exibe os caminhos de includes resolvidos na view de Includes do PawnPro.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.path": "Caminho para o executável do servidor (`samp03svr`, `omp-server`, etc.). Deixe vazio para detecção automática na raiz do workspace.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.cwd": "Diretório de trabalho do servidor. Use `${workspaceFolder}` para a raiz do projeto.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.args": "Argumentos extras passados ao executável do servidor.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.clearOnStart": "Quando **ativado**, limpa o terminal do servidor ao iniciar.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.logPath": "Caminho para o arquivo de log do servidor. Deixe vazio para usar o padrão do servidor (`server_log.txt` no SA-MP, ou o configurado em `logging.file` no open.mp).\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.logEncoding": "Codificação do arquivo de log do servidor.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.output.follow": "Comportamento de rolagem automática do log do servidor. `visible` rola apenas quando o painel já está visível. `always` rola sempre e traz o painel ao foco. `off` nunca rola.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.server.output.follow.visible": "Rola automaticamente apenas quando o painel de log já está visível", - "config.server.output.follow.always": "Sempre rola e traz o painel ao foco", - "config.server.output.follow.off": "Nunca rola automaticamente", - "config.analysis.warnUnusedInInc": "Quando **ativado**, emite avisos de símbolos não utilizados também em includes.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.analysis.suppressDiagnosticsInInc": "Quando **ativado**, arquivos de include não exibem erros nem avisos.\n\n> Também pode ser configurado em `.pawnpro/config.json`.", - "config.analysis.sdk.platform": "Plataforma do SDK utilizado no projeto. `omp` detecta automaticamente o arquivo `qawno/include/open.mp.inc` na raiz do workspace. `samp` não tem detecção automática — configure o caminho manualmente em `analysis.sdk.filePath`. `none` desativa o suporte a SDK.\n\n> Também pode ser configurado em `.pawnpro/config.json` como `analysis.sdk.platform`.", - "config.analysis.sdk.platform.omp": "open.mp — detecta automaticamente qawno/include/open.mp.inc na raiz do workspace", - "config.analysis.sdk.platform.samp": "SA-MP — sem detecção automática, configure o caminho em analysis.sdk.filePath", - "config.analysis.sdk.platform.none": "Desativado — nenhum arquivo SDK será carregado", - "config.analysis.sdk.filePath": "Caminho absoluto (ou com `${workspaceFolder}`) para o arquivo `.inc` centralizador do SDK. No open.mp, deixe vazio para usar a detecção automática. No SA-MP, aponte para o arquivo que centraliza todos os includes do SDK.\n\n> Também pode ser configurado em `.pawnpro/config.json` como `analysis.sdk.filePath`.", - "config.server.type": "Tipo de servidor. Selecione `samp` para SA-MP, `omp` para open.mp, ou `auto` para detecção automática pelo arquivo de configuração presente (`server.cfg` ou `config.json`).\n\n> Também pode ser configurado em `.pawnpro/config.json` como `server.type`.", - "config.server.type.auto": "Detecta automaticamente pelo arquivo presente (config.json → open.mp, server.cfg → SA-MP)", - "config.server.type.samp": "SA-MP — usa server.cfg e server_log.txt", - "config.server.type.omp": "open.mp — usa config.json e o arquivo de log configurado em logging.file", "debug.program": "Caminho do `.amx` a depurar (gamemode, filterscript ou outro script Pawn). O source `.pwn` ao lado é recompilado automaticamente com informação de depuração ao iniciar.", "debug.server": "Caminho do executável do servidor (SA-MP/open.mp). Vazio: usa a detecção automática da extensão.", "debug.cwd": "Diretório de trabalho ao iniciar o servidor para depuração.", diff --git a/package.nls.ro.json b/package.nls.ro.json index 29d68e0..8676e3c 100644 --- a/package.nls.ro.json +++ b/package.nls.ro.json @@ -1,58 +1,21 @@ { - "_comment": "TODO(i18n): Romanian translation. Values below are English placeholders copied from package.nls.en.json. Translate each value; keep placeholders like {0} intact. This _comment key is unused by vscode-nls.", - "text.description": "Compilation and diagnostics for PAWN files, including #include checking and pawncc integration. Settings managed via .pawnpro/config.json.", - "command.compile": "PawnPro: Compile current file", - "command.detect": "PawnPro: Detect compiler (pawncc)", + "text.description": "Compilare și diagnostice pentru fișiere PAWN, inclusiv verificarea #include și integrarea cu pawncc. Configurare în .pawnpro/config.json.", + "command.compile": "PawnPro: Compilează fișierul curent", + "command.detect": "PawnPro: Detectează compilatorul (pawncc)", "command.whatsNew": "PawnPro: Noutăți", "command.help": "PawnPro: Ajutor și informații", - "command.newScript": "PawnPro: New Script (Gamemode/Filterscript)", - "command.applySyntaxScheme": "PawnPro: Apply syntax scheme", - "command.resetSyntaxScheme": "PawnPro: Reset syntax (remove PawnPro scheme)", - "command.server.start": "PawnPro: Start Server", - "command.server.stop": "PawnPro: Stop Server", - "command.server.restart": "PawnPro: Restart Server", - "command.server.show": "PawnPro: Show Server Console", - "command.server.showLog": "PawnPro: Show Server Log", - "command.clearEngineCache": "PawnPro: Clear Cache", - "command.recoverConfig": "PawnPro: Recover large config (migrate lists)", - "command.openSettings": "PawnPro: Settings", - "command.openStore": "PawnPro: Resource Library", - "config.includePaths": "Pawn compiler include directories. Use `${workspaceFolder}` for project-relative paths. Example: `[\"${workspaceFolder}/pawno/include\"]`.\n\n> Can also be configured in `.pawnpro/config.json` (takes precedence over this option).", - "config.compiler.path": "Path to the `pawncc` executable. If empty and `autoDetect` is enabled, the extension will try to detect it automatically.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.args": "Extra arguments passed to the compiler. Example: `[\"-d3\", \"-;+\"]`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.autoDetect": "When **enabled**, the extension searches for `pawncc` automatically in standard locations (PATH, `qawno/`, `pawno/`, `tools/`, etc.) if no path is set in `compiler.path`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.output.encoding": "Character encoding used to decode compiler output. Use `windows1252` for standard SA-MP/open.mp compilers.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.build.showCommand": "When **enabled**, displays the full compiler command (with all arguments) in the output panel before compiling.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.syntax.scheme": "Color scheme for Pawn syntax. Use `auto` to detect automatically based on the editor theme.\n\n> When applying a scheme via the `PawnPro: Apply syntax scheme` command, this option is set automatically.", - "config.syntax.scheme.auto": "Auto-detect: uses dark scheme for dark themes, light for light themes", - "config.syntax.scheme.classic_white": "Classic light scheme", - "config.syntax.scheme.modern_white": "Modern light scheme", - "config.syntax.scheme.classic_dark": "Classic dark scheme", - "config.syntax.scheme.modern_dark": "Modern dark scheme", - "config.syntax.scheme.none": "No scheme — uses editor default colors", - "config.syntax.applyOnStartup": "When **enabled**, the scheme configured in `syntax.scheme` is applied automatically when the editor starts.\n\n> Set automatically when applying a scheme via command.", - "config.ui.showIncludePaths": "When **enabled**, shows the resolved include paths in the PawnPro Includes view.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.path": "Path to the server executable (`samp03svr`, `omp-server`, etc.). Leave empty for auto-detection at workspace root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.cwd": "Working directory for the server. Use `${workspaceFolder}` for the project root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.args": "Extra arguments passed to the server executable.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.clearOnStart": "When **enabled**, clears the server terminal on start.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logPath": "Path to the server log file. Leave empty to use the server default (`server_log.txt` for SA-MP, or the file set in `logging.file` for open.mp).\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logEncoding": "Character encoding of the server log file.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow": "Auto-scroll behavior for the server log. `visible` scrolls only when the panel is already visible. `always` scrolls and brings the panel into focus. `off` never scrolls.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow.visible": "Auto-scroll only when the log panel is already visible", - "config.server.output.follow.always": "Always scroll and bring the panel into focus", - "config.server.output.follow.off": "Never auto-scroll", - "config.analysis.warnUnusedInInc": "When **enabled**, emits unused symbol warnings also in include files.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.suppressDiagnosticsInInc": "When **enabled**, include files show no errors or warnings.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.sdk.platform": "SDK platform used in the project. `omp` auto-detects `qawno/include/open.mp.inc` at the workspace root. `samp` has no auto-detection — set the path manually via `analysis.sdk.filePath`. `none` disables SDK support.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.platform`.", - "config.analysis.sdk.platform.omp": "open.mp — auto-detects qawno/include/open.mp.inc at the workspace root", - "config.analysis.sdk.platform.samp": "SA-MP — no auto-detection, set the path in analysis.sdk.filePath", - "config.analysis.sdk.platform.none": "Disabled — no SDK file will be loaded", - "config.analysis.sdk.filePath": "Absolute path (or with `${workspaceFolder}`) to the centralizing `.inc` file for the SDK. For open.mp, leave empty to use auto-detection. For SA-MP, point to the file that centralizes all SDK includes.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.filePath`.", - "config.server.type": "Server type. Select `samp` for SA-MP, `omp` for open.mp, or `auto` to detect automatically from the config file present (`server.cfg` or `config.json`).\n\n> Can also be configured in `.pawnpro/config.json` as `server.type`.", - "config.server.type.auto": "Auto-detect from file present (config.json → open.mp, server.cfg → SA-MP)", - "config.server.type.samp": "SA-MP — uses server.cfg and server_log.txt", - "config.server.type.omp": "open.mp — uses config.json and the log file set in logging.file", + "command.newScript": "PawnPro: Script nou (Gamemode/Filterscript)", + "command.applySyntaxScheme": "PawnPro: Aplică schema de sintaxă", + "command.resetSyntaxScheme": "PawnPro: Resetează sintaxa (elimină schema PawnPro)", + "command.server.start": "PawnPro: Pornește serverul", + "command.server.stop": "PawnPro: Oprește serverul", + "command.server.restart": "PawnPro: Repornește serverul", + "command.server.show": "PawnPro: Afișează consola serverului", + "command.server.showLog": "PawnPro: Afișează jurnalul serverului", + "command.clearEngineCache": "PawnPro: Golește cache-ul", + "command.recoverConfig": "PawnPro: Recuperează configurația mare (migrează listele)", + "command.openSettings": "PawnPro: Setări", + "command.openStore": "PawnPro: Bibliotecă de resurse", "debug.program": "Calea către `.amx` de depanat (gamemode, filterscript sau alt script Pawn). Sursa `.pwn` alăturată este recompilată automat cu informații de depanare la pornire.", "debug.server": "Calea către executabilul serverului (SA-MP/open.mp). Gol: folosește detectarea automată a extensiei.", "debug.cwd": "Directorul de lucru la pornirea serverului pentru depanare.", diff --git a/package.nls.ru.json b/package.nls.ru.json index 4dda81c..4cef0f6 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -1,58 +1,21 @@ { - "_comment": "TODO(i18n): Russian translation. Values below are English placeholders copied from package.nls.en.json. Translate each value; keep placeholders like {0} intact. This _comment key is unused by vscode-nls.", - "text.description": "Compilation and diagnostics for PAWN files, including #include checking and pawncc integration. Settings managed via .pawnpro/config.json.", - "command.compile": "PawnPro: Compile current file", - "command.detect": "PawnPro: Detect compiler (pawncc)", + "text.description": "Компиляция и диагностика файлов PAWN, включая проверку #include и интеграцию с pawncc. Настройки в .pawnpro/config.json.", + "command.compile": "PawnPro: Скомпилировать текущий файл", + "command.detect": "PawnPro: Найти компилятор (pawncc)", "command.whatsNew": "PawnPro: Что нового", "command.help": "PawnPro: Справка и информация", - "command.newScript": "PawnPro: New Script (Gamemode/Filterscript)", - "command.applySyntaxScheme": "PawnPro: Apply syntax scheme", - "command.resetSyntaxScheme": "PawnPro: Reset syntax (remove PawnPro scheme)", - "command.server.start": "PawnPro: Start Server", - "command.server.stop": "PawnPro: Stop Server", - "command.server.restart": "PawnPro: Restart Server", - "command.server.show": "PawnPro: Show Server Console", - "command.server.showLog": "PawnPro: Show Server Log", - "command.clearEngineCache": "PawnPro: Clear Cache", - "command.recoverConfig": "PawnPro: Recover large config (migrate lists)", - "command.openSettings": "PawnPro: Settings", - "command.openStore": "PawnPro: Resource Library", - "config.includePaths": "Pawn compiler include directories. Use `${workspaceFolder}` for project-relative paths. Example: `[\"${workspaceFolder}/pawno/include\"]`.\n\n> Can also be configured in `.pawnpro/config.json` (takes precedence over this option).", - "config.compiler.path": "Path to the `pawncc` executable. If empty and `autoDetect` is enabled, the extension will try to detect it automatically.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.args": "Extra arguments passed to the compiler. Example: `[\"-d3\", \"-;+\"]`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.compiler.autoDetect": "When **enabled**, the extension searches for `pawncc` automatically in standard locations (PATH, `qawno/`, `pawno/`, `tools/`, etc.) if no path is set in `compiler.path`.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.output.encoding": "Character encoding used to decode compiler output. Use `windows1252` for standard SA-MP/open.mp compilers.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.build.showCommand": "When **enabled**, displays the full compiler command (with all arguments) in the output panel before compiling.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.syntax.scheme": "Color scheme for Pawn syntax. Use `auto` to detect automatically based on the editor theme.\n\n> When applying a scheme via the `PawnPro: Apply syntax scheme` command, this option is set automatically.", - "config.syntax.scheme.auto": "Auto-detect: uses dark scheme for dark themes, light for light themes", - "config.syntax.scheme.classic_white": "Classic light scheme", - "config.syntax.scheme.modern_white": "Modern light scheme", - "config.syntax.scheme.classic_dark": "Classic dark scheme", - "config.syntax.scheme.modern_dark": "Modern dark scheme", - "config.syntax.scheme.none": "No scheme — uses editor default colors", - "config.syntax.applyOnStartup": "When **enabled**, the scheme configured in `syntax.scheme` is applied automatically when the editor starts.\n\n> Set automatically when applying a scheme via command.", - "config.ui.showIncludePaths": "When **enabled**, shows the resolved include paths in the PawnPro Includes view.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.path": "Path to the server executable (`samp03svr`, `omp-server`, etc.). Leave empty for auto-detection at workspace root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.cwd": "Working directory for the server. Use `${workspaceFolder}` for the project root.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.args": "Extra arguments passed to the server executable.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.clearOnStart": "When **enabled**, clears the server terminal on start.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logPath": "Path to the server log file. Leave empty to use the server default (`server_log.txt` for SA-MP, or the file set in `logging.file` for open.mp).\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.logEncoding": "Character encoding of the server log file.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow": "Auto-scroll behavior for the server log. `visible` scrolls only when the panel is already visible. `always` scrolls and brings the panel into focus. `off` never scrolls.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.server.output.follow.visible": "Auto-scroll only when the log panel is already visible", - "config.server.output.follow.always": "Always scroll and bring the panel into focus", - "config.server.output.follow.off": "Never auto-scroll", - "config.analysis.warnUnusedInInc": "When **enabled**, emits unused symbol warnings also in include files.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.suppressDiagnosticsInInc": "When **enabled**, include files show no errors or warnings.\n\n> Can also be configured in `.pawnpro/config.json`.", - "config.analysis.sdk.platform": "SDK platform used in the project. `omp` auto-detects `qawno/include/open.mp.inc` at the workspace root. `samp` has no auto-detection — set the path manually via `analysis.sdk.filePath`. `none` disables SDK support.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.platform`.", - "config.analysis.sdk.platform.omp": "open.mp — auto-detects qawno/include/open.mp.inc at the workspace root", - "config.analysis.sdk.platform.samp": "SA-MP — no auto-detection, set the path in analysis.sdk.filePath", - "config.analysis.sdk.platform.none": "Disabled — no SDK file will be loaded", - "config.analysis.sdk.filePath": "Absolute path (or with `${workspaceFolder}`) to the centralizing `.inc` file for the SDK. For open.mp, leave empty to use auto-detection. For SA-MP, point to the file that centralizes all SDK includes.\n\n> Can also be configured in `.pawnpro/config.json` as `analysis.sdk.filePath`.", - "config.server.type": "Server type. Select `samp` for SA-MP, `omp` for open.mp, or `auto` to detect automatically from the config file present (`server.cfg` or `config.json`).\n\n> Can also be configured in `.pawnpro/config.json` as `server.type`.", - "config.server.type.auto": "Auto-detect from file present (config.json → open.mp, server.cfg → SA-MP)", - "config.server.type.samp": "SA-MP — uses server.cfg and server_log.txt", - "config.server.type.omp": "open.mp — uses config.json and the log file set in logging.file", + "command.newScript": "PawnPro: Новый скрипт (Gamemode/Filterscript)", + "command.applySyntaxScheme": "PawnPro: Применить схему синтаксиса", + "command.resetSyntaxScheme": "PawnPro: Сбросить синтаксис (удалить схему PawnPro)", + "command.server.start": "PawnPro: Запустить сервер", + "command.server.stop": "PawnPro: Остановить сервер", + "command.server.restart": "PawnPro: Перезапустить сервер", + "command.server.show": "PawnPro: Показать консоль сервера", + "command.server.showLog": "PawnPro: Показать журнал сервера", + "command.clearEngineCache": "PawnPro: Очистить кэш", + "command.recoverConfig": "PawnPro: Восстановить большую конфигурацию (перенести списки)", + "command.openSettings": "PawnPro: Настройки", + "command.openStore": "PawnPro: Библиотека ресурсов", "debug.program": "Путь к `.amx` для отладки (gamemode, filterscript или другой скрипт Pawn). Соседний исходник `.pwn` автоматически перекомпилируется с отладочной информацией при запуске.", "debug.server": "Путь к исполняемому файлу сервера (SA-MP/open.mp). Пусто: используется автоопределение расширения.", "debug.cwd": "Рабочий каталог при запуске сервера для отладки.", diff --git a/src/core/accent.ts b/src/core/accent.ts new file mode 100644 index 0000000..ee565c0 --- /dev/null +++ b/src/core/accent.ts @@ -0,0 +1,69 @@ +import type { AccentColor } from './types.js'; + +/** + * Paleta de cores de destaque das páginas da extensão. + * + * Fechada de propósito: o valor entra direto em CSS, e uma cor livre não teria + * como garantir contraste do texto sobre ela nem legibilidade nos temas claro e + * escuro. Cada entrada traz o tom normal, o de hover e a cor do texto que vai + * por cima — os três verificados juntos. + * + * Não tem relação com o realce de sintaxe, que tem esquema próprio. + */ +export interface AccentPalette { + /** Fundo de botões e preenchimento do estado ativo. */ + base: string; + /** O mesmo tom, um passo mais escuro, para hover. */ + hover: string; + /** Texto sobre `base` — escolhido pelo contraste, não pelo tema. */ + on: string; +} + +/** + * Tons médios: escuros o bastante para texto branco por cima (todos acima de + * 4.5:1, o mínimo AA), claros o bastante para não sumirem num tema escuro. O + * hover ESCURECE em vez de clarear — clarear reduziria o contraste com o texto + * e três das seis cores reprovavam. + */ +export const ACCENTS: Record, AccentPalette> = { + blue: { base: '#0e639c', hover: '#0b5484', on: '#ffffff' }, + purple: { base: '#68417a', hover: '#583767', on: '#ffffff' }, + green: { base: '#2d7d46', hover: '#266a3b', on: '#ffffff' }, + amber: { base: '#8a5a00', hover: '#754c00', on: '#ffffff' }, + pink: { base: '#a63b6d', hover: '#8d325c', on: '#ffffff' }, + teal: { base: '#00707a', hover: '#005f67', on: '#ffffff' }, +}; + +/** Ordem de exibição na página de configurações. */ +export const ACCENT_ORDER: Exclude[] = [ + 'blue', + 'purple', + 'green', + 'amber', + 'pink', + 'teal', +]; + +/** + * Bloco CSS que fixa a cor escolhida, para injetar no ` diff --git a/src/editor/nls.ts b/src/editor/nls.ts index ca70700..95ea547 100644 --- a/src/editor/nls.ts +++ b/src/editor/nls.ts @@ -41,6 +41,7 @@ export function createMsg(t: Translate) { failedStart: (err: string) => t('Falha ao iniciar servidor: {0}', err), rconFailed: (err: string) => t('Falha ao enviar RCON: {0}', err), rconInvalidPassword: () => t('Senha RCON vazia ou inválida ("changename"). Comando não enviado.'), + rconRemoteBlocked: () => t('O envio por RCON vale só para o servidor local — a senha trafega em texto claro. Use o terminal para um servidor remoto.'), rconHint: () => t('Envie apenas o comando, ex.: "gmx" ou "say oii".'), }, @@ -149,6 +150,13 @@ export function createMsg(t: Translate) { navNaming: () => t('Nomenclatura'), namingEnabled: () => t('Assistente de nomes'), namingEnabledDesc: () => t('Avisa sobre nomes pobres (curtos, genéricos, fora do estilo). Desligado por padrão.'), + namingRegex: () => t('Padrão próprio'), + namingRegexNeedsSlashes: () => t('Escreva o padrão entre barras, como /^g_[a-z]+$/.'), + namingRegexInvalid: () => t('Expressão regular inválida.'), + namingRegexMatchesNothing: () => t('Nenhum dos exemplos passa neste padrão.'), + uiAccent: () => t('Cor de destaque'), + uiAccentDesc: () => t('Cor dos botões e do item ativo nas páginas da extensão. Não altera o realce de sintaxe.'), + uiAccentAuto: () => t('Automático'), namingMinLength: () => t('Comprimento mínimo'), namingMinLengthDesc: () => t('Sinaliza identificadores mais curtos que isto (índices de loop são tolerados).'), namingMaxFile: () => t('Limite dos arquivos (MB)'), @@ -204,6 +212,10 @@ export function createMsg(t: Translate) { serverArgs: () => t('Argumentos do servidor'), serverArgsDesc: () => t('Argumentos extras passados ao executável ao iniciar.'), serverClearOnStart: () => t('Limpar terminal ao iniciar'), + serverKeepHistory: () => t('Guardar comandos enviados'), + serverKeepHistoryDesc: () => t('O histórico e os favoritos ficam em .pawnpro/state.json, restrito ao seu usuário e fora do controle de versão. Comandos que pareçam trazer senha nunca são guardados.'), + serverSensitiveCommands: () => t('Comandos que não devem ser guardados'), + serverSensitiveCommandsDesc: () => t('Comandos do seu gamemode que recebem senha ou token. A extensão já reconhece login, rcon_password e senhas passadas como argumento.'), serverClearOnStartDesc: () => t('Limpa o terminal antes de iniciar o servidor.'), serverFollowLog: () => t('Acompanhamento do log'), serverFollowLogDesc: () => t('Quando rolar automaticamente o painel de log do servidor.'), @@ -256,7 +268,7 @@ export function createMsg(t: Translate) { panelTitle: () => t('PawnPro — Ajuda e informações'), subtitle: () => t('Componentes, links e guia do depurador'), compilerTitle: () => t('Compilador recomendado'), - compilerBody: () => t('Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.'), + compilerBody: () => t('Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.'), compilerLink: () => t('Baixar o compilador do open.mp'), componentsTitle: () => t('Componentes'), extensionLabel: () => t('Extensão PawnPro'), @@ -264,6 +276,7 @@ export function createMsg(t: Translate) { debuggerLabel: () => t('Adaptador do depurador (dap-adapter)'), linksTitle: () => t('Links'), linkDocs: () => t('Documentação'), + linkServerGuide: () => t('Guia do servidor: comandos, favoritos e log'), linkExtension: () => t('Repositório da extensão'), linkEngine: () => t('Repositório da engine LSP'), linkDebugger: () => t('Repositório do depurador'), @@ -278,6 +291,24 @@ export function createMsg(t: Translate) { fullGuide: () => t('Guia completo do depurador'), reopenHint: () => t('Use PawnPro: Ajuda e informações para reabrir.'), }, + serverView: { + inputPlaceholder: () => t('Digite um comando'), + send: () => t('Enviar para o servidor'), + tabHistory: () => t('Recentes'), + tabFavorites: () => t('Favoritos'), + clear: () => t('Limpar'), + search: () => t('Buscar comando'), + clearSearch: () => t('Limpar a busca'), + noMatches: () => t('Nada encontrado'), + loadMore: () => t('Mostrar mais'), + emptyHistory: () => t('Nenhum comando ainda'), + emptyHistoryHint: () => t('Os comandos que você enviar aparecem aqui.'), + emptyFavorites: () => t('Nenhum favorito'), + emptyFavoritesHint: () => t('Marque um comando com a estrela para tê-lo sempre à mão.'), + noMatchesHint: () => t('Tente outro trecho do comando.'), + addFavorite: () => t('Adicionar aos favoritos'), + removeFavorite: () => t('Remover dos favoritos'), + }, store: { title: () => t('Biblioteca de Recursos'), diff --git a/src/editor/server.ts b/src/editor/server.ts index ad955fe..1410cf2 100644 --- a/src/editor/server.ts +++ b/src/editor/server.ts @@ -1,5 +1,5 @@ import * as vscode from 'vscode'; -import { LogTailer, SampRconClient, loadServerConfig, resolveServerConfig } from '../core/server.js'; +import { LogTailer, SampRconClient, isLoopbackHost, loadServerConfig, resolveServerConfig } from '../core/server.js'; import { PawnProConfigManager } from '../core/config.js'; import { PawnProStateManager } from '../core/state.js'; import { ServerViewProvider } from './serverView.js'; @@ -65,18 +65,26 @@ class ServerController { if (/^\/?rcon\s+/i.test(txt)) { txt = txt.replace(/^\/?rcon\s+/i, ''); - txt = txt.replace(/^login\s+\S+\s*/i, ''); - if (!txt) { - vscode.window.showInformationMessage(`PawnPro: ${msg.server.rconHint()}`); - return; - } } + // `login ` autentica o RCON — o painel já envia autenticado, então + // repeti-lo só faria a senha aparecer no histórico e no log. Vale tanto + // depois de `rcon` quanto digitado direto. + if (/^login(\s|$)/i.test(txt)) { + vscode.window.showInformationMessage(`PawnPro: ${msg.server.rconHint()}`); + return; + } + if (!txt) return; if (!this.rconCfg) await this.refreshRconFromServerCfg(); const cfg = this.rconCfg!; const invalidPwd = !cfg.rconPassword || /^(changename)$/i.test(cfg.rconPassword); + // O RCON manda a senha em texto claro por UDP. Para um servidor remoto + // isso a exporia a quem estiver no caminho, então o envio direto fica + // restrito à máquina local; fora dela, cai no terminal (que não trafega + // credencial nenhuma). + const local = isLoopbackHost(cfg.host); - if (!invalidPwd) { + if (!invalidPwd && local) { try { const client = new SampRconClient(cfg.host, cfg.port, cfg.rconPassword); const out = await client.send(txt, 1500); @@ -88,6 +96,8 @@ class ServerController { vscode.window.showErrorMessage(`PawnPro: ${msg.server.rconFailed(err instanceof Error ? err.message : String(err))}`); return; } + } else if (!local) { + vscode.window.showWarningMessage(`PawnPro: ${msg.server.rconRemoteBlocked()}`); } else { vscode.window.showWarningMessage(`PawnPro: ${msg.server.rconInvalidPassword()}`); } @@ -246,10 +256,16 @@ export function registerServerControls( srv.getTailer().setFollowMode(cfg.server.output.follow); }); - const provider = new ServerViewProvider(state, (text: string) => { void srv.sendLine(text); }); + const provider = new ServerViewProvider(context, config, state, (text: string) => { + void srv.sendLine(text); + }); context.subscriptions.push( vscode.window.registerWebviewViewProvider('pawnpro.serverView', provider), ); + + // `vscode.l10n` fixa o idioma pelo do editor; as WebViews seguem `ui.locale`, + // então precisam ser re-renderizadas quando ele muda. + config.onChange(() => provider.refresh()); void vscode.commands.executeCommand('setContext', 'pawnpro.server.running', false); } diff --git a/src/editor/serverView.ts b/src/editor/serverView.ts index 8305e3e..85129bf 100644 --- a/src/editor/serverView.ts +++ b/src/editor/serverView.ts @@ -1,14 +1,156 @@ import * as vscode from 'vscode'; import { PawnProStateManager } from '../core/state.js'; +import type { PawnProConfigManager } from '../core/config.js'; +import { webviewThemeCss } from './webviewTheme.js'; +import { createWebviewMsg } from './webviewNls.js'; + +/** + * Ícone de envio, desenhado inline. + * + * A fonte de codicons do editor não chega à WebView (o CSP é + * `default-src 'none'`, sem `font-src`), então o traço vem no próprio HTML. + * `currentColor` faz o ícone acompanhar a cor do botão em qualquer tema. + */ +const ICON_SEND = ``; + +/** + * Estrela dos favoritos, em dois estados. + * + * O emoji `⭐`/`☆` traz cor própria (ignora o tema) e o contorno é fino a ponto + * de sumir no fundo do painel — daí o traço próprio, preenchido quando marcado + * e contornado quando não. + */ +const STAR_PATH = + 'M8 1.6l1.9 4 4.3.6-3.1 3 .75 4.3L8 11.5l-3.85 2 .75-4.3-3.1-3 4.3-.6z'; +const ICON_STAR_ON = ``; +const ICON_STAR_OFF = ``; + +/** Estrela contornada, em tamanho grande, para o estado vazio dos favoritos. */ +const ICON_EMPTY_STAR = ``; + +/** Terminal, para o estado vazio do histórico. */ +const ICON_EMPTY_HISTORY = ``; + +/** Lupa, para quando a busca não encontra nada. */ +const ICON_EMPTY_SEARCH = ``; + +/** X: limpar o texto da busca. */ +const ICON_CLOSE = ``; + +/** Lixeira: limpar a lista da aba visível. */ +const ICON_TRASH = ``; + +/** + * Escapa texto para interpolação em HTML. + * + * As strings vêm dos bundles de tradução e caem tanto em texto quanto dentro + * de atributos (`title`, `placeholder`), onde uma aspa fecharia o atributo. + */ +function esc(value: string): string { + return value + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +/** + * Comandos cujo nome já indica credencial. + * + * O histórico e os favoritos vão para `.pawnpro/state.json`, em texto claro e + * dentro do projeto — um `login` ali seria commitado junto. O comando ainda é + * enviado; só não fica registrado. + */ +const COMANDOS_SENSIVEIS = [ + /^login(\s|$)/i, + /^rcon_password(\s|$)/i, + /^password(\s|$)/i, + /^changepass(word)?(\s|$)/i, + /^setpass(word)?(\s|$)/i, +]; + +/** + * Palavras que, num argumento, anunciam que o próximo termo é credencial — + * `meucomando --senha 1234`, `auth token abc`. + */ +const ROTULOS_DE_SEGREDO = + /^-{0,2}(pass|passwd|password|senha|pwd|token|key|chave|secret|segredo|auth|apikey)$/i; + +/** + * `true` se o termo parece uma credencial solta. + * + * Deliberadamente conservador: só entra o que mistura letras e dígitos e é + * longo o suficiente. Um `kick 0`, um `weather 11` ou um `setpos 1.5 -2.0` + * são argumentos comuns e não podem sumir do histórico por engano — o custo + * de um falso positivo aqui é o recurso deixar de servir. + */ +function pareceSegredo(termo: string): boolean { + if (termo.length < 8) return false; + if (/^[\d.,:-]+$/.test(termo)) return false; // números, ip, coordenada + if (!/[a-z]/i.test(termo) || !/\d/.test(termo)) return false; + return true; +} + +/** + * `true` se o comando traz credencial e não deve ser guardado. + * + * Três camadas: o nome do comando, os comandos que o projeto declarou em + * `server.history.sensitiveCommands`, e um argumento que se anuncie como + * segredo ou pareça um. + */ +export function isSensitiveCommand(cmd: string, extras: string[] = []): boolean { + const t = cmd.trim().replace(/^\/?rcon\s+/i, ''); + if (!t) return false; + if (COMANDOS_SENSIVEIS.some(rx => rx.test(t))) return true; + + const termos = t.split(/\s+/); + const nome = termos[0].toLowerCase(); + if (extras.some(e => e.trim().toLowerCase() === nome)) return true; + + for (let i = 1; i < termos.length; i++) { + // `--senha 1234`: o rótulo entrega o próximo termo. + if (ROTULOS_DE_SEGREDO.test(termos[i]) && i + 1 < termos.length) return true; + // `--senha=1234` num termo só. + const [chave, ...resto] = termos[i].split('='); + if (resto.length > 0 && ROTULOS_DE_SEGREDO.test(chave)) return true; + if (pareceSegredo(termos[i])) return true; + } + return false; +} export class ServerViewProvider implements vscode.WebviewViewProvider { private views = new Set(); constructor( + private readonly context: vscode.ExtensionContext, + private readonly config: PawnProConfigManager, private readonly state: PawnProStateManager, private readonly onSend: (text: string) => void, ) {} + /** Re-renderiza as views abertas — usado quando `ui.locale` muda. */ + refresh() { + for (const v of this.views) v.webview.html = this.getHtml(v.webview); + } + private get favorites(): string[] { return this.state.get('server').favorites; } private get history(): string[] { return this.state.get('server').history; } @@ -20,6 +162,29 @@ export class ServerViewProvider implements vscode.WebviewViewProvider { return { favorites: [...this.favorites], history: [...this.history] }; } + /** + * Remove do estado gravado o que hoje seria recusado. + * + * Antes da filtragem, um `login ` podia ter sido guardado em + * `.pawnpro/state.json`; limpar só na escrita deixaria esses registros para + * trás, no arquivo e à vista no painel. + */ + private purgeSensitive() { + const cfg = this.historyCfg; + // Com o registro desligado, não basta parar de gravar: o que já está lá + // precisa sair. + if (!cfg.enabled) { + if (this.favorites.length || this.history.length) this.save([], []); + return; + } + const extras = cfg.sensitiveCommands; + const favs = this.favorites.filter(c => !isSensitiveCommand(c, extras)); + const hist = this.history.filter(c => !isSensitiveCommand(c, extras)); + if (favs.length !== this.favorites.length || hist.length !== this.history.length) { + this.save(favs, hist); + } + } + private broadcast() { for (const v of this.views) this.postState(v); } @@ -39,13 +204,22 @@ export class ServerViewProvider implements vscode.WebviewViewProvider { return filtered; } + /** Ajustes de histórico do projeto, com o padrão quando não configurados. */ + private get historyCfg() { + return this.config.getAll().server.history ?? { enabled: true, sensitiveCommands: [] }; + } + private record(cmd: string) { + const cfg = this.historyCfg; + if (!cfg.enabled) return; + if (isSensitiveCommand(cmd, cfg.sensitiveCommands)) return; const newHistory = this.unshiftUnique([...this.history], cmd, 200); this.save(this.favorites, newHistory); this.broadcast(); } private addFavorite(cmd: string) { + if (isSensitiveCommand(cmd, this.historyCfg.sensitiveCommands)) return; const newFavs = this.unshiftUnique([...this.favorites], cmd); this.save(newFavs, this.history); this.broadcast(); @@ -68,6 +242,8 @@ export class ServerViewProvider implements vscode.WebviewViewProvider { } resolveWebviewView(view: vscode.WebviewView) { + // Limpa o que foi gravado antes desta filtragem existir. + this.purgeSensitive(); this.views.add(view); view.onDidDispose(() => this.views.delete(view)); @@ -110,6 +286,7 @@ export class ServerViewProvider implements vscode.WebviewViewProvider { } private getHtml(webview: vscode.Webview) { + const msg = createWebviewMsg(this.context, this.config); const csp = `default-src 'none'; style-src 'unsafe-inline'; img-src ${webview.cspSource}; script-src 'unsafe-inline';`; return ` @@ -120,82 +297,297 @@ export class ServerViewProvider implements vscode.WebviewViewProvider {
- - -
-
Dica: \u2191/\u2193 percorrem o historico \u2022 Clique em um item para reutilizar \u2022 \u2b50 fixa nos Favoritos
- -
-
- Favoritos -
-
-
Nenhum favorito.
+ +
-
- Ultimos comandos -
+
+ + +
+ + +
+
+ -
Sem historico ainda.
+
+ +