From 7d34c60dd172a0e3f2c43b47485609c656aec5d6 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sun, 25 Sep 2022 23:33:22 +0200 Subject: [PATCH] Break out version to integer functions Move the multiple implementation of version to integers calculation to dedicated functions in one place. --- packages/lib/data/ModInfo.js | 8 ++++---- packages/lib/data/ModPack.js | 5 +++-- packages/lib/data/version.js | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 packages/lib/data/version.js diff --git a/packages/lib/data/ModInfo.js b/packages/lib/data/ModInfo.js index e3bcce46..ab2a3a50 100644 --- a/packages/lib/data/ModInfo.js +++ b/packages/lib/data/ModInfo.js @@ -7,6 +7,8 @@ const libHash = require("../hash"); const libSchema = require("../schema"); const { findRoot } = require("../zip_ops"); +const { integerModVersion, integerFactorioVersion } = require("./version"); + /** * Info about a mod available on the master server. @@ -36,8 +38,7 @@ class ModInfo { * @type {number} */ get integerVersion() { - const [major, minor, sub] = this.version.split(".").map(n => Number.parseInt(n, 10)); - return major * 0x100000000 + minor * 0x10000 + sub; // Can't use bitwise here because this is 48-bits. + return integerModVersion(this.version); } /** @@ -87,8 +88,7 @@ class ModInfo { * @type {number} */ get integerFactorioVersion() { - const [major, minor] = this.factorioVersion.split(".").map(n => Number.parseInt(n, 10)); - return major * 0x100000000 + minor * 0x10000; // Can't use bitwise here because this is 48-bits. + return integerFactorioVersion(this.factorioVersion); } /** diff --git a/packages/lib/data/ModPack.js b/packages/lib/data/ModPack.js index ed9ac60d..73bd8aab 100644 --- a/packages/lib/data/ModPack.js +++ b/packages/lib/data/ModPack.js @@ -3,6 +3,8 @@ const zlib = require("zlib"); const libSchema = require("../schema"); +const { integerFactorioVersion } = require("./version"); + /** * A setting for a mod. @@ -77,8 +79,7 @@ class ModPack { * @type {number} */ get integerFactorioVersion() { - const [major, minor, sub] = this.factorioVersion.split(".").map(n => Number.parseInt(n, 10)); - return major * 0x100000000 + minor * 0x10000 + (sub || 0); // Can't use bitwise here because this is 48-bits. + return integerFactorioVersion(this.factorioVersion); } /** diff --git a/packages/lib/data/version.js b/packages/lib/data/version.js new file mode 100644 index 00000000..ff533ee8 --- /dev/null +++ b/packages/lib/data/version.js @@ -0,0 +1,34 @@ +// Helper functions for dealing with factorio version numbers +"use strict"; + + +/** + * Integer representation of a mod version + * + * Suitable for sorting and comparing version numbers which may have different + * number of leading zeros in them. + * @param {string} version - string representation of version. + * @returns {number} numeric representation. + */ +function integerModVersion(version) { + const [major, minor, sub] = version.split(".").map(n => Number.parseInt(n, 10)); + return major * 0x100000000 + minor * 0x10000 + sub; // Can't use bitwise here because this is 48-bits. +} + +/** + * Integer representation of a factorio version + * + * Suitable for sorting and comparing version numbers which may have different + * number of leading zeros in them. + * @param {string} version - string representation of version. + * @returns {number} numeric representation. + */ +function integerFactorioVersion(version) { + const [major, minor, sub] = version.split(".").map(n => Number.parseInt(n, 10)); + return major * 0x100000000 + minor * 0x10000 + (sub || 0); // Can't use bitwise here because this is 48-bits. +} + +module.exports = { + integerModVersion, + integerFactorioVersion, +};