@lark-project/cli
Version:
飞书项目插件开发工具
68 lines (67 loc) • 2.51 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.recordPlugin = exports.listPlugins = exports.loadPluginRegistry = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const auth_config_1 = require("./auth-config");
const REGISTRY_FILE_NAME = 'plugins.json';
function registryPath() {
return path_1.default.join((0, auth_config_1.resolveConfigDir)(), REGISTRY_FILE_NAME);
}
/** 归一化到 origin(与 auth-config 的域名键一致)。 */
function normalizeOrigin(url) {
return new URL(url.replace(/\/+$/, '')).origin;
}
function loadPluginRegistry() {
try {
return JSON.parse(fs_1.default.readFileSync(registryPath(), 'utf-8')) || {};
}
catch (_a) {
return {};
}
}
exports.loadPluginRegistry = loadPluginRegistry;
/** 列出某站点下记录过的插件(域名按 origin 归一)。 */
function listPlugins(siteDomain) {
try {
return loadPluginRegistry()[normalizeOrigin(siteDomain)] || [];
}
catch (_a) {
return [];
}
}
exports.listPlugins = listPlugins;
/**
* 累积记录一个插件(按 origin + pluginId 去重、合并字段)。无 secret。
* 全程 best-effort——它只是定位用的便利缓存,任何失败都吞掉,绝不让主命令挂掉;
* 内容无变化时跳过写盘(getLocalPluginConfig 会频繁调用)。
*/
function recordPlugin(siteDomain, entry) {
try {
const origin = normalizeOrigin(siteDomain);
const store = loadPluginRegistry();
const list = store[origin] ? [...store[origin]] : [];
const idx = list.findIndex(p => p.pluginId === entry.pluginId);
const before = JSON.stringify(list);
if (idx >= 0) {
list[idx] = Object.assign(Object.assign({}, list[idx]), entry);
}
else {
list.push(entry);
}
if (JSON.stringify(list) === before) {
return; // 无变化,免写
}
store[origin] = list;
const p = registryPath();
fs_1.default.mkdirSync(path_1.default.dirname(p), { recursive: true });
fs_1.default.writeFileSync(p, JSON.stringify(store, null, 2), { mode: 0o644 });
}
catch (_a) {
// best-effort:定位缓存写失败不影响主命令
}
}
exports.recordPlugin = recordPlugin;