| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /**
- * 外壳的**可注入启动计划**(票 14;规格 09 / 决策票 04 的核心裁定)。
- *
- * 规格 09 原句:「外壳的启动逻辑抽出可注入的启动计划:输入 dataSource 与配置,
- * 输出启动动作清单;real 与 mock 产出**同一套动作**,仅 transport 不同。」
- *
- * 为什么必须是纯函数而不是散在 `CockpitShell.vue` 里的 if/else:
- * · 「real 与 mock 同构启动」是一条**可断言的契约**——动作清单同构这件事,
- * 只有把"清单"变成纯函数的输出,脱浏览器的逻辑闸门才能逐项对齐(规格 09 的主接缝);
- * · 此前 real 分支只加载配置、什么都不取(旧壳的 `if (dataSource === MOCK)` 门),
- * 那正是规格 09 的 Problem Statement 第 1 条「real 模式是空壳」——本函数落地后,
- * 外壳按清单执行,mock 与 real 走**同一条**执行路径,差别只剩 `registerMocks` 一项。
- *
- * 本文件是纯函数:不 import service、不碰 Vue、不发请求(t18 H5 同一条纪律)。
- */
- /** 启动动作词表(外壳据此执行;词是"做什么",不含"怎么做")。 */
- export const STARTUP_ACTION = {
- REGISTER_MOCKS: 'register-mocks',
- LOAD_MAP_SUMMARY: 'load-map-summary',
- LOAD_SHARED_SECTIONS: 'load-shared-sections',
- LOAD_INFRASTRUCTURE_PANELS: 'load-infrastructure-panels',
- LOAD_MONITORING_PANELS: 'load-monitoring-panels',
- LOAD_EVENT_PANELS: 'load-event-panels',
- LOAD_OVERVIEW_PANELS: 'load-overview-panels',
- START_WEBSOCKET: 'start-websocket',
- START_FRESHNESS: 'start-freshness',
- }
- /**
- * 配置 + 数据源 → 启动动作清单(纯函数)。
- *
- * 契约(规格 09 的 Implementation Decisions 逐条对应):
- * · **完全同构**:real 与 mock 的动作清单**完全相同**(同序同项);
- * · **real 不注册契约化 mock**:`register-mocks` 只出现在 mock 分支;
- * · **启动顺序保持「先把筛选交给地图,再取第 1 页」的既有纪律**——清单顺序即执行顺序,
- * `load-map-summary`(装载器 setup,含筛选)排在 `load-shared-sections`(取第 1 页)之前;
- * · **WS 只定生命周期**、新鲜度 tick 全套(地图 + 当前模式面板)都归运行期,
- * 清单只表达"要启动",不表达周期内做什么。
- *
- * 配置缺失或数据源认不出时按 mock 处理(与 `cockpitConfig` 的「非法 dataSource 退回 mock」
- * 同一条兜底;调用方(外壳)只会在配置落地后调它)。
- *
- * @param {object} [config] 归一化后的驾驶舱配置(至少 `dataSource`)
- * @returns {{mode: string, actions: string[], registerMocks: boolean}}
- */
- export function planCockpitStartup(config = {}) {
- const mode = config && config.dataSource === 'real' ? 'real' : 'mock'
- const registerMocks = mode !== 'real'
- const actions = [
- ...(registerMocks ? [STARTUP_ACTION.REGISTER_MOCKS] : []),
- STARTUP_ACTION.LOAD_MAP_SUMMARY,
- STARTUP_ACTION.LOAD_SHARED_SECTIONS,
- STARTUP_ACTION.LOAD_INFRASTRUCTURE_PANELS,
- STARTUP_ACTION.LOAD_MONITORING_PANELS,
- STARTUP_ACTION.LOAD_EVENT_PANELS,
- STARTUP_ACTION.LOAD_OVERVIEW_PANELS,
- STARTUP_ACTION.START_WEBSOCKET,
- STARTUP_ACTION.START_FRESHNESS,
- ]
- return { mode, actions, registerMocks }
- }
|