@rivetkit/core
Version:
132 lines (116 loc) • 4.09 kB
JavaScript
;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