@reventlessdev/reventless-aws 3.0.0-alpha.308 → 3.0.0-alpha.309

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/package.json +10 -10
  3. package/src/Platform.res +1 -1
  4. package/src/Platform.res.mjs +3 -3
  5. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda_Ops.res +1 -1
  6. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda_Ops.res.mjs +2 -2
  7. package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res +1 -1
  8. package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res.mjs +6 -5
  9. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res +1 -1
  10. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res.mjs +3 -3
  11. package/src/adapter/Mcp/MCP_Lambda.res +2 -2
  12. package/src/adapter/Mcp/MCP_Lambda.res.mjs +4 -4
  13. package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res +1 -1
  14. package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res.mjs +3 -3
  15. package/src/adapter/Postgres/PgChangeFeedRelay_Runtime.res +1 -1
  16. package/src/adapter/Postgres/PgChangeFeedRelay_Runtime.res.mjs +3 -3
  17. package/src/adapter/Postgres/PgConnection.res.mjs +7 -7
  18. package/src/adapter/Runtime/AutomationSliceEntryPoint_Ops.res +2 -2
  19. package/src/adapter/Runtime/AutomationSliceEntryPoint_Ops.res.mjs +4 -4
  20. package/src/adapter/Runtime/CounterEntryPoint_Ops.res +1 -1
  21. package/src/adapter/Runtime/CounterEntryPoint_Ops.res.mjs +6 -5
  22. package/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs +3 -1
  23. package/src/adapter/Runtime/DcbCommandTopicEntryPoint_Ops.res +1 -1
  24. package/src/adapter/Runtime/DcbCommandTopicEntryPoint_Ops.res.mjs +3 -3
  25. package/src/adapter/Runtime/HeartbeatEntryPoint.res +1 -1
  26. package/src/adapter/Runtime/HeartbeatEntryPoint.res.mjs +2 -2
  27. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +11 -1
  28. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res.mjs +1 -1
  29. package/src/adapter/Runtime/StateViewSliceEntryPoint_Ops.res +1 -1
  30. package/src/adapter/Runtime/StateViewSliceEntryPoint_Ops.res.mjs +3 -3
  31. package/src/util/Util_DeadLetterQueue.res +10 -5
  32. package/src/util/Util_DeadLetterQueue.res.mjs +4 -1
  33. package/src/util/Util_LambdaLogging.res +28 -0
  34. package/src/util/Util_LambdaLogging.res.mjs +15 -0
  35. package/tests/AppSync_AdapterTest.res.mjs +13 -13
  36. package/tests/AutomationSliceEntryPoint_OpsTest.res.mjs +5 -5
  37. package/tests/EpInboundTestSlice.res.mjs +6 -6
  38. package/tests/PgChangeFeedRelay_IntegrationTest.res +1 -1
  39. package/tests/PgChangeFeedRelay_IntegrationTest.res.mjs +2 -2
  40. package/tests/PgChangeFeedRelay_RuntimeTest.res +2 -2
  41. package/tests/PgChangeFeedRelay_RuntimeTest.res.mjs +3 -3
  42. package/tests/PgPipeline_IntegrationTest.res +1 -1
  43. package/tests/PgPipeline_IntegrationTest.res.mjs +8 -7
  44. package/tests/StateViewSliceEntryPoint_OpsTest.res.mjs +3 -3
  45. package/tests/Util_LambdaLoggingTest.res +27 -0
  46. package/tests/Util_LambdaLoggingTest.res.mjs +9 -0
  47. package/tests/integration/AggTestAggregate.res.mjs +6 -6
  48. package/tests/integration/EpCompositeSlice.res.mjs +17 -17
  49. package/tests/integration/EpTestSlice.res.mjs +6 -6
  50. package/tests/integration/StateViewSliceEntryPoint_IntegrationTest.res +1 -1
  51. package/tests/integration/StateViewSliceEntryPoint_IntegrationTest.res.mjs +4 -4
  52. package/tests/integration/SvsTestSlice.res.mjs +9 -9
