edit-json
Nesta seção, você encontra: 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 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 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
.
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. |
() | Esta é uma expressão de script, usando o mecanismo de script subjacente. |
[início:fim] | Retorna uma cópia de parte de um array de um subarray criado entre as posições inicial e final (final não está incluído) de um array original. |
?() | Aplica o filtro à expressão do script. |
[] | Este é um operador filho que foi usado em expressões. |
.. | Esta é uma descida recursiva. |
* | É usado em elementos de objeto independentemente de usar seus nomes. |
[] | Em json e javascript, é o operador do array nativo. |
[,] | O caminho Json nos permite um conjunto de índices e nomes de array. |
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.
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 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"