57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
// SPDX-FileCopyrightText: 2022 Johannes Loher
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import en from "../lang/en.json";
|
|
|
|
function setupPrimitives() {
|
|
Object.defineProperties(Number, {
|
|
isNumeric: {
|
|
value: function (n: unknown) {
|
|
if (n instanceof Array) return false;
|
|
else if (([null, ""] as unknown[]).includes(n)) return false;
|
|
// @ts-expect-error Abusing JavaScript a bit here, but it's the implementation from foundry
|
|
return +n === +n;
|
|
},
|
|
},
|
|
fromString: {
|
|
value: function (str: unknown) {
|
|
if (typeof str !== "string" || !str.length) return NaN;
|
|
// Remove whitespace.
|
|
str = str.replace(/\s+/g, "");
|
|
return Number(str);
|
|
},
|
|
},
|
|
});
|
|
|
|
Object.defineProperties(Math, {
|
|
clamped: {
|
|
value: function (num: number, min: number, max: number) {
|
|
return Math.min(max, Math.max(num, min));
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
function setupStubs() {
|
|
class StubGame {
|
|
constructor() {
|
|
this.i18n = {
|
|
localize: (key: string) => (key in en ? en[key as keyof typeof en] : key),
|
|
};
|
|
}
|
|
i18n: {
|
|
localize: (key: string) => string;
|
|
};
|
|
}
|
|
|
|
const game = new StubGame();
|
|
|
|
Object.defineProperties(globalThis, {
|
|
game: { value: game },
|
|
Game: { value: StubGame },
|
|
});
|
|
}
|
|
|
|
setupPrimitives();
|
|
setupStubs();
|