@bscotch/stitch
Version:
Stitch: The GameMaker Studio 2 Asset Pipeline Development Kit.
79 lines • 2.85 kB
JavaScript
import { Pathy } from '@bscotch/pathy';
import { ok } from 'assert';
import { homedir } from 'os';
import { GameMakerEngine } from './GameMakerEngine.js';
export class GameMakerEngineStatic {
static artifactExtension(platform) {
const extensions = {
android: 'aab',
ios: 'iap',
linux: 'zip',
mac: 'zip',
switch: 'nsp',
windows: 'zip',
winuwp: 'appxbundle',
xboxone: 'xboxone-pkg',
xboxseriesxs: 'xboxseriesxs-pkg',
};
const extension = extensions[platform];
ok(extension, `Unsupported platform, no extension defined: ${platform}`);
return extension;
}
static directory(beta) {
const dir = `C:\\ProgramData\\${GameMakerEngineStatic.engineName(beta)}`;
return new Pathy(dir, dir);
}
static runtimeDirectory(version) {
const isBeta = GameMakerEngineStatic.isBetaVersion(version);
return GameMakerEngineStatic.directory(isBeta).join('Cache', 'runtimes', `runtime-${version}`);
}
static get localConfigDirectory() {
return new Pathy(`${homedir()}/.stitch`);
}
static get ideVersionsFolder() {
return GameMakerEngineStatic.localConfigDirectory.join('engine/ide');
}
static get runtimeVersionsFolder() {
return GameMakerEngineStatic.localConfigDirectory.join('engine/runtime');
}
static async installed() {
const engines = {};
for (const beta of [false, true]) {
const ideDirectory = GameMakerEngineStatic.directory(beta);
if (await ideDirectory.exists()) {
engines[beta ? 'beta' : 'release'] = new GameMakerEngine({ beta });
}
}
return engines;
}
static engineName(beta = false) {
let name = `GameMakerStudio2`;
if (beta) {
name += '-Beta';
}
return name;
}
/**
* Given a version string, from the GameMaker IDE or
* runner, returns `true` if the version string looks
* like a beta version, `false` if it does not, and
* `undefined` if it cannot be determined.
*
* (The undefined case occurs for older versions.)
*/
static isBetaVersion(version) {
const stablePatterns = /^(2|20\d\d)\.\d{1,2}\.\d+\.\d+$/;
const betaPatterns = /^(23\.\d|20\d\d\.\d{3,})\.\d+\.\d+$/;
return version.match(stablePatterns)
? false
: version.match(betaPatterns)
? true
: undefined;
}
static async logDir(project, options) {
const logDir = new Pathy(options?.logDir || new Pathy(project.yypDirAbsolute).join('logs'));
await logDir.ensureDirectory();
return logDir;
}
}
//# sourceMappingURL=GameMakerEngine.static.js.map