@lark-project/cli
Version:
飞书项目插件开发工具
45 lines (44 loc) • 2.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.runConformance = void 0;
const path_1 = __importDefault(require("path"));
const mutate_1 = require("./mutate");
const assert_1 = require("./assert");
function runConformance(opts, deps) {
const catalog = deps.readJson(opts.catalogPath);
const baseConfig = deps.readJson(path_1.default.join(path_1.default.dirname(opts.catalogPath), catalog.base));
const results = [];
for (const probe of catalog.probes) {
const obs = runProbe(probe, baseConfig, opts, deps);
results.push((0, assert_1.assertProbe)(probe, obs));
// 复位:用 base 覆盖 draft,下条 probe 干净起步
deps.writeJson(opts.draftPath, baseConfig);
}
return results;
}
exports.runConformance = runConformance;
// lpm 的校验错误("Configuration validation failed: ...")走 stdout,不走 stderr;
// stderr 只有版本检查 spinner 之类的噪音。error_match 要命中真错误,必须把两条流合起来看。
function diag(r) {
return [r.stdout, r.stderr].filter(Boolean).join('\n');
}
function runProbe(probe, baseConfig, opts, deps) {
const mutated = (0, mutate_1.applyMutation)(baseConfig, probe.mutation);
deps.writeJson(opts.draftPath, mutated);
const setRes = deps.execLpm(['local-config', 'set', '--from', opts.draftPath]);
if (setRes.exitCode !== 0) {
return { setExitCode: setRes.exitCode, setStderr: diag(setRes), updateExitCode: null, updateStderr: '', s0: null, s1: null };
}
const updRes = deps.execLpm(['update', '--source-type=local', '--save-snapshot', '--case-id', probe.id]);
if (updRes.exitCode !== 0) {
return { setExitCode: 0, setStderr: diag(setRes), updateExitCode: updRes.exitCode, updateStderr: diag(updRes), s0: null, s1: null };
}
const s0 = deps.loadSnapshot(probe.id);
// get 失败时不读 remote.json——磁盘上那份可能是上一条 probe 的残留,读它会拿到陈旧 S1。
const getRes = deps.execLpm(['local-config', 'get', '--remote']);
const s1 = getRes.exitCode === 0 ? deps.readRemoteJson() : null;
return { setExitCode: 0, setStderr: diag(setRes), updateExitCode: 0, updateStderr: diag(updRes), s0, s1 };
}