收口宿主事件白名单
新增共享 HostBridge event 白名单与类型守卫 让 H5、Expo 和 Tauri 只分发白名单宿主事件 补齐移动端、桌面端和根级原生壳门禁 更新宿主壳方案文档和项目决策记录
This commit is contained in:
@@ -427,6 +427,7 @@ function assertNativeShellCapabilityPlan() {
|
||||
);
|
||||
const sharedContractSource = fs.readFileSync(sharedHostBridgeContractPath, 'utf8');
|
||||
const sharedMethods = extractTsStringArray(sharedContractSource, 'HOST_BRIDGE_METHODS');
|
||||
const sharedEvents = extractTsStringArray(sharedContractSource, 'HOST_BRIDGE_EVENTS');
|
||||
const mobileCapabilities = extractTsStringArray(
|
||||
sharedContractSource,
|
||||
'HOST_BRIDGE_EXPO_MOBILE_BASE_CAPABILITIES',
|
||||
@@ -443,6 +444,22 @@ function assertNativeShellCapabilityPlan() {
|
||||
'HOST_BRIDGE_TAURI_DESKTOP_CAPABILITIES',
|
||||
);
|
||||
const desktopCapabilities = extractRustCapabilities(desktopCapabilitySource);
|
||||
const desktopEventSource = fs.readFileSync(
|
||||
'apps/desktop-shell/src-tauri/src/shell/events.rs',
|
||||
'utf8',
|
||||
);
|
||||
|
||||
assertSameList(
|
||||
extractRustStringArray(desktopEventSource, 'HOST_BRIDGE_EVENTS'),
|
||||
sharedEvents,
|
||||
'desktop shell runtime event whitelist',
|
||||
);
|
||||
|
||||
for (const eventName of sharedEvents) {
|
||||
if (!sharedDesktopCapabilities.includes(eventName)) {
|
||||
throw new Error(`shared HostBridge event must be in desktop capability profile: ${eventName}`);
|
||||
}
|
||||
}
|
||||
|
||||
assertSameList(
|
||||
desktopCapabilities,
|
||||
|
||||
Reference in New Issue
Block a user