@semacode/cli 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +39 -39
- package/README.md +251 -141
- package/dist/agentContext.d.ts +1 -1
- package/dist/agentContextPack.js +6 -1
- package/dist/agentContextTipos.d.ts +4 -2
- package/dist/agentContextTipos.js +7 -0
- package/dist/agentEntryPoints.js +551 -499
- package/dist/angular-consumer-standalone.d.ts +3 -1
- package/dist/angular-consumer-standalone.js +12 -8
- package/dist/comandos.js +4 -0
- package/dist/discovery/catalog.d.ts +11 -0
- package/dist/discovery/catalog.js +521 -0
- package/dist/discovery/command.d.ts +11 -0
- package/dist/discovery/command.js +226 -0
- package/dist/discovery/index.d.ts +5 -0
- package/dist/discovery/index.js +8 -0
- package/dist/discovery/ranker.d.ts +3 -0
- package/dist/discovery/ranker.js +310 -0
- package/dist/discovery/redaction.d.ts +2 -0
- package/dist/discovery/redaction.js +21 -0
- package/dist/discovery/render.d.ts +2 -0
- package/dist/discovery/render.js +100 -0
- package/dist/discovery/types.d.ts +119 -0
- package/dist/discovery/types.js +13 -0
- package/dist/drift.part01.d.ts +32 -2
- package/dist/drift.part01.js +2 -0
- package/dist/drift.part04.d.ts +3 -2
- package/dist/drift.part04.js +6 -3
- package/dist/drift.part05.d.ts +2 -1
- package/dist/drift.part05.js +4 -3
- package/dist/drift.part06.d.ts +2 -1
- package/dist/drift.part06.js +9 -5
- package/dist/drift.part07.d.ts +11 -10
- package/dist/drift.part07.js +40 -30
- package/dist/drift.part08.d.ts +2 -1
- package/dist/drift.part08.js +4 -3
- package/dist/drift.part11.js +71 -6
- package/dist/drift.part12.js +14 -1
- package/dist/drift.part13.d.ts +42 -7
- package/dist/drift.part13.js +660 -36
- package/dist/driftCache.d.ts +49 -0
- package/dist/driftCache.js +311 -0
- package/dist/driftCacheIncremental.d.ts +98 -0
- package/dist/driftCacheIncremental.js +596 -0
- package/dist/driftCatalogo.d.ts +91 -0
- package/dist/driftCatalogo.js +657 -0
- package/dist/driftCatalogoPersistente.d.ts +8 -0
- package/dist/driftCatalogoPersistente.js +77 -0
- package/dist/driftEscopo.d.ts +23 -0
- package/dist/driftEscopo.js +563 -0
- package/dist/driftEscopoReferencias.d.ts +4 -0
- package/dist/driftEscopoReferencias.js +265 -0
- package/dist/driftOrcamento.d.ts +12 -0
- package/dist/driftOrcamento.js +19 -3
- package/dist/execucoesExternas.js +5 -19
- package/dist/exemplosOficiais.js +29 -8
- package/dist/iaPrompts.d.ts +1 -1
- package/dist/iaPrompts.js +310 -307
- package/dist/index.d.ts +2 -0
- package/dist/index.js +23 -5
- package/dist/index.part01.d.ts +17 -2
- package/dist/index.part01.js +119 -8
- package/dist/index.part02.js +21 -21
- package/dist/index.part03.d.ts +2 -2
- package/dist/index.part03.js +14 -3
- package/dist/index.part04.d.ts +2 -2
- package/dist/index.part04.js +113 -101
- package/dist/index.part05.d.ts +1 -1
- package/dist/index.part05.js +99 -22
- package/dist/index.part06.js +6 -2
- package/dist/index.part07.js +24 -24
- package/dist/index.part08.js +1 -1
- package/dist/init/templates.part01.js +393 -393
- package/dist/init/templates.part02.js +189 -189
- package/dist/initTemplatesBackend.js +73 -73
- package/dist/initTemplatesBase.js +81 -80
- package/dist/initTemplatesFlutter.js +137 -137
- package/dist/initTemplatesRuntime.js +350 -350
- package/dist/initTemplatesWeb.js +309 -309
- package/dist/pipelineConteudo/command.js +1 -36
- package/dist/profileArtefatoValidadores.d.ts +3 -2
- package/dist/profileArtefatoValidadores.js +81 -0
- package/dist/profileAuthorTipos.d.ts +4 -3
- package/dist/profileCatalogo.d.ts +5 -5
- package/dist/profileCatalogo.js +30 -0
- package/dist/profileCommand.d.ts +8 -2
- package/dist/profileCommand.js +15 -5
- package/dist/profileRegras.d.ts +5 -5
- package/dist/profileRegras.js +13 -1
- package/dist/profileRulePacks.js +68 -0
- package/dist/projeto.d.ts +1 -1
- package/dist/projetoCarregar.d.ts +2 -2
- package/dist/projetoCarregar.js +47 -24
- package/dist/projetoCatalogo.d.ts +7 -0
- package/dist/projetoCatalogo.js +125 -0
- package/dist/projetoTipos.d.ts +14 -5
- package/dist/sistemasInterativos/adapterProtocol.d.ts +3 -0
- package/dist/sistemasInterativos/adapterProtocol.js +240 -0
- package/dist/sistemasInterativos/advancedCatalog.d.ts +5 -0
- package/dist/sistemasInterativos/advancedCatalog.js +442 -0
- package/dist/sistemasInterativos/autonomy.d.ts +230 -0
- package/dist/sistemasInterativos/autonomy.js +753 -0
- package/dist/sistemasInterativos/canonical.d.ts +3 -0
- package/dist/sistemasInterativos/canonical.js +43 -0
- package/dist/sistemasInterativos/catalog.d.ts +116 -0
- package/dist/sistemasInterativos/catalog.js +543 -0
- package/dist/sistemasInterativos/command.d.ts +7 -0
- package/dist/sistemasInterativos/command.js +311 -0
- package/dist/sistemasInterativos/controlRun.d.ts +56 -0
- package/dist/sistemasInterativos/controlRun.js +391 -0
- package/dist/sistemasInterativos/evidence.d.ts +5 -0
- package/dist/sistemasInterativos/evidence.js +306 -0
- package/dist/sistemasInterativos/experienceIr.d.ts +12 -0
- package/dist/sistemasInterativos/experienceIr.js +895 -0
- package/dist/sistemasInterativos/experienceIrSemantics.d.ts +30 -0
- package/dist/sistemasInterativos/experienceIrSemantics.js +368 -0
- package/dist/sistemasInterativos/experienceIrTypes.d.ts +370 -0
- package/dist/sistemasInterativos/experienceIrTypes.js +5 -0
- package/dist/sistemasInterativos/extensionCommand.d.ts +391 -0
- package/dist/sistemasInterativos/extensionCommand.js +383 -0
- package/dist/sistemasInterativos/index.d.ts +19 -0
- package/dist/sistemasInterativos/index.js +22 -0
- package/dist/sistemasInterativos/operations.d.ts +40 -0
- package/dist/sistemasInterativos/operations.js +1167 -0
- package/dist/sistemasInterativos/operationsTypes.d.ts +297 -0
- package/dist/sistemasInterativos/operationsTypes.js +11 -0
- package/dist/sistemasInterativos/planner.d.ts +2 -0
- package/dist/sistemasInterativos/planner.js +159 -0
- package/dist/sistemasInterativos/portability.d.ts +164 -0
- package/dist/sistemasInterativos/portability.js +539 -0
- package/dist/sistemasInterativos/render.d.ts +3 -0
- package/dist/sistemasInterativos/render.js +179 -0
- package/dist/sistemasInterativos/temporal.d.ts +183 -0
- package/dist/sistemasInterativos/temporal.js +543 -0
- package/dist/sistemasInterativos/types.d.ts +215 -0
- package/dist/sistemasInterativos/types.js +4 -0
- package/dist/sistemasInterativos/validator.d.ts +2 -0
- package/dist/sistemasInterativos/validator.js +305 -0
- package/dist/sync/index.js +35 -35
- package/docs/README.md +34 -28
- package/docs/ai-onboarding.md +62 -62
- package/docs/ai-workflow.md +9 -4
- package/docs/auth.md +26 -26
- package/docs/cli.md +79 -79
- package/docs/commands.md +47 -2
- package/docs/database.md +15 -15
- package/docs/deploy.md +41 -41
- package/docs/descoberta-capacidades.md +106 -0
- package/docs/documentation.md +39 -39
- package/docs/env.md +16 -16
- package/docs/frontend.md +41 -41
- package/docs/getting-started.md +57 -57
- package/docs/i18n.md +15 -15
- package/docs/pipeline-conteudo.md +246 -246
- package/docs/profiles.md +54 -45
- package/docs/repositories.md +43 -43
- package/docs/rollback.md +31 -31
- package/docs/security.md +32 -32
- package/docs/sistemas-interativos.md +376 -0
- package/docs/support.md +8 -8
- package/docs/testing.md +51 -35
- package/docs/vocabulary.md +29 -29
- package/exemplos/agendamento.sema +1 -1
- package/exemplos/assinatura.sema +1 -1
- package/exemplos/auditoria.sema +1 -1
- package/exemplos/autenticacao.sema +1 -1
- package/exemplos/author_obra_comum.sema +1 -1
- package/exemplos/author_tema_sensivel.sema +1 -1
- package/exemplos/automacao.sema +1 -1
- package/exemplos/cadastro_usuario.sema +1 -1
- package/exemplos/calculadora.sema +1 -1
- package/exemplos/crud_simples.sema +1 -1
- package/exemplos/estoque.sema +1 -1
- package/exemplos/exportacao.sema +1 -1
- package/exemplos/fila.sema +1 -1
- package/exemplos/integracao_externa.sema +1 -1
- package/exemplos/multi_tenant.sema +1 -1
- package/exemplos/notificacao.sema +1 -1
- package/exemplos/operacao_estrategia.sema +132 -132
- package/exemplos/operacao_estrategia_discovery.sema +220 -220
- package/exemplos/operacao_estrategia_fluxo.sema +114 -114
- package/exemplos/operacao_estrategia_gates.sema +106 -106
- package/exemplos/operacao_estrategia_quarentena.sema +133 -133
- package/exemplos/operacao_estrategia_rollout.sema +124 -124
- package/exemplos/pagamento.sema +1 -1
- package/exemplos/pagamento_dominio.sema +1 -1
- package/exemplos/pedido.sema +1 -1
- package/exemplos/permissao.sema +1 -1
- package/exemplos/persistencia_vendor_first.sema +1 -1
- package/exemplos/pipeline-conteudo/README.md +44 -44
- package/exemplos/pipeline-conteudo/alvos.json +23 -23
- package/exemplos/pipeline-conteudo/definicao.json +136 -136
- package/exemplos/profile_conversas.sema +165 -165
- package/exemplos/profile_game.sema +1 -1
- package/exemplos/profile_legal.sema +1 -1
- package/exemplos/profile_ops.sema +1 -1
- package/exemplos/profile_research.sema +1 -1
- package/exemplos/profile_simulation.sema +211 -0
- package/exemplos/profile_software.sema +1 -1
- package/exemplos/profile_workflow_n8n.sema +1 -1
- package/exemplos/relatorio.sema +1 -1
- package/exemplos/replica_analitica_erp.sema +1 -1
- package/exemplos/sistemas-interativos/README.md +100 -0
- package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -0
- package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -0
- package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -0
- package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -0
- package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -0
- package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -0
- package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -0
- package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -0
- package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -0
- package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -0
- package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -0
- package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -0
- package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -0
- package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -0
- package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -0
- package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -0
- package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -0
- package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -0
- package/exemplos/sistemas-interativos/game-2d.json +83 -0
- package/exemplos/sistemas-interativos/game-3d-human.json +81 -0
- package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -0
- package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -0
- package/exemplos/sistemas-interativos/game-xr-human.json +80 -0
- package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -0
- package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -0
- package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -0
- package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -0
- package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -0
- package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -0
- package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -0
- package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -0
- package/exemplos/testes_embutidos.sema +1 -1
- package/exemplos/tratamento_erro.sema +1 -1
- package/exemplos/upload_arquivo.sema +1 -1
- package/exemplos/webhook.sema +1 -1
- package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
- package/node_modules/@sema/gerador-cpp/package.json +1 -1
- package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
- package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
- package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
- package/node_modules/@sema/gerador-dotnet/package.json +1 -1
- package/node_modules/@sema/gerador-html/dist/index.js +17 -17
- package/node_modules/@sema/gerador-lua/dist/index.js +76 -47
- package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-php/dist/index.js +113 -113
- package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
- package/package.json +3 -3
|
@@ -1,399 +1,399 @@
|
|
|
1
1
|
// SEMA-GOVERNED: sema.governanca_ia_contexto
|
|
2
2
|
// Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
|
|
3
|
-
export const templateCrudSimples = (moduloNome) => `module ${moduloNome} {
|
|
4
|
-
entity Item {
|
|
5
|
-
fields {
|
|
6
|
-
id: Id
|
|
7
|
-
nome: Texto
|
|
8
|
-
descricao: Texto
|
|
9
|
-
ativo: Booleano
|
|
10
|
-
criado_em: Timestamp
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
task criar_item {
|
|
15
|
-
input {
|
|
16
|
-
nome: Texto required
|
|
17
|
-
descricao: Texto optional
|
|
18
|
-
}
|
|
19
|
-
output {
|
|
20
|
-
item: Item
|
|
21
|
-
}
|
|
22
|
-
rules {
|
|
23
|
-
nome deve_ser preenchido
|
|
24
|
-
}
|
|
25
|
-
effects {
|
|
26
|
-
persistencia Item
|
|
27
|
-
auditoria item_criado
|
|
28
|
-
}
|
|
29
|
-
guarantees {
|
|
30
|
-
item existe
|
|
31
|
-
}
|
|
32
|
-
tests {
|
|
33
|
-
caso "cria item basico" {
|
|
34
|
-
given {
|
|
35
|
-
nome: "Novo Item"
|
|
36
|
-
}
|
|
37
|
-
expect {
|
|
38
|
-
sucesso: verdadeiro
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
task listar_itens {
|
|
45
|
-
input {
|
|
46
|
-
ativo: Booleano optional
|
|
47
|
-
pagina: Inteiro optional
|
|
48
|
-
limite: Inteiro optional
|
|
49
|
-
}
|
|
50
|
-
output {
|
|
51
|
-
itens: Lista<Item>
|
|
52
|
-
total: Inteiro
|
|
53
|
-
}
|
|
54
|
-
effects {
|
|
55
|
-
consulta Item
|
|
56
|
-
}
|
|
57
|
-
guarantees {
|
|
58
|
-
itens existe
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
route itens {
|
|
63
|
-
metodo: POST
|
|
64
|
-
caminho: /itens
|
|
65
|
-
task: criar_item
|
|
66
|
-
finalidade: criar_novo_item
|
|
67
|
-
input {
|
|
68
|
-
nome: Texto
|
|
69
|
-
descricao: Texto
|
|
70
|
-
}
|
|
71
|
-
output {
|
|
72
|
-
item: Item
|
|
73
|
-
}
|
|
74
|
-
auth {
|
|
75
|
-
modo: obrigatorio
|
|
76
|
-
}
|
|
77
|
-
authz {
|
|
78
|
-
escopo: ${moduloNome}.criar
|
|
79
|
-
}
|
|
80
|
-
audit {
|
|
81
|
-
evento: ${moduloNome}.item.criado
|
|
82
|
-
ator: auth.usuario
|
|
83
|
-
retencao: "90d"
|
|
84
|
-
}
|
|
85
|
-
}
|
|
3
|
+
export const templateCrudSimples = (moduloNome) => `module ${moduloNome} {
|
|
4
|
+
entity Item {
|
|
5
|
+
fields {
|
|
6
|
+
id: Id
|
|
7
|
+
nome: Texto
|
|
8
|
+
descricao: Texto
|
|
9
|
+
ativo: Booleano
|
|
10
|
+
criado_em: Timestamp
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
task criar_item {
|
|
15
|
+
input {
|
|
16
|
+
nome: Texto required
|
|
17
|
+
descricao: Texto optional
|
|
18
|
+
}
|
|
19
|
+
output {
|
|
20
|
+
item: Item
|
|
21
|
+
}
|
|
22
|
+
rules {
|
|
23
|
+
nome deve_ser preenchido
|
|
24
|
+
}
|
|
25
|
+
effects {
|
|
26
|
+
persistencia Item
|
|
27
|
+
auditoria item_criado
|
|
28
|
+
}
|
|
29
|
+
guarantees {
|
|
30
|
+
item existe
|
|
31
|
+
}
|
|
32
|
+
tests {
|
|
33
|
+
caso "cria item basico" {
|
|
34
|
+
given {
|
|
35
|
+
nome: "Novo Item"
|
|
36
|
+
}
|
|
37
|
+
expect {
|
|
38
|
+
sucesso: verdadeiro
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
task listar_itens {
|
|
45
|
+
input {
|
|
46
|
+
ativo: Booleano optional
|
|
47
|
+
pagina: Inteiro optional
|
|
48
|
+
limite: Inteiro optional
|
|
49
|
+
}
|
|
50
|
+
output {
|
|
51
|
+
itens: Lista<Item>
|
|
52
|
+
total: Inteiro
|
|
53
|
+
}
|
|
54
|
+
effects {
|
|
55
|
+
consulta Item
|
|
56
|
+
}
|
|
57
|
+
guarantees {
|
|
58
|
+
itens existe
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
route itens {
|
|
63
|
+
metodo: POST
|
|
64
|
+
caminho: /itens
|
|
65
|
+
task: criar_item
|
|
66
|
+
finalidade: criar_novo_item
|
|
67
|
+
input {
|
|
68
|
+
nome: Texto
|
|
69
|
+
descricao: Texto
|
|
70
|
+
}
|
|
71
|
+
output {
|
|
72
|
+
item: Item
|
|
73
|
+
}
|
|
74
|
+
auth {
|
|
75
|
+
modo: obrigatorio
|
|
76
|
+
}
|
|
77
|
+
authz {
|
|
78
|
+
escopo: ${moduloNome}.criar
|
|
79
|
+
}
|
|
80
|
+
audit {
|
|
81
|
+
evento: ${moduloNome}.item.criado
|
|
82
|
+
ator: auth.usuario
|
|
83
|
+
retencao: "90d"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
86
|
}`;
|
|
87
|
-
export const templateAuthCompleto = (moduloNome) => `module ${moduloNome} {
|
|
88
|
-
entity Usuario {
|
|
89
|
-
fields {
|
|
90
|
-
id: Id
|
|
91
|
-
email: Email
|
|
92
|
-
senha_hash: Texto
|
|
93
|
-
papel: Texto
|
|
94
|
-
ativo: Booleano
|
|
95
|
-
ultimo_login: Timestamp
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
task autenticar_usuario {
|
|
100
|
-
input {
|
|
101
|
-
email: Email required
|
|
102
|
-
senha: Texto required
|
|
103
|
-
}
|
|
104
|
-
output {
|
|
105
|
-
token: Texto
|
|
106
|
-
usuario: Usuario
|
|
107
|
-
expiracao: Timestamp
|
|
108
|
-
}
|
|
109
|
-
rules {
|
|
110
|
-
email deve_ser email_valido
|
|
111
|
-
senha deve_ter tamanho >= 8
|
|
112
|
-
}
|
|
113
|
-
effects {
|
|
114
|
-
consulta Usuario
|
|
115
|
-
auditoria login_tentativa
|
|
116
|
-
}
|
|
117
|
-
forbidden {
|
|
118
|
-
expor_senha_em_log
|
|
119
|
-
retornar_senha_hash
|
|
120
|
-
permitir_credencial_inativa
|
|
121
|
-
}
|
|
122
|
-
guarantees {
|
|
123
|
-
token existe
|
|
124
|
-
expiracao > agora
|
|
125
|
-
}
|
|
126
|
-
error {
|
|
127
|
-
credenciais_invalidas: "Email ou senha incorretos."
|
|
128
|
-
conta_inativa: "Conta desativada. Contate o administrador."
|
|
129
|
-
senha_fraca: "Senha nao atende aos requisitos minimos."
|
|
130
|
-
}
|
|
131
|
-
tests {
|
|
132
|
-
caso "login com sucesso" {
|
|
133
|
-
given {
|
|
134
|
-
email: "user@exemplo.com"
|
|
135
|
-
senha: "senha123"
|
|
136
|
-
}
|
|
137
|
-
expect {
|
|
138
|
-
sucesso: verdadeiro
|
|
139
|
-
token existe
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
task registrar_usuario {
|
|
146
|
-
input {
|
|
147
|
-
email: Email required
|
|
148
|
-
senha: Texto required
|
|
149
|
-
confirmar_senha: Texto required
|
|
150
|
-
}
|
|
151
|
-
output {
|
|
152
|
-
usuario: Usuario
|
|
153
|
-
}
|
|
154
|
-
rules {
|
|
155
|
-
email deve_ser email_valido
|
|
156
|
-
email deve_ser unico em Usuario.email
|
|
157
|
-
senha deve_ter tamanho >= 8
|
|
158
|
-
senha deve_coincidir com confirmar_senha
|
|
159
|
-
}
|
|
160
|
-
effects {
|
|
161
|
-
persistencia Usuario
|
|
162
|
-
evento usuario_registrado
|
|
163
|
-
auditoria cadastro_novo
|
|
164
|
-
}
|
|
165
|
-
forbidden {
|
|
166
|
-
armazenar_senha_texto_plano
|
|
167
|
-
permitir_email_duplicado
|
|
168
|
-
}
|
|
169
|
-
guarantees {
|
|
170
|
-
usuario existe
|
|
171
|
-
usuario.senha_hash nao_eh_texto_plano
|
|
172
|
-
}
|
|
173
|
-
error {
|
|
174
|
-
email_duplicado: "Ja existe conta com este email."
|
|
175
|
-
senha_fraca: "Senha deve ter pelo menos 8 caracteres."
|
|
176
|
-
senhas_diferentes: "As senhas nao coincidem."
|
|
177
|
-
}
|
|
178
|
-
}
|
|
87
|
+
export const templateAuthCompleto = (moduloNome) => `module ${moduloNome} {
|
|
88
|
+
entity Usuario {
|
|
89
|
+
fields {
|
|
90
|
+
id: Id
|
|
91
|
+
email: Email
|
|
92
|
+
senha_hash: Texto
|
|
93
|
+
papel: Texto
|
|
94
|
+
ativo: Booleano
|
|
95
|
+
ultimo_login: Timestamp
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
task autenticar_usuario {
|
|
100
|
+
input {
|
|
101
|
+
email: Email required
|
|
102
|
+
senha: Texto required
|
|
103
|
+
}
|
|
104
|
+
output {
|
|
105
|
+
token: Texto
|
|
106
|
+
usuario: Usuario
|
|
107
|
+
expiracao: Timestamp
|
|
108
|
+
}
|
|
109
|
+
rules {
|
|
110
|
+
email deve_ser email_valido
|
|
111
|
+
senha deve_ter tamanho >= 8
|
|
112
|
+
}
|
|
113
|
+
effects {
|
|
114
|
+
consulta Usuario
|
|
115
|
+
auditoria login_tentativa
|
|
116
|
+
}
|
|
117
|
+
forbidden {
|
|
118
|
+
expor_senha_em_log
|
|
119
|
+
retornar_senha_hash
|
|
120
|
+
permitir_credencial_inativa
|
|
121
|
+
}
|
|
122
|
+
guarantees {
|
|
123
|
+
token existe
|
|
124
|
+
expiracao > agora
|
|
125
|
+
}
|
|
126
|
+
error {
|
|
127
|
+
credenciais_invalidas: "Email ou senha incorretos."
|
|
128
|
+
conta_inativa: "Conta desativada. Contate o administrador."
|
|
129
|
+
senha_fraca: "Senha nao atende aos requisitos minimos."
|
|
130
|
+
}
|
|
131
|
+
tests {
|
|
132
|
+
caso "login com sucesso" {
|
|
133
|
+
given {
|
|
134
|
+
email: "user@exemplo.com"
|
|
135
|
+
senha: "senha123"
|
|
136
|
+
}
|
|
137
|
+
expect {
|
|
138
|
+
sucesso: verdadeiro
|
|
139
|
+
token existe
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
task registrar_usuario {
|
|
146
|
+
input {
|
|
147
|
+
email: Email required
|
|
148
|
+
senha: Texto required
|
|
149
|
+
confirmar_senha: Texto required
|
|
150
|
+
}
|
|
151
|
+
output {
|
|
152
|
+
usuario: Usuario
|
|
153
|
+
}
|
|
154
|
+
rules {
|
|
155
|
+
email deve_ser email_valido
|
|
156
|
+
email deve_ser unico em Usuario.email
|
|
157
|
+
senha deve_ter tamanho >= 8
|
|
158
|
+
senha deve_coincidir com confirmar_senha
|
|
159
|
+
}
|
|
160
|
+
effects {
|
|
161
|
+
persistencia Usuario
|
|
162
|
+
evento usuario_registrado
|
|
163
|
+
auditoria cadastro_novo
|
|
164
|
+
}
|
|
165
|
+
forbidden {
|
|
166
|
+
armazenar_senha_texto_plano
|
|
167
|
+
permitir_email_duplicado
|
|
168
|
+
}
|
|
169
|
+
guarantees {
|
|
170
|
+
usuario existe
|
|
171
|
+
usuario.senha_hash nao_eh_texto_plano
|
|
172
|
+
}
|
|
173
|
+
error {
|
|
174
|
+
email_duplicado: "Ja existe conta com este email."
|
|
175
|
+
senha_fraca: "Senha deve ter pelo menos 8 caracteres."
|
|
176
|
+
senhas_diferentes: "As senhas nao coincidem."
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
179
|
}`;
|
|
180
|
-
export const templateApiRest = (moduloNome) => `module ${moduloNome} {
|
|
181
|
-
docs {
|
|
182
|
-
resumo: "API REST completa com CRUD, autenticacao e paginacao."
|
|
183
|
-
versao: "1.0.0"
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
entity Recurso {
|
|
187
|
-
fields {
|
|
188
|
-
id: Id
|
|
189
|
-
titulo: Texto
|
|
190
|
-
conteudo: Texto
|
|
191
|
-
status: Texto
|
|
192
|
-
criado_por: Id
|
|
193
|
-
criado_em: Timestamp
|
|
194
|
-
atualizado_em: Timestamp
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
task criar_recurso {
|
|
199
|
-
input {
|
|
200
|
-
titulo: Texto required
|
|
201
|
-
conteudo: Texto required
|
|
202
|
-
}
|
|
203
|
-
output {
|
|
204
|
-
recurso: Recurso
|
|
205
|
-
}
|
|
206
|
-
rules {
|
|
207
|
-
titulo deve_ser preenchido
|
|
208
|
-
conteudo deve_ser preenchido
|
|
209
|
-
}
|
|
210
|
-
effects {
|
|
211
|
-
persistencia Recurso
|
|
212
|
-
auditoria recurso_criado
|
|
213
|
-
}
|
|
214
|
-
auth {
|
|
215
|
-
modo: obrigatorio
|
|
216
|
-
}
|
|
217
|
-
authz {
|
|
218
|
-
escopo: ${moduloNome}.escrever
|
|
219
|
-
papeis: [admin, editor]
|
|
220
|
-
}
|
|
221
|
-
dados {
|
|
222
|
-
input {
|
|
223
|
-
titulo: publico
|
|
224
|
-
conteudo: interno
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
audit {
|
|
228
|
-
evento: ${moduloNome}.recurso.criado
|
|
229
|
-
ator: auth.usuario
|
|
230
|
-
retencao: "90d"
|
|
231
|
-
}
|
|
232
|
-
guarantees {
|
|
233
|
-
recurso existe
|
|
234
|
-
recurso.criado_por == auth.usuario_id
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
task obter_recurso {
|
|
239
|
-
input {
|
|
240
|
-
id: Id required
|
|
241
|
-
}
|
|
242
|
-
output {
|
|
243
|
-
recurso: Recurso
|
|
244
|
-
}
|
|
245
|
-
rules {
|
|
246
|
-
id deve_ser valido
|
|
247
|
-
}
|
|
248
|
-
effects {
|
|
249
|
-
consulta Recurso
|
|
250
|
-
}
|
|
251
|
-
auth {
|
|
252
|
-
modo: opcional
|
|
253
|
-
}
|
|
254
|
-
authz {
|
|
255
|
-
escopo: ${moduloNome}.ler
|
|
256
|
-
}
|
|
257
|
-
guarantees {
|
|
258
|
-
recurso existe
|
|
259
|
-
}
|
|
260
|
-
error {
|
|
261
|
-
nao_encontrado: "Recurso nao encontrado."
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
task listar_recursos {
|
|
266
|
-
input {
|
|
267
|
-
status: Texto optional
|
|
268
|
-
pagina: Inteiro optional
|
|
269
|
-
limite: Inteiro optional
|
|
270
|
-
ordenar_por: Texto optional
|
|
271
|
-
}
|
|
272
|
-
output {
|
|
273
|
-
recursos: Lista<Recurso>
|
|
274
|
-
total: Inteiro
|
|
275
|
-
pagina: Inteiro
|
|
276
|
-
total_paginas: Inteiro
|
|
277
|
-
}
|
|
278
|
-
rules {
|
|
279
|
-
limite quando preenchido deve_ser <= 100
|
|
280
|
-
pagina quando preenchido deve_ser >= 1
|
|
281
|
-
}
|
|
282
|
-
effects {
|
|
283
|
-
consulta Recurso
|
|
284
|
-
}
|
|
285
|
-
auth {
|
|
286
|
-
modo: anonimo
|
|
287
|
-
}
|
|
288
|
-
guarantees {
|
|
289
|
-
recursos existe
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
task atualizar_recurso {
|
|
294
|
-
input {
|
|
295
|
-
id: Id required
|
|
296
|
-
titulo: Texto optional
|
|
297
|
-
conteudo: Texto optional
|
|
298
|
-
status: Texto optional
|
|
299
|
-
}
|
|
300
|
-
output {
|
|
301
|
-
recurso: Recurso
|
|
302
|
-
}
|
|
303
|
-
rules {
|
|
304
|
-
id deve_ser valido
|
|
305
|
-
pelo_menos_um_campo_preenchido
|
|
306
|
-
}
|
|
307
|
-
effects {
|
|
308
|
-
persistencia Recurso
|
|
309
|
-
auditoria recurso_atualizado
|
|
310
|
-
}
|
|
311
|
-
auth {
|
|
312
|
-
modo: obrigatorio
|
|
313
|
-
}
|
|
314
|
-
authz {
|
|
315
|
-
escopo: ${moduloNome}.escrever
|
|
316
|
-
regra: recurso.criado_por == auth.usuario_id ou auth.papel == admin
|
|
317
|
-
}
|
|
318
|
-
guarantees {
|
|
319
|
-
recurso existe
|
|
320
|
-
atualizado_em atualizado
|
|
321
|
-
}
|
|
322
|
-
error {
|
|
323
|
-
nao_encontrado: "Recurso nao encontrado."
|
|
324
|
-
sem_permissao: "Voce nao tem permissao para editar este recurso."
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
task excluir_recurso {
|
|
329
|
-
input {
|
|
330
|
-
id: Id required
|
|
331
|
-
confirmar: Booleano required
|
|
332
|
-
}
|
|
333
|
-
output {
|
|
334
|
-
excluido: Booleano
|
|
335
|
-
}
|
|
336
|
-
rules {
|
|
337
|
-
id deve_ser valido
|
|
338
|
-
confirmar == verdadeiro
|
|
339
|
-
}
|
|
340
|
-
effects {
|
|
341
|
-
persistencia Recurso criticidade = alta
|
|
342
|
-
auditoria recurso_excluido criticidade = alta
|
|
343
|
-
}
|
|
344
|
-
forbidden {
|
|
345
|
-
excluir_sem_confirmacao
|
|
346
|
-
cascade_delete_sem_backup
|
|
347
|
-
}
|
|
348
|
-
auth {
|
|
349
|
-
modo: obrigatorio
|
|
350
|
-
}
|
|
351
|
-
authz {
|
|
352
|
-
escopo: ${moduloNome}.deletar
|
|
353
|
-
regra: auth.papel == admin ou recurso.criado_por == auth.usuario_id
|
|
354
|
-
}
|
|
355
|
-
guarantees {
|
|
356
|
-
excluido == verdadeiro
|
|
357
|
-
}
|
|
358
|
-
error {
|
|
359
|
-
nao_encontrado: "Recurso nao encontrado."
|
|
360
|
-
sem_confirmacao: "Exclusao requer confirmacao explicita."
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
route recursos_criar {
|
|
365
|
-
metodo: POST
|
|
366
|
-
caminho: /recursos
|
|
367
|
-
task: criar_recurso
|
|
368
|
-
finalidade: criar_recurso_api
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
route recursos_listar {
|
|
372
|
-
metodo: GET
|
|
373
|
-
caminho: /recursos
|
|
374
|
-
task: listar_recursos
|
|
375
|
-
finalidade: listar_recursos_api
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
route recursos_obter {
|
|
379
|
-
metodo: GET
|
|
380
|
-
caminho: /recursos/:id
|
|
381
|
-
task: obter_recurso
|
|
382
|
-
finalidade: obter_recurso_api
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
route recursos_atualizar {
|
|
386
|
-
metodo: PUT
|
|
387
|
-
caminho: /recursos/:id
|
|
388
|
-
task: atualizar_recurso
|
|
389
|
-
finalidade: atualizar_recurso_api
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
route recursos_excluir {
|
|
393
|
-
metodo: DELETE
|
|
394
|
-
caminho: /recursos/:id
|
|
395
|
-
task: excluir_recurso
|
|
396
|
-
finalidade: excluir_recurso_api
|
|
397
|
-
}
|
|
180
|
+
export const templateApiRest = (moduloNome) => `module ${moduloNome} {
|
|
181
|
+
docs {
|
|
182
|
+
resumo: "API REST completa com CRUD, autenticacao e paginacao."
|
|
183
|
+
versao: "1.0.0"
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
entity Recurso {
|
|
187
|
+
fields {
|
|
188
|
+
id: Id
|
|
189
|
+
titulo: Texto
|
|
190
|
+
conteudo: Texto
|
|
191
|
+
status: Texto
|
|
192
|
+
criado_por: Id
|
|
193
|
+
criado_em: Timestamp
|
|
194
|
+
atualizado_em: Timestamp
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
task criar_recurso {
|
|
199
|
+
input {
|
|
200
|
+
titulo: Texto required
|
|
201
|
+
conteudo: Texto required
|
|
202
|
+
}
|
|
203
|
+
output {
|
|
204
|
+
recurso: Recurso
|
|
205
|
+
}
|
|
206
|
+
rules {
|
|
207
|
+
titulo deve_ser preenchido
|
|
208
|
+
conteudo deve_ser preenchido
|
|
209
|
+
}
|
|
210
|
+
effects {
|
|
211
|
+
persistencia Recurso
|
|
212
|
+
auditoria recurso_criado
|
|
213
|
+
}
|
|
214
|
+
auth {
|
|
215
|
+
modo: obrigatorio
|
|
216
|
+
}
|
|
217
|
+
authz {
|
|
218
|
+
escopo: ${moduloNome}.escrever
|
|
219
|
+
papeis: [admin, editor]
|
|
220
|
+
}
|
|
221
|
+
dados {
|
|
222
|
+
input {
|
|
223
|
+
titulo: publico
|
|
224
|
+
conteudo: interno
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
audit {
|
|
228
|
+
evento: ${moduloNome}.recurso.criado
|
|
229
|
+
ator: auth.usuario
|
|
230
|
+
retencao: "90d"
|
|
231
|
+
}
|
|
232
|
+
guarantees {
|
|
233
|
+
recurso existe
|
|
234
|
+
recurso.criado_por == auth.usuario_id
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
task obter_recurso {
|
|
239
|
+
input {
|
|
240
|
+
id: Id required
|
|
241
|
+
}
|
|
242
|
+
output {
|
|
243
|
+
recurso: Recurso
|
|
244
|
+
}
|
|
245
|
+
rules {
|
|
246
|
+
id deve_ser valido
|
|
247
|
+
}
|
|
248
|
+
effects {
|
|
249
|
+
consulta Recurso
|
|
250
|
+
}
|
|
251
|
+
auth {
|
|
252
|
+
modo: opcional
|
|
253
|
+
}
|
|
254
|
+
authz {
|
|
255
|
+
escopo: ${moduloNome}.ler
|
|
256
|
+
}
|
|
257
|
+
guarantees {
|
|
258
|
+
recurso existe
|
|
259
|
+
}
|
|
260
|
+
error {
|
|
261
|
+
nao_encontrado: "Recurso nao encontrado."
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
task listar_recursos {
|
|
266
|
+
input {
|
|
267
|
+
status: Texto optional
|
|
268
|
+
pagina: Inteiro optional
|
|
269
|
+
limite: Inteiro optional
|
|
270
|
+
ordenar_por: Texto optional
|
|
271
|
+
}
|
|
272
|
+
output {
|
|
273
|
+
recursos: Lista<Recurso>
|
|
274
|
+
total: Inteiro
|
|
275
|
+
pagina: Inteiro
|
|
276
|
+
total_paginas: Inteiro
|
|
277
|
+
}
|
|
278
|
+
rules {
|
|
279
|
+
limite quando preenchido deve_ser <= 100
|
|
280
|
+
pagina quando preenchido deve_ser >= 1
|
|
281
|
+
}
|
|
282
|
+
effects {
|
|
283
|
+
consulta Recurso
|
|
284
|
+
}
|
|
285
|
+
auth {
|
|
286
|
+
modo: anonimo
|
|
287
|
+
}
|
|
288
|
+
guarantees {
|
|
289
|
+
recursos existe
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
task atualizar_recurso {
|
|
294
|
+
input {
|
|
295
|
+
id: Id required
|
|
296
|
+
titulo: Texto optional
|
|
297
|
+
conteudo: Texto optional
|
|
298
|
+
status: Texto optional
|
|
299
|
+
}
|
|
300
|
+
output {
|
|
301
|
+
recurso: Recurso
|
|
302
|
+
}
|
|
303
|
+
rules {
|
|
304
|
+
id deve_ser valido
|
|
305
|
+
pelo_menos_um_campo_preenchido
|
|
306
|
+
}
|
|
307
|
+
effects {
|
|
308
|
+
persistencia Recurso
|
|
309
|
+
auditoria recurso_atualizado
|
|
310
|
+
}
|
|
311
|
+
auth {
|
|
312
|
+
modo: obrigatorio
|
|
313
|
+
}
|
|
314
|
+
authz {
|
|
315
|
+
escopo: ${moduloNome}.escrever
|
|
316
|
+
regra: recurso.criado_por == auth.usuario_id ou auth.papel == admin
|
|
317
|
+
}
|
|
318
|
+
guarantees {
|
|
319
|
+
recurso existe
|
|
320
|
+
atualizado_em atualizado
|
|
321
|
+
}
|
|
322
|
+
error {
|
|
323
|
+
nao_encontrado: "Recurso nao encontrado."
|
|
324
|
+
sem_permissao: "Voce nao tem permissao para editar este recurso."
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
task excluir_recurso {
|
|
329
|
+
input {
|
|
330
|
+
id: Id required
|
|
331
|
+
confirmar: Booleano required
|
|
332
|
+
}
|
|
333
|
+
output {
|
|
334
|
+
excluido: Booleano
|
|
335
|
+
}
|
|
336
|
+
rules {
|
|
337
|
+
id deve_ser valido
|
|
338
|
+
confirmar == verdadeiro
|
|
339
|
+
}
|
|
340
|
+
effects {
|
|
341
|
+
persistencia Recurso criticidade = alta
|
|
342
|
+
auditoria recurso_excluido criticidade = alta
|
|
343
|
+
}
|
|
344
|
+
forbidden {
|
|
345
|
+
excluir_sem_confirmacao
|
|
346
|
+
cascade_delete_sem_backup
|
|
347
|
+
}
|
|
348
|
+
auth {
|
|
349
|
+
modo: obrigatorio
|
|
350
|
+
}
|
|
351
|
+
authz {
|
|
352
|
+
escopo: ${moduloNome}.deletar
|
|
353
|
+
regra: auth.papel == admin ou recurso.criado_por == auth.usuario_id
|
|
354
|
+
}
|
|
355
|
+
guarantees {
|
|
356
|
+
excluido == verdadeiro
|
|
357
|
+
}
|
|
358
|
+
error {
|
|
359
|
+
nao_encontrado: "Recurso nao encontrado."
|
|
360
|
+
sem_confirmacao: "Exclusao requer confirmacao explicita."
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
route recursos_criar {
|
|
365
|
+
metodo: POST
|
|
366
|
+
caminho: /recursos
|
|
367
|
+
task: criar_recurso
|
|
368
|
+
finalidade: criar_recurso_api
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
route recursos_listar {
|
|
372
|
+
metodo: GET
|
|
373
|
+
caminho: /recursos
|
|
374
|
+
task: listar_recursos
|
|
375
|
+
finalidade: listar_recursos_api
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
route recursos_obter {
|
|
379
|
+
metodo: GET
|
|
380
|
+
caminho: /recursos/:id
|
|
381
|
+
task: obter_recurso
|
|
382
|
+
finalidade: obter_recurso_api
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
route recursos_atualizar {
|
|
386
|
+
metodo: PUT
|
|
387
|
+
caminho: /recursos/:id
|
|
388
|
+
task: atualizar_recurso
|
|
389
|
+
finalidade: atualizar_recurso_api
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
route recursos_excluir {
|
|
393
|
+
metodo: DELETE
|
|
394
|
+
caminho: /recursos/:id
|
|
395
|
+
task: excluir_recurso
|
|
396
|
+
finalidade: excluir_recurso_api
|
|
397
|
+
}
|
|
398
398
|
}`;
|
|
399
399
|
//# sourceMappingURL=templates.part01.js.map
|