UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

79 lines (78 loc) 3.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateAndUploadIcon = exports.resolveBuilderFallbackIcon = exports.generateAndUploadBuilderIcon = void 0; const upload_app_file_1 = require("../api/tools/upload-app-file"); const generate_icon_1 = require("../api/tools/generate-icon"); const update_plugin_description_1 = require("../api/tools/update-plugin-description"); const logger_1 = require("./logger"); function getErrorMessage(error) { return error instanceof Error ? error.message : String(error); } async function uploadIconSvg({ siteDomain, appKey, iconSvg, }) { const { url: iconUrl } = await (0, upload_app_file_1.uploadAppFile)({ siteDomain, appKey, fileBuffer: iconSvg, fileName: 'icon.svg', contentType: 'image/svg+xml', }).catch(error => { logger_1.logger.warn(`Upload icon failed: ${getErrorMessage(error)}`); return { url: '' }; }); if (!iconUrl) return ''; // 上传接口返回相对路径(如 "xxx.svg"),需拼接完整 URL 才能通过后端 IsUrl 校验 return `${siteDomain}/bff/v2/app/file/download/${iconUrl}`; } /** * 生成 builder 组件(liteAppComponent)专用图标并上传,返回完整 URL;失败返回空字符串。 * 不触碰插件 description —— 仅供 builder 点位兜底使用。 */ async function generateAndUploadBuilderIcon({ siteDomain, appKey, }) { return uploadIconSvg({ siteDomain, appKey, iconSvg: (0, generate_icon_1.generateBuilderIconSvg)(), }); } exports.generateAndUploadBuilderIcon = generateAndUploadBuilderIcon; /** * 解析 builder 组件 icon 兜底 URL:优先沿用插件级 icon;插件 icon 也为空时,生成一张 builder 专用图标并上传。 * 失败时返回空字符串。 */ async function resolveBuilderFallbackIcon({ siteDomain, appKey, }) { const pluginIcon = await (0, update_plugin_description_1.getPluginDescriptionInfo)({ siteDomain, appKey }) .then(info => { var _a; return (_a = info.icon) !== null && _a !== void 0 ? _a : ''; }) .catch(error => { logger_1.logger.warn(`Fetch plugin description failed: ${getErrorMessage(error)}`); return ''; }); if (pluginIcon) return pluginIcon; logger_1.logger.info('Plugin icon missing, generating a default builder icon as fallback...'); return generateAndUploadBuilderIcon({ siteDomain, appKey }); } exports.resolveBuilderFallbackIcon = resolveBuilderFallbackIcon; /** * 生成随机插件图标并上传,成功后更新插件 description 的 icon 字段。 * 返回上传后的图标 URL,失败时返回空字符串。 */ async function generateAndUploadIcon({ siteDomain, appKey, }) { logger_1.logger.info('Generating plugin icon...'); const fullIconUrl = await uploadIconSvg({ siteDomain, appKey, iconSvg: (0, generate_icon_1.generateIconSvg)(), }); if (fullIconUrl) { await (0, update_plugin_description_1.updatePluginDescription)({ siteDomain, appKey, icon: fullIconUrl, }).catch(error => { logger_1.logger.warn(`Update plugin icon failed: ${getErrorMessage(error)}`); }); } return fullIconUrl; } exports.generateAndUploadIcon = generateAndUploadIcon;