UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

45 lines (44 loc) 2.4 kB
"use strict"; 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 }; }