diff --git a/CHANGELOG.md b/CHANGELOG.md index f68ec13..8f90acc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,8 @@ All notable changes to ModShift are documented here. The format follows ### Fixed - `migrate` (and the config and web UI) now reject a loader version that is not a version, such - as a `` placeholder copied from an example, instead of writing an invalid pack. + as a `` or `X.Y.Z` placeholder copied from an example (a version must contain a + digit), instead of writing an invalid pack. - Unrelated alternatives: a popular mod sharing only a broad category (e.g. Xaero's Minimap for CIT Resewn) is no longer suggested; a candidate needs a similar name or two shared keywords (one generic word such as "screen" is not enough). diff --git a/src/loaders/loaderVersion.ts b/src/loaders/loaderVersion.ts index 6789297..28da441 100644 --- a/src/loaders/loaderVersion.ts +++ b/src/loaders/loaderVersion.ts @@ -1,10 +1,11 @@ // Format d'une version de loader écrite dans un .mrpack (ex. 0.16.5, 21.1.77, 47.3.0, -// 0.27.1-beta.1). Refuse ce qui n'est clairement pas une version (ex. « » recopié -// d'un exemple), sans prétendre vérifier qu'elle existe. +// 0.27.1-beta.1). Refuse ce qui n'est clairement pas une version (ex. « » ou « X.Y.Z » +// recopiés d'un exemple : toute vraie version contient un chiffre), sans prétendre vérifier +// qu'elle existe. const LOADER_VERSION_PATTERN = /^[0-9A-Za-z][0-9A-Za-z.+_-]{0,63}$/; export function isValidLoaderVersion(value: string): boolean { - return LOADER_VERSION_PATTERN.test(value); + return LOADER_VERSION_PATTERN.test(value) && /[0-9]/.test(value); } export function invalidLoaderVersionMessage(value: string): string { diff --git a/test/loaders/loaderVersion.test.ts b/test/loaders/loaderVersion.test.ts index 15328fb..f584144 100644 --- a/test/loaders/loaderVersion.test.ts +++ b/test/loaders/loaderVersion.test.ts @@ -14,10 +14,17 @@ describe('loader version format', () => { (version) => expect(isValidLoaderVersion(version)).toBe(true), ); - it.each(['', '', ' 0.16.5', '0.16 .5', '-0.16.5', 'x'.repeat(65), '0.16.5;rm'])( - 'rejects %j', - (version) => expect(isValidLoaderVersion(version)).toBe(false), - ); + it.each([ + '', + 'X.Y.Z', + 'latest', + '', + ' 0.16.5', + '0.16 .5', + '-0.16.5', + 'x'.repeat(65), + '0.16.5;rm', + ])('rejects %j', (version) => expect(isValidLoaderVersion(version)).toBe(false)); it('rejects an invalid target.loaderVersion in the config', () => { expect(() => validateConfig({ target: { loaderVersion: '' } }, 'c.json')).toThrow(