@reventlessdev/reventless-local 3.0.0-alpha.156 → 3.0.0-alpha.158

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,21 @@
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.158 (2026-07-17)
7
+
8
+ ### Features
9
+
10
+ * **runtime:** platform-supplied EP/task pod runtime floors ([37544d0](https://github.com/ReventlessDev/reventless-core/commit/37544d029d278bbcae6eeb0f583da07d6ce70f04))
11
+
12
+
13
+ # 3.0.0-alpha.157 (2026-07-16)
14
+
15
+ ### Features
16
+
17
+ * **aws:** consume per-component runtime hints; fold into shared command Lambdas ([7ba2485](https://github.com/ReventlessDev/reventless-core/commit/7ba248579f2472f2fc847b26033927199353f3e6))
18
+ * **core:** thread per-component runtime hints from plugin.json (spec/infra/core/local) ([a94f419](https://github.com/ReventlessDev/reventless-core/commit/a94f4199c4ac7eeeb24dd0a71d58fb73c1e514e6))
19
+
20
+
6
21
  # 3.0.0-alpha.156 (2026-07-16)
7
22
 
8
23
  **Note:** Version bump only for package @reventlessdev/reventless-local
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-local",
3
- "version": "3.0.0-alpha.156",
3
+ "version": "3.0.0-alpha.158",
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
  "jest": {
@@ -31,25 +31,25 @@
31
31
  "graphql-yoga": "^5.21.0",
32
32
  "sury": "11.0.0-alpha.4",
33
33
  "ws": "^8.18.0",
34
- "@reventlessdev/rescript-effect": "0.1.0-alpha.27",
35
- "@reventlessdev/rescript-jest": "1.0.0-alpha.7",
36
- "@reventlessdev/rescript-mcp-sdk": "1.0.0-alpha.18",
37
- "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.22",
38
- "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.15",
39
- "@reventlessdev/reventless-core": "3.0.0-alpha.169",
40
- "@reventlessdev/reventless-gwt": "1.0.0-alpha.116",
41
- "@reventlessdev/reventless-graphql-server": "1.0.0-alpha.16",
42
- "@reventlessdev/reventless-postgres": "3.0.0-alpha.33",
43
- "@reventlessdev/reventless-infra": "3.0.0-alpha.100",
44
- "@reventlessdev/reventless-spec": "3.0.0-alpha.77"
34
+ "@reventlessdev/rescript-effect": "0.1.0-alpha.29",
35
+ "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.24",
36
+ "@reventlessdev/rescript-mcp-sdk": "1.0.0-alpha.20",
37
+ "@reventlessdev/rescript-jest": "1.0.0-alpha.9",
38
+ "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.17",
39
+ "@reventlessdev/reventless-core": "3.0.0-alpha.171",
40
+ "@reventlessdev/reventless-graphql-server": "1.0.0-alpha.18",
41
+ "@reventlessdev/reventless-gwt": "1.0.0-alpha.118",
42
+ "@reventlessdev/reventless-infra": "3.0.0-alpha.102",
43
+ "@reventlessdev/reventless-postgres": "3.0.0-alpha.35",
44
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.79"
45
45
  },
46
46
  "devDependencies": {
47
- "rescript": "^12.3.0",
47
+ "rescript": "12.3.0",
48
48
  "sury-ppx": "11.0.0-alpha.2",
49
- "@reventlessdev/reventless-ppx": "1.0.0-alpha.53"
49
+ "@reventlessdev/reventless-ppx": "1.0.0-alpha.54"
50
50
  },
51
51
  "peerDependencies": {
52
- "rescript": "^12.3.0"
52
+ "rescript": "12.3.0"
53
53
  },
54
54
  "publishConfig": {
55
55
  "registry": "https://registry.npmjs.org"
@@ -57,7 +57,7 @@
57
57
  "repository": {
58
58
  "type": "git",
59
59
  "url": "git+https://github.com/ReventlessDev/reventless-core.git",
60
- "directory": "reventless/reventless-local"
60
+ "directory": "reventless/local"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "rescript build",
@@ -10,6 +10,12 @@ module Make = (Bus: LocalBus.T) => {
10
10
  CommandTopicChannel,
11
11
  )
12
12
 
13
+ // The in-memory runtime ignores memorySize; timeout mirrors the AWS EP floor.
14
+ module Defaults: ReventlessInfra.RuntimeDefaults.T = {
15
+ let memorySize = 1024
16
+ let timeout = 30
17
+ }
18
+
13
19
  module Make = (
14
20
  Spec: ReventlessInfra.ExtensionPointMapping.Spec,
15
21
  Mappings: ReventlessInfra.ExtensionPoint.Mappings with module Spec := Spec,
@@ -21,5 +27,6 @@ module Make = (Bus: LocalBus.T) => {
21
27
  CommandTopicChannel,
22
28
  EventTopicPublisher,
23
29
  ExtensionPointRuntimeBuilder,
30
+ Defaults,
24
31
  )
25
32
  }
@@ -18,6 +18,10 @@ function Make(Bus) {
18
18
  })({
19
19
  make: CommandTopicChannel.make
20
20
  });
21
+ let Defaults = {
22
+ memorySize: 1024,
23
+ timeout: 30
24
+ };
21
25
  let Make$1 = Spec => (Mappings => ExtensionPoint_Builder$ReventlessCore.Make(Spec)(Mappings)({
22
26
  make: LocalRuntimeEnvironment$ReventlessLocal.make,
23
27
  groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
@@ -28,12 +32,13 @@ function Make(Bus) {
28
32
  make: CommandTopicChannel.make
29
33
  })(EventTopicPublisher)({
30
34
  forCommandTopic: ExtensionPointRuntimeBuilder.forCommandTopic
31
- }));
35
+ })(Defaults));
32
36
  return {
33
37
  RuntimeEnvironment: undefined,
34
38
  CommandTopicChannel: CommandTopicChannel,
35
39
  EventTopicPublisher: EventTopicPublisher,
36
40
  ExtensionPointRuntimeBuilder: ExtensionPointRuntimeBuilder,
41
+ Defaults: Defaults,
37
42
  Make: Make$1
38
43
  };
39
44
  }
@@ -14,6 +14,7 @@ module Make = (
14
14
  ~publishJsons: Pulumi.Output.t<ReventlessInfra.CommandTopic.publishJsons>,
15
15
  ~tagKeysByEventType: Dict.t<array<string>>=?,
16
16
  ~crossPartitionTagKeys: array<string>=?,
17
+ ~runtime: ReventlessInfra.RuntimeHints.t=?,
17
18
  ~opts: Pulumi.ComponentResource.options=?,
18
19
  ) => component = Inner.make
19
20
  }
@@ -13,6 +13,12 @@ module Make = (Bus: LocalBus.T) => {
13
13
  )
14
14
  module SideEffectHandler = LocalSideEffectHandler
15
15
 
16
+ // The in-memory runtime ignores memorySize; timeout mirrors the AWS task floor.
17
+ module Defaults: ReventlessInfra.RuntimeDefaults.T = {
18
+ let memorySize = 4096
19
+ let timeout = 600
20
+ }
21
+
16
22
  module Make = (
17
23
  Spec: ReventlessCore.Task.Spec,
18
24
  ): (ReventlessCore.Task.T with module Spec = Spec) =>
@@ -24,5 +30,6 @@ module Make = (Bus: LocalBus.T) => {
24
30
  TaskRuntimeBuilder,
25
31
  LocalTaskBucket,
26
32
  SideEffectHandler,
33
+ Defaults,
27
34
  )
28
35
  }
@@ -18,19 +18,24 @@ function Make(Bus) {
18
18
  asEventHandler: prim => prim,
19
19
  asEffectHandler: prim => prim
20
20
  })(LocalTaskBucket$ReventlessLocal);
21
+ let Defaults = {
22
+ memorySize: 4096,
23
+ timeout: 600
24
+ };
21
25
  let Make$1 = Spec => Task_Builder$ReventlessCore.Make(Spec)({
22
26
  make: LocalRuntimeEnvironment$ReventlessLocal.make,
23
27
  groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
24
28
  extractCorrelationId: LocalRuntimeEnvironment$ReventlessLocal.extractCorrelationId,
25
29
  asEventHandler: prim => prim,
26
30
  asEffectHandler: prim => prim
27
- })(EventCollectorChannel)(EventCollectorRuntimeBuilder)(TaskRuntimeBuilder)(LocalTaskBucket$ReventlessLocal)(LocalSideEffectHandler$ReventlessLocal);
31
+ })(EventCollectorChannel)(EventCollectorRuntimeBuilder)(TaskRuntimeBuilder)(LocalTaskBucket$ReventlessLocal)(LocalSideEffectHandler$ReventlessLocal)(Defaults);
28
32
  return {
29
33
  RuntimeEnvironment: undefined,
30
34
  EventCollectorChannel: EventCollectorChannel,
31
35
  EventCollectorRuntimeBuilder: EventCollectorRuntimeBuilder,
32
36
  TaskRuntimeBuilder: TaskRuntimeBuilder,
33
37
  SideEffectHandler: undefined,
38
+ Defaults: Defaults,
34
39
  Make: Make$1
35
40
  };
