@object-ui/runner 16.0.0 → 17.1.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/CHANGELOG.md CHANGED
@@ -1,5 +1,276 @@
1
1
  # @object-ui/runner
2
2
 
3
+ ## 17.1.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [62311b6]
8
+ - Updated dependencies [fc0272a]
9
+ - Updated dependencies [9e7349e]
10
+ - Updated dependencies [8864971]
11
+ - Updated dependencies [c785740]
12
+ - Updated dependencies [b41f401]
13
+ - Updated dependencies [19e9fa0]
14
+ - Updated dependencies [95b7214]
15
+ - Updated dependencies [7d9734d]
16
+ - Updated dependencies [6ae818e]
17
+ - Updated dependencies [f1c04b6]
18
+ - Updated dependencies [9eb932b]
19
+ - Updated dependencies [746dd00]
20
+ - Updated dependencies [aebfa4f]
21
+ - Updated dependencies [38ca8be]
22
+ - Updated dependencies [68ef584]
23
+ - Updated dependencies [4952edf]
24
+ - Updated dependencies [7f0252e]
25
+ - Updated dependencies [c4d7b20]
26
+ - Updated dependencies [c769d3d]
27
+ - Updated dependencies [7639a61]
28
+ - Updated dependencies [94e63ef]
29
+ - Updated dependencies [c735bf7]
30
+ - Updated dependencies [02aef0c]
31
+ - Updated dependencies [6f29aa5]
32
+ - Updated dependencies [c4db402]
33
+ - Updated dependencies [5319bf1]
34
+ - Updated dependencies [49e5671]
35
+ - Updated dependencies [9a04d25]
36
+ - Updated dependencies [b5b97e2]
37
+ - Updated dependencies [f59f2c1]
38
+ - Updated dependencies [07de839]
39
+ - Updated dependencies [2a40b5e]
40
+ - Updated dependencies [df613fa]
41
+ - Updated dependencies [4874117]
42
+ - Updated dependencies [ad0183a]
43
+ - Updated dependencies [ce08d55]
44
+ - Updated dependencies [eb4b740]
45
+ - Updated dependencies [5b084eb]
46
+ - Updated dependencies [aa1240a]
47
+ - Updated dependencies [2374a49]
48
+ - Updated dependencies [390c071]
49
+ - Updated dependencies [d10f526]
50
+ - Updated dependencies [2d5d594]
51
+ - Updated dependencies [ea7f477]
52
+ - Updated dependencies [379728f]
53
+ - Updated dependencies [7f23cd0]
54
+ - Updated dependencies [0ded602]
55
+ - Updated dependencies [24e0e0a]
56
+ - Updated dependencies [3a6cf24]
57
+ - Updated dependencies [aa35561]
58
+ - Updated dependencies [03bd53b]
59
+ - Updated dependencies [3c1f321]
60
+ - Updated dependencies [a045a32]
61
+ - Updated dependencies [912496d]
62
+ - Updated dependencies [80edbd4]
63
+ - Updated dependencies [9867281]
64
+ - @object-ui/core@17.1.0
65
+ - @object-ui/components@17.1.0
66
+ - @object-ui/react@17.1.0
67
+ - @object-ui/types@17.1.0
68
+ - @object-ui/plugin-charts@17.1.0
69
+ - @object-ui/plugin-kanban@17.1.0
70
+
71
+ ## 17.0.0
72
+
73
+ ### Patch Changes
74
+
75
+ - b076050: fix(console,runner): the approvals inbox renders against one ticking clock, and both packages now run ESLint
76
+
77
+ `apps/console` and `packages/runner` had no `lint` script, so `turbo run lint`
78
+ skipped them silently and their 17 ESLint **errors** had never been seen
79
+ (#2923 declared them as DEBT; this closes the gap). Both now carry
80
+ `"lint": "eslint ."` and the `DEBT` list in `scripts/check-lint-coverage.mjs`
81
+ is empty — every workspace package is linted.
82
+
83
+ What the errors actually were, once read one by one:
84
+
85
+ - **8x `react-hooks/purity` — real, and user-visible.** The approvals inbox
86
+ read `Date.now()` mid-render for every age tint, "5m ago" label and SLA chip.
87
+ Render must be pure: the output depended on when React happened to render, so
88
+ it disagreed with itself under StrictMode's double render and then **froze** —
89
+ an inbox left open kept saying "just now" and an SLA countdown never counted
90
+ down. The page now renders against a single `now` held in state and advanced
91
+ once a minute (the finest granularity anything here displays), so render is a
92
+ pure function of props+state _and_ the figures actually tick.
93
+ - Alongside that, `sla_due_at` is now parsed through a guard. A due date the
94
+ backend sends in a shape `Date.parse` can't read used to render as
95
+ "SLA NaNh left"; it now renders nothing.
96
+ - **1x `react-hooks/static-components` — real.** `StatusBadge` was declared
97
+ inside `ApprovalsInboxPage`, making it a brand-new component type on every
98
+ render, so React unmounted and remounted every status chip in the table each
99
+ time the page re-rendered. Hoisted to module scope, with the translated label
100
+ passed as a prop.
101
+ - **6x `react-hooks/static-components` — false positives** (3 in the console's
102
+ settings pages, 3 in the runner's `LayoutRenderer`). All six render the result
103
+ of `getIcon`/`getLazyIcon`, which memoises per name in a module-level cache —
104
+ the component reference is stable across renders and nothing is created during
105
+ render. The rule cannot see through the call, so these carry the same targeted
106
+ `eslint-disable-next-line` + justification the repo already uses at a dozen
107
+ icon-registry sites, and the resolvers themselves now say so in a comment.
108
+ (Verified rather than assumed: typing into a settings field keeps focus and
109
+ every character, so no state was ever being reset there.)
110
+ - **2 minor.** A dead `token` initializer on the console's auth preflight path
111
+ (`no-useless-assignment` — read, not blind-deleted: no intended write was
112
+ missing, every path out of the try/catch either assigns or returns), and a
113
+ `prefer-const` in the SDUI workbench preview.
114
+
115
+ - b39f4b3: fix(runner): type-check the package at all, and fix the `DataSource` contract violation that hid behind a broken import (#2917)
116
+
117
+ `@object-ui/runner` was the worst-covered package in the repo: `build` is
118
+ `vite build` (transpile only), it had no `type-check` script, and — uniquely —
119
+ **no `tsconfig.json` at all**. Nothing had ever type-checked it, despite it being
120
+ a published package.
121
+
122
+ **It was not broken at runtime.** The two bad imports were `import type`, so they
123
+ were erased before they could fail, and the one value import
124
+ (`emulateBatchTransaction`) does exist. `MockDataSource` is also unreferenced
125
+ anywhere in the repo. So this is a correctness and reference-quality fix, not an
126
+ outage.
127
+
128
+ **What the missing check actually hid.** `DataSource` and
129
+ `BatchTransactionOperation` were imported from `@object-ui/core`, which does not
130
+ export them — they live in `@object-ui/types`. Because that import never
131
+ resolved, `class MockDataSource implements DataSource` was silently a no-op, and
132
+ three separate commits maintained the class _as if_ it were being verified
133
+ (`62b9ab510` added `batchTransaction`, `09d9669c7` made `getObjectSchema`
134
+ required, `5527388b0` added input validation). With the `implements` clause
135
+ inert, a real contract violation survived all three:
136
+
137
+ ```ts
138
+ async find(resource: string, params?: any): Promise<any[]> { return []; }
139
+ ```
140
+
141
+ `DataSource.find` returns a `QueryResult` envelope, not a bare array. Anyone
142
+ copying this mock as the starting point for their own adapter — which is exactly
143
+ what its doc comment invites — would hand every consumer an array where `.data`
144
+ and `.total` are `undefined`. Now typed as `Promise<QueryResult>` and returning
145
+ `{ data: [], total: 0 }`.
146
+
147
+ Also in this change:
148
+
149
+ - `packages/runner/tsconfig.json` added, mirroring `apps/console` rather than the
150
+ library packages: `runner` is a Vite app, so it wants `bundler` resolution,
151
+ `allowImportingTsExtensions` (for `./App.tsx`) and `types: ["vite/client"]`
152
+ (for `import.meta.glob` in `MetadataLoader` and the `./index.css` side-effect
153
+ import). Keeping it standalone instead of extending the root config also means
154
+ it never inherits the root `paths`, so workspace deps resolve through built
155
+ `.d.ts` and the TS6059 `rootDir` class of error cannot appear.
156
+ - unused parameters prefixed with `_` (6x in `mockDataSource`), and an unused
157
+ `Circle` icon import dropped from `LayoutRenderer`.
158
+ - `"type-check": "tsc --noEmit"` added, and the package's `DEBT` entry deleted
159
+ from `scripts/check-type-check-coverage.mjs`. Coverage goes 35 -> 36 of 45 and
160
+ outstanding errors 46 -> 32.
161
+
162
+ Verified the gate genuinely covers the package now, rather than trusting the
163
+ green: injecting a type error into `runner/src/App.tsx` makes `pnpm type-check`
164
+ fail with `Failed: @object-ui/runner#type-check`, which was impossible before
165
+ this change.
166
+
167
+ - Updated dependencies [7b21891]
168
+ - Updated dependencies [952b978]
169
+ - Updated dependencies [de5e40c]
170
+ - Updated dependencies [aa88056]
171
+ - Updated dependencies [1767124]
172
+ - Updated dependencies [8ecf5a6]
173
+ - Updated dependencies [7b35e4b]
174
+ - Updated dependencies [8fb1295]
175
+ - Updated dependencies [e16ed2d]
176
+ - Updated dependencies [f9bbddb]
177
+ - Updated dependencies [dfd3705]
178
+ - Updated dependencies [c77108c]
179
+ - Updated dependencies [2735de6]
180
+ - Updated dependencies [c19ac11]
181
+ - Updated dependencies [6dee2cb]
182
+ - Updated dependencies [c7cff19]
183
+ - Updated dependencies [ba73a02]
184
+ - Updated dependencies [cd09a7b]
185
+ - Updated dependencies [f1abf0e]
186
+ - Updated dependencies [f05b84e]
187
+ - Updated dependencies [2f947e4]
188
+ - Updated dependencies [7d46648]
189
+ - Updated dependencies [6e8fd3c]
190
+ - Updated dependencies [9b53d72]
191
+ - Updated dependencies [662bdf9]
192
+ - Updated dependencies [059a052]
193
+ - Updated dependencies [53642d4]
194
+ - Updated dependencies [8aae006]
195
+ - Updated dependencies [c6cfdf1]
196
+ - Updated dependencies [d147a13]
197
+ - Updated dependencies [c6aaed8]
198
+ - Updated dependencies [dc334da]
199
+ - @object-ui/components@17.0.0
200
+ - @object-ui/react@17.0.0
201
+ - @object-ui/plugin-charts@17.0.0
202
+ - @object-ui/types@17.0.0
203
+ - @object-ui/core@17.0.0
204
+ - @object-ui/plugin-kanban@17.0.0
205
+
206
+ ## 16.1.0
207
+
208
+ ### Minor Changes
209
+
210
+ - 62b9ab5: feat(data): unify master-detail saves behind `DataSource.batchTransaction`, isolate the non-atomic fallback in the adapter (#2679)
211
+
212
+ Master-detail saves (`MasterDetailForm`, `LineItemsPanel`) now always persist
213
+ through `dataSource.batchTransaction(operations)` — one ordered cross-object
214
+ operation list, with `{ $ref: <op index> }` linking a child to a parent created
215
+ in the same batch. The form no longer contains any client-side orchestration or
216
+ best-effort compensation-delete; that atomicity anti-pattern is gone from the UI
217
+ layer (framework #1604 / framework ADR-0034 item 4).
218
+
219
+ - **`@object-ui/types`** — `batchTransaction?` is now a first-class (optional)
220
+ method on the `DataSource` contract, typed via `BatchTransactionOperation` /
221
+ `BatchRef`. Replaces the previous `(dataSource as any).batchTransaction`
222
+ method-sniffing.
223
+ - **`@object-ui/core`** — new `emulateBatchTransaction(dataSource, operations)`
224
+ (sequential writes, `$ref` resolution, best-effort reverse-order compensation)
225
+ and `runBatchTransaction(dataSource, operations)` (prefers the adapter's method,
226
+ emulates otherwise). `ApiDataSource` / `ValueDataSource` implement
227
+ `batchTransaction` via the emulation.
228
+ - **`@object-ui/data-objectstack`** — `ObjectStackAdapter.batchTransaction` uses
229
+ the server's atomic `POST /api/v1/batch`, prefers the typed
230
+ `client.data.batchTransaction` SDK method when the installed client exposes it,
231
+ and degrades to the client-side emulation ONLY when the endpoint is missing
232
+ (404/405) or the runtime can't do transactions (501). Real errors (400/401/403/
233
+ 409/500) still surface. This is the isolated, tested home of the non-atomic
234
+ fallback.
235
+ - **`@object-ui/plugin-form`** — removed `applyDetail` / `createMany` /
236
+ `ApplyDetailResult` from `masterDetailTx.ts`; `MasterDetailForm` and
237
+ `LineItemsPanel` build ops and call `runBatchTransaction`. `LineItemsPanel`
238
+ saves are now atomic on a capable backend, with the rollup folded into the same
239
+ batch.
240
+
241
+ No behavior change on a current ObjectStack backend (it has `/api/v1/batch`);
242
+ older/limited backends keep a working — now clearly non-atomic — save path.
243
+
244
+ ### Patch Changes
245
+
246
+ - Updated dependencies [1c8935a]
247
+ - Updated dependencies [8b8b744]
248
+ - Updated dependencies [7cf4051]
249
+ - Updated dependencies [803558e]
250
+ - Updated dependencies [2e7d7f0]
251
+ - Updated dependencies [ef14f69]
252
+ - Updated dependencies [94d4876]
253
+ - Updated dependencies [69fa5d1]
254
+ - Updated dependencies [549c67d]
255
+ - Updated dependencies [ebe6494]
256
+ - Updated dependencies [2b17339]
257
+ - Updated dependencies [31b77d4]
258
+ - Updated dependencies [6d4fbe6]
259
+ - Updated dependencies [0a3710b]
260
+ - Updated dependencies [62b9ab5]
261
+ - Updated dependencies [1629313]
262
+ - Updated dependencies [29c6040]
263
+ - Updated dependencies [faebac3]
264
+ - Updated dependencies [2331ac9]
265
+ - Updated dependencies [199fa83]
266
+ - Updated dependencies [eee4ded]
267
+ - @object-ui/core@16.1.0
268
+ - @object-ui/types@16.1.0
269
+ - @object-ui/react@16.1.0
270
+ - @object-ui/components@16.1.0
271
+ - @object-ui/plugin-kanban@16.1.0
272
+ - @object-ui/plugin-charts@16.1.0
273
+
3
274
  ## 16.0.0
4
275
 
5
276
  ### Patch Changes