UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

76 lines (75 loc) 3.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assertProbe = void 0; const compare_1 = require("../compare"); function assertProbe(probe, obs) { const { expect } = probe; const fail = (actual, detail) => ({ probe, pass: false, actualOutcome: actual, detail }); const ok = (actual) => ({ probe, pass: true, actualOutcome: actual, detail: 'ok' }); const roundtripCheck = () => { if (!obs.s0 || !obs.s1) { return { kind: 'snapshot_missing', detail: `snapshot absent after successful update (s0=${obs.s0 ? 'ok' : 'null'}, s1=${obs.s1 ? 'ok' : 'null'}) — tooling/path misconfig, not a constraint result`, }; } const d = (0, compare_1.comparePointInfoMaps)(obs.s0, obs.s1); if (d.diffs.length || d.missingInRemote.length) { return { kind: 'diff', detail: `roundtrip diff: ${JSON.stringify(d.diffs)} missing:${JSON.stringify(d.missingInRemote)}` }; } return { kind: 'clean' }; }; const resolveRoundtrip = (okOutcome) => { const rt = roundtripCheck(); if (rt.kind === 'snapshot_missing') return fail('snapshot_missing', rt.detail); if (rt.kind === 'diff') return fail('roundtrip_diff', rt.detail); return ok(okOutcome); }; switch (expect.outcome) { case 'blocked_at_set': { if (obs.setExitCode === 0) return fail('set_passed', 'expected set to fail but it passed'); if (expect.error_match && !new RegExp(expect.error_match).test(obs.setStderr)) { return fail('set_failed_wrong_error', `stderr did not match /${expect.error_match}/: ${obs.setStderr.trim()}`); } return ok('blocked_at_set'); } case 'blocked_at_push': { if (obs.setExitCode !== 0) return fail('blocked_at_set', 'expected set to pass first'); if (obs.updateExitCode === null) return fail('blocked_at_set', 'update did not run'); if (obs.updateExitCode === 0) return fail('push_passed', 'expected push to be rejected'); if (expect.error_match && !new RegExp(expect.error_match).test(obs.updateStderr)) { return fail('push_failed_wrong_error', `stderr did not match /${expect.error_match}/`); } return ok('blocked_at_push'); } case 'stored': { if (obs.setExitCode !== 0) return fail('blocked_at_set', obs.setStderr.trim()); if (obs.updateExitCode !== 0) return fail('blocked_at_push', obs.updateStderr.trim()); return resolveRoundtrip('stored'); } case 'default_applied': { if (obs.setExitCode !== 0) return fail('blocked_at_set', obs.setStderr.trim()); if (obs.updateExitCode !== 0) return fail('blocked_at_push', obs.updateStderr.trim()); if (expect.value_match && !new RegExp(expect.value_match).test(JSON.stringify(obs.s0))) { return fail('default_missing', `S0 did not contain /${expect.value_match}/`); } return resolveRoundtrip('default_applied'); } // 探针 catalog 是手写 JSON(见 conformance.md),outcome 拼错时 expect.outcome // 会越出 ProbeOutcome 联合——给出显式 FAIL,而不是让函数返回 undefined 后在 // renderMatrix 里读 undefined.pass 崩掉。 default: return fail('unknown_outcome', `unhandled expect.outcome: ${String(expect.outcome)}`); } } exports.assertProbe = assertProbe;