36
41
  }
@@ -96,7 +96,7 @@ let ItemAgg = ItemAggregateMaker.Make({
96
96
  commandSchema: commandSchema
97
97
  }));
98
98
 
99
- let agg = ItemAgg.make(undefined, undefined);
99
+ let agg = ItemAgg.make(undefined, undefined, undefined);
100
100
 
101
101
  export {
102
102
  ItemSpec,
@@ -342,7 +342,7 @@ let PlaceMaker = StateChangeSlice_Builder$ReventlessLocal.Make({
342
342
  moduleUrl: moduleUrl$1
343
343
  });
344
344
 
345
- let _placeSlice = PlaceMaker.make(dcbEventLog, publishJsonsOutput, undefined, undefined, undefined);
345
+ let _placeSlice = PlaceMaker.make(dcbEventLog, publishJsonsOutput, undefined, undefined, undefined, undefined);
346
346
 
347
347
  let ShipMaker = StateChangeSlice_Builder$ReventlessLocal.Make({
348
348
  name: name$1,
@@ -361,7 +361,7 @@ let ShipMaker = StateChangeSlice_Builder$ReventlessLocal.Make({
361
361
  moduleUrl: moduleUrl$3
362
362
  });
363
363
 
364
- let _shipSlice = ShipMaker.make(dcbEventLog, publishJsonsOutput, undefined, undefined, undefined);
364
+ let _shipSlice = ShipMaker.make(dcbEventLog, publishJsonsOutput, undefined, undefined, undefined, undefined);
365
365
 
366
366
  let dcbTopicOutputs = Component$ReventlessInfra.outputs(dcbEventLog).eventTopic;
367
367
 
@@ -381,7 +381,7 @@ let AutomationSliceMaker = AutomationSlice_Builder$ReventlessLocal.Make(Bus);
381
381
 
382
382
  let AutoShip = AutomationSliceMaker.Make(AutoShipSpec)(AutoShipAutomation);
383
383
 
384
- let autoShipSlice = AutoShip.make(allEventTopics, publishJsonsOutput, testContext, undefined);
384
+ let autoShipSlice = AutoShip.make(allEventTopics, publishJsonsOutput, testContext, undefined, undefined);
385
385
 
386
386
  function placeCmdJson(orderId) {
387
387
  return {
@@ -205,7 +205,7 @@ async function mockPublishJsons(cmds) {
205
205
  publishedCommands.contents = publishedCommands.contents.concat(cmds);
206
206
  }
207
207
 
208
- let slice = AutoFulfill.make(allEventTopics, Pulumi.output(mockPublishJsons), testContext, undefined);
208
+ let slice = AutoFulfill.make(allEventTopics, Pulumi.output(mockPublishJsons), testContext, undefined, undefined);
209
209
 
210
210
  async function publishAggregateEvent(id, event) {
211
211
  let meta = TestFixtures$ReventlessLocal.makeTestMeta(name);
@@ -225,7 +225,7 @@ let _addProductSlice = AddProductMaker.make(eventLog, publishJsonsOutput, Object
225
225
  "CategoryAdded",
226
226
  ["categoryId"]
227
227
  ]
228
- ]), ["categoryId"], undefined);
228
+ ]), ["categoryId"], undefined, undefined);
229
229
 
