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, ConsoleActionInputBinding, ConsoleActionInputValue,
34 ConsoleContribution, ConsoleContributionAction, ConsoleContributionKind, ConsoleNavigation,
35 ConsoleNavigationGroup, ConsolePermissionGrant, ConsolePermissionRequest, ConsoleSlot,
36 ConsoleSlotContext, ConsoleSlotContextField, ConsoleSlotContextFieldType, ConsoleSurface,
37 ConsoleSurfacePresentation, ConsoleWorkspaceRef, CronParseError, CronSchedule, EntitySchema,
38 EventHandlerDeclaration, EventSurface, FieldSchema, FieldType,
39 LifecycleActivationJobDeclaration, LifecycleActivationRunPolicy,
40 LifecycleStartupCheckDeclaration, LifecycleStartupCheckKind, LifecycleSurface,
41 ModuleCapabilityReference, ModuleHttpMethod, ModuleHttpRoute, ModuleManifest,
42 ModuleManifestBuilder, ModuleManifestLint, ModuleManifestLintSeverity, ModuleRequirement,
43 ModuleRouteLint, ModuleRouteLintSeverity, RuntimeFunctionDeclaration,
44 RuntimeRetryPolicyDeclaration, RuntimeSurface, StoryDisplayDescriptor, StoryDisplaySource,
45 lint_module_http_routes, lint_module_manifest, lint_module_manifest_parts,
46 module_capability_references, validate_cron_expression,
47};
48pub use linked::{
49 LinkedBinding, LinkedBindingBuilder, LinkedHttpContribution, LinkedHttpRouteMerger,
50};
51pub use module::{Module, ModuleLoadStatus};
52pub use source::ModuleSource;
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57 use platform_core::{AppContext, Migration};
58
59 #[derive(Debug, Clone, PartialEq, Eq)]
60 struct TestContribution(&'static str);
61
62 const TEST_MIGRATIONS: &[Migration] = &[Migration {
63 name: "test/0001_init",
64 sql: "select 1;",
65 }];
66
67 fn manifest() -> ModuleManifest {
68 ModuleManifest::builder("fixture/test").build()
69 }
70
71 fn module(_ctx: &AppContext) -> Module {
72 Module::linked(manifest(), LinkedBinding::builder().build())
73 }
74
75 #[test]
76 fn host_linked_module_keeps_typed_contributions() {
77 let linked_module = HostLinkedModule::linked("test", manifest, module, TEST_MIGRATIONS)
78 .with_contribution(TestContribution("wired"));
79
80 let contributions = linked_module
81 .contributions::<TestContribution>()
82 .collect::<Vec<_>>();
83
84 assert_eq!(contributions, vec![&TestContribution("wired")]);
85 }
86}