Publish Forma Engine 0.3.0 source with documentation and CI
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user