@reventlessdev/reventless-local 3.0.0-alpha.247 → 3.0.0-alpha.248

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
@@ -3,6 +3,14 @@
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.248 (2026-09-08)
7
+
8
+ ### Features
9
+
10
+ * a slice folder is named for its kind, without the Slice ([a400555](https://github.com/ReventlessDev/reventless-core/commit/a400555121b023823983ebe846e99cda27063c1f))
11
+ * **core:** a reference names a row and shows its picture ([2b40d04](https://github.com/ReventlessDev/reventless-core/commit/2b40d0418bba2bf83463f446e94e372ea0c9898c))
12
+
13
+
6
14
  # 3.0.0-alpha.247 (2026-09-07)
7
15
 
8
16
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-local",
3
- "version": "3.0.0-alpha.247",
3
+ "version": "3.0.0-alpha.248",
4
4
  "description": "Local platform for Reventless (in-memory or SQLite backend, for development and testing without AWS)",
5
5
  "license": "Apache-2.0",
6
6
  "bin": {
@@ -37,16 +37,16 @@
37
37
  "@reventlessdev/rescript-effect": "0.1.0-alpha.32",
38
38
  "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.27",
39
39
  "@reventlessdev/rescript-mcp-sdk": "1.0.0-alpha.21",
40
- "@reventlessdev/rescript-jest": "1.0.0-alpha.10",
41
40
  "@reventlessdev/rescript-node": "2.0.0-alpha.9",
42
- "@reventlessdev/reventless-core": "3.0.0-alpha.258",
43
- "@reventlessdev/reventless-gwt": "1.0.0-alpha.205",
44
- "@reventlessdev/reventless-postgres": "3.0.0-alpha.122",
45
- "@reventlessdev/reventless-infra": "3.0.0-alpha.159",
46
- "@reventlessdev/reventless-seed": "1.0.0-alpha.19",
47
- "@reventlessdev/reventless-graphql-server": "1.0.0-alpha.106",
41
+ "@reventlessdev/rescript-jest": "1.0.0-alpha.10",
48
42
  "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.19",
49
- "@reventlessdev/reventless-spec": "3.0.0-alpha.131"
43
+ "@reventlessdev/reventless-core": "3.0.0-alpha.259",
44
+ "@reventlessdev/reventless-gwt": "1.0.0-alpha.206",
45
+ "@reventlessdev/reventless-graphql-server": "1.0.0-alpha.107",
46
+ "@reventlessdev/reventless-seed": "1.0.0-alpha.19",
47
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.132",
48
+ "@reventlessdev/reventless-infra": "3.0.0-alpha.160",
49
+ "@reventlessdev/reventless-postgres": "3.0.0-alpha.123"
50
50
  },
51
51
  "devDependencies": {
52
52
  "rescript": "12.3.0",
@@ -28,7 +28,7 @@ import * as Api_Naming$ReventlessCore from "@reventlessdev/reventless-core/src/c
28
28
  import * as PluginSpec$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginSpec.res.mjs";
29
29
  import * as UserStore$ReventlessLocal from "./adapter/Auth/UserStore.res.mjs";
30
30
  import * as TestRunner$ReventlessLocal from "./test/TestRunner.res.mjs";
31
- import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs";
31
+ import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateView/UiFragments.res.mjs";
32
32
  import * as CommandTopic$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic.res.mjs";
33
33
  import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src/util/EffectLogger.res.mjs";
34
34
  import * as ShellConfig$ReventlessLocal from "./ShellConfig.res.mjs";
@@ -60,7 +60,7 @@ import * as LocalClonerRunner$ReventlessLocal from "./adapter/Cloner/LocalCloner
60
60
  import * as PluginBaseFragment$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/api/PluginBaseFragment.res.mjs";
61
61
  import * as ProjectionPending$ReventlessLocal from "./adapter/ProjectionPending.res.mjs";
62
62
  import * as ReadModel_Builder$ReventlessLocal from "./components/ReadModel_Builder.res.mjs";
63
- import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs";
63
+ import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChange/UiFragmentRegistry.res.mjs";
64
64
  import * as LocalEvents_Server$ReventlessLocal from "./adapter/Api/LocalEvents_Server.res.mjs";
65
65
  import * as LocalPlatformStart$ReventlessLocal from "./LocalPlatformStart.res.mjs";
66
66
  import * as PlatformMCP_Server$ReventlessLocal from "./adapter/PlatformMCP_Server.res.mjs";
@@ -76,7 +76,7 @@ import * as ProjectionCheckpoint$ReventlessLocal from "./adapter/ProjectionCheck
76
76
  import * as ExtensionPointMapping$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/ExtensionPointMapping.res.mjs";
77
77
  import * as LocalGeocodeResolvers$ReventlessLocal from "./adapter/LocalGeocodeResolvers.res.mjs";
78
78
  import * as LocalPlatformRegistry$ReventlessLocal from "./LocalPlatformRegistry.res.mjs";
79
- import * as UiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res.mjs";
79
+ import * as UiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateView/UiFragments_Projection.res.mjs";
80
80
  import * as EventLogStorage_Sqlite$ReventlessLocal from "./adapter/EventLog/EventLogStorage_Sqlite.res.mjs";
81
81
  import * as ExtensionPoint_Builder$ReventlessLocal from "./components/ExtensionPoint_Builder.res.mjs";
82
82
  import * as PlatformGraphQL_Server$ReventlessLocal from "./adapter/PlatformGraphQL_Server.res.mjs";
@@ -94,7 +94,7 @@ import * as StateChangeSlice_Builder$ReventlessLocal from "./components/StateCha
94
94
  import * as DcbEventLogStorage_Sqlite$ReventlessLocal from "./adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs";
95
95
  import * as LocalEventCollectorChannel$ReventlessLocal from "./adapter/EventCollector/LocalEventCollectorChannel.res.mjs";
96
96
  import * as PluginRuntime_Builder_Micro$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs";
97
- import * as UiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry_Behavior.res.mjs";
97
+ import * as UiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChange/UiFragmentRegistry_Behavior.res.mjs";
98
98
  import * as Platform_PluginStructuresApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_PluginStructuresApi.res.mjs";
99
99
  import * as EventHistoryResolvers_GraphQL$ReventlessLocal from "./adapter/EventHistory/EventHistoryResolvers_GraphQL.res.mjs";
100
100
  import * as InboundTranslationSlice_Builder$ReventlessLocal from "./components/InboundTranslationSlice_Builder.res.mjs";
@@ -190,6 +190,14 @@ module Make = (Bus: LocalBus.T) => {
190
190
  ->Option.flatMap(Reventless.StateAnnotations.getSpec)
191
191
  ->Option.flatMap(spec => spec.retired)
192
192
 
193
+ // The picture a reference to one of these rows shows it by, derived once for
194
+ // every backend in `Reventless.RowImage`. Read per request for the same
195
+ // reason the two above are.
196
+ let imageSourceOf = () =>
197
+ Plugin_Helpers.stateSchemaRegistry
198
+ ->Dict.get(name)
199
+ ->Option.flatMap(Reventless.RowImage.sourceFrom)
200
+
193
201
  // `includeRetired` is the caller asking; `decideRetired` decides whether the
194
202
  // asking counts. Read here rather than inside the decision so the argument
195
203
  // stays an argument — the door reports what was asked, the classifier says
@@ -500,10 +508,19 @@ module Make = (Bus: LocalBus.T) => {
500
508
  // A view with no label field resolves to its id, which is
501
509
  // what `labelField`'s own fallback already decided.
502
510
  ->Option.getOr(id)
511
+ // The picture travels with the name, so a retired row that
512
+ // keeps one keeps the other: an archived product reads as
513
+ // itself on the order that bought it.
514
+ let image =
515
+ switch (imageSourceOf(), item->JSON.Decode.object) {
516
+ | (Some(source), Some(d)) => d->Reventless.RowImage.refFrom(source)
517
+ | _ => None
518
+ }
503
519
  Some(
504
520
  Dict.fromArray([
505
521
  ("id", JSON.Encode.string(id)),
506
522
  ("label", JSON.Encode.string(label)),
523
+ ("image", image->Option.mapOr(JSON.Encode.null, JSON.Encode.string)),
507
524
  ("retired", JSON.Encode.bool(retired)),
508
525
  (
509
526
  "retiredState",
@@ -10,6 +10,7 @@ import * as Stdlib_Nullable from "@rescript/runtime/lib/es6/Stdlib_Nullable.js";
10
10
  import * as Owner$Reventless from "@reventlessdev/reventless-spec/src/components/Owner.res.mjs";
11
11
  import * as Primitive_object from "@rescript/runtime/lib/es6/Primitive_object.js";
12
12
  import * as Identity$Reventless from "@reventlessdev/reventless-spec/src/types/Identity.res.mjs";
13
+ import * as RowImage$Reventless from "@reventlessdev/reventless-spec/src/semantic/RowImage.res.mjs";
13
14
  import * as ReadModel$Reventless from "@reventlessdev/reventless-spec/src/components/ReadModel.res.mjs";
14
15
  import * as OwnerScope$Reventless from "@reventlessdev/reventless-spec/src/types/OwnerScope.res.mjs";
15
16
  import * as Api_Ids$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/Api_Ids.res.mjs";
@@ -106,6 +107,7 @@ function Make(Bus) {
106
107
  return Stdlib_Option.mapOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(item), d => d[field]), Stdlib_JSON.Decode.string), false, v => v === required);
107
108
  };
108
109
  let retiredSpecOf = () => Stdlib_Option.flatMap(Stdlib_Option.flatMap(Plugin_Helpers$ReventlessCore.stateSchemaRegistry[name], StateAnnotations$Reventless.getSpec), spec => spec.retired);
110
+ let imageSourceOf = () => Stdlib_Option.flatMap(Plugin_Helpers$ReventlessCore.stateSchemaRegistry[name], RowImage$Reventless.sourceFrom);
109
111
  let askedForRetired = args => Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["includeRetired"]), Stdlib_JSON.Decode.bool), false);
110
112
  let retiredDecision = (ctx, args) => OwnerScope$Reventless.decideRetired(extractIdentity(ctx), Stdlib_Option.map(retiredSpecOf(), r => r.field), Stdlib_Option.flatMap(retiredSpecOf(), r => r.values), askedForRetired(args), undefined);
111
113
  let retiredAllows = (ctx, args, item) => {
@@ -289,6 +291,9 @@ function Make(Bus) {
289
291
  return;
290
292
  }
291
293
  let label = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(item), d => d[labelField]), Stdlib_JSON.Decode.string), id);
294
+ let match$1 = imageSourceOf();
295
+ let match$2 = Stdlib_JSON.Decode.object(item);
296
+ let image = match$1 !== undefined && match$2 !== undefined ? RowImage$Reventless.refFrom(match$2, match$1) : undefined;
292
297
  return Object.fromEntries([
293
298
  [
294
299
  "id",
@@ -298,6 +303,10 @@ function Make(Bus) {
298
303
  "label",
299
304
  label
300
305
  ],
306
+ [
307
+ "image",
308
+ Stdlib_Option.mapOr(image, null, prim => prim)
309
+ ],
301
310
  [
302
311
  "retired",
303
312
  retired
@@ -8,7 +8,7 @@ import * as Offload$Reventless from "@reventlessdev/reventless-spec/src/semantic
8
8
  import * as Backend$ReventlessLocal from "../adapter/Backend.res.mjs";
9
9
  import * as PluginSpec$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginSpec.res.mjs";
10
10
  import * as Seed_Prompt$ReventlessSeed from "@reventlessdev/reventless-seed/src/Seed_Prompt.res.mjs";
11
- import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs";
11
+ import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateView/UiFragments.res.mjs";
12
12
  import * as ComponentType$ReventlessCore from "@reventlessdev/reventless-core/src/ComponentType.res.mjs";
13
13
  import * as SqliteDriver$ReventlessLocal from "../adapter/SqliteDriver.res.mjs";
14
14
  import * as LocalSeedTarget$ReventlessLocal from "../LocalSeedTarget.res.mjs";
@@ -7,7 +7,7 @@ import * as PluginSpec$ReventlessCore from "@reventlessdev/reventless-core/src/p
7
7
  import * as TestRunner$ReventlessLocal from "../src/test/TestRunner.res.mjs";
8
8
  import * as ComponentType$ReventlessCore from "@reventlessdev/reventless-core/src/ComponentType.res.mjs";
9
9
  import * as Plugin_Fixtures$ReventlessLocal from "./plugin/Plugin_Fixtures.res.mjs";
10
- import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs";
10
+ import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChange/UiFragmentRegistry.res.mjs";
11
11
  import * as Platform_Admin_Structure$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin_Structure.res.mjs";
12
12
 
13
13
  TestRunner$ReventlessLocal.setup();
@@ -2,8 +2,8 @@
2
2
 
3
3
  import * as Behavior_GWT$ReventlessGwt from "@reventlessdev/reventless-gwt/src/Behavior_GWT.res.mjs";
4
4
  import * as Plugin_Fixtures$ReventlessLocal from "./Plugin_Fixtures.res.mjs";
5
- import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs";
6
- import * as UiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry_Behavior.res.mjs";
5
+ import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChange/UiFragmentRegistry.res.mjs";
6
+ import * as UiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChange/UiFragmentRegistry_Behavior.res.mjs";
7
7
 
8
8
  let Test = Behavior_GWT$ReventlessGwt.Make({
9
9
  name: UiFragmentRegistry$ReventlessCore.name,
@@ -1,9 +1,9 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs";
3
+ import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateView/UiFragments.res.mjs";
4
4
  import * as Projection_GWT$ReventlessGwt from "@reventlessdev/reventless-gwt/src/Projection_GWT.res.mjs";
5
5
  import * as Plugin_Fixtures$ReventlessLocal from "./Plugin_Fixtures.res.mjs";
6
- import * as UiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res.mjs";
6
+ import * as UiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateView/UiFragments_Projection.res.mjs";
7
7
 
8
8
  let Test = Projection_GWT$ReventlessGwt.Make({
9
9
  name: UiFragments$ReventlessCore.name,