feat(cli): compact table projection for audit-config query (register row 57)
The command passed no `tableProjector`, so `--format table` handed the renderer
an `AuditLogQueryResult` OBJECT. That takes the generic Property/Value branch,
which printed the entire `entries` array as raw JSON inside a single cell. JSON
output was and remains correct, and is the primary format for this command.
Adds `AuditConfigTableProjection`, mirroring `TemplateTableProjection`:
string->string over the raw body, applied only on the table path, returning the
input verbatim when it is not JSON or not a recognised shape so the renderer's
own fallbacks still apply. It unwraps the envelope to a row array — id,
timestamp, user, action, entityType, entityName, entityId — and drops
`afterStateJson`, the full post-change entity snapshot, which is the audit
analogue of template's fat child arrays: one per row fills a terminal.
`bundleImportId` is dropped as mostly-null noise.
`totalCount` would be lost by a plain unwrap, so a truncated page gains a single
trailing row with a `note` cell ("showing 50 of 137 — use --page / --page-size
for the rest"). When the page IS the whole result set the column is not emitted
at all, so a small query's table stays exactly as narrow as its data, and the
note row carries no `id` so it cannot be mistaken for an entry.
A `--detail` flag skips the projection and renders the raw payload, matching
`template list` / `template get` — that plus `--format json` is how to reach
`afterStateJson`. A bare array root is also accepted, so the projection does not
regress if the payload is ever unwrapped upstream or the deprecated `audit-log`
alias meets an older server.
Tests build their fixtures by serialising the REAL AuditLogQueryResult /
AuditLogEntry types, so renaming a server property fails the test instead of
silently blanking a column. CLI README + Component-CLI.md document the table
shape, the omitted fields, and --detail.
This commit is contained in:
@@ -1801,6 +1801,7 @@ scadabridge --url <url> audit-config query [options]
|
||||
| `--to` | no | — | End timestamp in ISO 8601 format |
|
||||
| `--page` | no | `1` | Page number |
|
||||
| `--page-size` | no | `50` | Results per page |
|
||||
| `--detail` | no | `false` | Table output only: render the raw payload instead of the compact column projection (see below). No effect on JSON output. |
|
||||
|
||||
Output shape:
|
||||
|
||||
@@ -1822,7 +1823,25 @@ Output shape:
|
||||
```
|
||||
|
||||
`totalCount` is the unpaged number of rows matching the filters, so a client can page
|
||||
without a second call.
|
||||
without a second call. JSON is the primary format for this command and is what scripts
|
||||
should consume — it is never altered by the table projection below.
|
||||
|
||||
**Table output.** `--format table` renders a compact projection with one row per entry:
|
||||
|
||||
```
|
||||
id timestamp user action entityType entityName entityId
|
||||
412 2026-08-15T12:00:00+00:00 multi-role Created Template PumpTemplate 7
|
||||
413 2026-08-15T12:05:00+00:00 designer Deleted ExternalSystem MES 3
|
||||
```
|
||||
|
||||
`afterStateJson` (the full post-change entity snapshot) and `bundleImportId` are omitted
|
||||
— one snapshot per row fills a terminal. Pass `--detail` to render the raw payload
|
||||
instead, or use `--format json`. When the page is a strict subset of the matches, a final
|
||||
row carries a `note` cell (`showing 50 of 137 — use --page / --page-size for the rest`);
|
||||
when the page is the whole result set that column is not emitted at all.
|
||||
|
||||
Before this projection existed the whole `entries` array was printed as raw JSON inside a
|
||||
single `Property`/`Value` cell (deferred-work register row 57).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user