Publish Forma Engine 0.3.0 source with documentation and CI

This commit is contained in:
emil28092005
2026-09-09 15:49:08 +03:00
commit e52bc0e33b
70 changed files with 19610 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
export const targets = ["linux", "windows", "android"];
export function normalizeOptions(value = {}) {
const o = {
target: value.target ?? "linux",
name: value.name ?? "Forma Game",
appId: value.appId ?? "games.forma.mygame",
version: value.version ?? "1.0.0",
versionCode: value.versionCode ?? 1,
mode: value.mode ?? "debug",
width: value.width ?? 1280,
height: value.height ?? 720,
fullscreen: value.fullscreen ?? false,
orientation: value.orientation ?? "landscape",
};
if (!targets.includes(o.target)) throw Error("Unknown build target");
if (
typeof o.name !== "string" ||
!o.name.trim() ||
o.name.length > 80 ||
/[\x00-\x1f<>:"/\\|?*]/.test(o.name)
)
throw Error(
"Game name must be 1–80 characters without file control characters",
);
o.name = o.name.trim();
if (
typeof o.appId !== "string" ||
o.appId.length > 150 ||
!/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*){2,}$/.test(o.appId)
)
throw Error(
"Application ID: games.studio.mygame (lowercase Latin letters)",
);
if (
typeof o.version !== "string" ||
!/^\d{1,4}\.\d{1,4}\.\d{1,4}$/.test(o.version)
)
throw Error("Version must have format 1.0.0");
if (
!Number.isInteger(o.versionCode) ||
o.versionCode < 1 ||
o.versionCode > 2100000000
)
throw Error("Android version code must be a positive integer");
if (!["debug", "release"].includes(o.mode))
throw Error("Mode must be debug or release");
if (!["landscape", "portrait", "sensor"].includes(o.orientation))
throw Error("Invalid orientation");
for (const key of ["width", "height"])
if (!Number.isInteger(o[key]) || o[key] < 320 || o[key] > 7680)
throw Error("Window size must be 320–7680");
if (typeof o.fullscreen !== "boolean")
throw Error("Fullscreen must be boolean");
return o;
}
export function artifactStem(o) {
return o.appId.split(".").at(-1) + "-" + o.version;
}