补齐三端桥接模块分类门禁
新增微信移动桌面桥接模块分类断言 区分三端共同模块与原生 App 共同模块 锁定移动桌面微信端专属 HostBridge 模块边界
This commit is contained in:
@@ -1498,6 +1498,25 @@ const expectedDesktopShellRustFiles = [
|
||||
'webview.rs',
|
||||
'window_state.rs',
|
||||
];
|
||||
const expectedHostBridgeModuleTaxonomy = {
|
||||
allShells: ['dispatch', 'protocol'],
|
||||
nativeAppShells: [
|
||||
'appearance',
|
||||
'badge',
|
||||
'capabilities',
|
||||
'clipboard',
|
||||
'file-payloads',
|
||||
'files',
|
||||
'navigation',
|
||||
'network',
|
||||
'notifications',
|
||||
'runtime',
|
||||
'share',
|
||||
],
|
||||
mobileOnly: ['bridge', 'haptics', 'scanner'],
|
||||
desktopOnly: ['mod', 'title'],
|
||||
wechatOnly: ['payment', 'shareGrid', 'subscribeMessage', 'webView'],
|
||||
};
|
||||
const documentedShellLayerGroups = [
|
||||
{
|
||||
label: 'wechat host bridge files',
|
||||
@@ -3827,6 +3846,9 @@ function assertHostBridgeLayerLayout() {
|
||||
]) {
|
||||
assertUniqueList(values, label);
|
||||
}
|
||||
for (const [label, values] of Object.entries(expectedHostBridgeModuleTaxonomy)) {
|
||||
assertUniqueList(values, `host bridge ${label} module taxonomy`);
|
||||
}
|
||||
for (const [route, expectedFiles] of Object.entries(
|
||||
expectedWechatPageFilesByRoute,
|
||||
)) {
|
||||
@@ -3841,6 +3863,7 @@ function assertHostBridgeLayerLayout() {
|
||||
expectedWechatHostBridgeFiles,
|
||||
'wechat host bridge files',
|
||||
);
|
||||
assertHostBridgeModuleTaxonomy();
|
||||
|
||||
assertSameList(
|
||||
readDirectoryFileList('miniprogram/shell', 'wechat shell files'),
|
||||
@@ -3959,6 +3982,83 @@ function assertHostBridgeLayerLayout() {
|
||||
);
|
||||
}
|
||||
|
||||
function normalizeHostBridgeModuleNames(files) {
|
||||
return files
|
||||
.filter((fileName) => !fileName.includes('.test.'))
|
||||
.map((fileName) =>
|
||||
fileName
|
||||
.replace(/\.(js|rs|ts)$/, '')
|
||||
.replace('filePayloads', 'file-payloads')
|
||||
.replace('file_payloads', 'file-payloads'),
|
||||
)
|
||||
.sort();
|
||||
}
|
||||
|
||||
function assertHostBridgeModuleTaxonomy() {
|
||||
const wechatModules = normalizeHostBridgeModuleNames(expectedWechatHostBridgeFiles);
|
||||
const mobileModules = normalizeHostBridgeModuleNames(expectedMobileHostBridgeFiles);
|
||||
const desktopModules = normalizeHostBridgeModuleNames(
|
||||
expectedDesktopHostBridgeRustFiles,
|
||||
);
|
||||
const allShellModules = [...wechatModules, ...mobileModules, ...desktopModules];
|
||||
const countInShells = (moduleName) =>
|
||||
[wechatModules, mobileModules, desktopModules].filter((modules) =>
|
||||
modules.includes(moduleName),
|
||||
).length;
|
||||
const actualAllShells = allShellModules
|
||||
.filter((moduleName, index, modules) => modules.indexOf(moduleName) === index)
|
||||
.filter((moduleName) => countInShells(moduleName) === 3)
|
||||
.sort();
|
||||
const actualNativeAppShells = mobileModules
|
||||
.filter((moduleName) => desktopModules.includes(moduleName))
|
||||
.filter((moduleName) => !wechatModules.includes(moduleName))
|
||||
.sort();
|
||||
const actualMobileOnly = mobileModules
|
||||
.filter(
|
||||
(moduleName) =>
|
||||
!wechatModules.includes(moduleName) && !desktopModules.includes(moduleName),
|
||||
)
|
||||
.sort();
|
||||
const actualDesktopOnly = desktopModules
|
||||
.filter(
|
||||
(moduleName) =>
|
||||
!wechatModules.includes(moduleName) && !mobileModules.includes(moduleName),
|
||||
)
|
||||
.sort();
|
||||
const actualWechatOnly = wechatModules
|
||||
.filter(
|
||||
(moduleName) =>
|
||||
!mobileModules.includes(moduleName) && !desktopModules.includes(moduleName),
|
||||
)
|
||||
.sort();
|
||||
|
||||
assertSameList(
|
||||
actualAllShells,
|
||||
expectedHostBridgeModuleTaxonomy.allShells,
|
||||
'all-shell HostBridge module taxonomy',
|
||||
);
|
||||
assertSameList(
|
||||
actualNativeAppShells,
|
||||
expectedHostBridgeModuleTaxonomy.nativeAppShells,
|
||||
'native-app HostBridge module taxonomy',
|
||||
);
|
||||
assertSameList(
|
||||
actualMobileOnly,
|
||||
expectedHostBridgeModuleTaxonomy.mobileOnly,
|
||||
'mobile-only HostBridge module taxonomy',
|
||||
);
|
||||
assertSameList(
|
||||
actualDesktopOnly,
|
||||
expectedHostBridgeModuleTaxonomy.desktopOnly,
|
||||
'desktop-only HostBridge module taxonomy',
|
||||
);
|
||||
assertSameList(
|
||||
actualWechatOnly,
|
||||
expectedHostBridgeModuleTaxonomy.wechatOnly,
|
||||
'wechat-only HostBridge module taxonomy',
|
||||
);
|
||||
}
|
||||
|
||||
function assertDesktopReleaseBinaryArtifact() {
|
||||
const executableName =
|
||||
process.platform === 'win32'
|
||||
|
||||
Reference in New Issue
Block a user