UNPKG

poku

Version:

🐷 Poku makes testing easy for Node.js, Bun, Deno, and you at the same time.

71 lines (70 loc) 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.waitForPort = exports.waitForExpectedResult = exports.sleep = void 0; const node_assert_1 = require("assert"); const node_net_1 = require("net"); const checkPort = (port, host) => new Promise((resolve) => { const client = (0, node_net_1.createConnection)(port, host); client.on('connect', () => { client.end(); resolve(true); }); client.on('error', () => resolve(false)); }); /** Wait until the defined milliseconds. */ const sleep = (milliseconds) => { if (!Number.isInteger(milliseconds)) throw new Error('Milliseconds must be an integer.'); return new Promise((resolve) => setTimeout(resolve, milliseconds)); }; exports.sleep = sleep; /** Wait until a result is equal the expected value. */ const waitForExpectedResult = async (callback, expectedResult, options) => { const delay = options?.delay || 0; const interval = options?.interval || 100; const timeout = options?.timeout || 60000; if (typeof callback !== 'function') throw new Error('Callback must be a function.'); if (!Number.isInteger(interval)) throw new Error('Interval must be an integer.'); if (!Number.isInteger(timeout)) throw new Error('Timeout must be an integer.'); if (!Number.isInteger(delay)) throw new Error('Delay must be an integer.'); await (0, exports.sleep)(delay); const startTime = Date.now(); while (true) { const result = await callback(); if (typeof expectedResult === 'function') { if (typeof result === 'function' && result.name === expectedResult.name) break; } else if (typeof expectedResult === 'symbol') { if (typeof result === 'symbol' && String(result) === String(expectedResult)) break; } else { try { options?.strict ? (0, node_assert_1.deepStrictEqual)(result, expectedResult) : (0, node_assert_1.deepEqual)(result, expectedResult); break; } catch { } } if (Date.now() - startTime >= timeout) throw new Error('Timeout'); await (0, exports.sleep)(interval); } await (0, exports.sleep)(delay); }; exports.waitForExpectedResult = waitForExpectedResult; /** Wait until the defined port is active. */ const waitForPort = async (port, options) => { const host = options?.host || 'localhost'; if (!Number.isInteger(port)) throw new Error('Port must be an integer.'); await (0, exports.waitForExpectedResult)(async () => await checkPort(port, host), true, options); }; exports.waitForPort = waitForPort;