@object-ui/runner 16.1.0 → 17.2.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,305 @@
1
1
  # @object-ui/runner
2
2
 
3
+ ## 17.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 4a51e77: Stop declaring 14 symbols across ten packages under names `@objectstack/spec`
8
+ owns (objectui#3161, objectstack#4115 batch 7 — the long tail, one or two
9
+ entries per package). All ten packages leave the ledger, which drops from 17
10
+ collisions across 11 packages to 3 across 1.
11
+
12
+ **Renamed exports** — in every case the spec exports the same name for a
13
+ _different_ thing, so the old name was a mis-description rather than a dialect:
14
+
15
+ | package | was | now | what the spec's same-named export is |
16
+ | :------------------------- | :--------------------------------- | :--------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- |
17
+ | `@object-ui/fields` | `FieldWidgetProps` | `FieldWidgetComponentProps` | the DECLARED field-widget plugin props contract (a zod object; `field.type` is the `FieldType` enum, `readonly`/`required` carry defaults) |
18
+ | `@object-ui/layout` | `PageHeaderProps` | `PageHeaderComponentProps` | the authored `page:header` node — a zod schema of `title`, `subtitle`, an icon NAME, `breadcrumb`, `actions: string[]` |
19
+ | `@object-ui/layout` | `Page` | `PageNodeRenderer` | the authored page metadata DOCUMENT (`name`, `label`, `type`, `regions`) |
20
+ | `@object-ui/plugin-detail` | `ObjectFieldLike` | `ObjectDefFieldLike` | the i18n duck type `translateObject` walks (`help`/`description`, plus `[key: string]: any`) |
21
+ | `@object-ui/plugin-grid` | `ColumnSummaryConfig` | `ColumnSummarySetting` | the OBJECT form of `ListColumn.summary` **only** — the local one was the whole union, shorthand included |
22
+ | `@object-ui/plugin-grid` | `isMultiValueField` | `hasMultiValueShape` | the spec's classifier, which requires a def with a `type`; the local one is called with `undefined` |
23
+ | `@object-ui/collaboration` | `RealtimeConfig` | `RealtimeSubscriptionConfig` | the app's realtime DECLARATION (`enabled`, `transport`, `subscriptions[]`) |
24
+ | `@object-ui/plugin-charts` | `ChartConfig` | `ChartContainerConfig` | the authored chart document (`type`, `xAxis`, `series`, `showLegend`, …) |
25
+ | `@object-ui/plugin-form` | `FormSection` / `FormSectionProps` | `FormSectionContainer` / `FormSectionContainerProps` | the authored form-section metadata (`name`, `pane`, `visibleWhen`, `fields`) |
26
+ | `@object-ui/providers` | `Theme` | `ThemePreference` | a whole theme DOCUMENT (`name`, `label`, `colors`, `typography`) |
27
+ | `@object-ui/runner` | `App` (default export) | `RunnerApp` | the authored application metadata type **and** the `App.create()` builder |
28
+ | `@object-ui/sdui-parser` | `ValidationResult` | `ManifestValidationResult` | plugin-manifest validation (`{ valid, errors?, warnings? }`), exported from both `kernel` and `contracts` |
29
+
30
+ `ManifestValidationResult` follows the `<what was validated>Validation<Error|Result>`
31
+ convention registered on objectstack#4115 (`@object-ui/core` took
32
+ `SchemaNodeValidationResult` in batch 4). `PageHeaderComponentProps` deliberately
33
+ reuses the name `@object-ui/app-shell` already chose for its own header props in
34
+ batch 3, so one concept does not acquire two dialect names one package apart.
35
+
36
+ **Now derived from the spec instead of hand-written:**
37
+
38
+ - `@object-ui/fields` — `isFileIdToken` is re-exported from
39
+ `@objectstack/spec/data`. The local copy was character-for-character identical
40
+ to the spec's function while its comment said it "mirrors" it, so every
41
+ behaviour test passed and only reference identity could tell the two apart.
42
+ The regex is a wire decision: widening it server-side while a copy here kept
43
+ the old bound would make every new id read as "not a reference", and the
44
+ widget would submit the legacy inline blob to a backend expecting a reference.
45
+ - `@object-ui/plugin-detail` — `FeedFilterMode` is re-exported from
46
+ `@objectstack/spec/data`, in a file that already imported the sibling
47
+ `FeedItemType` from the spec.
48
+ - `@object-ui/plugin-grid` — the eleven-member aggregation union is now the
49
+ spec's `ColumnSummary` enum, so the total `Record<ColumnSummaryType, string>`
50
+ label map turns a member the spec adds into a compile error instead of a
51
+ blank footer cell. `ColumnSummarySetting` is `NonNullable<ListColumn['summary']>`,
52
+ i.e. whatever forms the spec itself accepts. `hasMultiValueShape` delegates to
53
+ the spec's `isMultiValueField` rather than re-deriving it from
54
+ `MULTI_OPTION_TYPES` / `MULTI_CAPABLE_TYPES`.
55
+ - `@object-ui/providers` — `ThemePreference` is the spec's `ThemeMode` union
56
+ plus the one legacy `'system'` spelling this provider still honours for stored
57
+ preferences, read off the schema's own `_zod` carrier so the package takes no
58
+ zod dependency.
59
+
60
+ `@objectstack/spec` moves from `devDependencies` to `dependencies` in
61
+ `@object-ui/fields` (it re-exports a runtime function) and `@object-ui/providers`
62
+ (its public `.d.ts` now references the spec).
63
+
64
+ Scored `minor`, not `major`, per this repo's fixed-group rule — objectui's major
65
+ tracks `@objectstack`, so breaking changes of our own ship as minor with the
66
+ semantics spelled out above (see AGENTS.md §版本号策略). A `major` here would carry
67
+ all 39 packages of the fixed group to `18.0.0` and off objectstack's 17.x line.
68
+
69
+ ### Patch Changes
70
+
71
+ - Updated dependencies [4ae0ac4]
72
+ - Updated dependencies [696e3c1]
73
+ - Updated dependencies [bca45cc]
74
+ - Updated dependencies [a889e31]
75
+ - Updated dependencies [09d30a4]
76
+ - Updated dependencies [4bf612c]
77
+ - Updated dependencies [335041c]
78
+ - Updated dependencies [b414983]
79
+ - Updated dependencies [256f8cc]
80
+ - Updated dependencies [d9668a7]
81
+ - Updated dependencies [cb82705]
82
+ - Updated dependencies [f572849]
83
+ - Updated dependencies [4a51e77]
84
+ - Updated dependencies [f6e8d78]
85
+ - Updated dependencies [ea96284]
86
+ - Updated dependencies [d3584c6]
87
+ - Updated dependencies [a8ad6c0]
88
+ - Updated dependencies [444457c]
89
+ - Updated dependencies [850033c]
90
+ - Updated dependencies [022e4c3]
91
+ - Updated dependencies [009e25d]
92
+ - Updated dependencies [726b89c]
93
+ - @object-ui/types@17.2.0
94
+ - @object-ui/components@17.2.0
95
+ - @object-ui/core@17.2.0
96
+ - @object-ui/react@17.2.0
97
+ - @object-ui/plugin-charts@17.2.0
98
+ - @object-ui/plugin-kanban@17.2.0
99
+
100
+ ## 17.1.0
101
+
102
+ ### Patch Changes
103
+
104
+ - Updated dependencies [62311b6]
105
+ - Updated dependencies [fc0272a]
106
+ - Updated dependencies [9e7349e]
107
+ - Updated dependencies [8864971]
108
+ - Updated dependencies [c785740]
109
+ - Updated dependencies [b41f401]
110
+ - Updated dependencies [19e9fa0]
111
+ - Updated dependencies [95b7214]
112
+ - Updated dependencies [7d9734d]
113
+ - Updated dependencies [6ae818e]
114
+ - Updated dependencies [f1c04b6]
115
+ - Updated dependencies [9eb932b]
116
+ - Updated dependencies [746dd00]
117
+ - Updated dependencies [aebfa4f]
118
+ - Updated dependencies [38ca8be]
119
+ - Updated dependencies [68ef584]
120
+ - Updated dependencies [4952edf]
121
+ - Updated dependencies [7f0252e]
122
+ - Updated dependencies [c4d7b20]
123
+ - Updated dependencies [c769d3d]
124
+ - Updated dependencies [7639a61]
125
+ - Updated dependencies [94e63ef]
126
+ - Updated dependencies [c735bf7]
127
+ - Updated dependencies [02aef0c]
128
+ - Updated dependencies [6f29aa5]
129
+ - Updated dependencies [c4db402]
130
+ - Updated dependencies [5319bf1]
131
+ - Updated dependencies [49e5671]
132
+ - Updated dependencies [9a04d25]
133
+ - Updated dependencies [b5b97e2]
134
+ - Updated dependencies [f59f2c1]
135
+ - Updated dependencies [07de839]
136
+ - Updated dependencies [2a40b5e]
137
+ - Updated dependencies [df613fa]
138
+ - Updated dependencies [4874117]
139
+ - Updated dependencies [ad0183a]
140
+ - Updated dependencies [ce08d55]
141
+ - Updated dependencies [eb4b740]
142
+ - Updated dependencies [5b084eb]
143
+ - Updated dependencies [aa1240a]
144
+ - Updated dependencies [2374a49]
145
+ - Updated dependencies [390c071]
146
+ - Updated dependencies [d10f526]
147
+ - Updated dependencies [2d5d594]
148
+ - Updated dependencies [ea7f477]
149
+ - Updated dependencies [379728f]
150
+ - Updated dependencies [7f23cd0]
151
+ - Updated dependencies [0ded602]
152
+ - Updated dependencies [24e0e0a]
153
+ - Updated dependencies [3a6cf24]
154
+ - Updated dependencies [aa35561]
155
+ - Updated dependencies [03bd53b]
156
+ - Updated dependencies [3c1f321]
157
+ - Updated dependencies [a045a32]
158
+ - Updated dependencies [912496d]
159
+ - Updated dependencies [80edbd4]
160
+ - Updated dependencies [9867281]
161
+ - @object-ui/core@17.1.0
162
+ - @object-ui/components@17.1.0
163
+ - @object-ui/react@17.1.0
164
+ - @object-ui/types@17.1.0
165
+ - @object-ui/plugin-charts@17.1.0
166
+ - @object-ui/plugin-kanban@17.1.0
167
+
168
+ ## 17.0.0
169
+
170
+ ### Patch Changes
171
+
172
+ - b076050: fix(console,runner): the approvals inbox renders against one ticking clock, and both packages now run ESLint
173
+
174
+ `apps/console` and `packages/runner` had no `lint` script, so `turbo run lint`
175
+ skipped them silently and their 17 ESLint **errors** had never been seen
176
+ (#2923 declared them as DEBT; this closes the gap). Both now carry
177
+ `"lint": "eslint ."` and the `DEBT` list in `scripts/check-lint-coverage.mjs`
178
+ is empty — every workspace package is linted.
179
+
180
+ What the errors actually were, once read one by one:
181
+
182
+ - **8x `react-hooks/purity` — real, and user-visible.** The approvals inbox
183
+ read `Date.now()` mid-render for every age tint, "5m ago" label and SLA chip.
184
+ Render must be pure: the output depended on when React happened to render, so
185
+ it disagreed with itself under StrictMode's double render and then **froze** —
186
+ an inbox left open kept saying "just now" and an SLA countdown never counted
187
+ down. The page now renders against a single `now` held in state and advanced
188
+ once a minute (the finest granularity anything here displays), so render is a
189
+ pure function of props+state _and_ the figures actually tick.
190
+ - Alongside that, `sla_due_at` is now parsed through a guard. A due date the
191
+ backend sends in a shape `Date.parse` can't read used to render as
192
+ "SLA NaNh left"; it now renders nothing.
193
+ - **1x `react-hooks/static-components` — real.** `StatusBadge` was declared
194
+ inside `ApprovalsInboxPage`, making it a brand-new component type on every
195
+ render, so React unmounted and remounted every status chip in the table each
196
+ time the page re-rendered. Hoisted to module scope, with the translated label
197
+ passed as a prop.
198
+ - **6x `react-hooks/static-components` — false positives** (3 in the console's
199
+ settings pages, 3 in the runner's `LayoutRenderer`). All six render the result
200
+ of `getIcon`/`getLazyIcon`, which memoises per name in a module-level cache —
201
+ the component reference is stable across renders and nothing is created during
202
+ render. The rule cannot see through the call, so these carry the same targeted
203
+ `eslint-disable-next-line` + justification the repo already uses at a dozen
204
+ icon-registry sites, and the resolvers themselves now say so in a comment.
205
+ (Verified rather than assumed: typing into a settings field keeps focus and
206
+ every character, so no state was ever being reset there.)
207
+ - **2 minor.** A dead `token` initializer on the console's auth preflight path
208
+ (`no-useless-assignment` — read, not blind-deleted: no intended write was
209
+ missing, every path out of the try/catch either assigns or returns), and a
210
+ `prefer-const` in the SDUI workbench preview.
211
+
212
+ - b39f4b3: fix(runner): type-check the package at all, and fix the `DataSource` contract violation that hid behind a broken import (#2917)
213
+
214
+ `@object-ui/runner` was the worst-covered package in the repo: `build` is
215
+ `vite build` (transpile only), it had no `type-check` script, and — uniquely —
216
+ **no `tsconfig.json` at all**. Nothing had ever type-checked it, despite it being
217
+ a published package.
218
+
219
+ **It was not broken at runtime.** The two bad imports were `import type`, so they
220
+ were erased before they could fail, and the one value import
221
+ (`emulateBatchTransaction`) does exist. `MockDataSource` is also unreferenced
222
+ anywhere in the repo. So this is a correctness and reference-quality fix, not an
223
+ outage.
224
+
225
+ **What the missing check actually hid.** `DataSource` and
226
+ `BatchTransactionOperation` were imported from `@object-ui/core`, which does not
227
+ export them — they live in `@object-ui/types`. Because that import never
228
+ resolved, `class MockDataSource implements DataSource` was silently a no-op, and
229
+ three separate commits maintained the class _as if_ it were being verified
230
+ (`62b9ab510` added `batchTransaction`, `09d9669c7` made `getObjectSchema`
231
+ required, `5527388b0` added input validation). With the `implements` clause
232
+ inert, a real contract violation survived all three:
233
+
234
+ ```ts
235
+ async find(resource: string, params?: any): Promise<any[]> { return []; }
236
+ ```
237
+
238
+ `DataSource.find` returns a `QueryResult` envelope, not a bare array. Anyone
239
+ copying this mock as the starting point for their own adapter — which is exactly
240
+ what its doc comment invites — would hand every consumer an array where `.data`
241
+ and `.total` are `undefined`. Now typed as `Promise<QueryResult>` and returning
242
+ `{ data: [], total: 0 }`.
243
+
244
+ Also in this change:
245
+
246
+ - `packages/runner/tsconfig.json` added, mirroring `apps/console` rather than the
247
+ library packages: `runner` is a Vite app, so it wants `bundler` resolution,
248
+ `allowImportingTsExtensions` (for `./App.tsx`) and `types: ["vite/client"]`
249
+ (for `import.meta.glob` in `MetadataLoader` and the `./index.css` side-effect
250
+ import). Keeping it standalone instead of extending the root config also means
251
+ it never inherits the root `paths`, so workspace deps resolve through built
252
+ `.d.ts` and the TS6059 `rootDir` class of error cannot appear.
253
+ - unused parameters prefixed with `_` (6x in `mockDataSource`), and an unused
254
+ `Circle` icon import dropped from `LayoutRenderer`.
255
+ - `"type-check": "tsc --noEmit"` added, and the package's `DEBT` entry deleted
256
+ from `scripts/check-type-check-coverage.mjs`. Coverage goes 35 -> 36 of 45 and
257
+ outstanding errors 46 -> 32.
258
+
259
+ Verified the gate genuinely covers the package now, rather than trusting the
260
+ green: injecting a type error into `runner/src/App.tsx` makes `pnpm type-check`
261
+ fail with `Failed: @object-ui/runner#type-check`, which was impossible before
262
+ this change.
263
+
264
+ - Updated dependencies [7b21891]
265
+ - Updated dependencies [952b978]
266
+ - Updated dependencies [de5e40c]
267
+ - Updated dependencies [aa88056]
268
+ - Updated dependencies [1767124]
269
+ - Updated dependencies [8ecf5a6]
270
+ - Updated dependencies [7b35e4b]
271
+ - Updated dependencies [8fb1295]
272
+ - Updated dependencies [e16ed2d]
273
+ - Updated dependencies [f9bbddb]
274
+ - Updated dependencies [dfd3705]
275
+ - Updated dependencies [c77108c]
276
+ - Updated dependencies [2735de6]
277
+ - Updated dependencies [c19ac11]
278
+ - Updated dependencies [6dee2cb]
279
+ - Updated dependencies [c7cff19]
280
+ - Updated dependencies [ba73a02]
281
+ - Updated dependencies [cd09a7b]
282
+ - Updated dependencies [f1abf0e]
283
+ - Updated dependencies [f05b84e]
284
+ - Updated dependencies [2f947e4]
285
+ - Updated dependencies [7d46648]
286
+ - Updated dependencies [6e8fd3c]
287
+ - Updated dependencies [9b53d72]
288
+ - Updated dependencies [662bdf9]
289
+ - Updated dependencies [059a052]
290
+ - Updated dependencies [53642d4]
291
+ - Updated dependencies [8aae006]
292
+ - Updated dependencies [c6cfdf1]
293
+ - Updated dependencies [d147a13]
294
+ - Updated dependencies [c6aaed8]
295
+ - Updated dependencies [dc334da]
296
+ - @object-ui/components@17.0.0
297
+ - @object-ui/react@17.0.0
298
+ - @object-ui/plugin-charts@17.0.0
299
+ - @object-ui/types@17.0.0
300
+ - @object-ui/core@17.0.0
301
+ - @object-ui/plugin-kanban@17.0.0
302
+
3
303
  ## 16.1.0
4
304
 
5
305
  ### Minor Changes