推进 INI 面板 shell handoff package report
This commit is contained in:
@@ -148,6 +148,7 @@
|
||||
getShellSessionHandoffChecklist: () => shellViewModel.shellSessionHandoffChecklist,
|
||||
getShellSessionHandoffPackageSchema: () => shellViewModel.shellSessionHandoffPackageSchema,
|
||||
getShellSessionHandoffPackage: () => shellViewModel.shellSessionHandoffPackage,
|
||||
getShellSessionHandoffPackageReport: () => shellViewModel.shellSessionHandoffPackageReport,
|
||||
isSupportedShellSessionHandoffPackage: shellViewModel.isSupportedShellSessionHandoffPackage,
|
||||
getLauncherLinks: () => shellViewModel.launcherLinks,
|
||||
getControlPageApiMethods: () => shellViewModel.controlPage.browserApiMethods,
|
||||
|
||||
@@ -137,6 +137,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr
|
||||
"getShellSessionHandoffChecklist",
|
||||
"getShellSessionHandoffPackageSchema",
|
||||
"getShellSessionHandoffPackage",
|
||||
"getShellSessionHandoffPackageReport",
|
||||
"isSupportedShellSessionHandoffPackage",
|
||||
"getLauncherLinks",
|
||||
"getControlPageApiMethods",
|
||||
@@ -793,6 +794,87 @@ export function isSupportedIniPanelShellSessionHandoffPackage(
|
||||
return schema.manifestFields.every((fieldName) => Object.hasOwn(manifests, fieldName));
|
||||
}
|
||||
|
||||
export function createIniPanelShellSessionHandoffPackageReport(
|
||||
handoffPackage = createIniPanelShellSessionHandoffPackage(),
|
||||
schema = createIniPanelShellSessionHandoffPackageSchema(),
|
||||
) {
|
||||
const packageObject = handoffPackage && typeof handoffPackage === "object" ? handoffPackage : {};
|
||||
const manifests = packageObject.manifests && typeof packageObject.manifests === "object"
|
||||
? packageObject.manifests
|
||||
: {};
|
||||
const missingPackageFields = schema.fields.filter((fieldName) => !Object.hasOwn(packageObject, fieldName));
|
||||
const missingManifestFields = schema.manifestFields.filter((fieldName) => !Object.hasOwn(manifests, fieldName));
|
||||
const mismatchFields = [
|
||||
...(packageObject.apiName === schema.apiName ? [] : ["apiName"]),
|
||||
...(packageObject.packageVersion === schema.packageVersion ? [] : ["packageVersion"]),
|
||||
];
|
||||
const blockingReasons = Array.isArray(packageObject?.checklist?.blockingReasons)
|
||||
? [...packageObject.checklist.blockingReasons]
|
||||
: [];
|
||||
const packageSupported = missingPackageFields.length === 0
|
||||
&& missingManifestFields.length === 0
|
||||
&& mismatchFields.length === 0;
|
||||
const ready = packageSupported && packageObject.ready === true && blockingReasons.length === 0;
|
||||
|
||||
return {
|
||||
apiName: "ini-panel-shell-session-handoff-package-report",
|
||||
reportVersion: 1,
|
||||
phase: ready ? "ready" : "blocked",
|
||||
ready,
|
||||
packageSupported,
|
||||
packageReady: ready,
|
||||
statusLine: packageObject.statusLine ?? (ready ? "Ready: No blocking reasons" : "Blocked: Package unsupported"),
|
||||
schema: {
|
||||
apiName: schema.apiName,
|
||||
packageVersion: schema.packageVersion,
|
||||
fields: [...schema.fields],
|
||||
manifestFields: [...schema.manifestFields],
|
||||
},
|
||||
package: {
|
||||
apiName: packageObject.apiName ?? null,
|
||||
packageVersion: packageObject.packageVersion ?? null,
|
||||
phase: packageObject.phase ?? null,
|
||||
ready: packageObject.ready ?? false,
|
||||
},
|
||||
missingPackageFields,
|
||||
missingManifestFields,
|
||||
mismatchFields,
|
||||
blockingReasons,
|
||||
rows: [
|
||||
{
|
||||
id: "package-supported",
|
||||
label: "Package schema",
|
||||
value: packageSupported ? "supported" : "blocked",
|
||||
},
|
||||
{
|
||||
id: "package-ready",
|
||||
label: "Package readiness",
|
||||
value: ready ? "ready" : "blocked",
|
||||
},
|
||||
{
|
||||
id: "missing-package-fields",
|
||||
label: "Missing package fields",
|
||||
value: missingPackageFields.length === 0 ? "none" : missingPackageFields.join(", "),
|
||||
},
|
||||
{
|
||||
id: "missing-manifest-fields",
|
||||
label: "Missing manifest fields",
|
||||
value: missingManifestFields.length === 0 ? "none" : missingManifestFields.join(", "),
|
||||
},
|
||||
{
|
||||
id: "mismatch-fields",
|
||||
label: "Mismatched fields",
|
||||
value: mismatchFields.length === 0 ? "none" : mismatchFields.join(", "),
|
||||
},
|
||||
{
|
||||
id: "blocking-reasons",
|
||||
label: "Blocking reasons",
|
||||
value: blockingReasons.length === 0 ? "none" : blockingReasons.join(", "),
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) {
|
||||
const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries);
|
||||
const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest);
|
||||
@@ -837,6 +919,9 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries
|
||||
actionPlan: shellSessionHandoffActionPlan,
|
||||
checklist: shellSessionHandoffChecklist,
|
||||
});
|
||||
const shellSessionHandoffPackageReport = createIniPanelShellSessionHandoffPackageReport(
|
||||
shellSessionHandoffPackage,
|
||||
);
|
||||
return {
|
||||
pages: entries.map(({ id, href, title }) => ({
|
||||
id,
|
||||
@@ -858,6 +943,7 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries
|
||||
shellSessionHandoffChecklist,
|
||||
shellSessionHandoffPackage,
|
||||
shellSessionHandoffPackageSchema: createIniPanelShellSessionHandoffPackageSchema(),
|
||||
shellSessionHandoffPackageReport,
|
||||
launchApiSchema: createIniPanelLaunchApiSchema(),
|
||||
launchApiManifest: createIniPanelLaunchApiManifest(entries),
|
||||
isSupportedShellIntegrationManifest: isSupportedIniPanelShellIntegrationManifest,
|
||||
@@ -874,6 +960,7 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries
|
||||
createShellSessionHandoffChecklist: createIniPanelShellSessionHandoffChecklist,
|
||||
createShellSessionHandoffPackage: createIniPanelShellSessionHandoffPackage,
|
||||
createShellSessionHandoffPackageSchema: createIniPanelShellSessionHandoffPackageSchema,
|
||||
createShellSessionHandoffPackageReport: createIniPanelShellSessionHandoffPackageReport,
|
||||
isSupportedShellSessionHandoffPackage: isSupportedIniPanelShellSessionHandoffPackage,
|
||||
controlPage: {
|
||||
browserApiSchema: createControlPageBrowserApiSchema(),
|
||||
|
||||
Reference in New Issue
Block a user