edit-json

Nesta seção, você encontra a referência de um Hook Declarativo do tipo edit-json.

Um Hook Declarativo do tipo edit-json define alterações feitas em arquivos JSON existentes. Confira abaixo um exemplo de definição de um Hook Declarativo do tipo edit-json:

name: "hook-edit-json"
description: Test edit-json in hooks
types:
  - app
inputs:
  - label: Just a text
    type: text
    name: json_body
  - label: Just a Tag
    type: text
    name: json_tag
hooks:
  - type: edit-json
    trigger: after-render
    path: package.json
    indent: "\t"
    encoding: utf-8
    changes:
      - jsonpath: "$.scripts"
        update:
          value: |
            {
            "test": "ola 123",
            "ola": "como vai você"
            }
      - jsonpath: "$"
        remove:
          - name: private
          - name: devDependencies
      - jsonpath: "$.log"
        clear: true

Ações Disponíveis

path:

Define o caminho do arquivo que será editado. O caminho pode ser composto por expressões Jinja.

path: package.json

trigger:

Campo para definir gatilhos que informam o momento em que a edição de arquivos deve ocorrer.

before-input:
Executa o Hook Declarativo antes de receber os parâmetros de entrada da pessoa usuária.

trigger: before-input

before-render:
Executa o Hook Declarativo antes do Template gerar arquivos no projeto.

trigger: before-render

after-render:
Executa o Hook Declarativo após o Template gerar arquivos no projeto.

trigger: after-render

enconding:

Define o tipo de encoding a ser gravado no arquivo, e aceita os formatos [ascii, utf-8, utf-16]. O valor padrão é o utf-8.

encoding: utf-8

indent:

Define o(s) caracterer(s) ou número de espaços para a indentação do documento gerado. O valor padrão de espaços é 2.

indent: "\t"

changes:

É uma lista de ações de edição que serão executadas na ordem em que aparecem. E o seu bloco tem como obrigatório o parâmetro jsonpath.

jsonpath:

Permite inserir a linguagem de busca do JSON. O seu uso é Obrigatório.

changes:
  - jsonpath: "$.packages.version"
    ...

Se necessário, consulte o Suporte do jsonpath

É possível interpolar os valores do campo xpath com Jinja:

hooks:
  - type: edit-json
    trigger: after-render
    path: package.json
    indent: "\t"
    encoding: utf-8
    changes:
      - jsonpath: "$.scripts[?name = '{{INTERPOLAR-INPUT-AQUI}}']"
        update:
          value: |
            {
            "test": "ola 123",
            "ola": "como vai você"
            }

update:
Altera ou acrescenta um item dentro de um resultado de um jsonpath. Os campos disponíveis são value ou snippet.

value
Recebe o valor para ser adicionado ao JSON.

  update:
    value: "qa"

snippet
Recebe o snippet para ser adicionado ao JSON.

append:
    snippet: snippets/fragment.json

remove:
Remove um elemento de dicionário. O campo disponível é o name.

name:**
Recebe o nome do elemento a ser removido do dicionário JSON. É possível interpolar os valores do campo name com
Jinja**.

- jsonpath: "$.scripts"
  remove:
    - name: prepare

clear:
Remove todo o conteúdo do nó JSON, dado o contexto do jsonpath. Os valores aceitos são true ou false.

  - jsonpath: "$.devDependencies"
    clear: true

when:

Ação condicional que avalia se a inserção será efetivada. A opção disponível é not-exists, que recebe o texto ou arquivo para serem avaliados pela condição.

not-exists:
Checa se os valores informados nos campo value existem no arquivo. Caso exista, as ações update, remove e clear não serão efetivadas.

hooks:
  - jsonpath: "$.some"
    update:
      value: |
        {
          "not-existing": {
            "item": 2
          }
        }
    when:
      not-exists: "$.some.not-existing"

Leia também