@reventlessdev/reventless-local 3.0.0-alpha.290 → 3.0.0-alpha.292
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 +21 -0
- package/package.json +11 -11
- package/src/BakedManifest.res +7 -2
- package/src/BakedManifest.res.mjs +4 -4
- package/src/HostShellDist.res +11 -0
- package/src/HostShellDist.res.mjs +14 -1
- package/src/Platform.res +31 -19
- package/src/Platform.res.mjs +63 -60
- package/src/ShellConfig.res +27 -24
- package/src/ShellConfig.res.mjs +25 -13
- package/src/UiHints.res +4 -6
- package/src/UiSlots.res +2 -3
- package/src/adapter/Auth/LocalAuth.res +2 -2
- package/src/adapter/Backend.res +2 -2
- package/src/adapter/LocalBus.res +1 -1
- package/src/adapter/LocalUploadResolvers.res +1 -1
- package/src/components/Aggregate_Builder.res +2 -2
- package/src/components/Aggregate_Builder.res.mjs +4 -4
- package/src/components/DcbEventLog_Builder.res +1 -1
- package/src/components/StateChangeSlice_Builder.res +3 -3
- package/src/components/StateChangeSlice_Builder.res.mjs +3 -3
- package/src/reset/LocalSeedReset.res +1 -1
- package/tests/HostShellDistTest.res +70 -0
- package/tests/HostShellDistTest.res.mjs +75 -0
- package/tests/ShellConfigTest.res +45 -7
- package/tests/ShellConfigTest.res.mjs +45 -8
- package/tests/adapter/BackendParityTest.res +1 -1
- package/tests/adapter/EventHistoryResolverTest.res +2 -2
- package/tests/adapter/GraphQL_SchemaInspectorTest.res +1 -1
- package/tests/adapter/LocalAuthLoginTest.res +1 -1
- package/tests/adapter/QueryDbListResolverTest.res +1 -1
- package/tests/adapter/QueryDbResolvedFieldsTest.res +1 -1
- package/tests/components/aggregate/AggregateFixtures.res +6 -6
- package/tests/components/aggregate/AggregateFixtures.res.mjs +3 -3
- package/tests/components/aggregate/AggregateSelfMappingFixtures.res +2 -2
- package/tests/components/aggregate/AggregateSelfMappingFixtures.res.mjs +3 -3
- package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res +4 -4
- package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res.mjs +4 -4
- package/tests/components/commandgenerator/CommandGeneratorFixtures.res +3 -3
- package/tests/components/commandgenerator/CommandGeneratorFixtures.res.mjs +4 -4
- package/tests/components/dcb/DcbCrossPartitionFixtures.res +2 -2
- package/tests/components/dcb/DcbCrossPartitionFixtures.res.mjs +2 -2
- package/tests/components/dcb/DcbFixtures.res +2 -2
- package/tests/components/dcb/DcbFixtures.res.mjs +2 -2
- package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res +1 -1
- package/tests/components/outboundtranslationslice/OutboundTranslationSlicePlatformFixtures.res +2 -2
- package/tests/components/outboundtranslationslice/OutboundTranslationSlicePlatformFixtures.res.mjs +2 -2
- package/tests/components/readmodel/DcbReadModelE2EFixtures.res +2 -2
- package/tests/components/readmodel/DcbReadModelE2EFixtures.res.mjs +2 -2
- package/tests/plugin/{PluginBehavior_GWT.res → PluginDecision_GWT.res} +2 -2
- package/tests/plugin/{PluginBehavior_GWT.res.mjs → PluginDecision_GWT.res.mjs} +8 -8
- package/tests/plugin/UiFragmentRegistry_GWT.res +1 -1
- package/tests/plugin/UiFragmentRegistry_GWT.res.mjs +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
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.292 (2026-10-21)
|
|
7
|
+
|
|
8
|
+
* feat!: the write-side logic module is called the decision, and a codemod moves an app over ([cb573ff](https://github.com/ReventlessDev/reventless-core/commit/cb573ff5b928c7d7f3e75988dfaa65066f8c95eb))
|
|
9
|
+
|
|
10
|
+
### BREAKING CHANGES
|
|
11
|
+
|
|
12
|
+
* <Spec>_Behavior.res, @@reventless.behavior,
|
|
13
|
+
Reventless.Behavior.T, StateChangeSlice.Behavior, Behavior_GWT and
|
|
14
|
+
thenRefused no longer exist. Run `npx reventless-rename-to-decision` at an
|
|
15
|
+
app's root, then rebuild; comments are not rewritten. The PPX must be the
|
|
16
|
+
matching release.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# 3.0.0-alpha.291 (2026-10-19)
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* **spec,aws,local:** tell the host shell which environment it runs in, and write local host UI files into a chosen assetsDir ([4f896d1](https://github.com/ReventlessDev/reventless-core/commit/4f896d13ae9ec0d211c33dbd9271e7197cfebc41))
|
|
25
|
+
|
|
26
|
+
|
|
6
27
|
# 3.0.0-alpha.290 (2026-10-17)
|
|
7
28
|
|
|
8
29
|
**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.
|
|
3
|
+
"version": "3.0.0-alpha.292",
|
|
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": {
|
|
@@ -35,18 +35,18 @@
|
|
|
35
35
|
"sury": "11.0.0",
|
|
36
36
|
"ws": "^8.18.0",
|
|
37
37
|
"@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.29",
|
|
38
|
-
"@reventlessdev/rescript-
|
|
39
|
-
"@reventlessdev/rescript-
|
|
40
|
-
"@reventlessdev/rescript-node": "2.0.0-alpha.
|
|
38
|
+
"@reventlessdev/rescript-jest": "1.0.0-alpha.13",
|
|
39
|
+
"@reventlessdev/rescript-effect": "1.0.0-alpha.1",
|
|
40
|
+
"@reventlessdev/rescript-node": "2.0.0-alpha.23",
|
|
41
41
|
"@reventlessdev/rescript-mcp-sdk": "1.0.0-alpha.23",
|
|
42
42
|
"@reventlessdev/rescript-pulumi-pulumi": "3.0.0-alpha.0",
|
|
43
|
-
"@reventlessdev/reventless-core": "3.0.0-alpha.
|
|
44
|
-
"@reventlessdev/reventless-
|
|
45
|
-
"@reventlessdev/reventless-
|
|
46
|
-
"@reventlessdev/reventless-
|
|
47
|
-
"@reventlessdev/reventless-
|
|
48
|
-
"@reventlessdev/reventless-seed": "1.0.0-alpha.
|
|
49
|
-
"@reventlessdev/reventless-spec": "3.0.0-alpha.
|
|
43
|
+
"@reventlessdev/reventless-core": "3.0.0-alpha.301",
|
|
44
|
+
"@reventlessdev/reventless-gwt": "1.0.0-alpha.249",
|
|
45
|
+
"@reventlessdev/reventless-infra": "3.0.0-alpha.198",
|
|
46
|
+
"@reventlessdev/reventless-graphql-server": "1.0.0-alpha.149",
|
|
47
|
+
"@reventlessdev/reventless-postgres": "3.0.0-alpha.165",
|
|
48
|
+
"@reventlessdev/reventless-seed": "1.0.0-alpha.35",
|
|
49
|
+
"@reventlessdev/reventless-spec": "3.0.0-alpha.170"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"rescript": "12.3.1",
|
package/src/BakedManifest.res
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Writes the curated component manifest where the local host shell serves its
|
|
2
|
-
// static assets from (`HostShellDist`), so `manifestUrl` discovery works in dev
|
|
2
|
+
// static assets from (the chosen `assetsDir`, else `HostShellDist`), so `manifestUrl` discovery works in dev
|
|
3
3
|
// exactly as it does in a deployment. Rewritten on every boot, which also makes
|
|
4
4
|
// it self-healing — a `pnpm install` that replaces the package directory costs
|
|
5
5
|
// one restart, not a debugging session.
|
|
@@ -30,6 +30,8 @@ let files = (~config: ReventlessInfra.Platform.bakedManifest): array<(
|
|
|
30
30
|
let emit = (
|
|
31
31
|
~structures: array<(string, Reventless.Plugin.pluginStructure)>,
|
|
32
32
|
~config: ReventlessInfra.Platform.bakedManifest,
|
|
33
|
+
// The platform's chosen `assetsDir`; unset, the host-shell package's `dist/`.
|
|
34
|
+
~dir: option<string>=?,
|
|
33
35
|
) => {
|
|
34
36
|
let outputs = files(~config)
|
|
35
37
|
// Every file is curated before any is written. A declaration naming a
|
|
@@ -42,7 +44,10 @@ let emit = (
|
|
|
42
44
|
| Ok(manifest) => manifest
|
|
43
45
|
},
|
|
44
46
|
))
|
|
45
|
-
switch
|
|
47
|
+
switch switch dir {
|
|
48
|
+
| Some(_) as given => given
|
|
49
|
+
| None => HostShellDist.dir()
|
|
50
|
+
} {
|
|
46
51
|
| None =>
|
|
47
52
|
JsError.throwWithMessage(
|
|
48
53
|
`baked manifest: cannot resolve ${HostShellDist.package} from ${NodeProcess.cwd()} — ` ++
|
|
@@ -11,7 +11,7 @@ let log = Logger$ReventlessCore.fromEnv();
|
|
|
11
11
|
|
|
12
12
|
let files = Platform_BakedManifest$ReventlessCore.files;
|
|
13
13
|
|
|
14
|
-
function emit(structures, config) {
|
|
14
|
+
function emit(structures, config, dir) {
|
|
15
15
|
let outputs = Platform_BakedManifest$ReventlessCore.files(config);
|
|
16
16
|
let curated = outputs.map(param => {
|
|
17
17
|
let e = Platform_BakedManifest$ReventlessCore.curate(structures, param[1]);
|
|
@@ -22,11 +22,11 @@ function emit(structures, config) {
|
|
|
22
22
|
tmp
|
|
23
23
|
];
|
|
24
24
|
});
|
|
25
|
-
let dir = HostShellDist$ReventlessLocal.dir();
|
|
26
|
-
if (dir !== undefined) {
|
|
25
|
+
let dir$1 = dir !== undefined ? dir : HostShellDist$ReventlessLocal.dir();
|
|
26
|
+
if (dir$1 !== undefined) {
|
|
27
27
|
curated.forEach(param => {
|
|
28
28
|
let key = param[0];
|
|
29
|
-
let path = Nodepath.join(dir, key);
|
|
29
|
+
let path = Nodepath.join(dir$1, key);
|
|
30
30
|
Nodefs.writeFileSync(path, JSON.stringify(param[1], undefined, 2), "utf8");
|
|
31
31
|
log.info("BakedManifest", undefined, `wrote ` + key + `: ` + path);
|
|
32
32
|
});
|
package/src/HostShellDist.res
CHANGED
|
@@ -27,3 +27,14 @@ let dir = (): option<string> =>
|
|
|
27
27
|
} catch {
|
|
28
28
|
| _ => None
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
/** The directory the local writers write into: the app's chosen `assetsDir`,
|
|
32
|
+
created if missing, else the package's `dist/`. */
|
|
33
|
+
let resolve = (~assetsDir: option<string>): option<string> =>
|
|
34
|
+
switch assetsDir {
|
|
35
|
+
| Some(chosen) =>
|
|
36
|
+
let absolute = NodePath.resolve([NodeProcess.cwd(), chosen])
|
|
37
|
+
NodeFs.mkdirSync(absolute, {recursive: true})
|
|
38
|
+
Some(absolute)
|
|
39
|
+
| None => dir()
|
|
40
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
+
import * as Nodefs from "node:fs";
|
|
3
4
|
import * as Nodepath from "node:path";
|
|
4
5
|
import * as Nodemodule from "node:module";
|
|
5
6
|
|
|
@@ -13,8 +14,20 @@ function dir() {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
function resolve(assetsDir) {
|
|
18
|
+
if (assetsDir === undefined) {
|
|
19
|
+
return dir();
|
|
20
|
+
}
|
|
21
|
+
let absolute = Nodepath.resolve(process.cwd(), assetsDir);
|
|
22
|
+
Nodefs.mkdirSync(absolute, {
|
|
23
|
+
recursive: true
|
|
24
|
+
});
|
|
25
|
+
return absolute;
|
|
26
|
+
}
|
|
27
|
+
|
|
16
28
|
export {
|
|
17
29
|
$$package,
|
|
18
30
|
dir,
|
|
31
|
+
resolve,
|
|
19
32
|
}
|
|
20
|
-
/* node:
|
|
33
|
+
/* node:fs Not a pure module */
|
package/src/Platform.res
CHANGED
|
@@ -585,21 +585,21 @@ module MakeWithConfig = (
|
|
|
585
585
|
module Aggregate = {
|
|
586
586
|
module Make = (
|
|
587
587
|
Spec: Reventless.Aggregate.Spec,
|
|
588
|
-
|
|
588
|
+
Decision: Reventless.Decision.T with module Spec := Spec,
|
|
589
589
|
EventMappings: ReventlessInfra.EventMapper.Mappings with module Target := Spec,
|
|
590
590
|
): (ReventlessInfra.Aggregate.T with type api = unit) => AggregateMaker.Make(
|
|
591
591
|
Spec,
|
|
592
|
-
|
|
592
|
+
Decision,
|
|
593
593
|
EventMappings,
|
|
594
594
|
)
|
|
595
595
|
/** Async variant — in-memory uses the same channel (no FIFO distinction). */
|
|
596
596
|
module MakeAsync = (
|
|
597
597
|
Spec: Reventless.Aggregate.Spec,
|
|
598
|
-
|
|
598
|
+
Decision: Reventless.Decision.T with module Spec := Spec,
|
|
599
599
|
EventMappings: ReventlessInfra.EventMapper.Mappings with module Target := Spec,
|
|
600
600
|
): (ReventlessInfra.Aggregate.T with type api = unit) => AggregateMaker.Make(
|
|
601
601
|
Spec,
|
|
602
|
-
|
|
602
|
+
Decision,
|
|
603
603
|
EventMappings,
|
|
604
604
|
)
|
|
605
605
|
}
|
|
@@ -717,16 +717,16 @@ module MakeWithConfig = (
|
|
|
717
717
|
module StateChangeSlice = {
|
|
718
718
|
module Make = (
|
|
719
719
|
Spec: Reventless.StateChangeSlice.Spec,
|
|
720
|
-
|
|
720
|
+
Decision: Reventless.StateChangeSlice.Decision with module Spec := Spec,
|
|
721
721
|
): (
|
|
722
722
|
ReventlessInfra.StateChangeSlice.T with module Spec = Spec
|
|
723
|
-
) => StateChangeSlice_Builder.Make(Spec,
|
|
723
|
+
) => StateChangeSlice_Builder.Make(Spec, Decision)
|
|
724
724
|
/** Async variant — in-memory uses the same channel (no FIFO distinction). */
|
|
725
725
|
module MakeAsync = (
|
|
726
726
|
Spec: Reventless.StateChangeSlice.Spec,
|
|
727
|
-
|
|
727
|
+
Decision: Reventless.StateChangeSlice.Decision with module Spec := Spec,
|
|
728
728
|
): (ReventlessInfra.StateChangeSlice.T with module Spec = Spec) => {
|
|
729
|
-
include StateChangeSlice_Builder.Make(Spec,
|
|
729
|
+
include StateChangeSlice_Builder.Make(Spec, Decision)
|
|
730
730
|
let isAsync = true
|
|
731
731
|
}
|
|
732
732
|
}
|
|
@@ -746,7 +746,7 @@ module MakeWithConfig = (
|
|
|
746
746
|
// Built once and passed into Admin.construct below.
|
|
747
747
|
module UiFragmentRegistrySlice = StateChangeSlice.Make(
|
|
748
748
|
ReventlessCore.UiFragmentRegistry,
|
|
749
|
-
ReventlessCore.
|
|
749
|
+
ReventlessCore.UiFragmentRegistry_Decision,
|
|
750
750
|
)
|
|
751
751
|
module UiFragmentsViewSlice = StateViewSlice.Make(
|
|
752
752
|
ReventlessCore.UiFragments,
|
|
@@ -822,7 +822,7 @@ module MakeWithConfig = (
|
|
|
822
822
|
module LocalPluginAggregate: ReventlessInfra.Aggregate.T
|
|
823
823
|
with type api = unit = AggregateMaker.Make(
|
|
824
824
|
ReventlessCore.PluginSpec,
|
|
825
|
-
ReventlessCore.
|
|
825
|
+
ReventlessCore.PluginDecision,
|
|
826
826
|
ReventlessInfra.NoEventMappings.Make(ReventlessCore.PluginSpec),
|
|
827
827
|
)
|
|
828
828
|
|
|
@@ -879,7 +879,7 @@ module MakeWithConfig = (
|
|
|
879
879
|
// Per-session server ports for the VS Code local platform runner (features
|
|
880
880
|
// plan Phase 9). The runner spawns one platform child per app folder; default
|
|
881
881
|
// ports (4000/4001/3001/3002) collide when several run, so each is overridable
|
|
882
|
-
// via env. Defaults preserve today's
|
|
882
|
+
// via env. Defaults preserve today's behavior for all non-runner callers.
|
|
883
883
|
let resolvePort = (key, fallback) =>
|
|
884
884
|
NodeProcess.env->Dict.get(key)->Option.flatMap(v => Int.fromString(v))->Option.getOr(fallback)
|
|
885
885
|
let domainPort = resolvePort("REVENTLESS_DOMAIN_PORT", 4000)
|
|
@@ -928,6 +928,7 @@ module MakeWithConfig = (
|
|
|
928
928
|
let bakeManifest = (
|
|
929
929
|
~pluginComponents: array<ReventlessCore.Plugin.component>,
|
|
930
930
|
~config: ReventlessInfra.Platform.bakedManifest,
|
|
931
|
+
~dir: option<string>,
|
|
931
932
|
) => {
|
|
932
933
|
let resolved: array<(string, Reventless.Plugin.pluginStructure)> = []
|
|
933
934
|
let expected = pluginComponents->Array.length
|
|
@@ -942,7 +943,7 @@ module MakeWithConfig = (
|
|
|
942
943
|
| None => ()
|
|
943
944
|
}
|
|
944
945
|
if resolved->Array.length === expected {
|
|
945
|
-
BakedManifest.emit(~structures=resolved, ~config)
|
|
946
|
+
BakedManifest.emit(~structures=resolved, ~config, ~dir?)
|
|
946
947
|
}
|
|
947
948
|
})
|
|
948
949
|
})
|
|
@@ -1518,13 +1519,15 @@ module MakeWithConfig = (
|
|
|
1518
1519
|
})
|
|
1519
1520
|
|
|
1520
1521
|
// In-memory ignores the infrastructure half of `~hostUiBundle` — the host shell
|
|
1521
|
-
// is served from
|
|
1522
|
-
// deployment *says* is
|
|
1522
|
+
// is served from a local directory (`assetsDir`, else the installed package's
|
|
1523
|
+
// own `dist/`), not from a CDN. What a deployment *says* is honored, in the same files the AWS deploy writes
|
|
1523
1524
|
// beside each other: `bakedManifest` through `BakedManifest`, `shellConfig`
|
|
1524
1525
|
// through `ShellConfig`, which overlays the served `config.json` the way the
|
|
1525
1526
|
// AWS deploy composes the one it writes, and `uiHintsFile` through `UiHints`,
|
|
1526
1527
|
// which replaces the served hints file the way the deploy uploads it.
|
|
1527
1528
|
type hostUiBundleConfig = {
|
|
1529
|
+
// Where every file below is written, as on AWS. Unset: the host-shell
|
|
1530
|
+
// package's `dist/`.
|
|
1528
1531
|
assetsDir?: string,
|
|
1529
1532
|
bundleVersion?: string,
|
|
1530
1533
|
// `makePlatform` serves the declared file in place of the host-shell
|
|
@@ -1736,7 +1739,14 @@ module MakeWithConfig = (
|
|
|
1736
1739
|
// structure Output to land. Unconditional, unlike the bake, because it is
|
|
1737
1740
|
// also what restores the shipped file for a platform that has stopped
|
|
1738
1741
|
// declaring anything.
|
|
1742
|
+
//
|
|
1743
|
+
// All four writers share one directory, resolved once: a second opinion puts
|
|
1744
|
+
// a file where nothing reads it.
|
|
1745
|
+
let hostUiDir = HostShellDist.resolve(
|
|
1746
|
+
~assetsDir=hostUiBundle->Option.flatMap(cfg => cfg.assetsDir),
|
|
1747
|
+
)
|
|
1739
1748
|
ShellConfig.emit(
|
|
1749
|
+
~dir=?hostUiDir,
|
|
1740
1750
|
~bakedManifest=hostUiBundle->Option.flatMap(cfg => cfg.bakedManifest),
|
|
1741
1751
|
// Names the module `UiSlots.emit` serves below. Both or neither: a key
|
|
1742
1752
|
// without the file is a 404 the shell survives quietly, and a file without
|
|
@@ -1747,7 +1757,7 @@ module MakeWithConfig = (
|
|
|
1747
1757
|
// Unconditional for the same reason, and one file over: it is also what
|
|
1748
1758
|
// restores the shell package's own hints for a platform that has stopped
|
|
1749
1759
|
// declaring its own.
|
|
1750
|
-
UiHints.emit(~uiHintsFile=hostUiBundle->Option.flatMap(cfg => cfg.uiHintsFile))
|
|
1760
|
+
UiHints.emit(~uiHintsFile=hostUiBundle->Option.flatMap(cfg => cfg.uiHintsFile), ~dir=?hostUiDir)
|
|
1751
1761
|
// The dev loop for the file just written. Editing hints is presentation
|
|
1752
1762
|
// work — you change a label, you want to see the label — and routing that
|
|
1753
1763
|
// through a platform restart puts fifteen seconds between the two. The
|
|
@@ -1759,20 +1769,22 @@ module MakeWithConfig = (
|
|
|
1759
1769
|
// would imply a shutdown path this platform does not have.
|
|
1760
1770
|
let _ = UiHints.watch(
|
|
1761
1771
|
~uiHintsFile=hostUiBundle->Option.flatMap(cfg => cfg.uiHintsFile),
|
|
1772
|
+
~dir=?hostUiDir,
|
|
1762
1773
|
~onReload=LocalEvents_Server.broadcastUiHintsChanged,
|
|
1763
1774
|
)
|
|
1764
1775
|
// The same pair for the module that draws what a hint cannot say. Also
|
|
1765
1776
|
// unconditional, and for a reason the hints file does not have: this is what
|
|
1766
1777
|
// removes a module a platform has stopped declaring, and leaving one behind
|
|
1767
1778
|
// would go on drawing regions with nothing in the deployment to explain it.
|
|
1768
|
-
UiSlots.emit(~uiSlotsFile=hostUiBundle->Option.flatMap(cfg => cfg.uiSlotsFile))
|
|
1779
|
+
UiSlots.emit(~uiSlotsFile=hostUiBundle->Option.flatMap(cfg => cfg.uiSlotsFile), ~dir=?hostUiDir)
|
|
1769
1780
|
let _ = UiSlots.watch(
|
|
1770
1781
|
~uiSlotsFile=hostUiBundle->Option.flatMap(cfg => cfg.uiSlotsFile),
|
|
1782
|
+
~dir=?hostUiDir,
|
|
1771
1783
|
~onReload=LocalEvents_Server.broadcastUiSlotsChanged,
|
|
1772
1784
|
)
|
|
1773
1785
|
switch hostUiBundle->Option.flatMap(cfg => cfg.bakedManifest) {
|
|
1774
1786
|
| None => ()
|
|
1775
|
-
| Some(cfg) => bakeManifest(~pluginComponents=plugins, ~config=cfg)
|
|
1787
|
+
| Some(cfg) => bakeManifest(~pluginComponents=plugins, ~config=cfg, ~dir=hostUiDir)
|
|
1776
1788
|
}
|
|
1777
1789
|
switch (projectionCatchup, pgProjectionCatchup) {
|
|
1778
1790
|
| (Some((db, upperBound, dcbUpperBound)), _) =>
|
|
@@ -2184,7 +2196,7 @@ module MakeWithConfig = (
|
|
|
2184
2196
|
// own explicit `Platform_UIFragments` flat-array resolver registered
|
|
2185
2197
|
// above; it isn't exposed as an MCP resource because the auto-generated
|
|
2186
2198
|
// single/list field shape was removed when the auto-generated query
|
|
2187
|
-
// entry was dropped in
|
|
2199
|
+
// entry was dropped in favor of that explicit field.
|
|
2188
2200
|
let adminFieldToQueryDb = Dict.fromArray([
|
|
2189
2201
|
(singleQueryField, pluginQueryDbName),
|
|
2190
2202
|
(listQueryField, pluginQueryDbName),
|
|
@@ -2463,7 +2475,7 @@ module MakeWithConfig = (
|
|
|
2463
2475
|
| Platform => None
|
|
2464
2476
|
}
|
|
2465
2477
|
|
|
2466
|
-
// Each plugin creates its own scheduler (mirrors AWS
|
|
2478
|
+
// Each plugin creates its own scheduler (mirrors AWS behavior).
|
|
2467
2479
|
let scheduler = makeScheduler()
|
|
2468
2480
|
hooks.scheduler := Some(scheduler)
|
|
2469
2481
|
hooks.api := Some({val: ()->Obj.magic})
|
package/src/Platform.res.mjs
CHANGED
|
@@ -38,9 +38,10 @@ import * as ComponentType$ReventlessCore from "@reventlessdev/reventless-core/sr
|
|
|
38
38
|
import * as SqliteDriver$ReventlessLocal from "./adapter/SqliteDriver.res.mjs";
|
|
39
39
|
import * as Task_Builder$ReventlessLocal from "./components/Task_Builder.res.mjs";
|
|
40
40
|
import * as BakedManifest$ReventlessLocal from "./BakedManifest.res.mjs";
|
|
41
|
+
import * as HostShellDist$ReventlessLocal from "./HostShellDist.res.mjs";
|
|
41
42
|
import * as LocalEventTap$ReventlessLocal from "./adapter/LocalEventTap.res.mjs";
|
|
42
43
|
import * as Platform_Admin$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin.res.mjs";
|
|
43
|
-
import * as
|
|
44
|
+
import * as PluginDecision$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginDecision.res.mjs";
|
|
44
45
|
import * as Plugin_Helpers$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/component/Plugin_Helpers.res.mjs";
|
|
45
46
|
import * as Plugin_Builder$ReventlessLocal from "./components/Plugin_Builder.res.mjs";
|
|
46
47
|
import * as Counter_Builder$ReventlessLocal from "./components/Counter_Builder.res.mjs";
|
|
@@ -96,7 +97,7 @@ import * as StateChangeSlice_Builder$ReventlessLocal from "./components/StateCha
|
|
|
96
97
|
import * as DcbEventLogStorage_Sqlite$ReventlessLocal from "./adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs";
|
|
97
98
|
import * as LocalEventCollectorChannel$ReventlessLocal from "./adapter/EventCollector/LocalEventCollectorChannel.res.mjs";
|
|
98
99
|
import * as PluginRuntime_Builder_Micro$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs";
|
|
99
|
-
import * as
|
|
100
|
+
import * as UiFragmentRegistry_Decision$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChange/UiFragmentRegistry_Decision.res.mjs";
|
|
100
101
|
import * as Platform_PluginStructuresApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_PluginStructuresApi.res.mjs";
|
|
101
102
|
import * as EventHistoryResolvers_GraphQL$ReventlessLocal from "./adapter/EventHistory/EventHistoryResolvers_GraphQL.res.mjs";
|
|
102
103
|
import * as InboundTranslationSlice_Builder$ReventlessLocal from "./components/InboundTranslationSlice_Builder.res.mjs";
|
|
@@ -488,8 +489,8 @@ function MakeWithConfig(Config) {
|
|
|
488
489
|
let AutomationSliceMaker = AutomationSlice_Builder$ReventlessLocal.Make(Bus);
|
|
489
490
|
let OutboundTranslationSliceMaker = OutboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
|
|
490
491
|
let InboundTranslationSliceMaker = InboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
|
|
491
|
-
let Make = Spec => (
|
|
492
|
-
let $$let = AggregateMaker.Make(Spec)(
|
|
492
|
+
let Make = Spec => (Decision => (EventMappings => {
|
|
493
|
+
let $$let = AggregateMaker.Make(Spec)(Decision)(EventMappings);
|
|
493
494
|
return {
|
|
494
495
|
Spec: $$let.Spec,
|
|
495
496
|
make: $$let.make,
|
|
@@ -498,8 +499,8 @@ function MakeWithConfig(Config) {
|
|
|
498
499
|
finish: $$let.finish
|
|
499
500
|
};
|
|
500
501
|
}));
|
|
501
|
-
let MakeAsync = Spec => (
|
|
502
|
-
let $$let = AggregateMaker.Make(Spec)(
|
|
502
|
+
let MakeAsync = Spec => (Decision => (EventMappings => {
|
|
503
|
+
let $$let = AggregateMaker.Make(Spec)(Decision)(EventMappings);
|
|
503
504
|
return {
|
|
504
505
|
Spec: $$let.Spec,
|
|
505
506
|
make: $$let.make,
|
|
@@ -609,20 +610,20 @@ function MakeWithConfig(Config) {
|
|
|
609
610
|
Make: Make$5
|
|
610
611
|
};
|
|
611
612
|
let Counter = Counter_Builder$ReventlessLocal.Make(Bus);
|
|
612
|
-
let Make$6 = Spec => (
|
|
613
|
-
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(
|
|
613
|
+
let Make$6 = Spec => (Decision => {
|
|
614
|
+
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Decision);
|
|
614
615
|
return {
|
|
615
616
|
Spec: $$let.Spec,
|
|
616
|
-
|
|
617
|
+
Decision: $$let.Decision,
|
|
617
618
|
isAsync: $$let.isAsync,
|
|
618
619
|
make: $$let.make
|
|
619
620
|
};
|
|
620
621
|
});
|
|
621
|
-
let MakeAsync$1 = Spec => (
|
|
622
|
-
let include = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(
|
|
622
|
+
let MakeAsync$1 = Spec => (Decision => {
|
|
623
|
+
let include = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Decision);
|
|
623
624
|
return {
|
|
624
625
|
Spec: include.Spec,
|
|
625
|
-
|
|
626
|
+
Decision: include.Decision,
|
|
626
627
|
isAsync: true,
|
|
627
628
|
make: include.make
|
|
628
629
|
};
|
|
@@ -654,20 +655,20 @@ function MakeWithConfig(Config) {
|
|
|
654
655
|
traits: UiFragmentRegistry$ReventlessCore.traits,
|
|
655
656
|
readConsistency: UiFragmentRegistry$ReventlessCore.readConsistency
|
|
656
657
|
};
|
|
657
|
-
let
|
|
658
|
+
let Decision = {
|
|
658
659
|
initialState: undefined,
|
|
659
|
-
evolve:
|
|
660
|
-
decide:
|
|
661
|
-
moduleUrl:
|
|
660
|
+
evolve: UiFragmentRegistry_Decision$ReventlessCore.evolve,
|
|
661
|
+
decide: UiFragmentRegistry_Decision$ReventlessCore.decide,
|
|
662
|
+
moduleUrl: UiFragmentRegistry_Decision$ReventlessCore.moduleUrl
|
|
662
663
|
};
|
|
663
|
-
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(
|
|
664
|
+
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Decision);
|
|
664
665
|
let UiFragmentRegistrySlice_Spec = $$let.Spec;
|
|
665
|
-
let
|
|
666
|
+
let UiFragmentRegistrySlice_Decision = $$let.Decision;
|
|
666
667
|
let UiFragmentRegistrySlice_isAsync = $$let.isAsync;
|
|
667
668
|
let UiFragmentRegistrySlice_make = $$let.make;
|
|
668
669
|
let UiFragmentRegistrySlice = {
|
|
669
670
|
Spec: UiFragmentRegistrySlice_Spec,
|
|
670
|
-
|
|
671
|
+
Decision: UiFragmentRegistrySlice_Decision,
|
|
671
672
|
isAsync: UiFragmentRegistrySlice_isAsync,
|
|
672
673
|
make: UiFragmentRegistrySlice_make
|
|
673
674
|
};
|
|
@@ -765,11 +766,11 @@ function MakeWithConfig(Config) {
|
|
|
765
766
|
commandTransition: PluginSpec$ReventlessCore.commandTransition,
|
|
766
767
|
traits: PluginSpec$ReventlessCore.traits
|
|
767
768
|
})({
|
|
768
|
-
initialState:
|
|
769
|
-
evolve:
|
|
770
|
-
decide:
|
|
769
|
+
initialState: PluginDecision$ReventlessCore.initialState,
|
|
770
|
+
evolve: PluginDecision$ReventlessCore.evolve,
|
|
771
|
+
decide: PluginDecision$ReventlessCore.decide,
|
|
771
772
|
snapshot: undefined,
|
|
772
|
-
moduleUrl:
|
|
773
|
+
moduleUrl: PluginDecision$ReventlessCore.moduleUrl
|
|
773
774
|
})(NoEventMappings$ReventlessInfra.Make({
|
|
774
775
|
name: PluginSpec$ReventlessCore.name,
|
|
775
776
|
Id: Id$Reventless.$$String,
|
|
@@ -860,7 +861,7 @@ function MakeWithConfig(Config) {
|
|
|
860
861
|
let pluginStructuresStore = {
|
|
861
862
|
contents: {}
|
|
862
863
|
};
|
|
863
|
-
let bakeManifest = (pluginComponents, config) => {
|
|
864
|
+
let bakeManifest = (pluginComponents, config, dir) => {
|
|
864
865
|
let resolved = [];
|
|
865
866
|
let expected = pluginComponents.length;
|
|
866
867
|
pluginComponents.forEach(plugin => {
|
|
@@ -877,7 +878,7 @@ function MakeWithConfig(Config) {
|
|
|
877
878
|
]);
|
|
878
879
|
}
|
|
879
880
|
if (resolved.length === expected) {
|
|
880
|
-
return BakedManifest$ReventlessLocal.emit(resolved, config);
|
|
881
|
+
return BakedManifest$ReventlessLocal.emit(resolved, config, dir);
|
|
881
882
|
}
|
|
882
883
|
});
|
|
883
884
|
});
|
|
@@ -1330,14 +1331,15 @@ function MakeWithConfig(Config) {
|
|
|
1330
1331
|
adminResources: []
|
|
1331
1332
|
});
|
|
1332
1333
|
subscribeToPluginEvents();
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
UiHints$ReventlessLocal.
|
|
1336
|
-
|
|
1337
|
-
UiSlots$ReventlessLocal.
|
|
1334
|
+
let hostUiDir = HostShellDist$ReventlessLocal.resolve(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.assetsDir));
|
|
1335
|
+
ShellConfig$ReventlessLocal.emit(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.bakedManifest), Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiSlotsFile), Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.shellConfig), hostUiDir);
|
|
1336
|
+
UiHints$ReventlessLocal.emit(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiHintsFile), hostUiDir);
|
|
1337
|
+
UiHints$ReventlessLocal.watch(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiHintsFile), hostUiDir, LocalEvents_Server$ReventlessLocal.broadcastUiHintsChanged);
|
|
1338
|
+
UiSlots$ReventlessLocal.emit(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiSlotsFile), hostUiDir);
|
|
1339
|
+
UiSlots$ReventlessLocal.watch(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiSlotsFile), hostUiDir, LocalEvents_Server$ReventlessLocal.broadcastUiSlotsChanged);
|
|
1338
1340
|
let cfg = Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.bakedManifest);
|
|
1339
1341
|
if (cfg !== undefined) {
|
|
1340
|
-
bakeManifest(plugins$1, cfg);
|
|
1342
|
+
bakeManifest(plugins$1, cfg, hostUiDir);
|
|
1341
1343
|
}
|
|
1342
1344
|
if (projectionCatchup !== undefined) {
|
|
1343
1345
|
Stdlib_Promise.$$catch(ProjectionCheckpoint$ReventlessLocal.startupCatchup(projectionCatchup[0], projectionCatchup[1], projectionCatchup[2], () => Bus.projectionCatchupHandlers()), e => {
|
|
@@ -2248,8 +2250,8 @@ function Make($star) {
|
|
|
2248
2250
|
let AutomationSliceMaker = AutomationSlice_Builder$ReventlessLocal.Make(Bus);
|
|
2249
2251
|
let OutboundTranslationSliceMaker = OutboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
|
|
2250
2252
|
let InboundTranslationSliceMaker = InboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
|
|
2251
|
-
let Make$1 = Spec => (
|
|
2252
|
-
let $$let = AggregateMaker.Make(Spec)(
|
|
2253
|
+
let Make$1 = Spec => (Decision => (EventMappings => {
|
|
2254
|
+
let $$let = AggregateMaker.Make(Spec)(Decision)(EventMappings);
|
|
2253
2255
|
return {
|
|
2254
2256
|
Spec: $$let.Spec,
|
|
2255
2257
|
make: $$let.make,
|
|
@@ -2258,8 +2260,8 @@ function Make($star) {
|
|
|
2258
2260
|
finish: $$let.finish
|
|
2259
2261
|
};
|
|
2260
2262
|
}));
|
|
2261
|
-
let MakeAsync = Spec => (
|
|
2262
|
-
let $$let = AggregateMaker.Make(Spec)(
|
|
2263
|
+
let MakeAsync = Spec => (Decision => (EventMappings => {
|
|
2264
|
+
let $$let = AggregateMaker.Make(Spec)(Decision)(EventMappings);
|
|
2263
2265
|
return {
|
|
2264
2266
|
Spec: $$let.Spec,
|
|
2265
2267
|
make: $$let.make,
|
|
@@ -2369,20 +2371,20 @@ function Make($star) {
|
|
|
2369
2371
|
Make: Make$6
|
|
2370
2372
|
};
|
|
2371
2373
|
let Counter = Counter_Builder$ReventlessLocal.Make(Bus);
|
|
2372
|
-
let Make$7 = Spec => (
|
|
2373
|
-
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(
|
|
2374
|
+
let Make$7 = Spec => (Decision => {
|
|
2375
|
+
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Decision);
|
|
2374
2376
|
return {
|
|
2375
2377
|
Spec: $$let.Spec,
|
|
2376
|
-
|
|
2378
|
+
Decision: $$let.Decision,
|
|
2377
2379
|
isAsync: $$let.isAsync,
|
|
2378
2380
|
make: $$let.make
|
|
2379
2381
|
};
|
|
2380
2382
|
});
|
|
2381
|
-
let MakeAsync$1 = Spec => (
|
|
2382
|
-
let include = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(
|
|
2383
|
+
let MakeAsync$1 = Spec => (Decision => {
|
|
2384
|
+
let include = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Decision);
|
|
2383
2385
|
return {
|
|
2384
2386
|
Spec: include.Spec,
|
|
2385
|
-
|
|
2387
|
+
Decision: include.Decision,
|
|
2386
2388
|
isAsync: true,
|
|
2387
2389
|
make: include.make
|
|
2388
2390
|
};
|
|
@@ -2414,20 +2416,20 @@ function Make($star) {
|
|
|
2414
2416
|
traits: UiFragmentRegistry$ReventlessCore.traits,
|
|
2415
2417
|
readConsistency: UiFragmentRegistry$ReventlessCore.readConsistency
|
|
2416
2418
|
};
|
|
2417
|
-
let
|
|
2419
|
+
let Decision = {
|
|
2418
2420
|
initialState: undefined,
|
|
2419
|
-
evolve:
|
|
2420
|
-
decide:
|
|
2421
|
-
moduleUrl:
|
|
2421
|
+
evolve: UiFragmentRegistry_Decision$ReventlessCore.evolve,
|
|
2422
|
+
decide: UiFragmentRegistry_Decision$ReventlessCore.decide,
|
|
2423
|
+
moduleUrl: UiFragmentRegistry_Decision$ReventlessCore.moduleUrl
|
|
2422
2424
|
};
|
|
2423
|
-
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(
|
|
2425
|
+
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Decision);
|
|
2424
2426
|
let UiFragmentRegistrySlice_Spec = $$let.Spec;
|
|
2425
|
-
let
|
|
2427
|
+
let UiFragmentRegistrySlice_Decision = $$let.Decision;
|
|
2426
2428
|
let UiFragmentRegistrySlice_isAsync = $$let.isAsync;
|
|
2427
2429
|
let UiFragmentRegistrySlice_make = $$let.make;
|
|
2428
2430
|
let UiFragmentRegistrySlice = {
|
|
2429
2431
|
Spec: UiFragmentRegistrySlice_Spec,
|
|
2430
|
-
|
|
2432
|
+
Decision: UiFragmentRegistrySlice_Decision,
|
|
2431
2433
|
isAsync: UiFragmentRegistrySlice_isAsync,
|
|
2432
2434
|
make: UiFragmentRegistrySlice_make
|
|
2433
2435
|
};
|
|
@@ -2525,11 +2527,11 @@ function Make($star) {
|
|
|
2525
2527
|
commandTransition: PluginSpec$ReventlessCore.commandTransition,
|
|
2526
2528
|
traits: PluginSpec$ReventlessCore.traits
|
|
2527
2529
|
})({
|
|
2528
|
-
initialState:
|
|
2529
|
-
evolve:
|
|
2530
|
-
decide:
|
|
2530
|
+
initialState: PluginDecision$ReventlessCore.initialState,
|
|
2531
|
+
evolve: PluginDecision$ReventlessCore.evolve,
|
|
2532
|
+
decide: PluginDecision$ReventlessCore.decide,
|
|
2531
2533
|
snapshot: undefined,
|
|
2532
|
-
moduleUrl:
|
|
2534
|
+
moduleUrl: PluginDecision$ReventlessCore.moduleUrl
|
|
2533
2535
|
})(NoEventMappings$ReventlessInfra.Make({
|
|
2534
2536
|
name: PluginSpec$ReventlessCore.name,
|
|
2535
2537
|
Id: Id$Reventless.$$String,
|
|
@@ -2620,7 +2622,7 @@ function Make($star) {
|
|
|
2620
2622
|
let pluginStructuresStore = {
|
|
2621
2623
|
contents: {}
|
|
2622
2624
|
};
|
|
2623
|
-
let bakeManifest = (pluginComponents, config) => {
|
|
2625
|
+
let bakeManifest = (pluginComponents, config, dir) => {
|
|
2624
2626
|
let resolved = [];
|
|
2625
2627
|
let expected = pluginComponents.length;
|
|
2626
2628
|
pluginComponents.forEach(plugin => {
|
|
@@ -2637,7 +2639,7 @@ function Make($star) {
|
|
|
2637
2639
|
]);
|
|
2638
2640
|
}
|
|
2639
2641
|
if (resolved.length === expected) {
|
|
2640
|
-
return BakedManifest$ReventlessLocal.emit(resolved, config);
|
|
2642
|
+
return BakedManifest$ReventlessLocal.emit(resolved, config, dir);
|
|
2641
2643
|
}
|
|
2642
2644
|
});
|
|
2643
2645
|
});
|
|
@@ -3085,14 +3087,15 @@ function Make($star) {
|
|
|
3085
3087
|
adminResources: []
|
|
3086
3088
|
});
|
|
3087
3089
|
subscribeToPluginEvents();
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
UiHints$ReventlessLocal.
|
|
3091
|
-
|
|
3092
|
-
UiSlots$ReventlessLocal.
|
|
3090
|
+
let hostUiDir = HostShellDist$ReventlessLocal.resolve(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.assetsDir));
|
|
3091
|
+
ShellConfig$ReventlessLocal.emit(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.bakedManifest), Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiSlotsFile), Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.shellConfig), hostUiDir);
|
|
3092
|
+
UiHints$ReventlessLocal.emit(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiHintsFile), hostUiDir);
|
|
3093
|
+
UiHints$ReventlessLocal.watch(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiHintsFile), hostUiDir, LocalEvents_Server$ReventlessLocal.broadcastUiHintsChanged);
|
|
3094
|
+
UiSlots$ReventlessLocal.emit(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiSlotsFile), hostUiDir);
|
|
3095
|
+
UiSlots$ReventlessLocal.watch(Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.uiSlotsFile), hostUiDir, LocalEvents_Server$ReventlessLocal.broadcastUiSlotsChanged);
|
|
3093
3096
|
let cfg = Stdlib_Option.flatMap(hostUiBundle, cfg => cfg.bakedManifest);
|
|
3094
3097
|
if (cfg !== undefined) {
|
|
3095
|
-
bakeManifest(plugins$1, cfg);
|
|
3098
|
+
bakeManifest(plugins$1, cfg, hostUiDir);
|
|
3096
3099
|
}
|
|
3097
3100
|
if (projectionCatchup !== undefined) {
|
|
3098
3101
|
Stdlib_Promise.$$catch(ProjectionCheckpoint$ReventlessLocal.startupCatchup(projectionCatchup[0], projectionCatchup[1], projectionCatchup[2], () => Bus.projectionCatchupHandlers()), e => {
|