@reventlessdev/reventless-local 3.0.0-alpha.249 → 3.0.0-alpha.251

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 (174) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/package.json +13 -13
  3. package/src/BakedManifest.res +5 -6
  4. package/src/EmitCapabilities.res +3 -1
  5. package/src/LocalPlatformRegistry.res +3 -1
  6. package/src/LocalPlatformStart.res +7 -6
  7. package/src/LocalSeedTarget.res +3 -1
  8. package/src/Platform.res +291 -215
  9. package/src/ShellConfig.res +10 -17
  10. package/src/UiHints.res +8 -14
  11. package/src/UiSlots.res +10 -17
  12. package/src/adapter/Api/LocalEvents_Server.res +5 -3
  13. package/src/adapter/Api/LocalGraphQL_Adapter.res +4 -4
  14. package/src/adapter/Auth/LocalAuth.res +12 -16
  15. package/src/adapter/Auth/LocalAuth.res.mjs +2 -1
  16. package/src/adapter/Auth/UserStore.res +13 -40
  17. package/src/adapter/Auth/UserStore.res.mjs +11 -67
  18. package/src/adapter/Backend.res +1 -2
  19. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res +42 -26
  20. package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res +13 -3
  21. package/src/adapter/CommandTopic/LocalCommandTopicChannel.res +15 -17
  22. package/src/adapter/CommandTopic/LocalCommandTopicRemoteChannel.res +18 -22
  23. package/src/adapter/Counter/LocalCounterHandler.res +1 -1
  24. package/src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res +33 -22
  25. package/src/adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res +57 -57
  26. package/src/adapter/DomainGraphQL_Server.res +35 -34
  27. package/src/adapter/DomainMCP_Server.res +45 -41
  28. package/src/adapter/EventCollector/LocalEventCollectorChannel.res +47 -36
  29. package/src/adapter/EventHistory/EventHistoryResolvers_GraphQL.res +15 -12
  30. package/src/adapter/EventLog/EventLogStorage_InMemory.res +9 -4
  31. package/src/adapter/EventLog/EventLogStorage_Sqlite.res +36 -24
  32. package/src/adapter/EventTopic/LocalEventTopicPublisher.res +9 -3
  33. package/src/adapter/Heartbeat/LocalHeartbeatRunner.res +9 -14
  34. package/src/adapter/LocalBus.res +12 -12
  35. package/src/adapter/LocalCapabilities.res +6 -0
  36. package/src/adapter/LocalCapabilities.res.mjs +5 -2
  37. package/src/adapter/LocalGeocodeResolvers.res +1 -4
  38. package/src/adapter/LocalSideEffectHandler.res +1 -1
  39. package/src/adapter/LocalStateChangeDescriptor.res +2 -1
  40. package/src/adapter/MCP_ServerInstance.res +51 -39
  41. package/src/adapter/ObjectStore/LocalObjectStore.res +5 -2
  42. package/src/adapter/ObjectStore/ObjectStoreStorage_FileSystem.res +1 -2
  43. package/src/adapter/PlatformGraphQL_Server.res +10 -6
  44. package/src/adapter/PlatformGraphQL_Server.res.mjs +2 -1
  45. package/src/adapter/ProjectionCheckpoint.res +8 -1
  46. package/src/adapter/ProjectionPending.res +1 -3
  47. package/src/adapter/QueryDb/LocalQueryDbStorage.res +2 -1
  48. package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res +367 -269
  49. package/src/adapter/QueryDb/QueryDbStorage_InMemory.res +5 -3
  50. package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res +63 -40
  51. package/src/adapter/QueryDb/SortKey_Filter.res +14 -6
  52. package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res +12 -10
  53. package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res +8 -2
  54. package/src/adapter/Runtime/LocalPluginRuntime_Builder.res +1 -4
  55. package/src/adapter/Scheduler/LocalScheduledPublisher.res +12 -12
  56. package/src/adapter/SqliteDriver.res +16 -4
  57. package/src/adapter/Task/TaskBucket_Sqlite.res +5 -6
  58. package/src/components/Aggregate_Builder.res +6 -1
  59. package/src/components/Counter_Builder.res +1 -5
  60. package/src/components/DcbEventLog_Builder.res +5 -3
  61. package/src/components/ExtensionPoint_Builder.res +13 -15
  62. package/src/components/InboundTranslationSlice_Builder.res +3 -2
  63. package/src/components/OutboundTranslationSlice_Builder.res +3 -2
  64. package/src/components/ReadModel_Builder.res +18 -20
  65. package/src/components/StateViewSlice_Builder.res +3 -2
  66. package/src/components/Task_Builder.res +12 -13
  67. package/src/reset/LocalSeedReset.res +2 -5
  68. package/src/test/Mocks/MockDcbEventLogStorage.res +5 -1
  69. package/src/test/Mocks/MockEventLogStorage.res +8 -3
  70. package/src/test/Mocks/MockQueryDbStorage.res +3 -2
  71. package/src/test/TestRunner.res +1 -1
  72. package/tests/BakedManifestFilesTest.res +7 -10
  73. package/tests/LocalEventTapTest.res +26 -21
  74. package/tests/LocalPlatformStartTest.res +33 -28
  75. package/tests/PluginEventDecodeTest.res +3 -3
  76. package/tests/ShellConfigTest.res +30 -21
  77. package/tests/SplitApiFixtures.res +34 -10
  78. package/tests/SplitApiTest.res +92 -62
  79. package/tests/adapter/BackendParityTest.res +180 -130
  80. package/tests/adapter/CollectNEventsTest.res +6 -4
  81. package/tests/adapter/CommandAuthorizationTest.res +47 -41
  82. package/tests/adapter/CommandTopicChannelTest.res +163 -139
  83. package/tests/adapter/CounterHandlerTest.res +95 -77
  84. package/tests/adapter/DcbEventLogStorageSqliteTest.res +171 -168
  85. package/tests/adapter/DcbEventLogStorageTest.res +264 -207
  86. package/tests/adapter/DomainGraphQL_ServerTest.res +53 -43
  87. package/tests/adapter/EventCollectorChannelTest.res +153 -124
  88. package/tests/adapter/EventHistoryResolverTest.res +46 -18
  89. package/tests/adapter/EventLogSnapshotParityTest.res +57 -45
  90. package/tests/adapter/EventLogStorageSqliteTest.res +9 -10
  91. package/tests/adapter/EventTapTest.res +37 -20
  92. package/tests/adapter/EventTopicPublisherTest.res +74 -50
  93. package/tests/adapter/GraphQLSubscriptionBridgeTest.res +4 -3
  94. package/tests/adapter/GraphQL_SchemaInspectorTest.res +666 -568
  95. package/tests/adapter/GraphQL_SubscriptionResolversTest.res +105 -96
  96. package/tests/adapter/HeartbeatRunnerTest.res +99 -81
  97. package/tests/adapter/InboundTranslationMutationTest.res +4 -1
  98. package/tests/adapter/LocalAuthHttpTest.res +79 -85
  99. package/tests/adapter/LocalAuthLoginTest.res +42 -50
  100. package/tests/adapter/LocalAuthTest.res +8 -16
  101. package/tests/adapter/LocalAuthUserStoreTest.res +2 -7
  102. package/tests/adapter/LocalBusBoundedTest.res +187 -117
  103. package/tests/adapter/LocalBusPubSubTest.res +118 -76
  104. package/tests/adapter/LocalDispatchContextTest.res +1 -2
  105. package/tests/adapter/LocalEvents_ServerTest.res +242 -187
  106. package/tests/adapter/PgProjectionCatchupTest.res +44 -10
  107. package/tests/adapter/ProjectionCheckpointTest.res +261 -206
  108. package/tests/adapter/QueryDbGsiTtlTest.res +123 -83
  109. package/tests/adapter/QueryDbListPushdownParityTest.res +107 -67
  110. package/tests/adapter/QueryDbListResolverTest.res +225 -208
  111. package/tests/adapter/QueryDbResolvedFieldsTest.res +17 -14
  112. package/tests/adapter/QueryDbStorageSqliteTest.res +33 -49
  113. package/tests/adapter/QueryDbStorageTest.res +163 -117
  114. package/tests/adapter/QueryDbUnionRoundTripTest.res +8 -10
  115. package/tests/adapter/QueryEngineTest.res +179 -126
  116. package/tests/adapter/ScheduledPublisherTest.res +171 -135
  117. package/tests/adapter/ServedBucketHttpTest.res +65 -59
  118. package/tests/adapter/SortKey_FilterTest.res +19 -3
  119. package/tests/adapter/SqliteDriverTest.res +13 -10
  120. package/tests/adapter/TaskBucketTest.res +94 -80
  121. package/tests/components/aggregate/AggregateTest.res +31 -18
  122. package/tests/components/automationslice/AutomationSliceCallbackTest.res +259 -222
  123. package/tests/components/automationslice/AutomationSliceFixtures.res +4 -2
  124. package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res +38 -38
  125. package/tests/components/automationslice/MixedSourceAutomationSliceFixtures.res +12 -14
  126. package/tests/components/automationslice/MixedSourceAutomationSliceTest.res +8 -32
  127. package/tests/components/commandgenerator/CommandGeneratorFixtures.res +7 -5
  128. package/tests/components/commandgenerator/CommandGeneratorTest.res +40 -31
  129. package/tests/components/commandtopic/CommandTopicFixtures.res +3 -4
  130. package/tests/components/commandtopic/CommandTopicStreamFixtures.res +7 -5
  131. package/tests/components/commandtopic/CommandTopicTest.res +24 -15
  132. package/tests/components/counter/CounterFixtures.res +6 -8
  133. package/tests/components/dcb/DcbCrossPartitionFixtures.res +8 -2
  134. package/tests/components/dcb/DcbCrossPartitionReadTest.res +20 -13
  135. package/tests/components/dcb/DcbEventLogAppendStreamTest.res +12 -8
  136. package/tests/components/dcb/DcbEventLogStreamTest.res +88 -61
  137. package/tests/components/dcb/DcbFixtures.res +4 -1
  138. package/tests/components/dcb/DcbTest.res +9 -6
  139. package/tests/components/eventcollector/EventCollectorFixtures.res +0 -1
  140. package/tests/components/eventcollector/EventCollectorTest.res +6 -3
  141. package/tests/components/eventlog/EventLogAppendStreamTest.res +88 -68
  142. package/tests/components/eventlog/EventLogConflictTest.res +8 -4
  143. package/tests/components/eventlog/EventLogFixtures.res +3 -3
  144. package/tests/components/eventlog/EventLogProvisioningSeamTest.res +26 -13
  145. package/tests/components/eventlog/EventLogStreamTest.res +119 -56
  146. package/tests/components/eventlog/EventLogTest.res +20 -4
  147. package/tests/components/eventtopic/EventTopicFixtures.res +3 -3
  148. package/tests/components/eventtopic/EventTopicStreamFixtures.res +1 -2
  149. package/tests/components/eventtopic/EventTopicStreamTest.res +7 -1
  150. package/tests/components/extensionpoint/ExtensionPointFixtures.res +14 -9
  151. package/tests/components/extensionpoint/ExtensionPointTest.res +3 -2
  152. package/tests/components/heartbeat/HeartbeatFixtures.res +5 -6
  153. package/tests/components/heartbeat/HeartbeatTest.res +56 -47
  154. package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res +271 -249
  155. package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res +3 -2
  156. package/tests/components/outboundtranslationslice/OutboundTranslationSliceCallbackTest.res +361 -276
  157. package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res +8 -10
  158. package/tests/components/outboundtranslationslice/OutboundTranslationSlicePlatformFixtures.res +37 -43
  159. package/tests/components/querydb/QueryDbFixtures.res +1 -5
  160. package/tests/components/querydb/QueryDbTest.res +2 -4
  161. package/tests/components/readmodel/DcbReadModelE2EFixtures.res +15 -18
  162. package/tests/components/readmodel/MixedSourceReadModelFixtures.res +5 -7
  163. package/tests/components/readmodel/ReadModelFixtures.res +8 -8
  164. package/tests/components/scheduler/SchedulerTest.res +76 -58
  165. package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res +4 -4
  166. package/tests/components/stateviewslice/StateViewSliceDisplayNameFixtures.res +5 -7
  167. package/tests/components/stateviewslice/StateViewSliceFixtures.res +8 -6
  168. package/tests/components/stateviewslice/StateViewSliceSubIdFixtures.res +17 -11
  169. package/tests/components/stateviewslice/StateViewSliceSubIdTest.res +12 -2
  170. package/tests/components/task/TaskFixtures.res +5 -5
  171. package/tests/components/task/TaskTest.res +95 -80
  172. package/tests/plugin/PluginsProjection_GWT.res +3 -1
  173. package/tests/plugin/UiFragments_GWT.res +6 -1
  174. package/tests/reset/LocalSeedResetTest.res +1 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,36 @@
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.251 (2026-09-11)
7
+
8
+ * feat(spec)!: a secret is a capability, so a test can know it in advance ([71507c6](https://github.com/ReventlessDev/reventless-core/commit/71507c6459b49178746f00c5040cb479d7fdade8))
9
+ * feat(spec)!: making a principal is a capability, so the provider is replaceable ([3e59b9b](https://github.com/ReventlessDev/reventless-core/commit/3e59b9b665cc7e4b6b6f156b63b1b6bd0c6181ca))
10
+ ### Features
11
+
12
+ * **aws:** the first administrator is one command, not the console ([5f1a846](https://github.com/ReventlessDev/reventless-core/commit/5f1a84603b21a9feb691a08a148751c6c6e8eca8))
13
+ * **aws:** the rest of the cast is a file, not a comment ([aa23581](https://github.com/ReventlessDev/reventless-core/commit/aa23581f09948a47fb451ec2ecf2fc2bdd8e6ee6))
14
+
15
+ ### BREAKING CHANGES
16
+
17
+ * Capabilities.t gains a secrets member. A platform that builds
18
+ the record literally no longer compiles until it supplies one;
19
+ Capabilities.none.secrets is the refusing value. Code that spreads
20
+ Capabilities.none is unaffected.
21
+ * Capabilities.t gains an identityProvider member. A platform
22
+ that builds the record literally no longer compiles until it supplies one;
23
+ Capabilities.none.identityProvider is the refusing value to pass while no
24
+ backend exists. Code that spreads Capabilities.none is unaffected.
25
+
26
+
27
+
28
+ # 3.0.0-alpha.250 (2026-09-09)
29
+
30
+ **Note:** Version bump only for package @reventlessdev/reventless-local
31
+
32
+
33
+
34
+
35
+
6
36
  # 3.0.0-alpha.249 (2026-09-08)
7
37
 
8
38
  **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.249",
3
+ "version": "3.0.0-alpha.251",
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": {
@@ -34,19 +34,19 @@
34
34
  "graphql-yoga": "^5.21.0",
35
35
  "sury": "11.0.0-rc.2",
36
36
  "ws": "^8.18.0",
37
- "@reventlessdev/rescript-node": "2.0.0-alpha.10",
37
+ "@reventlessdev/rescript-effect": "0.1.0-alpha.33",
38
+ "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.28",
39
+ "@reventlessdev/rescript-mcp-sdk": "1.0.0-alpha.22",
40
+ "@reventlessdev/rescript-node": "2.0.0-alpha.11",
38
41
  "@reventlessdev/rescript-jest": "1.0.0-alpha.10",
39
- "@reventlessdev/rescript-mcp-sdk": "1.0.0-alpha.21",
40
- "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.19",
41
- "@reventlessdev/reventless-core": "3.0.0-alpha.260",
42
- "@reventlessdev/reventless-graphql-server": "1.0.0-alpha.108",
43
- "@reventlessdev/rescript-effect": "0.1.0-alpha.32",
44
- "@reventlessdev/reventless-infra": "3.0.0-alpha.161",
45
- "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.27",
46
- "@reventlessdev/reventless-postgres": "3.0.0-alpha.124",
47
- "@reventlessdev/reventless-gwt": "1.0.0-alpha.207",
48
- "@reventlessdev/reventless-spec": "3.0.0-alpha.133",
49
- "@reventlessdev/reventless-seed": "1.0.0-alpha.20"
42
+ "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.20",
43
+ "@reventlessdev/reventless-core": "3.0.0-alpha.262",
44
+ "@reventlessdev/reventless-graphql-server": "1.0.0-alpha.110",
45
+ "@reventlessdev/reventless-gwt": "1.0.0-alpha.209",
46
+ "@reventlessdev/reventless-infra": "3.0.0-alpha.163",
47
+ "@reventlessdev/reventless-postgres": "3.0.0-alpha.126",
48
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.135",
49
+ "@reventlessdev/reventless-seed": "1.0.0-alpha.21"
50
50
  },
51
51
  "devDependencies": {
52
52
  "rescript": "12.3.0",
@@ -16,10 +16,10 @@ let log = ReventlessCore.Logger.fromEnv()
16
16
  for the reason the curation is: the key a file is written under and the URL a
17
17
  shell fetches it from have to be the same string on either platform.
18
18
  */
19
- let files = (
20
- ~config: ReventlessInfra.Platform.bakedManifest,
21
- ): array<(string, array<ReventlessCore.Platform_BakedManifest.selection>)> =>
22
- ReventlessCore.Platform_BakedManifest.files(~config)
19
+ let files = (~config: ReventlessInfra.Platform.bakedManifest): array<(
20
+ string,
21
+ array<ReventlessCore.Platform_BakedManifest.selection>,
22
+ )> => ReventlessCore.Platform_BakedManifest.files(~config)
23
23
 
24
24
  /**
25
25
  A declared bake writes the files or fails loudly. Both failure modes it can hit
@@ -46,8 +46,7 @@ let emit = (
46
46
  | None =>
47
47
  JsError.throwWithMessage(
48
48
  `baked manifest: cannot resolve ${HostShellDist.package} from ${NodeProcess.cwd()} — ` ++
49
- `the local shell serves the file from that package's dist/, so declaring a bake ` ++
50
- `without the package installed would write nothing and render an empty shell.`,
49
+ `the local shell serves the file from that package's dist/, so declaring a bake ` ++ `without the package installed would write nothing and render an empty shell.`,
51
50
  )
52
51
  | Some(dir) =>
53
52
  curated->Array.forEach(((key, manifest)) => {
@@ -80,7 +80,9 @@ let main = async () => {
80
80
  let platformModule: localPlatformExports = await dynImport("./Platform.res.mjs")
81
81
  let platform = platformModule["Make"]()
82
82
 
83
- let composition: compositionExports = await dynImport(NodeUrl.pathToFileURL(modulePath)["href"])
83
+ let composition: compositionExports = await dynImport(
84
+ NodeUrl.pathToFileURL(modulePath)["href"],
85
+ )
84
86
  let built = composition["Make"](platform)
85
87
 
86
88
  let manifestPath = NodePath.join([srcDir, "capabilities.json"])
@@ -73,7 +73,9 @@ let alive = (pid: int): bool =>
73
73
  }
74
74
 
75
75
  let readEntry = (path: string): option<entry> =>
76
- try Some(path->NodeFs.readFileSync->JSON.parseOrThrow->Reventless.Util_Sury.fromJson(entrySchema)) catch {
76
+ try Some(
77
+ path->NodeFs.readFileSync->JSON.parseOrThrow->Reventless.Util_Sury.fromJson(entrySchema),
78
+ ) catch {
77
79
  | _ => None
78
80
  }
79
81
 
@@ -40,23 +40,24 @@ let report = (entries: array<LocalPlatformRegistry.entry>): array<string> =>
40
40
  | [e] => [e->entryLine, ` nothing started — ${e.endpoint} is serving this directory.`]
41
41
  | entries =>
42
42
  Array.concat(
43
- [`→ ${entries->Array.length->Int.toString} platforms are already running in this directory:`],
43
+ [
44
+ `→ ${entries
45
+ ->Array.length
46
+ ->Int.toString} platforms are already running in this directory:`,
47
+ ],
44
48
  entries->Array.map(entryLine),
45
49
  )->Array.concat([" nothing started — stop the ones you do not want, then start again."])
46
50
  }
47
51
 
48
52
  /** The live platform serving this store file, if one is. Resolved against this
49
53
  process's cwd, because the registry's paths are absolute. */
50
- let servedBy = (~path: string, ~cwd=NodeProcess.cwd(), ()): option<
51
- LocalPlatformRegistry.entry,
52
- > => {
54
+ let servedBy = (~path: string, ~cwd=NodeProcess.cwd(), ()): option<LocalPlatformRegistry.entry> => {
53
55
  let resolved = NodePath.resolve([path])
54
56
  LocalPlatformRegistry.list(~cwd, ())->Array.find(e => e.store.path == Some(resolved))
55
57
  }
56
58
 
57
59
  let refusalMessage = (~path: string, e: LocalPlatformRegistry.entry): string =>
58
- `refusing to reset ${path}: it is the store of ${e.app} running at :${e.port->Int.toString} (pid ${e.pid->Int.toString}). ` ++
59
- `Stop that platform first, or start this one without ?reset.`
60
+ `refusing to reset ${path}: it is the store of ${e.app} running at :${e.port->Int.toString} (pid ${e.pid->Int.toString}). ` ++ `Stop that platform first, or start this one without ?reset.`
60
61
 
61
62
  /** Throws rather than letting a reset unlink a store something is serving. Always
62
63
  on: it must protect an app that never calls {!orAddressRunning}. */
@@ -133,7 +133,9 @@ let select = async (): t => {
133
133
  let announce = (t: t): unit =>
134
134
  switch t.origin {
135
135
  | Running(entry) =>
136
- Console.log(`→ ${entry.endpoint} · ${entry.store->storeLabel} (${entry.app->shortAppName})`)
136
+ Console.log(
137
+ `→ ${entry.endpoint} · ${entry.store->storeLabel} (${entry.app->shortAppName})`,
138
+ )
137
139
  | EnvOverride => Console.log(`→ ${t.endpoint} (REVENTLESS_GRAPHQL_ENDPOINT)`)
138
140
  | NoneRunning =>
139
141
  Console.log(`→ ${t.endpoint} (no local platform registered here — trying the default)`)