rune-sdk
Version:
Build a multiplayer game played by millions! Your game runs inside the Rune app with 10 million installs across [iOS](https://apps.apple.com/app/rune-games-and-voice-chat/id1450358364) and [Android](https://play.google.com/store/apps/details?id=ai.rune.ti
37 lines (36 loc) • 1.6 kB
JavaScript
import path from "node:path";
import { existsSync } from "node:fs";
import { getTransformHtmlForBuildPlugins } from "./plugins/transformHtml.js";
import { getBuildLogicPlugin } from "./plugins/buildLogic.js";
import { getDetectExternalImportsPlugin } from "./plugins/detectExternalImports.js";
import { getDevPlugins } from "./plugins/devPlugins.js";
import { createRequire } from "node:module";
import { packageVersionCheck } from "./plugins/packageVersionCheck.js";
const require = createRequire(import.meta.url);
export default function runePlugin(options) {
if (!options?.logicPath) {
throw new Error("`logicPath` option is required to use the Rune plugin");
}
if (!options.logicPath.endsWith("logic.js") &&
!options.logicPath.endsWith("logic.ts")) {
throw new Error("`logicPath` must end with `logic.js` or `logic.ts`. For example: `src/logic.ts`, `src/logic.js`, `logic/logic.ts`, `logic/logic.js`");
}
const logicPath = path.resolve(options.logicPath);
if (!existsSync(logicPath)) {
throw new Error(`Rune logic file "${options.logicPath}" not found`);
}
let runePkgPath;
try {
runePkgPath = require.resolve("rune-sdk/package.json");
}
catch {
throw new Error("Cannot locate the rune-sdk module. Did you install it?");
}
return [
...packageVersionCheck(runePkgPath),
...getDetectExternalImportsPlugin(options, logicPath),
...getDevPlugins(runePkgPath),
...getTransformHtmlForBuildPlugins(runePkgPath),
...getBuildLogicPlugin(options, logicPath),
];
}