rivetkit
Version:
Lightweight libraries for building stateful actors on edge platforms
126 lines (108 loc) • 4 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
var _chunkPDFL7FBLcjs = require('./chunk-PDFL7FBL.cjs');
var _chunkSIWYIRXPcjs = require('./chunk-SIWYIRXP.cjs');
var _chunkVZMXAZKCcjs = require('./chunk-VZMXAZKC.cjs');
var _chunkCA3X5M6Hcjs = require('./chunk-CA3X5M6H.cjs');
var _chunkYKVTF7MPcjs = require('./chunk-YKVTF7MP.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 = _chunkCA3X5M6Hcjs.RunnerConfigSchema.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
function logger() {
return _chunkYKVTF7MPcjs.getLogger.call(void 0, "test");
}
// src/test/mod.ts
function serve(registry, inputConfig) {
inputConfig ??= {};
const config = ConfigSchema.parse(inputConfig);
let upgradeWebSocket;
if (!config.getUpgradeWebSocket) {
config.getUpgradeWebSocket = () => upgradeWebSocket;
}
const runConfig = _chunkCA3X5M6Hcjs.RunnerConfigSchema.parse(inputConfig);
const driver = _nullishCoalesce(inputConfig.driver, () => ( _chunkPDFL7FBLcjs.createFileSystemOrMemoryDriver.call(void 0, false)));
const managerDriver = driver.manager(registry.config, config);
const client = _chunkVZMXAZKCcjs.createClientWithDriver.call(void 0, managerDriver);
_chunkSIWYIRXPcjs.configureInspectorAccessToken.call(void 0, config, managerDriver);
const { router } = _chunkPDFL7FBLcjs.createManagerRouter.call(void 0,
registry.config,
runConfig,
managerDriver,
driver,
client
);
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({
msg: "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()))
);
throw "TODO: Fix engine port";
}
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-PSCDCEXM.cjs.map