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 realizadas em arquivos JSON existentes. Veja 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
spec:
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 de o 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
encoding:
Define o tipo de codificação a ser gravado no arquivo e aceita os formatos ascii, utf-8 e utf-16. O valor padrão é utf-8.
encoding: utf-8
indent:
Define o(s) caractere(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. O bloco tem como parâmetro obrigatório o campo jsonpath.
Durante o processo de pesquisa no atributo changes, todos os nós que correspondem aos critérios (atributo jsonpath) são alterados de uma só vez. Você pode fazer várias alterações em um arquivo apenas usando expressões.
Confira algumas expressões aceitas:
Confira as expressões detalhadas
| Expressão | Descrição |
|---|---|
@ | Define o objeto do elemento atual. |
$ | Define o objeto do elemento raiz. |
() | Expressão de script, usando o mecanismo de script subjacente. |
[início:fim] | Retorna uma cópia de parte de um array criada entre as posições inicial e final (final não incluído) de um array original. |
?() | Aplica o filtro à expressão do script. |
[] | Operador filho usado em expressões. |
.. | Descida recursiva. |
* | Usado em elementos de objeto independentemente do uso de seus nomes. |
[] | Em JSON e JavaScript, é o operador de array nativo. |
[,] | O caminho JSON permite um conjunto de índices e nomes de array. |
jsonpath:
Permite inserir a expressão de busca em JSON. O uso é obrigatório.
changes:
- jsonpath: "$.packages.version"
...
Se necessário, consulte o suporte de JSONPath.
É possível interpolar os valores do campo jsonpath 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 a ser adicionado ao JSON.
update:
value: "qa"
snippet
Recebe o snippet a ser adicionado ao JSON.
update:
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 a ser avaliado pela condição.
not-exists:
Verifica se os valores informados no campo value existem no arquivo. Caso existam, as ações update, remove e clear não serão efetivadas.
hooks:
- type: edit-json
jsonpath: "$.some"
update:
value: |
{
"not-existing": {
"item": 2
}
}
when:
not-exists: "$.some.not-existing"