package/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
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.309 (2026-08-18)
7
+
8
+ * feat(core)!: tell the Monitoring seam where a unit's logs live ([6cbd595](https://github.com/ReventlessDev/reventless-core/commit/6cbd595e2474fce3f87b7720a332e82583899bae))
9
+ * feat(sury)!: migrate to sury 11.0.0-rc.1 ([2cf8969](https://github.com/ReventlessDev/reventless-core/commit/2cf8969a222ce1b775563668a4126cb20611966c))
10
+
11
+ ### BREAKING CHANGES
12
+
13
+ * Monitoring.Backend.onProvisioned gained a required
14
+ ~logLocator argument. An extension that packs its backend against the
15
+ module type will not compile until onProvisioned accepts it.
16
+ * sury is a direct dependency of the published packages and
17
+ its schema and serialization surface changed; consumers must migrate to
18
+ sury 11.
19
+
20
+
21
+
6
22
  # 3.0.0-alpha.308 (2026-08-18)
7
23
 
8
24
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-aws",
3
- "version": "3.0.0-alpha.308",
3
+ "version": "3.0.0-alpha.309",
4
4
  "description": "AWS adapters for Reventless",
5
5
  "license": "Apache-2.0",
6
6
  "dependencies": {
@@ -10,24 +10,24 @@
10
10
  "@aws-sdk/client-location": "3.970.0",
11
11
  "@aws-sdk/client-s3": "3.970.0",
12
12
  "@aws-sdk/s3-request-presigner": "3.970.0",
13
- "sury": "11.0.0-alpha.4",
13
+ "sury": "11.0.0-rc.1",
14
14
  "uuid": "^13.0.0",
15
15
  "@reventlessdev/rescript-aws-sdk": "3.0.0-alpha.12",
16
- "@reventlessdev/rescript-node": "2.0.0-alpha.8",
17
16
  "@reventlessdev/rescript-effect": "0.1.0-alpha.32",
18
- "@reventlessdev/rescript-pulumi-aws": "2.4.0-alpha.80",
17
+ "@reventlessdev/rescript-node": "2.0.0-alpha.8",
19
18
  "@reventlessdev/rescript-jest": "1.0.0-alpha.10",
19
+ "@reventlessdev/rescript-pulumi-aws": "3.0.0-alpha.0",
20
20
  "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.19",
21
21
  "@reventlessdev/rescript-uuid": "2.0.0-alpha.0",
22
- "@reventlessdev/reventless-core": "3.0.0-alpha.239",
23
- "@reventlessdev/reventless-infra": "3.0.0-alpha.145",
24
- "@reventlessdev/reventless-interop": "3.0.0-alpha.31",
25
- "@reventlessdev/reventless-spec": "3.0.0-alpha.117",
26
- "@reventlessdev/reventless-postgres": "3.0.0-alpha.103"
22
+ "@reventlessdev/reventless-infra": "3.0.0-alpha.146",
23
+ "@reventlessdev/reventless-interop": "3.0.0-alpha.32",
24
+ "@reventlessdev/reventless-core": "3.0.0-alpha.240",
25
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.118",
26
+ "@reventlessdev/reventless-postgres": "3.0.0-alpha.104"
27
27
  },
28
28
  "devDependencies": {
29
29
  "rescript": "12.3.0",
30
- "sury-ppx": "11.0.0-alpha.2"
30
+ "sury-ppx": "11.0.0-rc.1"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "rescript": "12.3.0"
package/src/Platform.res CHANGED
@@ -2662,7 +2662,7 @@ module MakeWithConfig = (
2662
2662
  ),
2663
2663
  commandJson: ReventlessInfra.PluginExtensionPointSpec.RedetectPlugin(
2664
2664
  hbConfig.heartbeatTimeout,
2665
- )->S.reverseConvertToJsonOrThrow(ReventlessInfra.PluginExtensionPointSpec.commandSchema),
2665
+ )->Reventless.Util_Sury.toJson(ReventlessInfra.PluginExtensionPointSpec.commandSchema),
2666
2666
  }
2667
2667
  try {
2668
2668
  await publishHeartbeat([message])
@@ -1,6 +1,5 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as NodeCrypto from "@reventlessdev/rescript-node/src/NodeCrypto.res.mjs";
5
4
  import * as Pervasives from "@rescript/runtime/lib/es6/Pervasives.js";
6
5
  import * as Aws from "@pulumi/aws";
@@ -15,6 +14,7 @@ import * as Pulumi from "@pulumi/pulumi";
15
14
  import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
16
15
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
17
16
  import * as Plugin$ReventlessAws from "./components/Plugin.res.mjs";
17
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
18
18
  import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
19
19
  import * as Plugin$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/component/Plugin.res.mjs";
20
20
  import * as AWS_Tags$ReventlessAws from "./adapter/AWS_Tags.res.mjs";
@@ -1392,7 +1392,7 @@ function MakeWithConfig(Config) {
1392
1392
  let publishHeartbeat = CommandTopicChannel_SQS_Runtime$ReventlessAws.publishJsons(queue, "SQS_FIFO");
1393
1393
  let message_id = hbConfig.pluginId;
1394
1394
  let message_meta = Message$ReventlessCore.generateMeta(PluginExtensionPointSpec$ReventlessInfra.name, undefined, "DeployHeartbeat", undefined, undefined, undefined, undefined, undefined);
1395
- let message_commandJson = S.reverseConvertToJsonOrThrow({
1395
+ let message_commandJson = Util_Sury$Reventless.toJson({
1396
1396
  TAG: "RedetectPlugin",
1397
1397
  _0: hbConfig.heartbeatTimeout
1398
1398
  }, PluginExtensionPointSpec$ReventlessInfra.commandSchema);
@@ -2680,7 +2680,7 @@ function Make($star) {
2680
2680
  let publishHeartbeat = CommandTopicChannel_SQS_Runtime$ReventlessAws.publishJsons(queue, "SQS_FIFO");
2681
2681
  let message_id = hbConfig.pluginId;
2682
2682
  let message_meta = Message$ReventlessCore.generateMeta(PluginExtensionPointSpec$ReventlessInfra.name, undefined, "DeployHeartbeat", undefined, undefined, undefined, undefined, undefined);
2683
- let message_commandJson = S.reverseConvertToJsonOrThrow({
2683
+ let message_commandJson = Util_Sury$Reventless.toJson({
2684
2684
  TAG: "RedetectPlugin",
2685
2685
  _0: hbConfig.heartbeatTimeout
2686
2686
  }, PluginExtensionPointSpec$ReventlessInfra.commandSchema);
@@ -297,7 +297,7 @@ let structureOf = (item: dict<JSON.t>, ~name as _: string): option<(
297
297
  switch (item->str("name"), item->Dict.get("structure")->Option.flatMap(JSON.Decode.object)) {
298
298
  | (Some(pluginId), Some(structure)) =>
299
299
  let healed = structure->healStructure->JSON.Encode.object
300
- switch healed->S.parseJsonOrThrow(Reventless.Plugin.pluginStructureSchema) {
300
+ switch healed->Reventless.Util_Sury.fromJson(Reventless.Plugin.pluginStructureSchema) {
301
301
  | decoded => Some((pluginId, decoded))
302
302
  | exception _ =>
303
303
  JsError.throwWithMessage(
@@ -1,6 +1,5 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as Nodefs from "node:fs";
5
4
  import * as S3$AwsSdk from "@reventlessdev/rescript-aws-sdk/src/S3.res.mjs";
6
5
  import * as Nodepath from "node:path";
@@ -14,6 +13,7 @@ import * as Primitive_object from "@rescript/runtime/lib/es6/Primitive_object.js
14
13
  import * as Plugin$Reventless from "@reventlessdev/reventless-spec/src/components/Plugin.res.mjs";
15
14
  import * as ClientS3 from "@aws-sdk/client-s3";
16
15
  import * as Offload$Reventless from "@reventlessdev/reventless-spec/src/semantic/Offload.res.mjs";
16
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
17
17
  import * as Platform_AdminScan_Ops$ReventlessAws from "./Platform_AdminScan_Ops.res.mjs";
18
18
  import * as Platform_BakedManifest$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_BakedManifest.res.mjs";
19
19
 
@@ -266,7 +266,7 @@ function structureOf(item, param) {
266
266
  let healed = healStructure(match$1);
267
267
  let decoded;
268
268
  try {
269
- decoded = S.parseJsonOrThrow(healed, Plugin$Reventless.pluginStructureSchema);
269
+ decoded = Util_Sury$Reventless.fromJson(healed, Plugin$Reventless.pluginStructureSchema);
270
270
  } catch (exn) {
271
271
  return Stdlib_JsError.throwWithMessage(`baked manifest: the structure persisted for "` + match + `" cannot be decoded — it was written by a framework version this platform can no longer read. Redeploy that plugin, or drop it from the include-list.`);
272
272
  }
@@ -79,7 +79,7 @@ let handleStreamEvent = (
79
79
  let references = referenceRecords->Array.filterMap(record =>
80
80
  switch record->parseDynamoDbStreamRecordState {
81
81
  | NewImage(id, newImage) =>
82
- let inc = switch newImage->S.parseJsonOrThrow(referencesViewSchema) {
82
+ let inc = switch newImage->Reventless.Util_Sury.fromJson(referencesViewSchema) {
83
83
  | {inc} => inc
84
84
  | exception _err => 1
85
85
  }
@@ -1,8 +1,9 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
3
+ import * as Sury from "sury";
4
4
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
5
5
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
6
7
  import * as LibDynamodb from "@aws-sdk/lib-dynamodb";
7
8
  import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
8
9
  import * as DynamoDb_DocumentClient$AwsSdk from "@reventlessdev/rescript-aws-sdk/src/DynamoDb_DocumentClient.res.mjs";
@@ -69,9 +70,9 @@ async function addToCounterTarget(table, param) {
69
70
  return log.debug("CounterHandler_DynamoDbStream_Runtime", undefined, `addToCounterTarget: current count for ` + counterId + `: ` + Stdlib_Option.mapOr(DynamoDb_DocumentClient$AwsSdk.getIntAttribute(updateOutput.Attributes, "count"), "N/A", v => v.toString()));
70
71
  }
71
72
 
72
- let referencesViewSchema = S.schema(s => ({
73
- id: s.m(S.string),
74
- inc: s.m(S.int)
73
+ let referencesViewSchema = Sury.$schema(s => ({
74
+ id: s.m(Sury.string),
75
+ inc: s.m(Sury.int)
75
76
  }));
76
77
 
77
78
  function handleStreamEvent(referencesStream, countsStream, counterHandler, streamEvent, param) {
@@ -101,7 +102,7 @@ function handleStreamEvent(referencesStream, countsStream, counterHandler, strea
101
102
  let exit = 0;
102
103
  let val;
103
104
  try {
104
- val = S.parseJsonOrThrow(match._1, referencesViewSchema);
105
+ val = Util_Sury$Reventless.fromJson(match._1, referencesViewSchema);
105
106
  exit = 1;
106
107
  } catch (_err) {
107
108
  inc = 1;
@@ -190,7 +190,7 @@ let fromItem = (item: JSON.t): ReventlessCore.DcbEventLog_Adapter.rawSequencedEv
190
190
  let meta =
191
191
  obj
192
192
  ->ReventlessCore.Message.composeMeta
193
- ->S.parseJsonOrThrow(Reventless.Message.metaSchema)
193
+ ->Reventless.Util_Sury.fromJson(Reventless.Message.metaSchema)
194
194
 
195
195
  {
196
196
  position,
@@ -1,6 +1,5 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as Uuid from "uuid";
5
4
  import * as Effect from "@reventlessdev/rescript-effect/src/Effect.res.mjs";
6
5
  import * as Stream from "@reventlessdev/rescript-effect/src/Stream.res.mjs";
@@ -14,6 +13,7 @@ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
14
13
  import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
15
14
  import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
16
15
  import * as Message$Reventless from "@reventlessdev/reventless-spec/src/types/Message.res.mjs";
16
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
17
17
  import * as LibDynamodb from "@aws-sdk/lib-dynamodb";
18
18
  import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
19
19
  import * as DynamoDb_Error$ReventlessAws from "../../errors/DynamoDb_Error.res.mjs";
@@ -139,7 +139,7 @@ function fromItem(item) {
139
139
  }
140
140
  }));
141
141
  let recordedAt = Stdlib_Option.getOr(Stdlib_Option.flatMap(obj["recordedAt"], Stdlib_JSON.Decode.string), "");
142
- let meta = S.parseJsonOrThrow(Message$ReventlessCore.composeMeta(obj), Message$Reventless.metaSchema);
142
+ let meta = Util_Sury$Reventless.fromJson(Message$ReventlessCore.composeMeta(obj), Message$Reventless.metaSchema);
143
143
  return {
144
144
  position: position,
145
145
  eventType: eventType,
@@ -1213,4 +1213,4 @@ export {
1213
1213
  executeQueryItemStream,
1214
1214
  readStream,
1215
1215
  }
1216
- /* S Not a pure module */
1216
+ /* uuid Not a pure module */
@@ -62,11 +62,11 @@ let generateConfig = (
62
62
  ): mcpConfig => {
63
63
  let toolDefs = ReventlessCore.MCP_SchemaGenerator.generateTools(~pluginName, ~mutationEntries)
64
64
  // Build a lookup from field name to component kind.
65
- // Union({anyOf}) schemas are aggregate commands; others are DCB StateChangeSlice commands.
65
+ // AnyOf({anyOf}) schemas are aggregate commands; others are DCB StateChangeSlice commands.
66
66
  let kindByField = Dict.make()
67
67
  mutationEntries->Array.forEach(entry => {
68
68
  let kind = switch entry.commandSchema {
69
- | Union(_) => "Aggregate"
69
+ | AnyOf(_) => "Aggregate"
70
70
  | _ => "StateChangeSlice"
71
71
  }
72
72
  entry.fieldNames->Array.forEach(fieldName => kindByField->Dict.set(fieldName, kind))
@@ -1,6 +1,6 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
3
+ import * as Sury from "sury";
4
4
  import * as Stream from "@reventlessdev/rescript-effect/src/Stream.res.mjs";
5
5
  import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
6
6
  import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
@@ -29,7 +29,7 @@ function generateConfig(serverName, serverVersion, pluginName, mutationEntries,
29
29
  mutationEntries.forEach(entry => {
30
30
  let match = entry.commandSchema;
31
31
  let kind;
32
- kind = match.type === "union" ? "Aggregate" : "StateChangeSlice";
32
+ kind = match.type === "anyOf" ? "Aggregate" : "StateChangeSlice";
33
33
  entry.fieldNames.forEach(fieldName => {
34
34
  kindByField[fieldName] = kind;
35
35
  });
@@ -251,7 +251,7 @@ function extractIdentity(authHeader) {
251
251
  async function dispatchTool(tool, args, identity) {
252
252
  let queueRef = makeQueueRef(tool.commandTopicArn);
253
253
  let publishJsons = CommandTopicChannel_SQS_RuntimeResMjs.publishJsons(queueRef, AWS$ReventlessAws.SQS_FIFO.service);
254
- let generateCommand = CommandGenerator_CallbackResMjs.makeGenerateCommand(publishJsons, tool.name, S.json, tool.componentKind, false);
254
+ let generateCommand = CommandGenerator_CallbackResMjs.makeGenerateCommand(publishJsons, tool.name, Sury.json, tool.componentKind, false);
255
255
  let payload_command = tool.name;
256
256
  let payload_meta = {
257
257
  ip: [],
@@ -280,4 +280,4 @@ export {
280
280
  extractIdentity,
281
281
  dispatchTool,
282
282
  }
283
- /* S Not a pure module */
283
+ /* sury Not a pure module */
@@ -69,7 +69,7 @@ let make = (
69
69
  entries
70
70
  ->Array.push((
71
71
  "partitionTag",
72
- partitionTag->S.reverseConvertToJsonOrThrow(Reventless.DcbTag.derivedPartitionTagSchema),
72
+ partitionTag->Reventless.Util_Sury.toJson(Reventless.DcbTag.derivedPartitionTagSchema),
73
73
  ))
74
74
  ->ignore
75
75
  | Classic => entries->Array.push(("kind", "classic"->JSON.Encode.string))->ignore
@@ -1,6 +1,5 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as Aws from "@pulumi/aws";
5
4
  import * as Output$Pulumi from "@reventlessdev/rescript-pulumi-pulumi/src/Output.res.mjs";
6
5
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
@@ -8,6 +7,7 @@ import * as Pulumi from "@pulumi/pulumi";
8
7
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
9
8
  import * as AWS$ReventlessAws from "../AWS.res.mjs";
10
9
  import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
10
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
11
11
  import * as AWS_Tags$ReventlessAws from "../AWS_Tags.res.mjs";
12
12
  import * as Adapter$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Adapter.res.mjs";
13
13
  import * as PolicyDocument$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/PolicyDocument.res.mjs";
@@ -55,7 +55,7 @@ function make(name, logs, securityGroupId, subnetIds, intervalMinutesOpt, opts)
55
55
  } else {
56
56
  entries.push([
57
57
  "partitionTag",
58
- S.reverseConvertToJsonOrThrow(match.partitionTag, DcbTag$Reventless.derivedPartitionTagSchema)
58
+ Util_Sury$Reventless.toJson(match.partitionTag, DcbTag$Reventless.derivedPartitionTagSchema)
59
59
  ]);
60
60
  }
61
61
  return JSON.stringify(Object.fromEntries(entries));
@@ -130,4 +130,4 @@ function make(name, logs, securityGroupId, subnetIds, intervalMinutesOpt, opts)
130
130
  export {
131
131
  make,
132
132
  }
133
- /* S Not a pure module */
133
+ /* @pulumi/aws Not a pure module */
@@ -62,7 +62,7 @@ let relayWithPool = async (
62
62
  ): int => {
63
63
  let partitionTag =
64
64
  partitionTagJson->Option.map(json =>
65
- json->S.parseJsonOrThrow(Reventless.DcbTag.derivedPartitionTagSchema)
65
+ json->Reventless.Util_Sury.fromJson(Reventless.DcbTag.derivedPartitionTagSchema)
66
66
  )
67
67
  await ReventlessPostgres.PgChangeFeed.drain(pool, ~logName, ~subscriber, ~handle=async events => {
68
68
  let jsons = events->Array.filterMap(event => toEventCollectorJson(event, ~partitionTag?))
@@ -1,10 +1,10 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
5
4
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
6
5
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
7
6
  import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
7
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
8
8
  import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
9
9
  import * as PgRuntime$ReventlessAws from "./PgRuntime.res.mjs";
10
10
  import * as PgChangeFeed$ReventlessPostgres from "@reventlessdev/reventless-postgres/src/PgChangeFeed.res.mjs";
@@ -25,7 +25,7 @@ function toEventCollectorJson(event, partitionTag) {
25
25
  }
26
26
 
27
27
  async function relayWithPool(pool, logName, subscriber, partitionTagJson, sendBatch) {
28
- let partitionTag = Stdlib_Option.map(partitionTagJson, json => S.parseJsonOrThrow(json, DcbTag$Reventless.derivedPartitionTagSchema));
28
+ let partitionTag = Stdlib_Option.map(partitionTagJson, json => Util_Sury$Reventless.fromJson(json, DcbTag$Reventless.derivedPartitionTagSchema));
29
29
  return await PgChangeFeed$ReventlessPostgres.drain(pool, logName, subscriber, undefined, async events => {
30
30
  let jsons = Stdlib_Array.filterMap(events, event => toEventCollectorJson(event, partitionTag));
31
31
  if (jsons.length !== 0) {
@@ -65,4 +65,4 @@ export {
65
65
  relayClassicWithPool,
66
66
  relayClassic,
67
67
  }
68
- /* S Not a pure module */
68
+ /* DcbTag-Reventless Not a pure module */
@@ -1,6 +1,6 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
3
+ import * as Sury from "sury";
4
4
  import * as Aws from "@pulumi/aws";
5
5
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
6
  import * as Pulumi from "@pulumi/pulumi";
@@ -11,12 +11,12 @@ import * as Util_Pulumi$ReventlessCore from "@reventlessdev/reventless-core/src/
11
11
  import * as EC2_SecurityGroup$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/EC2/EC2_SecurityGroup.res.mjs";
12
12
  import * as PgMigration_Builder$ReventlessAws from "./PgMigration_Builder.res.mjs";
13
13
 
14
- let connectionConfigSchema = S.schema(s => ({
15
- host: s.m(S.string),
16
- port: s.m(S.int),
17
- database: s.m(S.string),
18
- username: s.m(S.string),
19
- secretArn: s.m(S.string)
14
+ let connectionConfigSchema = Sury.$schema(s => ({
15
+ host: s.m(Sury.string),
16
+ port: s.m(Sury.int),
17
+ database: s.m(Sury.string),
18
+ username: s.m(Sury.string),
19
+ secretArn: s.m(Sury.string)
20
20
  }));
21
21
 
22
22
  function connectionConfigToJson(lockStrategy, cc) {
@@ -122,7 +122,7 @@ let makeSyncTodoItems = (
122
122
  await todoItems
123
123
  ->Dict.toArray
124
124
  ->Array.map(((id, row)) =>
125
- save(id, row->S.reverseConvertToJsonOrThrow(rowSchema), ReventlessCore.QueryDb.Overwrite, None)
125
+ save(id, row->Reventless.Util_Sury.toJson(rowSchema), ReventlessCore.QueryDb.Overwrite, None)
126
126
  )
127
127
  ->Promise.all
128
128
  }
@@ -181,7 +181,7 @@ let makeLoadTodoItems = (
181
181
  let id = json->JSON.Decode.object->Option.flatMap(d => d->Dict.get("id"))->Option.flatMap(JSON.Decode.string)
182
182
  switch id {
183
183
  | Some(id) if todoItems->Dict.get(id)->Option.isNone =>
184
- switch json->S.parseJsonOrThrow(rowSchema) {
184
+ switch json->Reventless.Util_Sury.fromJson(rowSchema) {
185
185
  | row =>
186
186
  todoItems->Dict.set(id, row)
187
187
  count + 1
@@ -1,6 +1,5 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as Stream from "@reventlessdev/rescript-effect/src/Stream.res.mjs";
5
4
  import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
6
5
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
@@ -11,6 +10,7 @@ import * as Stream$1 from "effect/Stream";
11
10
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
12
11
  import * as DcbDecode$Reventless from "@reventlessdev/reventless-spec/src/components/DcbDecode.res.mjs";
13
12
  import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
13
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
14
14
  import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
15
15
  import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src/util/EffectLogger.res.mjs";
16
16
  import * as DynamoDb_Error$ReventlessAws from "../../errors/DynamoDb_Error.res.mjs";
@@ -89,7 +89,7 @@ function makeSyncTodoItems(queryDbTableName, todoItems, rowSchema) {
89
89
  };
90
90
  let save = QueryDbStorage_DynamoDb_Runtime$ReventlessAws.save(table);
91
91
  return async () => {
92
- await Promise.all(Object.entries(todoItems).map(param => save(param[0], S.reverseConvertToJsonOrThrow(param[1], rowSchema), "Overwrite", undefined)));
92
+ await Promise.all(Object.entries(todoItems).map(param => save(param[0], Util_Sury$Reventless.toJson(param[1], rowSchema), "Overwrite", undefined)));
93
93
  };
94
94
  }
95
95
 
@@ -136,7 +136,7 @@ function makeLoadTodoItems(queryDbTableName, todoItems, rowSchema, comp) {
136
136
  }
137
137
  let row;
138
138
  try {
139
- row = S.parseJsonOrThrow(json, rowSchema);
139
+ row = Util_Sury$Reventless.fromJson(json, rowSchema);
140
140
  } catch (exn) {
141
141
  return count;
142
142
  }
@@ -262,4 +262,4 @@ export {
262
262
  makeOutboundRegisteredHandler,
263
263
  runSweeps,
264
264
  }
265
- /* S Not a pure module */
265
+ /* Stream Not a pure module */
@@ -86,7 +86,7 @@ let splitRecords = (
86
86
  let references = referenceRecords->Array.filterMap(record =>
87
87
  switch record->Util_DynamoDbStream_Runtime.parseDynamoDbStreamRecordState {
88
88
  | NewImage(id, newImage) =>
89
- let inc = switch newImage->S.parseJsonOrThrow(referencesViewSchema) {
89
+ let inc = switch newImage->Reventless.Util_Sury.fromJson(referencesViewSchema) {
90
90
  | {inc} => inc
91
91
  | exception _ => 1
92
92
  }
@@ -1,8 +1,9 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
3
+ import * as Sury from "sury";
4
4
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
5
5
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
6
7
  import * as Counter_Callback$ReventlessCore from "@reventlessdev/reventless-core/src/components/Counter/Counter_Callback.res.mjs";
7
8
  import * as StreamRoutedEntryPoint_Ops$ReventlessAws from "./StreamRoutedEntryPoint_Ops.res.mjs";
8
9
  import * as Util_DynamoDbStream_Runtime$ReventlessAws from "../../util/Util_DynamoDbStream_Runtime.res.mjs";
@@ -29,9 +30,9 @@ function makeCounterOps(config) {
29
30
  };
30
31
  }
31
32
 
32
- let referencesViewSchema = S.schema(s => ({
33
- id: s.m(S.string),
34
- inc: s.m(S.int)
33
+ let referencesViewSchema = Sury.$schema(s => ({
34
+ id: s.m(Sury.string),
35
+ inc: s.m(Sury.int)
35
36
  }));
36
37
 
37
38
  function splitRecords(referencesStreamArn, countsStreamArn, records) {
@@ -58,7 +59,7 @@ function splitRecords(referencesStreamArn, countsStreamArn, records) {
58
59
  let exit = 0;
59
60
  let val;
60
61
  try {
61
- val = S.parseJsonOrThrow(match._1, referencesViewSchema);
62
+ val = Util_Sury$Reventless.fromJson(match._1, referencesViewSchema);
62
63
  exit = 1;
63
64
  } catch (exn) {
64
65
  inc = 1;
@@ -22,7 +22,9 @@ import {
22
22
  import { Make as dcbEventLogOperationsMake } from "@reventlessdev/reventless-core/src/components/DcbEventLog/DcbEventLog_Operations.res.mjs";
23
23
  import { makeCommandGenerator } from "./CommandGeneratorEntryPoint_Ops.res.mjs";
24
24
  import { commandOutcomeToJson, runInlineAndCollect } from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic_Helpers.res.mjs";
25
- import { json as jsonSchema } from "sury/src/S.res.mjs";
25
+ // `json` lives on sury's own entry, not the ReScript shim — `S.res.mjs` stopped
26
+ // re-exporting it in sury 11. This is the same binding the compiled ReScript uses.
27
+ import { json as jsonSchema } from "sury";
26
28
  import { handleQueueEvent, publishJsons as sqsPublishJsons } from "@reventlessdev/reventless-aws/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res.mjs";
27
29
  // Typed cold-start core — scope/partitionTag derivation, storage-ops wiring, and
28
30
  // per-slice handler building (functor + decode + handleCommands), all
@@ -263,7 +263,7 @@ let buildInboundReceiver = (
263
263
  let id = result->ReventlessCore.InboundTranslationSlice_Callback.requestIdOf
264
264
  switch callback.auditLog->ReventlessCore.InboundTranslationSlice_Callback.takeAuditRow(id) {
265
265
  | Some(row) =>
266
- let json = row->S.reverseConvertToJsonOrThrow(
266
+ let json = row->Reventless.Util_Sury.toJson(
267
267
  ReventlessCore.InboundTranslationSlice_Callback.auditRowSchema,
268
268
  )
269
269
  // A failed audit write must not fail the mutation (the command was
@@ -1,6 +1,5 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as Stdlib_JsExn from "@rescript/runtime/lib/es6/Stdlib_JsExn.js";
5
4
  import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
6
5
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
@@ -9,6 +8,7 @@ import * as Stream from "effect/Stream";
9
8
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
10
9
  import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
11
10
  import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
11
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
12
12
  import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
13
13
  import * as QueryDb$ReventlessCore from "@reventlessdev/reventless-core/src/components/QueryDb/QueryDb.res.mjs";
14
14
  import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src/util/EffectLogger.res.mjs";
@@ -109,7 +109,7 @@ function buildInboundReceiver(spec, translation, publishJsons, auditQueryDbOps)
109
109
  let id = InboundTranslationSlice_Callback$ReventlessCore.requestIdOf(result);
110
110
  let row = InboundTranslationSlice_Callback$ReventlessCore.takeAuditRow(callback.auditLog, id);
111
111
  if (row !== undefined) {
112
- let json = S.reverseConvertToJsonOrThrow(row, InboundTranslationSlice_Callback$ReventlessCore.auditRowSchema);
112
+ let json = Util_Sury$Reventless.toJson(row, InboundTranslationSlice_Callback$ReventlessCore.auditRowSchema);
113
113
  try {
114
114
  let err = await auditQueryDbOps.save(id, json, "Overwrite", undefined);
115
115
  if (err.TAG !== "Ok") {
@@ -135,4 +135,4 @@ export {
135
135
  buildSliceHandler,
136
136
  buildInboundReceiver,
137
137
  }
138
- /* S Not a pure module */
138
+ /* Stdlib_JsExn Not a pure module */
@@ -45,7 +45,7 @@ let handler = async (_event: JSON.t, _context: PulumiAws.Lambda.context) => {
45
45
  ),
46
46
  commandJson: ReventlessInfra.PluginExtensionPointSpec.Heartbeat(
47
47
  timeout,
48
- )->S.reverseConvertToJsonOrThrow(ReventlessInfra.PluginExtensionPointSpec.commandSchema),
48
+ )->Reventless.Util_Sury.toJson(ReventlessInfra.PluginExtensionPointSpec.commandSchema),
49
49
  }
50
50
  await publishJsons([message])
51
51
  ""
@@ -1,8 +1,8 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as S from "sury/src/S.res.mjs";
4
3
  import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
5
4
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
5
+ import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
6
6
  import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
7
7
  import * as HandlerFactoryHelpersMjs from "./HandlerFactoryHelpers.mjs";
8
8
  import * as PluginExtensionPointSpec$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/PluginExtensionPointSpec.res.mjs";
@@ -27,7 +27,7 @@ let runtimeExtensionsReady = HandlerFactoryHelpersMjs.runtimeExtensionsReady;
27
27
  async function handler(_event, _context) {
28
28
  await runtimeExtensionsReady;
29
29
  let message_meta = Message$ReventlessCore.generateMeta(PluginExtensionPointSpec$ReventlessInfra.name, "", "Heartbeat", undefined, undefined, undefined, undefined, undefined);
30
- let message_commandJson = S.reverseConvertToJsonOrThrow({
30
+ let message_commandJson = Util_Sury$Reventless.toJson({
31
31
  TAG: "Heartbeat",
32
32
  _0: timeout
33
33
  }, PluginExtensionPointSpec$ReventlessInfra.commandSchema);
@@ -355,7 +355,17 @@ let makeFromCodeAsset: (
355
355
  // Announce the provisioned execution unit to the Monitoring registry. No-op
356
356
  // unless a deploy program registered a backend via Monitoring.use — see
357
357
  // docs/plans/done/monitoring-hook-seam.md.
358
- ReventlessCore.Monitoring.notify(~kind=unitKind, ~name, ~component=lambdaResource)
358
+ //
359
+ // `~logLocator` is resolved from the branch actually taken above: the managed
360
+ // group when one was created, the group Lambda auto-creates otherwise. This is
361
+ // the only place both are known, which is why the seam is told rather than
362
+ // leaving a backend to guess.
363
+ ReventlessCore.Monitoring.notify(
364
+ ~kind=unitKind,
365
+ ~name,
366
+ ~component=lambdaResource,
367
+ ~logLocator=Util_LambdaLogging.logLocatorFor(~logGroup, ~physicalName=lambdaResource.name),
368
+ )
359
369
 
360
370
  {
361
371
  parts: {lambda: lambda->Pulumi.Output.make, lambdaRole},
@@ -167,7 +167,7 @@ function makeFromCodeAsset(name, unitKind, componentKind, code, sourceCodeHash,
167
167
  });
168
168
  }
169
169
  let lambdaResource = Util_Lambda$ReventlessAws.functionToResource(tags, lambda);
170
- Monitoring$ReventlessCore.notify(unitKind, name, lambdaResource);
170
+ Monitoring$ReventlessCore.notify(unitKind, name, lambdaResource, Util_LambdaLogging$ReventlessAws.logLocatorFor(logGroup, lambdaResource.name));
171
171
  return {
172
172
  parts: {
173
173
  lambda: Pulumi.output(lambda),
@@ -136,7 +136,7 @@ let makeJsonEventsHandler = (
136
136
  Effect.sync(() =>
137
137
  try {
138
138
  let {event, meta, recordedAt} = decodeEnvelope(json)
139
- project({event: event->S.parseJsonOrThrow(eventSchema), meta, recordedAt})
139
+ project({event: event->Reventless.Util_Sury.fromJson(eventSchema), meta, recordedAt})
140
140
  } catch {
141
141
  | exn =>
142
142
  StreamRoutedEntryPoint_Ops.logError(