-
Notifications
You must be signed in to change notification settings - Fork 1
/
version.js
108 lines (82 loc) · 2.92 KB
/
version.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// SPDX-License-Identifier: LGPL-3.0-or-later
// Copyright © 2021 fvtt-shared-library Rui Pinheiro
'use strict';
import {PACKAGE_TITLE, PACKAGE_ID} from '../consts.js';
//*********************
// Versioning
// This allows rollup to optimise the version-related code
/*#if _ROLLUP
export const VERSION = $_PACKAGE_VERSION;
//#else */
// Utility method to simplify throwing exceptions when parsing the manifest version
const throw_error = (msg) => { throw new Error(`${PACKAGE_TITLE}: ${msg}.\nFoundry might not have initialized properly, please try refreshing.`) };
// This method will be used by Rollup to feed the JSCC pre-processor
export const _parse_manifest_version = function(version, git_hash) {
// Default to a sane value
const known = (typeof version === 'string');
if(!known)
version = '1.99.99.99';
// Parse version string
const match = version.match(/^([0-9]+)\.([0-9]+)\.([0-9]+).([0-9]+)(.*)$/i);
if(!match)
throw_error(`Unable to parse version string '${version_str}'`);
const result = {
known : known,
full : version,
major : parseInt(match[1]),
minor : parseInt(match[2]),
patch : parseInt(match[3]),
suffix : parseInt(match[4]),
meta : match[5],
};
// Process git hash
result.git = git_hash ?? 'unknown';
result.git_short = (result.git.length >= 40) ? result.git.slice(0,7) : result.git;
result.full_git = `${result.full} (${result.git_short})`
// Done
return result;
}
// This method is fallback, and only used when running libWrapper directly from the source code without going through the Rollup build step first
// e.g. during unit tests
export const parse_manifest_version = function() {
if(VERSION.known)
return;
try {
// Get package manifest
if(!game.modules)
throw_error("Could not find 'game.modules'");
if(!game.modules.size)
throw_error("Map 'game.modules' is empty");
const mdl = game.modules.get(PACKAGE_ID);
if(!mdl)
throw_error(`Could not find 'game.modules.get("${PACKAGE_ID}")'`);
// Grab git version (no need to validate)
const git_hash = mdl.flags?.git_version ?? mdl.data?.flags?.git_version;
// Grab version string
const version_str = mdl.version ?? mdl.data?.version;
if(!version_str)
throw_error("Unable to find version string inside package manifest");
// Done
VERSION = _parse_manifest_version(version_str, git_hash);
}
catch(e) {
console.error(e);
Hooks?.once('ready', () => globalThis?.ui?.notifications?.error?.(e));
}
}
export let VERSION = _parse_manifest_version(null, null);
//#endif
//*********************
// Test for a minimum version
export const version_at_least = function(major, minor=0, patch=0, suffix=0) {
if(VERSION.major == major) {
if(VERSION.minor == minor) {
if(VERSION.patch == patch) {
return VERSION.suffix == suffix;
}
return VERSION.patch >= patch;
}
return VERSION.minor > minor;
}
return VERSION.major > major;
}