@oondemand/create-central-oon 0.5.5 → 0.6.0
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/README.md +41 -89
- package/bin/cli.js +4 -17
- package/docs/ADVANCED_UX_PATTERNS.md +3 -2
- package/docs/AGENTS.md +3 -4
- package/docs/BACKEND_API.md +2 -4
- package/docs/BACKEND_PATTERNS.md +1 -2
- package/docs/BACKEND_PROCESS_MANIFEST.md +6 -6
- package/docs/CAPABILITIES.md +2 -3
- package/docs/CHECKLIST_IMPLEMENTACAO.md +4 -4
- package/docs/FRONTEND_API.md +20 -23
- package/docs/FRONTEND_CODE_FIRST.md +35 -0
- package/docs/FRONTEND_PATTERNS.md +13 -15
- package/docs/METADATA_CRUD_UI.md +1 -1
- package/docs/PORTAL_COCKPIT_PATTERNS.md +10 -145
- package/docs/REACTIVE_DOMAIN_FORMULAS.md +2 -2
- package/package.json +1 -1
- package/schemas/central.app.schema.json +2 -16
- package/src/conformance.js +42 -106
- package/src/index.js +4 -28
- package/src/render.js +2 -1
- package/templates/_base/README.md +7 -6
- package/templates/_base/backend/package.json +1 -1
- package/templates/_base/central.app.json +4 -9
- package/templates/_base/frontend/package.json +1 -1
- package/templates/_base/frontend/src/app/app.tsx +25 -0
- package/templates/_base/frontend/src/app/navigation.ts +5 -0
- package/templates/_base/frontend/src/app/routes.tsx +6 -0
- package/templates/_base/frontend/src/app/theme.ts +8 -0
- package/templates/_base/frontend/src/components/gitkeep +1 -0
- package/templates/_base/frontend/src/features/gitkeep +1 -0
- package/templates/_base/frontend/src/layouts/gitkeep +1 -0
- package/templates/_base/frontend/src/main.tsx +3 -8
- package/templates/_base/frontend/src/pages/HomePage.tsx +25 -0
- package/templates/_base/frontend/tsconfig.json +1 -1
- package/templates/_base/package.json +1 -1
- package/docs/CONNECTORS_AND_INTEGRATIONS.md +0 -66
- package/docs/FRONTEND_MANIFEST_REFERENCE.md +0 -487
- package/templates/_base/backend/src/integrations/gitkeep +0 -0
- package/templates/_base/frontend/central.ui.json +0 -8
- package/templates/_base/frontend/src/collections/gitkeep +0 -0
- package/templates/_base/frontend/src/dashboards/gitkeep +0 -0
- package/templates/_base/frontend/src/documents/gitkeep +0 -0
- package/templates/_base/frontend/src/overrides/gitkeep +0 -0
- package/templates/_base/frontend/src/pipelines/gitkeep +0 -0
- package/templates/basic/backend/src/models/Pessoa.js +0 -21
- package/templates/basic/frontend/central.ui.json +0 -8
- package/templates/documentos-fiscais/backend/central.config.js +0 -32
- package/templates/documentos-fiscais/backend/src/models/DocumentoFiscal.js +0 -23
- package/templates/documentos-fiscais/frontend/central.ui.json +0 -16
- package/templates/multi-moedas/backend/central.config.js +0 -32
- package/templates/multi-moedas/backend/src/models/Cotacao.js +0 -23
- package/templates/multi-moedas/backend/src/models/Moeda.js +0 -15
- package/templates/multi-moedas/frontend/central.ui.json +0 -11
- package/templates/omie-sidecar/backend/central.config.js +0 -33
- package/templates/omie-sidecar/backend/src/mappings/pessoa-cliente.js +0 -20
- package/templates/omie-sidecar/backend/src/models/Pessoa.js +0 -24
- package/templates/omie-sidecar/backend/src/triggers/Pessoa.js +0 -14
- package/templates/omie-sidecar/frontend/central.ui.json +0 -8
- package/templates/pedidos-marketplace/backend/central.config.js +0 -32
- package/templates/pedidos-marketplace/backend/src/models/Pedido.js +0 -22
- package/templates/pedidos-marketplace/backend/src/models/Produto.js +0 -16
- package/templates/pedidos-marketplace/frontend/central.ui.json +0 -10
- package/templates/servicos-prestados/backend/central.config.js +0 -32
- package/templates/servicos-prestados/backend/src/models/Cliente.js +0 -15
- package/templates/servicos-prestados/backend/src/models/ServicoPrestado.js +0 -22
- package/templates/servicos-prestados/frontend/central.ui.json +0 -10
- package/templates/servicos-tomados/backend/central.config.js +0 -32
- package/templates/servicos-tomados/backend/src/models/Pessoa.js +0 -15
- package/templates/servicos-tomados/backend/src/models/Servico.js +0 -22
- package/templates/servicos-tomados/frontend/central.ui.json +0 -10
package/README.md
CHANGED
|
@@ -1,141 +1,93 @@
|
|
|
1
1
|
# @oondemand/create-central-oon
|
|
2
2
|
|
|
3
|
-
Gerador de
|
|
3
|
+
Gerador estrutural de Apps Oon. Ele cria backend e frontend code-first prontos
|
|
4
|
+
para consumir `@oondemand/oon-core-back` e `@oondemand/oon-core-front`.
|
|
4
5
|
|
|
5
6
|
## Uso
|
|
6
7
|
|
|
7
8
|
```bash
|
|
8
9
|
npx create-central-oon central-transtour
|
|
9
|
-
npx create-central-oon central-transtour --template=servicos-tomados
|
|
10
|
-
npx create-central-oon --list
|
|
11
10
|
```
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
O gerador possui uma única base `_base`. Não há seleção ou catálogo de
|
|
13
|
+
templates funcionais. O binário também responde por `scaffold-central-oon`.
|
|
14
14
|
|
|
15
15
|
## Contrato `central.app.json`
|
|
16
16
|
|
|
17
|
-
Toda Central gerada possui um manifesto raiz com identidade e capabilities:
|
|
18
|
-
|
|
19
17
|
```json
|
|
20
18
|
{
|
|
21
19
|
"$schema": "./node_modules/@oondemand/create-central-oon/schemas/central.app.schema.json",
|
|
22
|
-
"schemaVersion":
|
|
20
|
+
"schemaVersion": 2,
|
|
23
21
|
"id": "central-exemplo",
|
|
24
22
|
"name": "Central Exemplo",
|
|
25
23
|
"slug": "central-exemplo",
|
|
26
24
|
"appKind": "member-central",
|
|
25
|
+
"accessMode": "private",
|
|
26
|
+
"authorization": { "mode": "tenant_members" },
|
|
27
27
|
"modules": {
|
|
28
|
-
"collections":
|
|
28
|
+
"collections": false,
|
|
29
29
|
"documents": false,
|
|
30
30
|
"pipelines": false,
|
|
31
|
-
"integrations": false,
|
|
32
|
-
"omie": false,
|
|
33
31
|
"assistants": false,
|
|
34
32
|
"currencies": false
|
|
35
33
|
},
|
|
36
|
-
"capabilities": [
|
|
34
|
+
"capabilities": [],
|
|
37
35
|
"compatibility": {
|
|
38
36
|
"core": {
|
|
39
|
-
"minVersion": "0.
|
|
40
|
-
"maxVersionExclusive": "0.
|
|
37
|
+
"minVersion": "0.6.0",
|
|
38
|
+
"maxVersionExclusive": "0.7.0"
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
}
|
|
44
42
|
```
|
|
45
43
|
|
|
46
|
-
O
|
|
44
|
+
O manifesto contém identidade, política de acesso, capacidades de plataforma e
|
|
45
|
+
compatibilidade. Rotas, menus, páginas, componentes, layouts e temas ficam no
|
|
46
|
+
código do frontend, para qualquer `appKind`.
|
|
47
|
+
|
|
48
|
+
## Estrutura gerada
|
|
47
49
|
|
|
48
50
|
```txt
|
|
49
|
-
|
|
51
|
+
<app>/
|
|
52
|
+
├── central.app.json
|
|
53
|
+
├── package.json
|
|
54
|
+
├── backend/
|
|
55
|
+
│ ├── central.config.js
|
|
56
|
+
│ ├── central.domain.json
|
|
57
|
+
│ └── src/{validations,triggers,hooks,mappings,rules}/
|
|
58
|
+
└── frontend/
|
|
59
|
+
└── src/
|
|
60
|
+
├── main.tsx
|
|
61
|
+
├── app/{app,routes,navigation,theme}.tsx
|
|
62
|
+
├── pages/
|
|
63
|
+
├── components/
|
|
64
|
+
├── features/
|
|
65
|
+
└── layouts/
|
|
50
66
|
```
|
|
51
67
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- identidade estável (`id`, `name`, `slug`);
|
|
55
|
-
- perfil arquitetural (`appKind`);
|
|
56
|
-
- módulos e capabilities habilitados;
|
|
57
|
-
- faixa compatível do OonCore;
|
|
58
|
-
- metadados declarativos de ativação.
|
|
59
|
-
|
|
60
|
-
`backend/central.config.js` fica reservado a extensões excepcionais de runtime. Em Centrais `member-central` e `portal-cockpit`, identidade, módulos e autenticação não podem ser reintroduzidos nesse arquivo. O desenvolvimento local usa sessão aleatória HttpOnly; tokens fixos são reprovados pela conformidade.
|
|
68
|
+
O bootstrap gerado chama `startOonApp(app)`. A composição é feita com
|
|
69
|
+
`defineOonApp`, `defineOonRoutes` e `defineOonNavigation`.
|
|
61
70
|
|
|
62
|
-
##
|
|
63
|
-
|
|
64
|
-
Na raiz da Central:
|
|
71
|
+
## Conformidade
|
|
65
72
|
|
|
66
73
|
```bash
|
|
67
74
|
npm run ooncore:conformance
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
ou:
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
npx create-central-oon conformance
|
|
74
75
|
npx create-central-oon conformance --json
|
|
75
76
|
```
|
|
76
77
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
- transformações ou registries no bootstrap do frontend;
|
|
81
|
-
- páginas genéricas e extensões executáveis locais;
|
|
82
|
-
- identidade ou autenticação reintroduzida em `central.config.js`;
|
|
83
|
-
- models técnicos de integração;
|
|
84
|
-
- workers, runtimes, locks, clients Omie ou registries locais;
|
|
85
|
-
- patches de métodos do Mongoose;
|
|
86
|
-
- arquivos com extensões fora da allowlist.
|
|
87
|
-
|
|
88
|
-
A CI de uma Central deve executar o comando antes do build e da publicação.
|
|
78
|
+
A verificação exige schema v2 e bootstrap code-first, protege rotas reservadas,
|
|
79
|
+
guards de segurança e imports internos, e rejeita código remoto, segredos no
|
|
80
|
+
bundle e dependências fora do frontend.
|
|
89
81
|
|
|
90
|
-
## Documentação
|
|
82
|
+
## Documentação
|
|
91
83
|
|
|
92
|
-
O pacote
|
|
84
|
+
O pacote distribui documentação canônica em `docs/`. O comando abaixo atualiza
|
|
85
|
+
o cache `.ooncore/` usado por ferramentas de desenvolvimento:
|
|
93
86
|
|
|
94
87
|
```bash
|
|
95
88
|
npm run ooncore:docs
|
|
96
89
|
npm run ooncore:docs:check
|
|
97
90
|
```
|
|
98
91
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
## Templates funcionais
|
|
102
|
-
|
|
103
|
-
| Template | O que gera |
|
|
104
|
-
| --- | --- |
|
|
105
|
-
| `basic` | Uma coleção dinâmica (`Pessoa`). |
|
|
106
|
-
| `omie-sidecar` | Estrutura declarativa inicial para mapping Omie. |
|
|
107
|
-
| `servicos-tomados` | Prestadores e esteira por status. |
|
|
108
|
-
| `servicos-prestados` | Clientes e esteira por etapa. |
|
|
109
|
-
| `pedidos-marketplace` | Catálogo e esteira de pedidos. |
|
|
110
|
-
| `documentos-fiscais` | Documento fiscal com aprovação. |
|
|
111
|
-
| `multi-moedas` | Moedas e cotações. |
|
|
112
|
-
|
|
113
|
-
## Estrutura gerada
|
|
114
|
-
|
|
115
|
-
```txt
|
|
116
|
-
<central>/
|
|
117
|
-
├── central.app.json # identidade, appKind, módulos e capabilities
|
|
118
|
-
├── package.json # docs, conformance e comandos locais
|
|
119
|
-
├── .ooncore/ # cache regenerável da documentação
|
|
120
|
-
├── backend/
|
|
121
|
-
│ ├── central.config.js # somente extensão excepcional de runtime
|
|
122
|
-
│ ├── central.domain.json # domínio declarativo
|
|
123
|
-
│ └── src/{validations,triggers,hooks,mappings,rules}/
|
|
124
|
-
└── frontend/
|
|
125
|
-
├── central.ui.json # telas, formulários, grids e esteiras
|
|
126
|
-
└── src/main.tsx # bootstrap mínimo gerado
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
O bootstrap gerado importa `central.app.json` e `central.ui.json` e chama `startCentralFromManifest`. Não deve transformar manifestos, registrar componentes padrão nem conhecer regras de um cliente.
|
|
130
|
-
|
|
131
|
-
## Próximos passos
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
cd <central>
|
|
135
|
-
npm run check
|
|
136
|
-
cp backend/.env.example backend/.env
|
|
137
|
-
cp frontend/.env.example frontend/.env
|
|
138
|
-
npm run dev
|
|
139
|
-
```
|
|
92
|
+
Consulte `docs/FRONTEND_CODE_FIRST.md` para o contrato completo.
|
|
140
93
|
|
|
141
|
-
Evoluir a Central significa declarar domínio, UI, mappings e regras específicas. O OonCore implementa como a aplicação funciona.
|
package/bin/cli.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
|
-
const { run,
|
|
4
|
+
const { run, syncDocs, checkDocs, runLocalDevelopment } = require("../src/index");
|
|
5
5
|
const { checkConformance } = require("../src/conformance");
|
|
6
6
|
|
|
7
7
|
function parseArgs(argv) {
|
|
8
8
|
const opts = {
|
|
9
9
|
command: null,
|
|
10
|
-
template: "basic",
|
|
11
10
|
here: false,
|
|
12
11
|
force: false,
|
|
13
12
|
install: true,
|
|
14
|
-
list: false,
|
|
15
13
|
docsSync: false,
|
|
16
14
|
docsCheck: false,
|
|
17
15
|
json: false,
|
|
@@ -24,15 +22,13 @@ function parseArgs(argv) {
|
|
|
24
22
|
if (arg === "--here") opts.here = true;
|
|
25
23
|
else if (arg === "--force") opts.force = true;
|
|
26
24
|
else if (arg === "--no-install") opts.install = false;
|
|
27
|
-
else if (arg === "--list") opts.list = true;
|
|
28
25
|
else if (arg === "--sync") opts.docsSync = true;
|
|
29
26
|
else if (arg === "--check") opts.docsCheck = true;
|
|
30
27
|
else if (arg === "--json") opts.json = true;
|
|
31
28
|
else if (arg.startsWith("--root=")) opts.root = arg.slice("--root=".length);
|
|
32
29
|
else if (arg === "--root") { opts.root = argv[i + 1]; i += 1; }
|
|
33
|
-
else if (arg.startsWith("--template=")) opts.template = arg.slice("--template=".length);
|
|
34
|
-
else if (arg === "--template") { opts.template = argv[i + 1]; i += 1; }
|
|
35
30
|
else if (!arg.startsWith("-")) positionals.push(arg);
|
|
31
|
+
else throw new Error(`Opção desconhecida: ${arg}.`);
|
|
36
32
|
}
|
|
37
33
|
|
|
38
34
|
if (["docs", "conformance", "dev"].includes(positionals[0])) {
|
|
@@ -45,24 +41,15 @@ function parseArgs(argv) {
|
|
|
45
41
|
|
|
46
42
|
function printUsage() {
|
|
47
43
|
console.error("Uso:");
|
|
48
|
-
console.error(" npx create-central-oon <nome-
|
|
49
|
-
console.error(" npx create-central-oon --list");
|
|
44
|
+
console.error(" npx create-central-oon <nome-do-app>");
|
|
50
45
|
console.error(" npx create-central-oon docs sync|check");
|
|
51
46
|
console.error(" npx create-central-oon conformance [--root .] [--json]");
|
|
52
47
|
console.error(" npx create-central-oon dev");
|
|
53
48
|
}
|
|
54
49
|
|
|
55
50
|
async function main() {
|
|
56
|
-
const opts = parseArgs(process.argv.slice(2));
|
|
57
|
-
if (opts.list) {
|
|
58
|
-
console.log("Templates disponíveis:\n");
|
|
59
|
-
for (const template of listTemplates()) {
|
|
60
|
-
console.log(` ${template.id.padEnd(20)} ${template.description}`);
|
|
61
|
-
}
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
51
|
try {
|
|
52
|
+
const opts = parseArgs(process.argv.slice(2));
|
|
66
53
|
if (opts.command === "docs") {
|
|
67
54
|
if (opts.docsCheck) checkDocs();
|
|
68
55
|
else syncDocs();
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# ADVANCED_UX_PATTERNS.md — UX Avançada Declarativa no OonCore
|
|
2
2
|
|
|
3
|
-
Este documento orienta Agents a usarem
|
|
3
|
+
Este documento orienta Agents a usarem os componentes públicos do OonCore e a
|
|
4
|
+
composição code-first antes de recriar padrões operacionais.
|
|
4
5
|
|
|
5
6
|
## Objetivo
|
|
6
7
|
|
|
@@ -22,7 +23,7 @@ Caso de referência: `OrcamentoProjeto -> OrcamentoItem -> Pagamento`.
|
|
|
22
23
|
|
|
23
24
|
Antes de criar uma página React customizada, verifique se a necessidade pode ser resolvida por:
|
|
24
25
|
|
|
25
|
-
1. `
|
|
26
|
+
1. Views `collection` em `defineOonApp({ ui })`.
|
|
26
27
|
2. `list.filters` e `list.rowActions`.
|
|
27
28
|
3. `detailModal.tabs`.
|
|
28
29
|
4. `form.groups`.
|
package/docs/AGENTS.md
CHANGED
|
@@ -8,7 +8,7 @@ Este arquivo é o contrato inicial neutro para Codex, ChatGPT, Kimi, Manus e out
|
|
|
8
8
|
2. Confirme `schemaVersion`, `version`, `docsHash` e `entrypointsHash` em `.ooncore/manifest.json`.
|
|
9
9
|
3. Rode `npm run ooncore:docs:check`; se falhar, rode `npm run ooncore:docs` e verifique novamente.
|
|
10
10
|
4. Consulte `docs/CAPABILITIES.md` antes de criar código.
|
|
11
|
-
5. Leia os contratos de backend, frontend, runtime
|
|
11
|
+
5. Leia os contratos de backend, frontend, runtime ou RBAC indicados abaixo.
|
|
12
12
|
6. Leia a documentação de domínio do projeto consumidor.
|
|
13
13
|
|
|
14
14
|
O `AGENTS.md` da raiz pertence ao projeto e nunca pode ser sobrescrito pelo scaffold ou pelo sync do Core.
|
|
@@ -18,17 +18,16 @@ O `AGENTS.md` da raiz pertence ao projeto e nunca pode ser sobrescrito pelo scaf
|
|
|
18
18
|
| Tarefa | Leitura obrigatória |
|
|
19
19
|
|---|---|
|
|
20
20
|
| Domínio, models, validações e fórmulas | `BACKEND_API.md`, `BACKEND_DOMAIN_MANIFEST.md`, `BACKEND_PATTERNS.md`, `REACTIVE_DOMAIN_FORMULAS.md` |
|
|
21
|
-
| CRUD, metadata e UI | `METADATA_CRUD_UI.md`, `FRONTEND_API.md`, `
|
|
21
|
+
| CRUD, metadata e UI | `METADATA_CRUD_UI.md`, `FRONTEND_API.md`, `FRONTEND_CODE_FIRST.md` |
|
|
22
22
|
| Auth, ativação, tenant ou permissões | `AUTH_ACTIVATION_RBAC.md`, `RBAC_SECURITY.md`, `DO_AND_DONT.md` |
|
|
23
23
|
| Execução local | `RUNTIME_MODES.md`, `LOCAL_DEVELOPMENT.md`, `LOCAL_SECURITY_BOUNDARY.md` |
|
|
24
24
|
| Rotas, hooks, jobs e filas | `ROUTES_HOOKS_WORKERS.md`, `BACKEND_PATTERNS.md` |
|
|
25
|
-
| Integrações | `CONNECTORS_AND_INTEGRATIONS.md`, `LOCAL_SECURITY_BOUNDARY.md` |
|
|
26
25
|
| Upgrade do Core | `CORE_UPGRADE.md`, `TESTING_CONFORMANCE.md`, `releases/0.5.0.md` |
|
|
27
26
|
| UX avançada | `ADVANCED_UX_PATTERNS.md`, `DETAIL_MODAL_AND_RELATED_GRIDS.md`, `PORTAL_COCKPIT_PATTERNS.md` |
|
|
28
27
|
|
|
29
28
|
## Fronteira obrigatória
|
|
30
29
|
|
|
31
|
-
-
|
|
30
|
+
- O App declara domínio e experiência em código; o Core fornece bootstrap, autenticação, ativação, RBAC, tenant, CRUD, metadata, shell, componentes genéricos e deployment.
|
|
32
31
|
- Use somente exports públicos documentados. Arquivos internos de `src/` não são contrato de extensão.
|
|
33
32
|
- Autorização, tenant e regras que alteram dados são sempre validados no backend.
|
|
34
33
|
- Não crie autenticação, ativação, RBAC, CRUD, shell, registry ou infraestrutura paralelos.
|
package/docs/BACKEND_API.md
CHANGED
|
@@ -7,7 +7,7 @@ Importe exclusivamente de `@oondemand/oon-core-back`. Caminhos internos não tê
|
|
|
7
7
|
- `start(options)`: carrega a Central, conecta Mongo, inicializa capabilities e inicia HTTP. `options.listen=false` devolve somente o app.
|
|
8
8
|
- `createApp()`: cria o Express já protegido e com rotas do Core.
|
|
9
9
|
- `activate()`: fluxo legado de ativação; não é usado no runtime local.
|
|
10
|
-
- `defineCentral`, `defineModel`, `defineCollection`, `defineDocument`, `definePipeline`, `
|
|
10
|
+
- `defineCentral`, `defineModel`, `defineCollection`, `defineDocument`, `definePipeline`, `defineRoutes`, `defineValidation`, `defineTrigger`: extensões imperativas suportadas.
|
|
11
11
|
- `fields`: factories de campos compatíveis com schema e metadata.
|
|
12
12
|
- `registry`: registry do processo; use APIs `define*`, não mutações internas.
|
|
13
13
|
|
|
@@ -27,10 +27,8 @@ Importe exclusivamente de `@oondemand/oon-core-back`. Caminhos internos não tê
|
|
|
27
27
|
|
|
28
28
|
Erros de manifesto carregam `code`, `statusCode` e `issues[]` com `path` e `message`.
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Capabilities
|
|
31
31
|
|
|
32
|
-
- `integrations`, `registerIntegrationProvider`, `enqueueIntegration`, `receiveIntegrationWebhook`.
|
|
33
|
-
- `omie`, `omieModule`, `createOmieClient`, `OmieApiError`, `enqueueOmieCall`, `ensureOmieProviderRegistered`, `collectOmieDefinitions`, `describeOmieDefinitions`, `saveOmieConfiguration`, `listOmieConfigurations`, `testOmieConnection`.
|
|
34
32
|
- `capabilities`, `PdfRenderingError`, `TransactionalEmailError`.
|
|
35
33
|
- `operationalRequestHeaders(options)`: headers de identidade do Deployment. Retorna `LOCAL_OPERATION_NOT_SUPPORTED` no runtime local; nunca improvise identidade local.
|
|
36
34
|
|
package/docs/BACKEND_PATTERNS.md
CHANGED
|
@@ -16,7 +16,6 @@ backend/
|
|
|
16
16
|
├── mappings/
|
|
17
17
|
├── documents/
|
|
18
18
|
├── pipelines/
|
|
19
|
-
├── integrations/
|
|
20
19
|
├── routes/
|
|
21
20
|
├── controllers/
|
|
22
21
|
└── services/
|
|
@@ -24,7 +23,7 @@ backend/
|
|
|
24
23
|
|
|
25
24
|
## Models
|
|
26
25
|
|
|
27
|
-
Use models para declarar entidades de negócio. Cada model deve ser pequeno, com nomes claros e campos compatíveis com as telas e
|
|
26
|
+
Use models para declarar entidades de negócio. Cada model deve ser pequeno, com nomes claros e campos compatíveis com as telas e processos.
|
|
28
27
|
|
|
29
28
|
Boas práticas:
|
|
30
29
|
|
|
@@ -6,7 +6,7 @@ Ele complementa:
|
|
|
6
6
|
|
|
7
7
|
- `central.app.json`: identidade, módulos e capabilities da aplicação;
|
|
8
8
|
- `backend/central.domain.json`: models, campos, fórmulas do próprio registro e validações locais;
|
|
9
|
-
- `frontend/
|
|
9
|
+
- `frontend/src/app`: composição code-first de coleções, esteiras e ações exibidas.
|
|
10
10
|
|
|
11
11
|
O manifesto de processos é carregado **depois** do domínio. Por isso, toda model e todo campo citados precisam existir em `central.domain.json`.
|
|
12
12
|
|
|
@@ -51,16 +51,16 @@ O runtime não executa JavaScript, `eval`, nomes de funções ou módulos inform
|
|
|
51
51
|
}
|
|
52
52
|
],
|
|
53
53
|
"lockedFieldsByStage": {
|
|
54
|
-
"Enviado para
|
|
54
|
+
"Enviado para pagamento": ["valor", "projetoId", "projetoItemId"],
|
|
55
55
|
"Pagamento Ok": ["valor", "projetoId", "projetoItemId"]
|
|
56
56
|
},
|
|
57
57
|
"lockedMessage": "Os dados de negócio ficam bloqueados nesta etapa.",
|
|
58
58
|
"onEnter": [
|
|
59
59
|
{
|
|
60
|
-
"stage": "Enviado para
|
|
60
|
+
"stage": "Enviado para pagamento",
|
|
61
61
|
"set": {
|
|
62
62
|
"statusTrabalho": "Trabalhando",
|
|
63
|
-
"
|
|
63
|
+
"statusPagamento": "Pendente"
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
],
|
|
@@ -69,7 +69,7 @@ O runtime não executa JavaScript, `eval`, nomes de funções ou módulos inform
|
|
|
69
69
|
"when": {
|
|
70
70
|
"op": "eq",
|
|
71
71
|
"args": [
|
|
72
|
-
{ "field": "
|
|
72
|
+
{ "field": "pagamentoLiquidado" },
|
|
73
73
|
{ "value": true }
|
|
74
74
|
]
|
|
75
75
|
},
|
|
@@ -253,4 +253,4 @@ Permanece na Central:
|
|
|
253
253
|
- integrações e mapeamentos particulares;
|
|
254
254
|
- mensagens e condições próprias do processo.
|
|
255
255
|
|
|
256
|
-
A Central declara essas particularidades usando o contrato; não reimplementa o mecanismo.
|
|
256
|
+
A Central declara essas particularidades usando o contrato; não reimplementa o mecanismo.
|
package/docs/CAPABILITIES.md
CHANGED
|
@@ -4,7 +4,7 @@ Consulte este catálogo antes de criar infraestrutura ou componentes customizado
|
|
|
4
4
|
|
|
5
5
|
| Capacidade | Backend | Frontend | Declaração/extensão | Local | Plataforma |
|
|
6
6
|
|---|---|---|---|---|---|
|
|
7
|
-
| Models e CRUD | `defineModel`, domain manifest, `/core/*` | `CoreCollection`, hooks de API | `central.domain.json`,
|
|
7
|
+
| Models e CRUD | `defineModel`, domain manifest, `/core/*` | `CoreCollection`, hooks de API | `central.domain.json`, composição code-first | Sim | Sim |
|
|
8
8
|
| Metadata | registry e `/core/metadata` | `useCoreMetadata`, renderers | models/domain manifest | Sim | Sim |
|
|
9
9
|
| Validações e fórmulas | `defineValidation`, domain rules | prévia reativa | domain manifest/validation | Sim | Sim |
|
|
10
10
|
| Esteiras | process manifest/runtime | `CorePipeline` | `central.process.json`, UI manifest | Sim | Sim |
|
|
@@ -14,8 +14,7 @@ Consulte este catálogo antes de criar infraestrutura ou componentes customizado
|
|
|
14
14
|
| Tenant e escopo | access context e scope helpers | `TenantProvider` | `central.app.json` | Contexto técnico | Contexto autorizado |
|
|
15
15
|
| Auditoria | CRUD e request context | headers do SDK | automática/extensão | Local | Operacional |
|
|
16
16
|
| Rotas customizadas | `defineRoutes` | página/ação declarada | `backend/src/routes` | Sim | Sim |
|
|
17
|
-
| Jobs e workers | process
|
|
18
|
-
| Integrações | runtime/provider registry | `CoreIntegration` | mapping/provider suportado | Dublê ou credencial local | Credencial operacional |
|
|
17
|
+
| Jobs e workers | process workers | status operacional | manifestos/hooks | Sim | Sim |
|
|
19
18
|
| E-mail transacional | capability nativa | `CoreTransactionalEmail` | capability settings | Dublê/local | Provider configurado |
|
|
20
19
|
| PDF | capability nativa | consumo por ação | capability contract | Dublê/local | Provider configurado |
|
|
21
20
|
| Publicação/promoção | contratos de delivery | indisponível no App | CLI/ponte pública | Não | Sim |
|
|
@@ -11,7 +11,7 @@ Use este checklist antes de concluir qualquer tarefa de codificação em uma Cen
|
|
|
11
11
|
|
|
12
12
|
## Backend
|
|
13
13
|
|
|
14
|
-
- [ ] Usei model, validation, trigger, hook
|
|
14
|
+
- [ ] Usei model, validation, trigger, hook ou mapping quando aplicável.
|
|
15
15
|
- [ ] Evitei recriar CRUD.
|
|
16
16
|
- [ ] Validei entrada.
|
|
17
17
|
- [ ] Validei permissão no backend.
|
|
@@ -21,9 +21,9 @@ Use este checklist antes de concluir qualquer tarefa de codificação em uma Cen
|
|
|
21
21
|
|
|
22
22
|
## Frontend
|
|
23
23
|
|
|
24
|
-
- [ ]
|
|
25
|
-
- [ ]
|
|
26
|
-
- [ ]
|
|
24
|
+
- [ ] Defini o App com `defineOonApp` e `startOonApp`.
|
|
25
|
+
- [ ] Reutilizei shell, guards, primitives e padrões públicos do Core.
|
|
26
|
+
- [ ] Mantive rotas, navegação, páginas, layouts e temas no código do App.
|
|
27
27
|
- [ ] Não coloquei regra crítica apenas no frontend.
|
|
28
28
|
|
|
29
29
|
## Integrações
|
package/docs/FRONTEND_API.md
CHANGED
|
@@ -1,34 +1,31 @@
|
|
|
1
1
|
# API pública do `@oondemand/oon-core-front`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
O contrato principal do frontend é code-first.
|
|
4
4
|
|
|
5
|
-
## Bootstrap
|
|
5
|
+
## Bootstrap
|
|
6
6
|
|
|
7
|
-
- `
|
|
8
|
-
- `
|
|
9
|
-
-
|
|
10
|
-
- `ManifestRuntime.runtimeMode`: `local` usa sessão HttpOnly; `platform` usa o contrato de autenticação publicado.
|
|
7
|
+
- `defineOonApp`: define identidade, API, rotas, navegação, shell, layouts, páginas, componentes e temas.
|
|
8
|
+
- `startOonApp`: valida e monta o App React.
|
|
9
|
+
- `defineOonRoutes`, `defineOonNavigation`: helpers tipados para composição local.
|
|
11
10
|
|
|
12
|
-
##
|
|
11
|
+
## Subpaths públicos
|
|
13
12
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
13
|
+
- `/ui`: primitives, padrões e componentes de domínio;
|
|
14
|
+
- `/routing`: rotas, navegação e helpers;
|
|
15
|
+
- `/theme`: temas, tokens e seleção em runtime;
|
|
16
|
+
- `/hooks`: hooks de autenticação, tenant, API e metadata;
|
|
17
|
+
- `/testing`: utilitários de teste.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Segurança
|
|
20
20
|
|
|
21
|
-
- `useOonAuth`, `can`, `PermissionGate`, `Can`:
|
|
22
|
-
- `useOonTenant`, `createTenantStorage`:
|
|
23
|
-
- `useOonApi`, `useOonResource`, `useCoreMetadata`, `useModelSchema`: acesso
|
|
24
|
-
-
|
|
21
|
+
- `useOonAuth`, `can`, `PermissionGate`, `Can`: permissões resolvidas pelo backend;
|
|
22
|
+
- `useOonTenant`, `createTenantStorage`: contexto tenant quando aplicável;
|
|
23
|
+
- `useOonApi`, `useOonResource`, `useCoreMetadata`, `useModelSchema`: acesso padronizado;
|
|
24
|
+
- rotas reservadas e guards obrigatórios pertencem ao Core.
|
|
25
25
|
|
|
26
|
-
## Domínio
|
|
26
|
+
## Domínio e UI
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
Views declarativas continuam disponíveis como composição opcional dentro do
|
|
29
|
+
objeto App. Componentes, páginas e layouts locais podem ser usados em qualquer
|
|
30
|
+
`appKind`. Consulte `FRONTEND_CODE_FIRST.md`.
|
|
31
31
|
|
|
32
|
-
## Tipos públicos
|
|
33
|
-
|
|
34
|
-
Os tipos exportados incluem config, app, auth, runtime, módulos, rotas, menus, UI v1/v2, layout, registry, páginas, blocos, ações, views, campos, metadata, paginação, erros e usuário. Consulte `dist/index.d.ts` da versão instalada quando precisar da assinatura exata; ele faz parte do pacote público.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Frontend code-first
|
|
2
|
+
|
|
3
|
+
O frontend de todo App Oon é composto em TypeScript/React. O `appKind` não
|
|
4
|
+
limita páginas, componentes, layouts ou temas locais.
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
import { defineOonApp, startOonApp } from "@oondemand/oon-core-front";
|
|
8
|
+
import { defineOonNavigation, defineOonRoutes } from "@oondemand/oon-core-front/routing";
|
|
9
|
+
import { HomePage } from "./pages/HomePage";
|
|
10
|
+
|
|
11
|
+
const routes = defineOonRoutes([{ path: "/", element: <HomePage /> }]);
|
|
12
|
+
const navigation = defineOonNavigation([{ id: "home", label: "Início", to: "/" }]);
|
|
13
|
+
|
|
14
|
+
startOonApp(defineOonApp({
|
|
15
|
+
app: { id: "meu-app", name: "Meu App" },
|
|
16
|
+
api: { baseUrl: import.meta.env.VITE_API_URL },
|
|
17
|
+
routes,
|
|
18
|
+
navigation,
|
|
19
|
+
}));
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Rotas aceitam `element`, `component`, `lazy`, `layout`, `permissions` e
|
|
23
|
+
`capabilities`. Rotas de autenticação e estados de ativação são reservadas.
|
|
24
|
+
|
|
25
|
+
Use os subpaths públicos:
|
|
26
|
+
|
|
27
|
+
- `@oondemand/oon-core-front/ui` para primitives e padrões;
|
|
28
|
+
- `@oondemand/oon-core-front/routing` para rotas e navegação;
|
|
29
|
+
- `@oondemand/oon-core-front/theme` para temas;
|
|
30
|
+
- `@oondemand/oon-core-front/hooks` para hooks;
|
|
31
|
+
- `@oondemand/oon-core-front/testing` para testes.
|
|
32
|
+
|
|
33
|
+
Não carregue código remoto, não desative guards, não exponha segredos no bundle
|
|
34
|
+
e não importe arquivos internos do pacote. Rode `npm run ooncore:conformance`.
|
|
35
|
+
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
# Padrões Frontend
|
|
2
2
|
|
|
3
|
-
O frontend
|
|
3
|
+
O frontend do App é code-first. Shell, providers e guards pertencem ao
|
|
4
|
+
`@oondemand/oon-core-front`; rotas, navegação, páginas, componentes, layouts e
|
|
5
|
+
temas são compostos localmente com as APIs públicas do Core.
|
|
4
6
|
|
|
5
|
-
Para
|
|
7
|
+
Para o contrato completo, use `FRONTEND_CODE_FIRST.md`.
|
|
6
8
|
Para UX avançada com abas e itens relacionados, use também `ADVANCED_UX_PATTERNS.md` e `DETAIL_MODAL_AND_RELATED_GRIDS.md`.
|
|
7
9
|
|
|
8
10
|
## Estrutura esperada
|
|
9
11
|
|
|
10
12
|
```txt
|
|
11
13
|
frontend/
|
|
12
|
-
├── central.ui.json
|
|
13
14
|
└── src/
|
|
14
15
|
├── main.tsx
|
|
15
|
-
├──
|
|
16
|
-
├──
|
|
17
|
-
├──
|
|
18
|
-
├──
|
|
19
|
-
└──
|
|
16
|
+
├── app/{app,routes,navigation,theme}.tsx
|
|
17
|
+
├── pages/
|
|
18
|
+
├── components/
|
|
19
|
+
├── features/
|
|
20
|
+
└── layouts/
|
|
20
21
|
```
|
|
21
22
|
|
|
22
|
-
##
|
|
23
|
+
## Composição
|
|
23
24
|
|
|
24
|
-
Use
|
|
25
|
+
Use o objeto criado por `defineOonApp` para compor:
|
|
25
26
|
|
|
26
27
|
- menu;
|
|
27
28
|
- coleções;
|
|
@@ -43,11 +44,8 @@ Use `central.ui.json` como entrada principal para declarar:
|
|
|
43
44
|
- edição inline;
|
|
44
45
|
- ações por linha.
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
- Manifesto sem `schemaVersion` mantém compatibilidade v1.
|
|
49
|
-
- Manifesto com `schemaVersion: 2` habilita composição por `layout`, `navigation`, `pages`, `blocks`, coleções avançadas e componentes declarativos.
|
|
50
|
-
- Componentes React não devem ser serializados no JSON; use chaves e registre os componentes no `registry` em TypeScript.
|
|
47
|
+
Views e blocos declarativos continuam opcionais para telas simples, dentro do
|
|
48
|
+
objeto code-first. Componentes React são registrados diretamente em TypeScript.
|
|
51
49
|
|
|
52
50
|
## Padrão de tela operacional
|
|
53
51
|
|
package/docs/METADATA_CRUD_UI.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
1. `central.domain.json` ou `defineModel` registra model, campos, CRUD, roles e metadata.
|
|
4
4
|
2. O backend expõe `/core/metadata`, `/core/models` e o router CRUD do `basePath`.
|
|
5
5
|
3. Escopo de tenant/usuário, validação, fórmulas, referência, auditoria e triggers são aplicados no servidor.
|
|
6
|
-
4.
|
|
6
|
+
4. O objeto code-first do App compõe coleções, formulários, filtros, relações, esteiras, documentos e dashboards.
|
|
7
7
|
5. O frontend consulta metadata e monta componentes do Core.
|
|
8
8
|
|
|
9
9
|
O CRUD padrão inclui listagem paginada, leitura, criação, atualização parcial, exclusão e import/export quando habilitados. Use rota customizada somente quando a operação não puder ser representada por CRUD, ação declarativa ou processo.
|