@bluemarble/bi 0.7.0 → 0.8.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/README.md +77 -77
- package/dist/{DashboardDevtools-D0pzwSgn.js → DashboardDevtools-TFwjFdqn.js} +1437 -565
- package/dist/DashboardDevtools-TFwjFdqn.js.map +1 -0
- package/dist/{ModelDictionary-Cw4sa8tW.js → ModelDictionary-g5d84D0n.js} +67 -5
- package/dist/ModelDictionary-g5d84D0n.js.map +1 -0
- package/dist/cli.js +0 -0
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +48 -9
- package/dist/client/index.js +186 -45
- package/dist/client/index.js.map +1 -1
- package/dist/codegen-LoQzFAle.js.map +1 -1
- package/dist/compare-DloZhg1T.js.map +1 -1
- package/dist/{formatRules-DxA9vMvz.d.ts → formatRules-C1PW2EiL.d.ts} +74 -2
- package/dist/{layout-BS3nO6OT.js → layout-BuZhfoRI.js} +167 -15
- package/dist/layout-BuZhfoRI.js.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +17 -1
- package/dist/server/index.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/package.json +81 -81
- package/dist/DashboardDevtools-D0pzwSgn.js.map +0 -1
- package/dist/ModelDictionary-Cw4sa8tW.js.map +0 -1
- package/dist/layout-BS3nO6OT.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
# bm-bi (`@bluemarble/bi`)
|
|
2
|
-
|
|
3
|
-
Camada semântica para dashboards em React, no lugar do Power BI: o modelo (tabelas,
|
|
4
|
-
relacionamentos, dimensões e medidas) é um objeto TS (`defineModel`), o servidor compila as
|
|
5
|
-
consultas para SQL (MySQL/MariaDB) e os componentes de filtro e gráfico consultam o modelo pelo
|
|
6
|
-
nome. Vem com um devtools (diagrama do modelo, editor de layout, playground, regressão).
|
|
7
|
-
|
|
8
|
-
```ts
|
|
9
|
-
import { defineModel, formula, sum } from '@bluemarble/bi/server'
|
|
10
|
-
|
|
11
|
-
export const vendas = defineModel({
|
|
12
|
-
name: 'vendas',
|
|
13
|
-
tables: {
|
|
14
|
-
pedidos: { key: 'id', sql: 'SELECT id, loja, criado_em FROM pedidos' },
|
|
15
|
-
itens: { sql: 'SELECT pedido_id, valor FROM itens' }
|
|
16
|
-
},
|
|
17
|
-
relationships: [{ from: 'itens.pedido_id', to: 'pedidos.id' }],
|
|
18
|
-
dimensions: { loja: { sql: 'pedidos.loja', type: 'string' } },
|
|
19
|
-
measures: { valor: sum('itens.valor', { format: 'currency' }) }
|
|
20
|
-
})
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
| Import | Onde roda |
|
|
24
|
-
| ----------------------- | -------------- |
|
|
25
|
-
| `@bluemarble/bi/server` | só no servidor |
|
|
26
|
-
| `@bluemarble/bi/client` | browser |
|
|
27
|
-
| `@bluemarble/bi/types` | ambos |
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
npm install @bluemarble/bi # peer: react 19, @mui/material 7, recharts 3
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Publicado no npm já compilado (`dist/`, ESM + `.d.ts`), sem precisar de `transpilePackages`.
|
|
34
|
-
Conceitos, API, devtools e configuração do app estão em
|
|
35
|
-
[`docs/dashboard-substituicao-powerbi.md`](docs/dashboard-substituicao-powerbi.md).
|
|
36
|
-
|
|
37
|
-
## Desenvolvimento
|
|
38
|
-
|
|
39
|
-
Projeto Vite+ com bun.
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
vp install # dependências
|
|
43
|
-
vp test # testes (vitest, sem banco)
|
|
44
|
-
vp run typecheck # tsc
|
|
45
|
-
vp check # formatação (oxfmt) + lint (oxlint)
|
|
46
|
-
vp run playground # dashboard + devtools em http://localhost:5180 (precisa do .env)
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Playground
|
|
50
|
-
|
|
51
|
-
`playground/` é uma página Vite com o dashboard e o devtools ligados direto ao `src/` (sem passar
|
|
52
|
-
pelo app). O endpoint `/api/dashboard/query` roda no próprio servidor do Vite e consulta o MySQL do
|
|
53
|
-
`DATABASE_URL` do `.env` na raiz (modelo em `.env.example`; o `.env` não é versionado).
|
|
54
|
-
|
|
55
|
-
- `playground/models/` — modelos (`defineModel`), registrados em `models/index.ts`;
|
|
56
|
-
- `playground/layouts/` — layouts JSON dos gráficos/filtros;
|
|
57
|
-
- `playground/dashboards.ts` — lista do seletor no topo (modelo + layout + filtros iniciais) e formatters.
|
|
58
|
-
|
|
59
|
-
O "Salvar no arquivo" do devtools grava nessas pastas (formatando com `vp fmt`) e os snapshots vão
|
|
60
|
-
para `playground/snapshots/`. Mudanças em modelos valem na consulta seguinte, sem reiniciar.
|
|
61
|
-
|
|
62
|
-
### Testar no app antes de publicar
|
|
63
|
-
|
|
64
|
-
Para usar a versão local num app (ex.: o `custo` do `rocha-pr`), aponte a dependência para esta
|
|
65
|
-
pasta (`"@bluemarble/bi": "file:../../../bm-bi"` + `npm install`) e deixe `vp run dev` rodando
|
|
66
|
-
(`vp pack --watch`): o app lê o `dist/`. Com o link, o Next precisa de `turbopack.root` e
|
|
67
|
-
`turbopack.resolveAlias` — o `next.config.js` do `custo` liga isso sozinho quando detecta o link.
|
|
68
|
-
|
|
69
|
-
## Publicar
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
vp run verify # o mesmo que o CI roda: check, typecheck, testes e build
|
|
73
|
-
vp run release # bumpp: escolhe a versão, commita, cria a tag vX.Y.Z e faz push
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
A tag dispara `.github/workflows/publish.yml`, que confere tag x `package.json`, roda o `verify` e
|
|
77
|
-
publica com `bun publish` (secret `NPM_TOKEN`). Depois, no app: `npm install @bluemarble/bi@X.Y.Z`.
|
|
1
|
+
# bm-bi (`@bluemarble/bi`)
|
|
2
|
+
|
|
3
|
+
Camada semântica para dashboards em React, no lugar do Power BI: o modelo (tabelas,
|
|
4
|
+
relacionamentos, dimensões e medidas) é um objeto TS (`defineModel`), o servidor compila as
|
|
5
|
+
consultas para SQL (MySQL/MariaDB) e os componentes de filtro e gráfico consultam o modelo pelo
|
|
6
|
+
nome. Vem com um devtools (diagrama do modelo, editor de layout, playground, regressão).
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
import { defineModel, formula, sum } from '@bluemarble/bi/server'
|
|
10
|
+
|
|
11
|
+
export const vendas = defineModel({
|
|
12
|
+
name: 'vendas',
|
|
13
|
+
tables: {
|
|
14
|
+
pedidos: { key: 'id', sql: 'SELECT id, loja, criado_em FROM pedidos' },
|
|
15
|
+
itens: { sql: 'SELECT pedido_id, valor FROM itens' }
|
|
16
|
+
},
|
|
17
|
+
relationships: [{ from: 'itens.pedido_id', to: 'pedidos.id' }],
|
|
18
|
+
dimensions: { loja: { sql: 'pedidos.loja', type: 'string' } },
|
|
19
|
+
measures: { valor: sum('itens.valor', { format: 'currency' }) }
|
|
20
|
+
})
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Import | Onde roda |
|
|
24
|
+
| ----------------------- | -------------- |
|
|
25
|
+
| `@bluemarble/bi/server` | só no servidor |
|
|
26
|
+
| `@bluemarble/bi/client` | browser |
|
|
27
|
+
| `@bluemarble/bi/types` | ambos |
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install @bluemarble/bi # peer: react 19, @mui/material 7, recharts 3
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Publicado no npm já compilado (`dist/`, ESM + `.d.ts`), sem precisar de `transpilePackages`.
|
|
34
|
+
Conceitos, API, devtools e configuração do app estão em
|
|
35
|
+
[`docs/dashboard-substituicao-powerbi.md`](docs/dashboard-substituicao-powerbi.md).
|
|
36
|
+
|
|
37
|
+
## Desenvolvimento
|
|
38
|
+
|
|
39
|
+
Projeto Vite+ com bun.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
vp install # dependências
|
|
43
|
+
vp test # testes (vitest, sem banco)
|
|
44
|
+
vp run typecheck # tsc
|
|
45
|
+
vp check # formatação (oxfmt) + lint (oxlint)
|
|
46
|
+
vp run playground # dashboard + devtools em http://localhost:5180 (precisa do .env)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Playground
|
|
50
|
+
|
|
51
|
+
`playground/` é uma página Vite com o dashboard e o devtools ligados direto ao `src/` (sem passar
|
|
52
|
+
pelo app). O endpoint `/api/dashboard/query` roda no próprio servidor do Vite e consulta o MySQL do
|
|
53
|
+
`DATABASE_URL` do `.env` na raiz (modelo em `.env.example`; o `.env` não é versionado).
|
|
54
|
+
|
|
55
|
+
- `playground/models/` — modelos (`defineModel`), registrados em `models/index.ts`;
|
|
56
|
+
- `playground/layouts/` — layouts JSON dos gráficos/filtros;
|
|
57
|
+
- `playground/dashboards.ts` — lista do seletor no topo (modelo + layout + filtros iniciais) e formatters.
|
|
58
|
+
|
|
59
|
+
O "Salvar no arquivo" do devtools grava nessas pastas (formatando com `vp fmt`) e os snapshots vão
|
|
60
|
+
para `playground/snapshots/`. Mudanças em modelos valem na consulta seguinte, sem reiniciar.
|
|
61
|
+
|
|
62
|
+
### Testar no app antes de publicar
|
|
63
|
+
|
|
64
|
+
Para usar a versão local num app (ex.: o `custo` do `rocha-pr`), aponte a dependência para esta
|
|
65
|
+
pasta (`"@bluemarble/bi": "file:../../../bm-bi"` + `npm install`) e deixe `vp run dev` rodando
|
|
66
|
+
(`vp pack --watch`): o app lê o `dist/`. Com o link, o Next precisa de `turbopack.root` e
|
|
67
|
+
`turbopack.resolveAlias` — o `next.config.js` do `custo` liga isso sozinho quando detecta o link.
|
|
68
|
+
|
|
69
|
+
## Publicar
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
vp run verify # o mesmo que o CI roda: check, typecheck, testes e build
|
|
73
|
+
vp run release # bumpp: escolhe a versão, commita, cria a tag vX.Y.Z e faz push
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
A tag dispara `.github/workflows/publish.yml`, que confere tag x `package.json`, roda o `verify` e
|
|
77
|
+
publica com `bun publish` (secret `NPM_TOKEN`). Depois, no app: `npm install @bluemarble/bi@X.Y.Z`.
|