@lark-project/cli
Version:
飞书项目插件开发工具
79 lines (78 loc) • 3.36 kB
JavaScript
;
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;