UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

34 lines (33 loc) 1.77 kB
import { AppType } from "../../../types"; export interface ICreateProjectOptions { siteDomain: string; name: string; description?: string; detailDescription?: string; appType?: AppType; force?: boolean; } /** * 纯函数:name → base slug。**不查 fs**,所有调用同 (name, appKey) 必产同样输出。 * * 撞名处理交给 pickProjectName,避免在"算名字"这一步做悲观启发式(如"含中文必加后缀") * 而牺牲了 readability——大多数场景同一 cwd 下不会撞,clean slug 最舒服。 * * slug 完全为空(如纯中文名 "节点表单")走 `plugin-<appKeySuffix>` 兜底,保证非空。 */ export declare function deriveProjectName(name: string, appKey: string): string; /** * 新建场景下选一个**实际不撞名**的 dir 名: * 1. base slug(来自 deriveProjectName)——不撞就用,保留 readability * 2. base 撞 → 追加 `-<appKeySuffix>`(pluginId 末 6 位,globally unique) * 3. 还撞 → `-<appKeySuffix>-2` / `-3` …… 直到不撞或耗尽 999 次 * * 算出来的结果必须由 caller 写入 sentinel.projectName,让后续 resume 不再算这一遍—— * 否则 resume 时 fs 状态变了,重算会得到不同的 dir 名,导致清理对象错位。 * * 解决用户场景:中文名经 slugify 信息丢失("节点表单 AI 字段" → "ai"),导致同语境多个 * 插件全撞 `ai/`——查 fs 命中 → 走 `ai-xxxyyy` / `ai-aaabbb` 自然区分。纯英文名只要不撞 * 仍保留干净 slug,不被无脑加后缀污染。 */ export declare function pickProjectName(name: string, appKey: string, cwd: string): string; export declare function createProject(options: ICreateProjectOptions): Promise<void>;