# O verificador

> O que o RPG Desk confere antes de instalar um plugin: cada problema, pelo código, com o que quer dizer e como consertar.

Página: https://docs.rpgdesk.com/referencia/verificador/

Antes de instalar, o RPG Desk confere o plugin. Os **erros** impedem a instalação; os **avisos**, não, mas apontam o que não vai funcionar dentro do RPG Desk. Cada problema traz o arquivo e a linha, e **Copiar relatório** copia a lista inteira, pronta para colar numa conversa com uma IA.

> **Nota**
>
> O verificador procura os erros comuns com mensagens claras; ele não prova que o código está certo. Teste a ficha no [modo de teste](https://docs.rpgdesk.com/fichas/desenvolvimento/#o-modo-de-teste) também.

## O arquivo e o manifesto

| Código                     | Nível | O que quer dizer                                                                                                        |
| -------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------- |
| `not-plugin`               | erro  | o arquivo não é um `.html` nem um `.zip`                                                                                |
| `not-zip`                  | erro  | o `.zip` está danificado                                                                                                |
| `rpk-unsupported`          | erro  | o arquivo é um pacote `.rpk` (SDK3), que o RPG Desk não suporta; refaça a ficha como plugin web                         |
| `package-unpacked`         | erro  | o `.zip` descompactado passa de 64 MB ou de 2000 arquivos                                                               |
| `zip-folder`               | aviso | o `.zip` tem uma pasta em volta de tudo; o RPG Desk usou o que está dentro                                              |
| `manifest-missing`         | erro  | não há manifesto: falta o `<script type="application/rpgdesk+json">` no `.html`, ou o `manifest.json` na raiz do `.zip` |
| `manifest-json`            | erro  | o manifesto não é JSON válido (vírgula sobrando, aspas simples, comentário)                                             |
| `manifest-field`           | erro  | falta um campo obrigatório, ou ele está vazio, longo demais ou com o tipo errado                                        |
| `manifest-version`         | erro  | `"rpgdesk"` não é `1`                                                                                                   |
| `manifest-id`              | erro  | o `id` tem caracteres que não valem                                                                                     |
| `manifest-semver`          | erro  | a `version` não é maior.menor.correção (`1.0.0`)                                                                        |
| `manifest-sdk`             | erro  | `"sdk"` não é `1`                                                                                                       |
| `manifest-type`            | erro  | o `type` tem caracteres que não valem, ou não começa com o `id` e um ponto                                              |
| `manifest-entry`           | erro  | a `entry` não é um arquivo `.html`                                                                                      |
| `manifest-private`         | erro  | uma parte privada tem um caminho inválido, ou um nível que não é `gm` nem `owner`                                       |
| `manifest-private-table`   | aviso | `private` numa tabela: não vale; use `doc.restrict`                                                                     |
| `manifest-empty`           | erro  | o plugin não declara nenhuma ficha nem tabela                                                                           |
| `manifest-single`          | erro  | um `.html` único com mais de uma ficha ou tabela                                                                        |
| `manifest-types`           | erro  | mais de 20 fichas e tabelas                                                                                             |
| `manifest-type-repeated`   | erro  | o mesmo `type` duas vezes                                                                                               |
| `manifest-webhooks`        | erro  | mais de 20 webhooks                                                                                                     |
| `manifest-webhook-name`    | erro  | o nome de um webhook não vale, ou aparece duas vezes                                                                    |
| `manifest-webhook-example` | erro  | o exemplo de um webhook passa de 4 KB                                                                                   |
| `manifest-icon`            | erro  | o `icon` não é `.png` nem `.svg`                                                                                        |
| `manifest-unknown`         | aviso | um campo que o RPG Desk não conhece (e ignora)                                                                          |

## Os arquivos do pacote

| Código          | Nível | O que quer dizer                                                                                                         |
| --------------- | ----- | ------------------------------------------------------------------------------------------------------------------------ |
| `package-size`  | erro  | o pacote passa de 10 MB                                                                                                  |
| `package-files` | erro  | o pacote passa de 500 arquivos                                                                                           |
| `path-invalid`  | erro  | um caminho começa com `/`, usa `\` ou `..`                                                                               |
| `file-type`     | erro  | um tipo de arquivo que o RPG Desk não aceita (veja [Pacotes](https://docs.rpgdesk.com/fichas/pacotes/#arquivos-aceitos)) |
| `entry-missing` | erro  | o HTML de uma `entry` não está no pacote                                                                                 |
| `entry-case`    | erro  | a `entry` não bate com o arquivo nas maiúsculas e minúsculas                                                             |
| `icon-missing`  | erro  | o `icon` não está no pacote                                                                                              |

## O HTML, o CSS e o JavaScript

| Código                | Nível | O que quer dizer                                                                                                    | Como consertar                                                |
| --------------------- | ----- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| `sdk-missing`         | aviso | a página de entrada não carrega o rpgdesk.js                                                                        | ponha a linha do rpgdesk.js no `<head>`                       |
| `external-script`     | erro  | um `<script src>` de fora do pacote                                                                                 | baixe o arquivo e ponha no pacote                             |
| `js-import-external`  | erro  | um `import` de um endereço de fora                                                                                  | baixe o módulo e importe por caminho relativo                 |
| `external-resource`   | aviso | uma imagem, folha de estilo ou fonte de fora (não carrega)                                                          | ponha o arquivo no pacote; fontes com `@font-face`            |
| `ref-missing`         | erro  | um arquivo citado não está no pacote                                                                                | inclua o arquivo ou corrija o caminho                         |
| `ref-case`            | erro  | o caminho não bate com o arquivo nas maiúsculas e minúsculas                                                        | escreva o nome exato                                          |
| `ref-outside`         | erro  | um caminho sobe além da raiz do pacote (`../../`)                                                                   | use caminhos dentro do pacote                                 |
| `link-external`       | aviso | um link para um site tiraria a página da ficha                                                                      | use um botão com `RPGDesk.ui.openLink(url)`                   |
| `link-page`           | aviso | um link para outra página do pacote (a ficha navegaria)                                                             | use abas (`data-tabs`)                                        |
| `binding-path`        | erro  | um `data-field`, `data-text`, `data-image`, `data-list` ou `data-list-add` com um caminho inválido (acento, espaço) | letras sem acento, números e `_`                              |
| `binding-placeholder` | erro  | um `{caminho}` inválido em `data-roll` ou `data-label`                                                              | o caminho de um campo, como `{mod_forca}`                     |
| `html-form`           | aviso | um `<form>` (enviar recarregaria a ficha)                                                                           | troque por `<div>`, ou use `event.preventDefault()`           |
| `html-base`           | aviso | um `<base>` (ignorado no RPG Desk)                                                                                  | tire o `<base>`                                               |
| `html-iframe`         | aviso | um `<iframe>`                                                                                                       | tire o `<iframe>`                                             |
| `js-dialog`           | aviso | `alert`, `confirm` ou `prompt` (não funcionam)                                                                      | `RPGDesk.ui.toast`, `RPGDesk.ui.confirm`, `RPGDesk.ui.prompt` |
| `js-storage`          | aviso | `localStorage`, `sessionStorage`, `indexedDB` ou cookies (bloqueados)                                               | o documento (`doc.set`) e `RPGDesk.storage`                   |
| `js-network`          | aviso | `fetch` para a internet, `XMLHttpRequest`, `WebSocket` (sem internet)                                               | webhooks; `fetch` de arquivos do pacote funciona              |
| `js-window-open`      | aviso | `window.open` (não abre nada)                                                                                       | `RPGDesk.ui.openLink(url)`                                    |
| `js-navigation`       | aviso | `location = …` (a ficha seria fechada)                                                                              | abas, ou `RPGDesk.ui.openLink(url)`                           |
| `js-webrtc`           | aviso | WebRTC (as fichas não precisam, e manda dados para fora)                                                            | tire o WebRTC                                                 |

Os comentários (`//` e `/* */`) não contam para as regras do JavaScript.

O código de bibliotecas não recebe avisos: o `$.ajax` do jQuery cita `XMLHttpRequest`, por exemplo, sem a ficha usar a rede. Conta como biblioteca um arquivo numa pasta `vendor/` e um código que começa com o comentário de licença `/*!`, num arquivo ou num `<script>` do HTML. Os erros, como `js-import-external`, valem para ele também. Veja [Bibliotecas](https://docs.rpgdesk.com/fichas/pacotes/#bibliotecas).
