npm install github:flinbein/rollup-plugin-varhub-bundle
The plugin is used to compile typescript code for a varhub VM and calculate the integrity.
import type { UserConfig } from 'vite';
import varhubBundlePlugin from "@flinbein/rollup-plugin-varhub-bundle";
export default {
plugins: [varhubBundlePlugin()]
} satisfies UserConfig |
|
import varhubBundlePlugin from "@flinbein/rollup-plugin-varhub-bundle";
export default {
input: 'main.js',
output: [{
file: 'bundle.min.js',
format: 'es',
plugins: [varhubBundlePlugin()]
}]
}; |
You can pass additional options to plugin: varhubBundlePlugin(options)
.
See ESBuild options.
These rules will only apply to building code for the varhub VM.
import "${entrypoint}?varhub-bundle"
returns object with props: module
, integrity
.
It can be used to create room.
const {module, integrity} = await import("./someModule.ts?varhub-bundle");
It is strongly recommended to use as dynamic import.
import "${entrypoint}?varhub-bundle:integrity"
returns string
import integrity from "./someModule.ts?varhub-bundle";
import "${entrypoint}?varhub-bundle:module"
returns module object with props: main
, source
import module from "./someModule.ts?varhub-bundle:module";
index.ts
import { Varhub } from "@flinbein/varhub-web-client";
// DO NOT USE import "./roomLogic.ts" directly!
import integrity from "./roomLogic.ts?varhub-bundle:integrity";
// integrity: string
const hub = new Varhub("https://example.com/varhub/");
async function createRoom(hub: Varhub){
const roomConfig = await import("./roomLogic.ts?varhub-bundle");
// roomConfig: {module: object, integrity: string}
return hub.createRoom("ivm", {...roomConfig});
}
async function start(){
const room = await createRoom(hub);
const client = hub.join(room.id, { integrity });
client.on("message", console.log);
await client;
client.send("hello");
}
start();
roomLogic.ts
import room from "varhub:room";
room.on("connectionMessage", (con, ...args) => {
room.broadcast(...args);
});