Skip to content

bug: getter exists no Vuex muta o state diretamente em src/store/getters.js #42

@NatanBudny

Description

@NatanBudny

Problema

O getter exists em src/store/getters.js criava objetos intermediários diretamente no state do Vuex ao percorrer caminhos inexistentes:

if (!current[key]) {
  current[key] = {}; // mutação ilegal dentro de getter
}

Getters devem ser funções puras de leitura. Essa mutação bypassa completamente o sistema de mutations, tornando as alterações invisíveis para o devtools e quebrando a rastreabilidade de reatividade em toda a aplicação — já que AppData.get() e AppData.exists() em src/helpers/AppData.js passam por esse getter em cada leitura de estado.

Correção

Substituir a criação do nó por um retorno antecipado de false:

if (current[key] === undefined || current[key] === null) {
  return false;
}

Possíveis impactos

  • Código que dependia do efeito colateral do getter para criar nós no estado passará a receber false onde antes recebia true
  • Pode expor bugs já existentes mascarados pelo comportamento anterior, especialmente em caminhos acessados pelo ModuleManager em src/helpers/ModuleManager.js antes de os módulos serem instalados

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions