1mod admin_data;
17mod binding;
18mod host;
19mod linked;
20mod module;
21mod source;
22
23pub use admin_data::{
24 AdminActionSource, AdminDataSource, AdminListQuery, AdminPage, AdminQuerySource,
25};
26pub use binding::{EventHandlerRegistrationContext, EventHandlerRuntimeContext, ModuleBinding};
27pub use host::{HostContribution, HostLinkedModule};
28pub use lenso_contracts::{
29 AdminAction, AdminActionConfirmation, AdminActionDangerLevel, AdminActionInputField,
30 AdminActionInputSchema, AdminDeclarativeComponent, AdminDeclarativePage,
31 AdminDeclarativeSection, AdminDeclarativeSurface, AdminEmbeddedEntry, AdminEmbeddedRuntime,
32 AdminEmbeddedSurface, AdminMetricBinding, AdminPermission, AdminSandboxPolicy, AdminSchema,
33 AdminSurface, CONSOLE_BRIDGE_PROTOCOL, CONSOLE_MODULE_PROTOCOL, CONSOLE_MODULE_PROTOCOL_MAJOR,
34 CONSOLE_UI_ESM_FORMAT, ConsoleActionInputBinding, ConsoleActionInputValue, ConsoleContribution,
35 ConsoleContributionAction, ConsoleContributionKind, ConsoleModuleManifest,
36 ConsoleModuleSurface, ConsoleNavigation, ConsoleNavigationGroup, ConsolePermissionGrant,
37 ConsolePermissionRequest, ConsoleSlot, ConsoleSlotContext, ConsoleSlotContextField,
38 ConsoleSlotContextFieldType, ConsoleSurface, ConsoleSurfaceArea, ConsoleSurfacePresentation,
39 ConsoleUiArtifact, ConsoleUiArtifactEntry, ConsoleUiArtifactFormat,
40 ConsoleUiArtifactStyleAsset, ConsoleWorkspaceRef, CronParseError, CronSchedule, EntitySchema,
41 EventHandlerDeclaration, EventSurface, FieldSchema, FieldType,
42 LifecycleActivationJobDeclaration, LifecycleActivationRunPolicy,
43 LifecycleStartupCheckDeclaration, LifecycleStartupCheckKind, LifecycleSurface,
44 ModuleCapabilityReference, ModuleHttpMethod, ModuleHttpRoute, ModuleManifest,
45 ModuleManifestBuilder, ModuleManifestLint, ModuleManifestLintSeverity, ModuleRequirement,
46 ModuleRouteLint, ModuleRouteLintSeverity, RuntimeFunctionDeclaration,
47 RuntimeRetryPolicyDeclaration, RuntimeSurface, StoryDisplayDescriptor, StoryDisplaySource,
48 lint_module_http_routes, lint_module_manifest, lint_module_manifest_parts,
49 module_capability_references, validate_cron_expression,
50};
51pub use linked::{
52 LinkedBinding, LinkedBindingBuilder, LinkedHttpContribution, LinkedHttpRouteMerger,
53};
54pub use module::{Module, ModuleLoadStatus};
55pub use source::ModuleSource;
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60 use platform_core::{AppContext, Migration};
61
62 #[derive(Debug, Clone, PartialEq, Eq)]
63 struct TestContribution(&'static str);
64
65 const TEST_MIGRATIONS: &[Migration] = &[Migration {
66 name: "test/0001_init",
67 sql: "select 1;",
68 }];
69
70 fn manifest() -> ModuleManifest {
71 ModuleManifest::builder("fixture/test").build()
72 }
73
74 fn module(_ctx: &AppContext) -> Module {
75 Module::linked(manifest(), LinkedBinding::builder().build())
76 }
77
78 #[test]
79 fn host_linked_module_keeps_typed_contributions() {
80 let linked_module = HostLinkedModule::linked("test", manifest, module, TEST_MIGRATIONS)
81 .with_contribution(TestContribution("wired"));
82
83 let contributions = linked_module
84 .contributions::<TestContribution>()
85 .collect::<Vec<_>>();
86
87 assert_eq!(contributions, vec![&TestContribution("wired")]);
88 }
89}