230
230
  async function dispatch(commandJson, id) {
231
231
  return await publishJsons([{
@@ -168,7 +168,7 @@ async function publishJsons(cmdJsons) {
168
168
 
169
169
  let publishJsonsOutput = Pulumi.output(publishJsons);
170
170
 
171
- let _addItemSlice = AddItemMaker.make(eventLog, publishJsonsOutput, undefined, undefined, undefined);
171
+ let _addItemSlice = AddItemMaker.make(eventLog, publishJsonsOutput, undefined, undefined, undefined, undefined);
172
172
 
173
173
  async function dispatch(commandJson, id) {
174
174
  return await publishJsons([{
@@ -162,7 +162,7 @@ let ep = TestEP.make(Object.fromEntries([[
162
162
  ]]), Object.fromEntries([[
163
163
  "TargetAgg",
164
164
  mockPublishFn
165
- ]]), TestFixtures$ReventlessLocal.mockScheduler, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, undefined);
165
+ ]]), TestFixtures$ReventlessLocal.mockScheduler, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, undefined, undefined);
166
166
 
167
167
  let testMeta = TestFixtures$ReventlessLocal.makeTestMeta("TestEP");
168
168
 
@@ -233,7 +233,7 @@ async function publishJsons(cmdJsons) {
233
233
 
234
234
  let publishJsonsOutput = Pulumi.output(publishJsons);
235
235
 
236
- let _addProductSlice = AddProductMaker.make(dcbEventLog, publishJsonsOutput, undefined, undefined, undefined);
236
+ let _addProductSlice = AddProductMaker.make(dcbEventLog, publishJsonsOutput, undefined, undefined, undefined, undefined);
237
237
 
238
238
  let dcbTopicOutputs = Component$ReventlessInfra.outputs(dcbEventLog).eventTopic;
239
239
 
@@ -255,7 +255,7 @@ let ProductsReadModel = ReadModelMaker.Make({
255
255
  visibility: "Public"
256
256
  })(ProductsMappings);
257
257
 
258
- let rm = ProductsReadModel.make(undefined, undefined, allEventTopics, undefined);
258
+ let rm = ProductsReadModel.make(undefined, undefined, allEventTopics, undefined, undefined);
259
259
 
260
260
  async function dispatch(commandJson, id) {
261
261
  return await publishJsons([{
@@ -122,7 +122,7 @@ globalThis.describe("ReadModel source-name fail-fast:", () => {
122
122
  let threw = false;
123
123
  let msg = "";
124
124
  try {
125
- RmMaker.make(undefined, undefined, allEventTopics, undefined);
125
+ RmMaker.make(undefined, undefined, allEventTopics, undefined, undefined);
126
126
  } catch (raw_err) {
127
127
  let err = Primitive_exceptions.internalToException(raw_err);
128
128
  if (err.RE_EXN_ID === "JsExn") {
@@ -205,7 +205,7 @@ let MixedRM = ReadModelMaker.Make({
205
205
  visibility: "Public"
206
206
  })(MixedMappings);
207
207
 
208
- let rm = MixedRM.make(undefined, undefined, allEventTopics, undefined);
208
+ let rm = MixedRM.make(undefined, undefined, allEventTopics, undefined, undefined);
209
209
 
210
210
  async function publishAggregateEvent(id, event) {
211
211
  let meta = TestFixtures$ReventlessLocal.makeTestMeta("TestAggregateEventTopic");
@@ -116,7 +116,7 @@ let ItemReadModel = ReadModelMaker.Make({
116
116
  visibility: "Public"
117
117
  })(ItemMappings);
118
118
 
119
- let rm = ItemReadModel.make(undefined, undefined, allEventTopics, undefined);
119
+ let rm = ItemReadModel.make(undefined, undefined, allEventTopics, undefined, undefined);
120
120
 
121
121
  let testMeta = TestFixtures$ReventlessLocal.makeTestMeta("TestItemEventTopic");
122
122
 
@@ -139,7 +139,7 @@ let ItemsViewMaker = SVMaker.Make({
139
139
  moduleUrl: moduleUrl$1
140
140
  });
141
141
 
142
- let sv = ItemsViewMaker.make(eventLog, undefined);
142
+ let sv = ItemsViewMaker.make(eventLog, undefined, undefined);
143
143
 
144
144
  let dcbEventTopicResource = Component$ReventlessCore.outputs(eventLog).eventTopic.resources[0];
145
145
 
@@ -134,7 +134,7 @@ let ScoresViewMaker = SVMaker.Make({
134
134
  moduleUrl: moduleUrl$1
135
135
  });
136
136
 
137
- let sv = ScoresViewMaker.make(eventLog, undefined);
137
+ let sv = ScoresViewMaker.make(eventLog, undefined, undefined);
138
138
 
139
139
  let dcbEventTopicResource = Component$ReventlessCore.outputs(eventLog).eventTopic.resources[0];
140
140
 
@@ -10,30 +10,30 @@ globalThis.describe("Task_Builder.Make:", () => {
10
10
  globalThis.beforeEach(() => TaskFixtures$ReventlessLocal.resetCaptures());
11
11
  globalThis.describe("make — no buckets:", () => {
12
12
  globalThis.test("creates component with correct output name", async () => {
13
- let task = TaskFixtures$ReventlessLocal.NoBucketsMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined);
13
+ let task = TaskFixtures$ReventlessLocal.NoBucketsMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined, undefined);
14
14
  let outputs = TaskFixtures$ReventlessLocal.NoBucketsMaker.outputs(task);
15
15
  globalThis.expect(outputs.name).toBe("NoBucketsTask");
16
16
  });
17
17
  globalThis.test("task with no buckets has no bucketNames in outputs", async () => {
18
- let task = TaskFixtures$ReventlessLocal.NoBucketsMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined);
18
+ let task = TaskFixtures$ReventlessLocal.NoBucketsMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined, undefined);
19
19
  let outputs = TaskFixtures$ReventlessLocal.NoBucketsMaker.outputs(task);
20
20
  globalThis.expect(Stdlib_Option.isSome(outputs.bucketNames)).toBe(false);
21
21
  });
22
22
  });
23
23
  globalThis.describe("make — one named bucket with callback:", () => {
24
24
  globalThis.test("creates component with correct output name", async () => {
25
- let task = TaskFixtures$ReventlessLocal.OneBucketMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined);
25
+ let task = TaskFixtures$ReventlessLocal.OneBucketMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined, undefined);
26
26
  let outputs = TaskFixtures$ReventlessLocal.OneBucketMaker.outputs(task);
27
27
  globalThis.expect(outputs.name).toBe("OneBucketTask");
28
28
  });
29
29
  globalThis.test("bucketNames dict contains the named bucket key", async () => {
30
- let task = TaskFixtures$ReventlessLocal.OneBucketMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined);
30
+ let task = TaskFixtures$ReventlessLocal.OneBucketMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined, undefined);
31
31
  let outputs = TaskFixtures$ReventlessLocal.OneBucketMaker.outputs(task);
32
32
  let bucketNames = outputs.bucketNames;
33
33
  globalThis.expect(Object.keys(bucketNames)).toEqual(["Reports"]);
34
34
  });
35
35
  globalThis.test("bucket id resolves to the bucket name (in-memory dummy resource)", async () => {
36
- let task = TaskFixtures$ReventlessLocal.OneBucketMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined);
36
+ let task = TaskFixtures$ReventlessLocal.OneBucketMaker.make(TaskFixtures$ReventlessLocal.mockQueryBucketName, TestFixtures$ReventlessLocal.mockScheduler, Pulumi.output(""), TaskFixtures$ReventlessLocal.mockPublishToAggregates, TestFixtures$ReventlessLocal.mockQueryEngine, TestFixtures$ReventlessLocal.mockResourceNaming, {}, undefined, undefined);
37
37
  let outputs = TaskFixtures$ReventlessLocal.OneBucketMaker.outputs(task);
38
38
  let bucketNames = outputs.bucketNames;
39
39
  let idOutput = bucketNames["Reports"];