@reventlessdev/reventless-core 3.0.0-alpha.203 → 3.0.0-alpha.204

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,13 @@
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.204 (2026-08-02)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **core:** store offloaded plugin structure untagged in the read model ([9036991](https://github.com/ReventlessDev/reventless-core/commit/9036991d9fbc7bbb01157fa58be1702ea4ba36d1))
11
+
12
+
6
13
  # 3.0.0-alpha.203 (2026-08-02)
7
14
 
8
15
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-core",
3
- "version": "3.0.0-alpha.203",
3
+ "version": "3.0.0-alpha.204",
4
4
  "description": "Core package for Reventless framework",
5
5
  "license": "Apache-2.0",
6
6
  "jest": {
@@ -31,14 +31,14 @@
31
31
  "@reventlessdev/rescript-effect": "0.1.0-alpha.32",
32
32
  "@reventlessdev/rescript-fast-csv": "2.0.0-alpha.1",
33
33
  "@reventlessdev/rescript-hash-object": "1.2.0-alpha.14",
34
- "@reventlessdev/rescript-jest": "1.0.0-alpha.10",
35
34
  "@reventlessdev/rescript-node": "2.0.0-alpha.1",
36
- "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.18",
35
+ "@reventlessdev/rescript-jest": "1.0.0-alpha.10",
37
36
  "@reventlessdev/rescript-ssh2": "2.0.0-alpha.1",
38
- "@reventlessdev/reventless-infra": "3.0.0-alpha.120",
39
- "@reventlessdev/reventless-interop": "3.0.0-alpha.30",
37
+ "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.18",
40
38
  "@reventlessdev/rescript-uuid": "2.0.0-alpha.0",
41
- "@reventlessdev/reventless-spec": "3.0.0-alpha.95"
39
+ "@reventlessdev/reventless-infra": "3.0.0-alpha.121",
40
+ "@reventlessdev/reventless-interop": "3.0.0-alpha.30",
41
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.96"
42
42
  },
43
43
  "devDependencies": {
44
44
  "rescript": "12.3.0",
@@ -54,8 +54,17 @@ let displayState = (
54
54
  extensions: def.extensions,
55
55
  status,
56
56
  statusChange,
57
- apiSchemaFragment: def.apiSchemaFragment,
58
- structure: def.structure,
57
+ // Store the offloadable fields as their untagged wire JSON (bare value, or an
58
+ // `{$offload: {...}}` reference), not the `Offload.payload` variant: the QueryDb
59
+ // write path marshals the raw ReScript value, so a variant would land in DynamoDB
60
+ // as `{TAG, _0}`. The ComponentDefinitions Lambda then reads structure back and
61
+ // resolves the sentinel.
62
+ apiSchemaFragment: def.apiSchemaFragment->Option.map(
63
+ Reventless.Offload.toJson(Reventless.Plugin.apiSchemaFragmentSchema, _),
64
+ ),
65
+ structure: def.structure->Option.map(
66
+ Reventless.Offload.toJson(Reventless.Plugin.pluginStructureSchema, _),
67
+ ),
59
68
  dcbEventLog: def.dcbEventLog,
60
69
  // A freshly projected row always knows its kind (the definition carries it as a
61
70
  // mandatory field). `option` here is purely for rows persisted before `kind`
@@ -3,6 +3,8 @@
3
3
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
4
4
  import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
5
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Plugin$Reventless from "@reventlessdev/reventless-spec/src/components/Plugin.res.mjs";
7
+ import * as Offload$Reventless from "@reventlessdev/reventless-spec/src/semantic/Offload.res.mjs";
6
8
  import * as Plugin$ReventlessCore from "../component/Plugin.res.mjs";
7
9
  import * as Projection$Reventless from "@reventlessdev/reventless-spec/src/types/Projection.res.mjs";
8
10
  import * as PluginSpec$ReventlessCore from "./PluginSpec.res.mjs";
@@ -70,8 +72,8 @@ function displayState(def, status, statusChange, otherConnectedVersions) {
70
72
  let base_extensionPointNames = def.extensionPoints.map(extensionPoint => extensionPoint.name);
71
73
  let base_extensionNames = def.extensions.map(extension => extension.extensionPointName);
72
74
  let base_extensions = def.extensions;
73
- let base_apiSchemaFragment = def.apiSchemaFragment;
74
- let base_structure = def.structure;
75
+ let base_apiSchemaFragment = Stdlib_Option.map(def.apiSchemaFragment, __x => Offload$Reventless.toJson(Plugin$Reventless.apiSchemaFragmentSchema, __x));
76
+ let base_structure = Stdlib_Option.map(def.structure, __x => Offload$Reventless.toJson(Plugin$Reventless.pluginStructureSchema, __x));
75
77
  let base_dcbEventLog = def.dcbEventLog;
76
78
  let base_kind = def.kind;
77
79
  let base_otherConnectedVersions = without(otherConnectedVersions, def.version);
@@ -24,15 +24,22 @@ type state = {
24
24
  extensions: array<Reventless.Plugin.extensionDefinition>,
25
25
  status: status,
26
26
  statusChange: Message.statusChange,
27
- apiSchemaFragment: @s.matches(Reventless.Plugin.apiSchemaFragmentOffloadSchema)
28
- option<Reventless.Offload.payload<Reventless.Plugin.apiSchemaFragment>>,
27
+ // Stored as the **untagged** offload wire JSON (a bare fragment, or an
28
+ // `{$offload: {...}}` reference) — NOT the `Offload.payload` variant. The QueryDb
29
+ // write path marshals the raw ReScript value straight to DynamoDB without
30
+ // sury-encoding through this field's schema, so a variant would persist as its
31
+ // runtime `{TAG, _0}` shape and no reader could parse it. UI-excluded
32
+ // (PluginBaseFragment.pluginUIOnlyExcludeFields), so JSON.t typing costs no
33
+ // GraphQL consumer. PluginsProjection.displayState writes it via Offload.toJson.
34
+ apiSchemaFragment: option<JSON.t>,
29
35
  // API target for split-API schema routing. Absent/None means "Domain" (backward compat).
30
36
  // "Platform" → excluded from DomainApi runtime schema stitching in updateApiSchema.
31
37
  apiTarget?: string,
32
38
  // Plugin structure (component metadata) — surfaced via Platform_ComponentDefinitions.
33
- // None for older plugins whose protocol version did not carry the field.
34
- structure: @s.matches(Reventless.Plugin.pluginStructureOffloadSchema)
35
- option<Reventless.Offload.payload<Reventless.Plugin.pluginStructure>>,
39
+ // None for older plugins whose protocol version did not carry the field. Same
40
+ // untagged-JSON storage as apiSchemaFragment above; the ComponentDefinitions
41
+ // Lambda detects the `$offload` sentinel and resolves it from S3.
42
+ structure: option<JSON.t>,
36
43
  // DCB EventLog definition for plugins that bundle a DcbEventLog component.
37
44
  // Admin's manageSubscriptions uses this to wire cross-plugin SNS subscriptions
38
45
  // from this plugin's DCB topic → peer EventCollectors (and vice-versa). None
@@ -74,9 +81,9 @@ type queryResult = {
74
81
  extensionNames: array<string>,
75
82
  extensions: array<Reventless.Plugin.extensionDefinition>,
76
83
  status: status,
77
- apiSchemaFragment: option<Reventless.Offload.payload<Reventless.Plugin.apiSchemaFragment>>,
84
+ apiSchemaFragment: option<JSON.t>,
78
85
  apiTarget?: string,
79
- structure: option<Reventless.Offload.payload<Reventless.Plugin.pluginStructure>>,
86
+ structure: option<JSON.t>,
80
87
  dcbEventLog: option<Reventless.Plugin.dcbEventLogDefinition>,
81
88
  kind: option<Reventless.Plugin.pluginKind>,
82
89
  }
@@ -23,9 +23,9 @@ let stateSchema = S.schema(s => ({
23
23
  extensions: s.m(S.array(Plugin$Reventless.extensionDefinitionSchema)),
24
24
  status: s.m(statusSchema),
25
25
  statusChange: s.m(Message$ReventlessCore.statusChangeSchema),
26
- apiSchemaFragment: s.m(Plugin$Reventless.apiSchemaFragmentOffloadSchema),
26
+ apiSchemaFragment: s.m(S.option(S.json)),
27
27
  apiTarget: s.m(S.option(S.string)),
28
- structure: s.m(Plugin$Reventless.pluginStructureOffloadSchema),
28
+ structure: s.m(S.option(S.json)),
29
29
  dcbEventLog: s.m(Plugin$Reventless.dcbEventLogOptionSchema),
30
30
  kind: s.m(S.option(Plugin$Reventless.pluginKindSchema)),
31
31
  otherConnectedVersions: s.m(S.array(Plugin$Reventless.versionSchema))