@lark-project/cli
Version:
飞书项目插件开发工具
27 lines (26 loc) • 1.82 kB
TypeScript
import { AppType } from "../../../types";
/**
* publish 用本地 plugin.config.json 的 `app_type` 分流——普通插件走 commitVersion 三步走,
* AI 应用走 release_app 单调用。本地值可能被手改、或人在错的工程目录下执行,一旦和后端
* 真实形态不符,publish 就会串到另一条链路:要么 release_app 发一个普通插件,要么
* commitVersion 发一个 AI 应用——而 CLI 本身没有任何护栏拦得住。
*
* 后端 GetAppDescriptionInfo 响应自带 `app_type`(0 普通 / 1 AI) + `point_types`,publish 本就
* 调这个接口拿元信息(见 ensurePluginMetadataReady),所以这里零额外网络调用即可比对。
*
* 比对策略:
* - 后端没回 `app_type`、或回了 0/1 之外的未知值 → 形态判不出,**fail-fast 抛错拒发**:
* publish 选哪条管道(commitVersion / release_app)全靠 app_type,判不出就只能猜,
* 猜错就把另一类应用发进错管道产生脏数据。宁可拦下也不猜。代价是后端尚无 app_type
* 字段的存量普通插件也会被拦——这是刻意取舍(见对应 commit / 讨论)。
* - 普通 vs AI 跨形态不符 → 抛错拦死。
* - 两边都是 AI 时再按 `point_types` 细分 ai_node / ai_field;`point_types` 缺失或不含
* AI 点位关键字时只能判到「是 AI」这一层,不细分,不阻断——此时 app_type 已确认是 AI,
* ai_node / ai_field 都走同一个 release_app 管道(releaseApp 不消费该子类型),无错管道风险。
*
* 抛出的 Error 由 publishProject 的 catch 统一转成 logger.error + process.exit(1)。
*/
export declare function assertAppTypeMatchesBackend(localAppType: AppType, descInfo: {
app_type?: number;
point_types?: string[];
}): void;