UNPKG

@rivetkit/core

Version:

132 lines (116 loc) 4.09 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _chunkAXTFLZYFcjs = require('./chunk-AXTFLZYF.cjs'); var _chunkZCUB7MR5cjs = require('./chunk-ZCUB7MR5.cjs'); var _chunk4KRNEW7Dcjs = require('./chunk-4KRNEW7D.cjs'); // src/test/mod.ts var _net = require('net'); var _nodeserver = require('@hono/node-server'); var _nodews = require('@hono/node-ws'); var _vitest = require('vitest'); // src/test/config.ts var _zod = require('zod'); var ConfigSchema = _chunkAXTFLZYFcjs.RunConfigSchema.removeDefault().extend({ hostname: _zod.z.string().optional().default(_nullishCoalesce(process.env.HOSTNAME, () => ( "127.0.0.1"))), port: _zod.z.number().optional().default(Number.parseInt(_nullishCoalesce(process.env.PORT, () => ( "8080")))) }).default({}); // src/test/log.ts var LOGGER_NAME = "nodejs"; function logger() { return _chunk4KRNEW7Dcjs.getLogger.call(void 0, LOGGER_NAME); } // src/test/mod.ts function serve(registry, inputConfig) { inputConfig ??= {}; if (!inputConfig.driver) { inputConfig.driver = _chunkAXTFLZYFcjs.createFileSystemOrMemoryDriver.call(void 0, false); } const config = ConfigSchema.parse(inputConfig); let upgradeWebSocket; if (!config.getUpgradeWebSocket) { config.getUpgradeWebSocket = () => upgradeWebSocket; } const runConfig = _chunkAXTFLZYFcjs.RunConfigSchema.parse(inputConfig); const managerDriver = config.driver.manager(registry.config, config); const inlineClientDriver = _chunkAXTFLZYFcjs.createInlineClientDriver.call(void 0, managerDriver); const { router } = _chunkAXTFLZYFcjs.createManagerRouter.call(void 0, registry.config, runConfig, inlineClientDriver, managerDriver, false ); const nodeWebSocket = _nodews.createNodeWebSocket.call(void 0, { app: router }); upgradeWebSocket = nodeWebSocket.upgradeWebSocket; const server = _nodeserver.serve.call(void 0, { fetch: router.fetch, hostname: config.hostname, port: config.port }); nodeWebSocket.injectWebSocket(server); logger().info("rivetkit started", { hostname: config.hostname, port: config.port, definitions: Object.keys(registry.config.use).length }); return server; } async function setupTest(c, registry) { _vitest.vi.useFakeTimers(); const mockDriverContext = {}; const setDriverContextFn = (ctx) => { mockDriverContext.current = ctx; }; const port = await getPort(); const server = serve(registry, { port }); c.onTestFinished( async () => await new Promise((resolve) => server.close(() => resolve())) ); const client = _chunkZCUB7MR5cjs.createClient.call(void 0, `http://127.0.0.1:${port}`); c.onTestFinished(async () => await client.dispose()); return { client, mockDriver: { actorDriver: { setCreateVarsContext: setDriverContextFn } } }; } async function getPort() { const MIN_PORT = 1e4; const MAX_PORT = 65535; const getRandomPort = () => Math.floor(Math.random() * (MAX_PORT - MIN_PORT + 1)) + MIN_PORT; let port = getRandomPort(); let maxAttempts = 10; while (maxAttempts > 0) { try { const server = await new Promise((resolve, reject) => { const server2 = _net.createServer.call(void 0, ); server2.once("error", (err) => { if (err.code === "EADDRINUSE") { reject(new Error(`Port ${port} is in use`)); } else { reject(err); } }); server2.once("listening", () => { resolve(server2); }); server2.listen(port); }); await new Promise((resolve) => { server.close(() => resolve()); }); return port; } catch (err) { maxAttempts--; if (maxAttempts <= 0) { break; } port = getRandomPort(); } } throw new Error("Could not find an available port after multiple attempts"); } exports.setupTest = setupTest; exports.getPort = getPort; //# sourceMappingURL=chunk-5YH3BFI6.cjs.map