@reventlessdev/reventless-spec 3.0.0-alpha.82 → 3.0.0-alpha.84
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 +14 -0
- package/package.json +1 -1
- package/src/components/Plugin.res +35 -0
- package/src/components/Plugin.res.mjs +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# 3.0.0-alpha.84 (2026-07-29)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **plugin:** why a read model is named by that field ([699ef8e](https://github.com/ReventlessDev/reventless-core/commit/699ef8e72f1b1d82fb04672739e5e4a8db61ae9a))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# 3.0.0-alpha.83 (2026-07-28)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **platform:** provision object stores from the fields that declare them ([b5e2a1e](https://github.com/ReventlessDev/reventless-core/commit/b5e2a1ec88099941c113e4963f9c4b346b96b0d6))
|
|
18
|
+
|
|
19
|
+
|
|
6
20
|
# 3.0.0-alpha.82 (2026-07-28)
|
|
7
21
|
|
|
8
22
|
### Features
|
package/package.json
CHANGED
|
@@ -218,6 +218,26 @@ type queryableDef = {
|
|
|
218
218
|
*/
|
|
219
219
|
searchableFields: array<string>,
|
|
220
220
|
/**
|
|
221
|
+
Which rung of the `labelField` ladder produced it, so a consumer with a name
|
|
222
|
+
rule of its own can tell a declaration from a guess before ranking the two:
|
|
223
|
+
|
|
224
|
+
- `"annotation"` — a `@displayName` spec. The author said which field names the
|
|
225
|
+
record; nothing a client infers locally outranks it.
|
|
226
|
+
- `"convention"` — a field literally named `name`/`title`/`label`/`displayName`.
|
|
227
|
+
A guess, and the one guess a client can independently arrive at.
|
|
228
|
+
- `"position"` — the first candidate in declaration order. A guess, and a fact
|
|
229
|
+
only this side knows; a client's own conventional-name rule is the better
|
|
230
|
+
answer where the two differ.
|
|
231
|
+
- `"fallback"` — no candidate at all, so `labelField` is `"id"`. The state
|
|
232
|
+
saying it has no human-readable field.
|
|
233
|
+
|
|
234
|
+
`None` means not stated — defs persisted before this field existed, and
|
|
235
|
+
hand-rolled defs that decline to say. Distinct from `Some("fallback")`, which
|
|
236
|
+
is this side stating that it looked. js_nullable for the same JSON-safety
|
|
237
|
+
reason as `statusField`.
|
|
238
|
+
*/
|
|
239
|
+
labelFieldSource: @s.matches(stringOptionSchema) option<string>,
|
|
240
|
+
/**
|
|
221
241
|
Name of the state field whose value identifies the row's lifecycle status, used
|
|
222
242
|
by AutoUI together with `commandDef.allowedStates` to filter the per-row command
|
|
223
243
|
menu. Resolution order (codegen): (1) field annotated `@status`; (2) a field
|
|
@@ -374,6 +394,21 @@ type pluginStructure = {
|
|
|
374
394
|
// read as []). js_nullable keeps it JSON-safe inside union variant payloads.
|
|
375
395
|
extensionPoints: @s.matches(extensionPointDefArrayOptionSchema)
|
|
376
396
|
option<array<extensionPointDef>>,
|
|
397
|
+
/**
|
|
398
|
+
The object stores this plugin's fields declare they need, deduplicated and
|
|
399
|
+
fully qualified as `{plugin}.{store}`.
|
|
400
|
+
|
|
401
|
+
A field typed as a storage ref states a *requirement*: the deployment needs
|
|
402
|
+
that store to exist. Collecting the requirement here is what lets it be read
|
|
403
|
+
without re-walking every component's schema — the same reason
|
|
404
|
+
`producedEventTypes` is carried rather than recomputed.
|
|
405
|
+
|
|
406
|
+
Qualified even for the common same-plugin case, so one entry has one shape
|
|
407
|
+
and the string is directly the store's identity. Optional and js_nullable for
|
|
408
|
+
the same reason as `extensionPoints`: definitions persisted before this field
|
|
409
|
+
existed still decode (absent → None, read as []).
|
|
410
|
+
*/
|
|
411
|
+
requiredStores: @s.matches(stringArrayOptionSchema) option<array<string>>,
|
|
377
412
|
}
|
|
378
413
|
|
|
379
414
|
let pluginStructureOptionSchema = _jsNullable(pluginStructureSchema, ())
|
|
@@ -114,6 +114,7 @@ let queryableDefSchema = S.schema(s => ({
|
|
|
114
114
|
linkedWriteSide: s.m(S.array(S.string)),
|
|
115
115
|
labelField: s.m(S.string),
|
|
116
116
|
searchableFields: s.m(S.array(S.string)),
|
|
117
|
+
labelFieldSource: s.m(stringOptionSchema),
|
|
117
118
|
statusField: s.m(stringOptionSchema),
|
|
118
119
|
visibility: s.m(stringOptionSchema),
|
|
119
120
|
chapter: s.m(stringOptionSchema)
|
|
@@ -186,7 +187,8 @@ let pluginStructureSchema = S.schema(s => ({
|
|
|
186
187
|
outboundTranslationSlices: s.m(S.array(outboundTranslationSliceDefSchema)),
|
|
187
188
|
inboundTranslationSlices: s.m(S.array(inboundTranslationSliceDefSchema)),
|
|
188
189
|
extensions: s.m(S.array(extensionDefSchema)),
|
|
189
|
-
extensionPoints: s.m(extensionPointDefArrayOptionSchema)
|
|
190
|
+
extensionPoints: s.m(extensionPointDefArrayOptionSchema),
|
|
191
|
+
requiredStores: s.m(stringArrayOptionSchema)
|
|
190
192
|
}));
|
|
191
193
|
|
|
192
194
|
let pluginStructureOptionSchema = SuryResMjs.js_nullable(pluginStructureSchema);
|