(enabled, deps, fn)
| 828 | } |
| 829 | |
| 830 | async function withMachineJsonConsole(enabled, deps, fn) { |
| 831 | if (!enabled) return fn(); |
| 832 | const original = { |
| 833 | log: console.log, |
| 834 | info: console.info, |
| 835 | warn: console.warn, |
| 836 | error: console.error, |
| 837 | debug: console.debug, |
| 838 | stdoutWrite: process.stdout.write, |
| 839 | stderrWrite: process.stderr.write, |
| 840 | }; |
| 841 | const hadOriginalStdoutWrite = Object.prototype.hasOwnProperty.call(deps, MACHINE_JSON_STDOUT_WRITE); |
| 842 | const previousOriginalStdoutWrite = deps[MACHINE_JSON_STDOUT_WRITE]; |
| 843 | const write = (...args) => { |
| 844 | try { process.stderr.write(sanitizeText(util.format(...args), deps) + '\n'); } catch (_) {} |
| 845 | }; |
| 846 | deps[MACHINE_JSON_STDOUT_WRITE] = original.stdoutWrite; |
| 847 | process.stdout.write = function (chunk, encoding, callback) { |
| 848 | const clean = sanitizeStderrChunk(chunk, encoding, deps); |
| 849 | if (typeof encoding === 'function') return original.stderrWrite.call(process.stderr, clean, encoding); |
| 850 | return original.stderrWrite.call(process.stderr, clean, encoding, callback); |
| 851 | }; |
| 852 | process.stderr.write = function (chunk, encoding, callback) { |
| 853 | const clean = sanitizeStderrChunk(chunk, encoding, deps); |
| 854 | if (typeof encoding === 'function') return original.stderrWrite.call(process.stderr, clean, encoding); |
| 855 | return original.stderrWrite.call(process.stderr, clean, encoding, callback); |
| 856 | }; |
| 857 | console.log = write; |
| 858 | console.info = write; |
| 859 | console.warn = write; |
| 860 | console.error = write; |
| 861 | console.debug = write; |
| 862 | try { |
| 863 | return await fn(); |
| 864 | } finally { |
| 865 | console.log = original.log; |
| 866 | console.info = original.info; |
| 867 | console.warn = original.warn; |
| 868 | console.error = original.error; |
| 869 | console.debug = original.debug; |
| 870 | process.stdout.write = original.stdoutWrite; |
| 871 | process.stderr.write = original.stderrWrite; |
| 872 | if (hadOriginalStdoutWrite) { |
| 873 | deps[MACHINE_JSON_STDOUT_WRITE] = previousOriginalStdoutWrite; |
| 874 | } else { |
| 875 | delete deps[MACHINE_JSON_STDOUT_WRITE]; |
| 876 | } |
| 877 | } |
| 878 | } |
| 879 | |
| 880 | function classifyError(e, command) { |
| 881 | if (e instanceof ContractError) return { reason: e.reason, message: e.safeMessage, retryable: e.reason === 'network_error' }; |
no test coverage detected