@bluemarble/bi 0.6.5 → 0.6.6
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/dist/{DashboardDevtools-CMIuUYpw.js → DashboardDevtools-I00Iz0Z8.js} +326 -240
- package/dist/DashboardDevtools-I00Iz0Z8.js.map +1 -0
- package/dist/{ModelDictionary-CyeYU6ZJ.js → ModelDictionary-DUGFHBo-.js} +3 -3
- package/dist/{ModelDictionary-CyeYU6ZJ.js.map → ModelDictionary-DUGFHBo-.js.map} +1 -1
- package/dist/cli.js +166 -10
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +43 -6
- package/dist/client/index.js +135 -31
- package/dist/client/index.js.map +1 -1
- package/dist/{layout-DsG-zRIO.d.ts → formatRules-DTKbov47.d.ts} +245 -207
- package/dist/{layout-CBzYDoqE.js → layout-CrZ00tB0.js} +125 -13
- package/dist/layout-CrZ00tB0.js.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
- package/dist/DashboardDevtools-CMIuUYpw.js.map +0 -1
- package/dist/layout-CBzYDoqE.js.map +0 -1
|
@@ -121,209 +121,6 @@ declare function modelMeta(model: ModelDef): ModelMeta;
|
|
|
121
121
|
*/
|
|
122
122
|
declare function validateModel(model: ModelDef): string[];
|
|
123
123
|
//#endregion
|
|
124
|
-
//#region src/types.d.ts
|
|
125
|
-
type FilterValue = string | number;
|
|
126
|
-
/** Filtros por dimensão; lista vazia (ou ausente) = sem filtro ("Todos"). */
|
|
127
|
-
type DashboardFilters = Record<string, FilterValue[]>;
|
|
128
|
-
/**
|
|
129
|
-
* Pedidos do devtools. O servidor só aceita quando o `runQuery` recebe `devtools` (em dev); fora
|
|
130
|
-
* disso `debug` é ignorado e o resto é recusado com 400.
|
|
131
|
-
*/
|
|
132
|
-
type DashboardDevtoolsRequest = {
|
|
133
|
-
/** Devolve SQL compilado, parâmetros e tempos em `result.devtools.debug`. */
|
|
134
|
-
debug?: boolean;
|
|
135
|
-
/** Rascunho do modelo editado no devtools: substitui o modelo registrado só nesta consulta. */
|
|
136
|
-
model?: ModelDef;
|
|
137
|
-
/** Devolve a definição do modelo registrado e o que o servidor permite (`capabilities`). */
|
|
138
|
-
describe?: boolean;
|
|
139
|
-
/** Esvazia o cache de resultados do processo antes de executar. */
|
|
140
|
-
clearCache?: boolean;
|
|
141
|
-
/**
|
|
142
|
-
* Só compila: devolve o SQL e os parâmetros em `result.devtools.debug`, sem executar (o devtools
|
|
143
|
-
* usa para mostrar o SQL de uma consulta que deu erro).
|
|
144
|
-
*/
|
|
145
|
-
compile?: boolean;
|
|
146
|
-
/** Devolve o `EXPLAIN` da consulta em vez das linhas. */
|
|
147
|
-
explain?: boolean;
|
|
148
|
-
/** Mede a agregação de cada fato usada pela consulta, isoladamente. */
|
|
149
|
-
profile?: boolean;
|
|
150
|
-
/** Tabelas e colunas do banco (`information_schema`), para o autocomplete do editor. */
|
|
151
|
-
schema?: boolean;
|
|
152
|
-
/** Colunas de cada tabela (uma linha de cada), para o diagrama do modelo. */
|
|
153
|
-
columns?: boolean;
|
|
154
|
-
/** Executa cada pedaço do modelo (`devtools.model` ou o registrado) contra o banco. */
|
|
155
|
-
validate?: boolean;
|
|
156
|
-
/** Grava o rascunho no arquivo do modelo (`preview` só devolve o conteúdo novo). */
|
|
157
|
-
save?: 'preview' | 'write';
|
|
158
|
-
/** Grava o layout de gráficos em `<layoutsDir>/<id>.json` (`preview` só devolve o conteúdo novo). */
|
|
159
|
-
saveLayout?: {
|
|
160
|
-
layout: ChartsLayout;
|
|
161
|
-
mode: 'preview' | 'write';
|
|
162
|
-
};
|
|
163
|
-
/** Grava o resultado da consulta (modelo registrado) como snapshot de regressão. */
|
|
164
|
-
snapshot?: {
|
|
165
|
-
name: string;
|
|
166
|
-
overwrite?: boolean;
|
|
167
|
-
};
|
|
168
|
-
/** Lista os snapshots salvos deste modelo. */
|
|
169
|
-
snapshots?: boolean;
|
|
170
|
-
};
|
|
171
|
-
type DashboardQuery = {
|
|
172
|
-
model: string;
|
|
173
|
-
/** Dimensões agrupadas (viram GROUP BY). */
|
|
174
|
-
dimensions?: string[];
|
|
175
|
-
/** Medidas calculadas para cada grupo. */
|
|
176
|
-
measures?: string[];
|
|
177
|
-
filters?: DashboardFilters;
|
|
178
|
-
/** Devolve só os metadados do modelo (rótulos, descrições, formatos; sem SQL) em `result.meta`. */
|
|
179
|
-
meta?: boolean;
|
|
180
|
-
/**
|
|
181
|
-
* Várias consultas do mesmo modelo num request (o client manda assim as consultas de um render).
|
|
182
|
-
* O servidor junta numa SQL só as que têm as mesmas dimensões e filtros e vêm das mesmas fatos, e
|
|
183
|
-
* devolve uma resposta por consulta em `result.results`, na mesma ordem. Do `devtools`, só
|
|
184
|
-
* `debug` e `model` (rascunho) valem aqui.
|
|
185
|
-
*/
|
|
186
|
-
queries?: DashboardBatchQuery[];
|
|
187
|
-
devtools?: DashboardDevtoolsRequest;
|
|
188
|
-
};
|
|
189
|
-
/** Uma consulta de um lote (`DashboardQuery.queries`): o modelo e o devtools são os do lote. */
|
|
190
|
-
type DashboardBatchQuery = Pick<DashboardQuery, 'dimensions' | 'measures' | 'filters'>;
|
|
191
|
-
/** Resposta de uma consulta do lote: as linhas ou o erro (de consulta) dela. */
|
|
192
|
-
type DashboardBatchResult = {
|
|
193
|
-
rows: DashboardRow[];
|
|
194
|
-
error?: string;
|
|
195
|
-
/** Quantas consultas do lote saíram da mesma SQL (contando esta); o `debug` é o dessa SQL. */
|
|
196
|
-
batched?: number;
|
|
197
|
-
devtools?: {
|
|
198
|
-
debug?: DashboardQueryDebug;
|
|
199
|
-
};
|
|
200
|
-
};
|
|
201
|
-
type DashboardRow = Record<string, string | number | null>;
|
|
202
|
-
type DashboardQueryDebug = {
|
|
203
|
-
sql: string;
|
|
204
|
-
params: (string | number)[];
|
|
205
|
-
/** Tempo da execução no banco (num cache hit, o da execução original). */
|
|
206
|
-
durationMs: number;
|
|
207
|
-
cached: boolean;
|
|
208
|
-
/** A consulta rodou contra o rascunho do devtools, não contra o modelo registrado. */
|
|
209
|
-
draft: boolean;
|
|
210
|
-
};
|
|
211
|
-
type ProfileStep = {
|
|
212
|
-
/** `fato:<tabela>` ou `consulta` (a consulta inteira). */
|
|
213
|
-
name: string;
|
|
214
|
-
durationMs: number;
|
|
215
|
-
/** Linhas da agregação da fato (grupos) com os filtros aplicados. */
|
|
216
|
-
rows: number | null;
|
|
217
|
-
};
|
|
218
|
-
type SchemaTable = {
|
|
219
|
-
name: string;
|
|
220
|
-
type: 'table' | 'view';
|
|
221
|
-
columns: {
|
|
222
|
-
name: string;
|
|
223
|
-
type: string;
|
|
224
|
-
}[];
|
|
225
|
-
};
|
|
226
|
-
/** Colunas devolvidas por cada pedaço do modelo (vazio quando não veio nenhuma linha). */
|
|
227
|
-
type ModelColumns = {
|
|
228
|
-
/** Colunas de cada tabela. */
|
|
229
|
-
tables: Record<string, string[]>;
|
|
230
|
-
/** `tabela.coluna` com valor numérico na linha lida. */
|
|
231
|
-
numeric: string[];
|
|
232
|
-
};
|
|
233
|
-
type ModelValidation = {
|
|
234
|
-
/**
|
|
235
|
-
* Erro do banco por pedaço: `table:<nome>`, `relationship:<índice>`, `dimension:<nome>`,
|
|
236
|
-
* `measure:<nome>`.
|
|
237
|
-
*/
|
|
238
|
-
errors: Record<string, string>;
|
|
239
|
-
warnings: Record<string, string>;
|
|
240
|
-
columns: ModelColumns;
|
|
241
|
-
};
|
|
242
|
-
type SaveModelResult = {
|
|
243
|
-
path: string;
|
|
244
|
-
previous: string;
|
|
245
|
-
content: string;
|
|
246
|
-
written: boolean;
|
|
247
|
-
warnings: string[];
|
|
248
|
-
};
|
|
249
|
-
type DashboardSnapshot = {
|
|
250
|
-
name: string;
|
|
251
|
-
createdAt: string;
|
|
252
|
-
query: Omit<DashboardQuery, 'devtools' | 'meta'>;
|
|
253
|
-
rows: DashboardRow[];
|
|
254
|
-
};
|
|
255
|
-
type DevtoolsCapabilities = {
|
|
256
|
-
/** O endpoint sabe onde ficam os arquivos dos modelos (`modelsDir`). */
|
|
257
|
-
saveModel: boolean;
|
|
258
|
-
/** O endpoint sabe onde gravar snapshots (`snapshotsDir`). */
|
|
259
|
-
snapshots: boolean;
|
|
260
|
-
/** O endpoint sabe onde ficam os arquivos de layout de gráficos (`layoutsDir`). */
|
|
261
|
-
saveLayout: boolean;
|
|
262
|
-
/** Tipos de gráfico do app que o endpoint conhece (`chartTypes`): só esses ele aceita salvar. */
|
|
263
|
-
chartTypes: string[];
|
|
264
|
-
};
|
|
265
|
-
type DashboardResult = {
|
|
266
|
-
rows: DashboardRow[];
|
|
267
|
-
/** Respostas de um lote (`query.queries`), na ordem das consultas. */
|
|
268
|
-
results?: DashboardBatchResult[];
|
|
269
|
-
/**
|
|
270
|
-
* Quantas consultas saíram da mesma SQL que esta (contando ela), quando foi num lote. O
|
|
271
|
-
* `devtools.debug` é o dessa SQL.
|
|
272
|
-
*/
|
|
273
|
-
batched?: number;
|
|
274
|
-
meta?: ModelMeta;
|
|
275
|
-
devtools?: {
|
|
276
|
-
model?: ModelDef;
|
|
277
|
-
capabilities?: DevtoolsCapabilities;
|
|
278
|
-
debug?: DashboardQueryDebug;
|
|
279
|
-
explain?: DashboardRow[];
|
|
280
|
-
profile?: ProfileStep[];
|
|
281
|
-
schema?: SchemaTable[];
|
|
282
|
-
validation?: ModelValidation;
|
|
283
|
-
columns?: ModelColumns;
|
|
284
|
-
/** Pedaços que o banco recusou ao ler as colunas (mesmas chaves da validação). */
|
|
285
|
-
columnErrors?: Record<string, string>;
|
|
286
|
-
save?: SaveModelResult;
|
|
287
|
-
snapshot?: {
|
|
288
|
-
path: string;
|
|
289
|
-
};
|
|
290
|
-
snapshots?: DashboardSnapshot[];
|
|
291
|
-
};
|
|
292
|
-
};
|
|
293
|
-
//#endregion
|
|
294
|
-
//#region src/formatRules.d.ts
|
|
295
|
-
declare const COLUMN_ALIGNS: readonly ['left', 'center', 'right'];
|
|
296
|
-
type ColumnAlign = (typeof COLUMN_ALIGNS)[number];
|
|
297
|
-
declare const COLUMN_VERTICAL_ALIGNS: readonly ['top', 'middle', 'bottom'];
|
|
298
|
-
type ColumnVerticalAlign = (typeof COLUMN_VERTICAL_ALIGNS)[number];
|
|
299
|
-
declare const RULE_OPERATORS: readonly ['>', '>=', '<', '<=', '=', '!=', 'between', 'contains', 'empty', 'notEmpty'];
|
|
300
|
-
type RuleOperator = (typeof RULE_OPERATORS)[number];
|
|
301
|
-
type FormatRule = {
|
|
302
|
-
/**
|
|
303
|
-
* Dimensão ou medida avaliada. Pode estar fora da tabela: entra na consulta sem coluna (uma
|
|
304
|
-
* dimensão de fora divide as linhas se tiver mais de um valor por linha).
|
|
305
|
-
*/
|
|
306
|
-
field: string;
|
|
307
|
-
operator: RuleOperator;
|
|
308
|
-
/** Valor comparado com o valor bruto (percentual como fração: 10% = 0.1). */
|
|
309
|
-
value?: number | string;
|
|
310
|
-
/** Fim do intervalo do `between` (inclusivo, como o `value`). */
|
|
311
|
-
to?: number;
|
|
312
|
-
/** `cell` (padrão) pinta uma célula; `row`, a linha inteira. */
|
|
313
|
-
target?: 'cell' | 'row';
|
|
314
|
-
/** Coluna pintada quando `target` é `cell`. Padrão: o próprio `field`. */
|
|
315
|
-
column?: string;
|
|
316
|
-
/** Cor do texto. */
|
|
317
|
-
color?: string;
|
|
318
|
-
/** Cor de fundo. */
|
|
319
|
-
background?: string;
|
|
320
|
-
bold?: boolean;
|
|
321
|
-
/** Alinhamento horizontal da célula (ou das células da linha). */
|
|
322
|
-
align?: ColumnAlign;
|
|
323
|
-
/** Alinhamento vertical da célula (ou das células da linha). */
|
|
324
|
-
verticalAlign?: ColumnVerticalAlign;
|
|
325
|
-
};
|
|
326
|
-
//#endregion
|
|
327
124
|
//#region src/layout.d.ts
|
|
328
125
|
declare const CHART_TYPES: readonly ['kpi', 'combo', 'bar', 'donut', 'table'];
|
|
329
126
|
type ChartType = (typeof CHART_TYPES)[number];
|
|
@@ -409,6 +206,13 @@ type BarChartDef = BaseChartDef & ColumnsDisplay & {
|
|
|
409
206
|
valueSize?: number;
|
|
410
207
|
/** Empilhado: total da pilha na ponta. */
|
|
411
208
|
showTotal?: boolean;
|
|
209
|
+
/** Só mostra o valor (e o total) que atende à regra, ex.: `{ operator: '!=', value: 0 }`. */
|
|
210
|
+
valueRule?: ValueRule;
|
|
211
|
+
/**
|
|
212
|
+
* Com `clickToFilter`, o filtro da própria dimensão (e da série) esconde o resto em vez de só
|
|
213
|
+
* apagá-lo. Padrão: `false` (apaga).
|
|
214
|
+
*/
|
|
215
|
+
hideUnselected?: boolean;
|
|
412
216
|
/**
|
|
413
217
|
* Cor por série: `{ medida: '#rrggbb' }` ou, com `series`, `{ valor: '#rrggbb' }` (também
|
|
414
218
|
* "(em branco)" e "Outros"). O que faltar segue a paleta.
|
|
@@ -427,7 +231,19 @@ type DonutChartDef = BaseChartDef & ColumnsDisplay & {
|
|
|
427
231
|
percentDecimals?: number;
|
|
428
232
|
formatDimension?: string;
|
|
429
233
|
clickToFilter?: boolean;
|
|
234
|
+
/** Lado da legenda. Padrão: `right` (com nome, % e valor; em cima/embaixo, só o nome). */
|
|
235
|
+
legendPosition?: DonutLegendPosition;
|
|
236
|
+
/** Valor de cada fatia do lado de fora da rosca. */
|
|
237
|
+
showValues?: boolean;
|
|
238
|
+
/** O que o valor de fora mostra. Padrão: `both` (`44.981 (51%)`). */
|
|
239
|
+
valueContent?: DonutValueContent;
|
|
240
|
+
/** Total no furo da rosca. Padrão: `true`. */
|
|
241
|
+
showTotal?: boolean;
|
|
430
242
|
};
|
|
243
|
+
declare const DONUT_LEGEND_POSITIONS: readonly ['right', 'left', 'top', 'bottom'];
|
|
244
|
+
type DonutLegendPosition = (typeof DONUT_LEGEND_POSITIONS)[number];
|
|
245
|
+
declare const DONUT_VALUE_CONTENTS: readonly ['both', 'value', 'percent'];
|
|
246
|
+
type DonutValueContent = (typeof DONUT_VALUE_CONTENTS)[number];
|
|
431
247
|
type TableChartDef = BaseChartDef & ColumnsDisplay & {
|
|
432
248
|
type: 'table';
|
|
433
249
|
dimensions?: string[];
|
|
@@ -524,7 +340,11 @@ type CardStyle = {
|
|
|
524
340
|
};
|
|
525
341
|
/** Cards de todos os gráficos do layout: estilo padrão e espaço entre eles. */
|
|
526
342
|
type CardsStyle = CardStyle & {
|
|
527
|
-
/** Espaço entre
|
|
343
|
+
/** Espaço entre as linhas de cards, em px. */
|
|
344
|
+
rowGap?: number;
|
|
345
|
+
/** Espaço entre as colunas de cards, em px. */
|
|
346
|
+
columnGap?: number;
|
|
347
|
+
/** Espaço entre linhas e colunas, em px (formato antigo; `rowGap`/`columnGap` têm prioridade). */
|
|
528
348
|
gap?: number;
|
|
529
349
|
};
|
|
530
350
|
type ChartsLayout = {
|
|
@@ -542,7 +362,7 @@ type FieldSpec = {
|
|
|
542
362
|
label: string;
|
|
543
363
|
hint?: string;
|
|
544
364
|
/** Agrupamento no formulário do devtools. */
|
|
545
|
-
section: 'Gráfico' | 'Dados' | 'Aparência' | 'Valores' | 'Rótulos e formatos' | 'Formatação condicional' | 'Filtro' | 'Tela' | 'Card';
|
|
365
|
+
section: 'Gráfico' | 'Dados' | 'Aparência' | 'Valores' | 'Comportamento' | 'Rótulos e formatos' | 'Formatação condicional' | 'Filtro' | 'Tela' | 'Card';
|
|
546
366
|
required?: boolean;
|
|
547
367
|
/** Valor que o componente usa quando o campo não está no JSON. */
|
|
548
368
|
default?: unknown;
|
|
@@ -629,6 +449,10 @@ type FieldSpec = {
|
|
|
629
449
|
{
|
|
630
450
|
kind: 'colors';
|
|
631
451
|
values?: string;
|
|
452
|
+
} |
|
|
453
|
+
/** `ValueRule` (`{ operator, value, to? }`): ausente = sem regra (o devtools mostra uma checkbox). */
|
|
454
|
+
{
|
|
455
|
+
kind: 'valueRule';
|
|
632
456
|
});
|
|
633
457
|
/**
|
|
634
458
|
* Tipo de gráfico: nome no devtools e campos do JSON. Para um tipo do app, `title`, `span` e
|
|
@@ -673,5 +497,219 @@ declare function validateLayout(layout: ChartsLayout, types?: ChartTypes): strin
|
|
|
673
497
|
*/
|
|
674
498
|
declare function layoutModelWarnings(layout: ChartsLayout, model: Pick<ModelDef, 'dimensions' | 'measures'>, types?: ChartTypes): string[];
|
|
675
499
|
//#endregion
|
|
676
|
-
|
|
677
|
-
|
|
500
|
+
//#region src/types.d.ts
|
|
501
|
+
type FilterValue = string | number;
|
|
502
|
+
/** Filtros por dimensão; lista vazia (ou ausente) = sem filtro ("Todos"). */
|
|
503
|
+
type DashboardFilters = Record<string, FilterValue[]>;
|
|
504
|
+
/**
|
|
505
|
+
* Pedidos do devtools. O servidor só aceita quando o `runQuery` recebe `devtools` (em dev); fora
|
|
506
|
+
* disso `debug` é ignorado e o resto é recusado com 400.
|
|
507
|
+
*/
|
|
508
|
+
type DashboardDevtoolsRequest = {
|
|
509
|
+
/** Devolve SQL compilado, parâmetros e tempos em `result.devtools.debug`. */
|
|
510
|
+
debug?: boolean;
|
|
511
|
+
/** Rascunho do modelo editado no devtools: substitui o modelo registrado só nesta consulta. */
|
|
512
|
+
model?: ModelDef;
|
|
513
|
+
/** Devolve a definição do modelo registrado e o que o servidor permite (`capabilities`). */
|
|
514
|
+
describe?: boolean;
|
|
515
|
+
/** Esvazia o cache de resultados do processo antes de executar. */
|
|
516
|
+
clearCache?: boolean;
|
|
517
|
+
/**
|
|
518
|
+
* Só compila: devolve o SQL e os parâmetros em `result.devtools.debug`, sem executar (o devtools
|
|
519
|
+
* usa para mostrar o SQL de uma consulta que deu erro).
|
|
520
|
+
*/
|
|
521
|
+
compile?: boolean;
|
|
522
|
+
/** Devolve o `EXPLAIN` da consulta em vez das linhas. */
|
|
523
|
+
explain?: boolean;
|
|
524
|
+
/** Mede a agregação de cada fato usada pela consulta, isoladamente. */
|
|
525
|
+
profile?: boolean;
|
|
526
|
+
/** Tabelas e colunas do banco (`information_schema`), para o autocomplete do editor. */
|
|
527
|
+
schema?: boolean;
|
|
528
|
+
/** Colunas de cada tabela (uma linha de cada), para o diagrama do modelo. */
|
|
529
|
+
columns?: boolean;
|
|
530
|
+
/** Executa cada pedaço do modelo (`devtools.model` ou o registrado) contra o banco. */
|
|
531
|
+
validate?: boolean;
|
|
532
|
+
/** Grava o rascunho no arquivo do modelo (`preview` só devolve o conteúdo novo). */
|
|
533
|
+
save?: 'preview' | 'write';
|
|
534
|
+
/** Grava o layout de gráficos em `<layoutsDir>/<id>.json` (`preview` só devolve o conteúdo novo). */
|
|
535
|
+
saveLayout?: {
|
|
536
|
+
layout: ChartsLayout;
|
|
537
|
+
mode: 'preview' | 'write';
|
|
538
|
+
};
|
|
539
|
+
/** Grava o resultado da consulta (modelo registrado) como snapshot de regressão. */
|
|
540
|
+
snapshot?: {
|
|
541
|
+
name: string;
|
|
542
|
+
overwrite?: boolean;
|
|
543
|
+
};
|
|
544
|
+
/** Lista os snapshots salvos deste modelo. */
|
|
545
|
+
snapshots?: boolean;
|
|
546
|
+
};
|
|
547
|
+
type DashboardQuery = {
|
|
548
|
+
model: string;
|
|
549
|
+
/** Dimensões agrupadas (viram GROUP BY). */
|
|
550
|
+
dimensions?: string[];
|
|
551
|
+
/** Medidas calculadas para cada grupo. */
|
|
552
|
+
measures?: string[];
|
|
553
|
+
filters?: DashboardFilters;
|
|
554
|
+
/** Devolve só os metadados do modelo (rótulos, descrições, formatos; sem SQL) em `result.meta`. */
|
|
555
|
+
meta?: boolean;
|
|
556
|
+
/**
|
|
557
|
+
* Várias consultas do mesmo modelo num request (o client manda assim as consultas de um render).
|
|
558
|
+
* O servidor junta numa SQL só as que têm as mesmas dimensões e filtros e vêm das mesmas fatos, e
|
|
559
|
+
* devolve uma resposta por consulta em `result.results`, na mesma ordem. Do `devtools`, só
|
|
560
|
+
* `debug` e `model` (rascunho) valem aqui.
|
|
561
|
+
*/
|
|
562
|
+
queries?: DashboardBatchQuery[];
|
|
563
|
+
devtools?: DashboardDevtoolsRequest;
|
|
564
|
+
};
|
|
565
|
+
/** Uma consulta de um lote (`DashboardQuery.queries`): o modelo e o devtools são os do lote. */
|
|
566
|
+
type DashboardBatchQuery = Pick<DashboardQuery, 'dimensions' | 'measures' | 'filters'>;
|
|
567
|
+
/** Resposta de uma consulta do lote: as linhas ou o erro (de consulta) dela. */
|
|
568
|
+
type DashboardBatchResult = {
|
|
569
|
+
rows: DashboardRow[];
|
|
570
|
+
error?: string;
|
|
571
|
+
/** Quantas consultas do lote saíram da mesma SQL (contando esta); o `debug` é o dessa SQL. */
|
|
572
|
+
batched?: number;
|
|
573
|
+
devtools?: {
|
|
574
|
+
debug?: DashboardQueryDebug;
|
|
575
|
+
};
|
|
576
|
+
};
|
|
577
|
+
type DashboardRow = Record<string, string | number | null>;
|
|
578
|
+
type DashboardQueryDebug = {
|
|
579
|
+
sql: string;
|
|
580
|
+
params: (string | number)[];
|
|
581
|
+
/** Tempo da execução no banco (num cache hit, o da execução original). */
|
|
582
|
+
durationMs: number;
|
|
583
|
+
cached: boolean;
|
|
584
|
+
/** A consulta rodou contra o rascunho do devtools, não contra o modelo registrado. */
|
|
585
|
+
draft: boolean;
|
|
586
|
+
};
|
|
587
|
+
type ProfileStep = {
|
|
588
|
+
/** `fato:<tabela>` ou `consulta` (a consulta inteira). */
|
|
589
|
+
name: string;
|
|
590
|
+
durationMs: number;
|
|
591
|
+
/** Linhas da agregação da fato (grupos) com os filtros aplicados. */
|
|
592
|
+
rows: number | null;
|
|
593
|
+
};
|
|
594
|
+
type SchemaTable = {
|
|
595
|
+
name: string;
|
|
596
|
+
type: 'table' | 'view';
|
|
597
|
+
columns: {
|
|
598
|
+
name: string;
|
|
599
|
+
type: string;
|
|
600
|
+
}[];
|
|
601
|
+
};
|
|
602
|
+
/** Colunas devolvidas por cada pedaço do modelo (vazio quando não veio nenhuma linha). */
|
|
603
|
+
type ModelColumns = {
|
|
604
|
+
/** Colunas de cada tabela. */
|
|
605
|
+
tables: Record<string, string[]>;
|
|
606
|
+
/** `tabela.coluna` com valor numérico na linha lida. */
|
|
607
|
+
numeric: string[];
|
|
608
|
+
};
|
|
609
|
+
type ModelValidation = {
|
|
610
|
+
/**
|
|
611
|
+
* Erro do banco por pedaço: `table:<nome>`, `relationship:<índice>`, `dimension:<nome>`,
|
|
612
|
+
* `measure:<nome>`.
|
|
613
|
+
*/
|
|
614
|
+
errors: Record<string, string>;
|
|
615
|
+
warnings: Record<string, string>;
|
|
616
|
+
columns: ModelColumns;
|
|
617
|
+
};
|
|
618
|
+
type SaveModelResult = {
|
|
619
|
+
path: string;
|
|
620
|
+
previous: string;
|
|
621
|
+
content: string;
|
|
622
|
+
written: boolean;
|
|
623
|
+
warnings: string[];
|
|
624
|
+
};
|
|
625
|
+
type DashboardSnapshot = {
|
|
626
|
+
name: string;
|
|
627
|
+
createdAt: string;
|
|
628
|
+
query: Omit<DashboardQuery, 'devtools' | 'meta'>;
|
|
629
|
+
rows: DashboardRow[];
|
|
630
|
+
};
|
|
631
|
+
type DevtoolsCapabilities = {
|
|
632
|
+
/** O endpoint sabe onde ficam os arquivos dos modelos (`modelsDir`). */
|
|
633
|
+
saveModel: boolean;
|
|
634
|
+
/** O endpoint sabe onde gravar snapshots (`snapshotsDir`). */
|
|
635
|
+
snapshots: boolean;
|
|
636
|
+
/** O endpoint sabe onde ficam os arquivos de layout de gráficos (`layoutsDir`). */
|
|
637
|
+
saveLayout: boolean;
|
|
638
|
+
/** Tipos de gráfico do app que o endpoint conhece (`chartTypes`): só esses ele aceita salvar. */
|
|
639
|
+
chartTypes: string[];
|
|
640
|
+
};
|
|
641
|
+
type DashboardResult = {
|
|
642
|
+
rows: DashboardRow[];
|
|
643
|
+
/** Respostas de um lote (`query.queries`), na ordem das consultas. */
|
|
644
|
+
results?: DashboardBatchResult[];
|
|
645
|
+
/**
|
|
646
|
+
* Quantas consultas saíram da mesma SQL que esta (contando ela), quando foi num lote. O
|
|
647
|
+
* `devtools.debug` é o dessa SQL.
|
|
648
|
+
*/
|
|
649
|
+
batched?: number;
|
|
650
|
+
meta?: ModelMeta;
|
|
651
|
+
devtools?: {
|
|
652
|
+
model?: ModelDef;
|
|
653
|
+
capabilities?: DevtoolsCapabilities;
|
|
654
|
+
debug?: DashboardQueryDebug;
|
|
655
|
+
explain?: DashboardRow[];
|
|
656
|
+
profile?: ProfileStep[];
|
|
657
|
+
schema?: SchemaTable[];
|
|
658
|
+
validation?: ModelValidation;
|
|
659
|
+
columns?: ModelColumns;
|
|
660
|
+
/** Pedaços que o banco recusou ao ler as colunas (mesmas chaves da validação). */
|
|
661
|
+
columnErrors?: Record<string, string>;
|
|
662
|
+
save?: SaveModelResult;
|
|
663
|
+
snapshot?: {
|
|
664
|
+
path: string;
|
|
665
|
+
};
|
|
666
|
+
snapshots?: DashboardSnapshot[];
|
|
667
|
+
};
|
|
668
|
+
};
|
|
669
|
+
//#endregion
|
|
670
|
+
//#region src/formatRules.d.ts
|
|
671
|
+
declare const COLUMN_ALIGNS: readonly ['left', 'center', 'right'];
|
|
672
|
+
type ColumnAlign = (typeof COLUMN_ALIGNS)[number];
|
|
673
|
+
declare const COLUMN_VERTICAL_ALIGNS: readonly ['top', 'middle', 'bottom'];
|
|
674
|
+
type ColumnVerticalAlign = (typeof COLUMN_VERTICAL_ALIGNS)[number];
|
|
675
|
+
declare const RULE_OPERATORS: readonly ['>', '>=', '<', '<=', '=', '!=', 'between', 'contains', 'empty', 'notEmpty'];
|
|
676
|
+
type RuleOperator = (typeof RULE_OPERATORS)[number];
|
|
677
|
+
type FormatRule = {
|
|
678
|
+
/**
|
|
679
|
+
* Dimensão ou medida avaliada. Pode estar fora da tabela: entra na consulta sem coluna (uma
|
|
680
|
+
* dimensão de fora divide as linhas se tiver mais de um valor por linha).
|
|
681
|
+
*/
|
|
682
|
+
field: string;
|
|
683
|
+
operator: RuleOperator;
|
|
684
|
+
/** Valor comparado com o valor bruto (percentual como fração: 10% = 0.1). */
|
|
685
|
+
value?: number | string;
|
|
686
|
+
/** Fim do intervalo do `between` (inclusivo, como o `value`). */
|
|
687
|
+
to?: number;
|
|
688
|
+
/** `cell` (padrão) pinta uma célula; `row`, a linha inteira. */
|
|
689
|
+
target?: 'cell' | 'row';
|
|
690
|
+
/** Coluna pintada quando `target` é `cell`. Padrão: o próprio `field`. */
|
|
691
|
+
column?: string;
|
|
692
|
+
/** Cor do texto. */
|
|
693
|
+
color?: string;
|
|
694
|
+
/** Cor de fundo. */
|
|
695
|
+
background?: string;
|
|
696
|
+
bold?: boolean;
|
|
697
|
+
/** Alinhamento horizontal da célula (ou das células da linha). */
|
|
698
|
+
align?: ColumnAlign;
|
|
699
|
+
/** Alinhamento vertical da célula (ou das células da linha). */
|
|
700
|
+
verticalAlign?: ColumnVerticalAlign;
|
|
701
|
+
};
|
|
702
|
+
/**
|
|
703
|
+
* Regra de um valor só (sem campo nem estilo), ex.: mostrar o rótulo da barra só quando o valor é
|
|
704
|
+
* diferente de zero: `{ "operator": "!=", "value": 0 }`.
|
|
705
|
+
*/
|
|
706
|
+
type ValueRule = {
|
|
707
|
+
operator: ValueRuleOperator;
|
|
708
|
+
value: number;
|
|
709
|
+
to?: number;
|
|
710
|
+
};
|
|
711
|
+
declare const VALUE_RULE_OPERATORS: readonly ['>', '>=', '<', '<=', '=', '!=', 'between'];
|
|
712
|
+
type ValueRuleOperator = (typeof VALUE_RULE_OPERATORS)[number];
|
|
713
|
+
//#endregion
|
|
714
|
+
export { ModelMeta as $, ChartTypeSpec as A, KpiChartDef as B, BuiltinChartDef as C, ChartDef as D, CardsStyle as E, DonutChartDef as F, AggregateMeasure as G, layoutModelWarnings as H, DonutLegendPosition as I, FieldMeta as J, Aggregation as K, DonutValueContent as L, ChartsLayout as M, ComboChartDef as N, ChartNumberFormat as O, CustomChartDef as P, ModelDef as Q, FieldSpec as R, BarValuePosition as S, CardStyle as T, resolveChartTypes as U, TableChartDef as V, validateLayout as W, MeasureDef as X, FormulaMeasure as Y, MeasureMeta as Z, ModelValidation as _, DashboardBatchQuery as a, modelMeta as at, SchemaTable as b, DashboardFilters as c, DashboardResult as d, RatioMeasure as et, DashboardRow as f, ModelColumns as g, FilterValue as h, ValueRule as i, ValueFormat as it, ChartTypes as j, ChartType as k, DashboardQuery as l, DevtoolsCapabilities as m, ColumnVerticalAlign as n, SumMeasure as nt, DashboardBatchResult as o, validateModel as ot, DashboardSnapshot as p, DimensionDef as q, FormatRule as r, TableDef as rt, DashboardDevtoolsRequest as s, ColumnAlign as t, RelationshipDef as tt, DashboardQueryDebug as u, ProfileStep as v, CanvasDef as w, BarChartDef as x, SaveModelResult as y, FilterDef as z };
|
|
715
|
+
//# sourceMappingURL=formatRules-DTKbov47.d.ts.map
|