fix: compare ZIM catalog versions numerically
This commit is contained in:
parent
30008c068a
commit
c69f4c0ff9
|
|
@ -7,13 +7,31 @@ export type ResolvedZimDownload = {
|
|||
sizeBytes: number | undefined
|
||||
}
|
||||
|
||||
function compareZimVersions(left: string, right: string): number {
|
||||
const parse = (value: string): [number, number] | null => {
|
||||
const match = /^(\d{4})-(\d{1,2})$/.exec(value)
|
||||
if (!match) return null
|
||||
|
||||
const month = Number.parseInt(match[2], 10)
|
||||
if (month < 1 || month > 12) return null
|
||||
|
||||
return [Number.parseInt(match[1], 10), month]
|
||||
}
|
||||
|
||||
const leftParts = parse(left)
|
||||
const rightParts = parse(right)
|
||||
if (!leftParts || !rightParts) return left.localeCompare(right)
|
||||
|
||||
return leftParts[0] - rightParts[0] || leftParts[1] - rightParts[1]
|
||||
}
|
||||
|
||||
export function resolveZimDownload(
|
||||
resource: SpecResource,
|
||||
latest: CatalogResult | null
|
||||
): ResolvedZimDownload {
|
||||
const manifestSizeBytes = resource.size_mb > 0 ? resource.size_mb * 1024 * 1024 : undefined
|
||||
|
||||
if (!latest || latest.version < resource.version) {
|
||||
if (!latest || compareZimVersions(latest.version, resource.version) < 0) {
|
||||
return {
|
||||
url: resource.url,
|
||||
version: resource.version,
|
||||
|
|
|
|||
|
|
@ -54,3 +54,22 @@ test('older catalog result does not replace newer manifest metadata', () => {
|
|||
assert.equal(resolved.url, manifestResource.url)
|
||||
assert.equal(resolved.version, manifestResource.version)
|
||||
})
|
||||
|
||||
test('non-padded catalog months are compared numerically', () => {
|
||||
const resource = {
|
||||
...manifestResource,
|
||||
version: '2026-2',
|
||||
url: 'https://download.kiwix.org/zim/wikipedia/wikipedia_en_all_mini_2026-2.zim',
|
||||
}
|
||||
const resolved = resolveZimDownload(resource, {
|
||||
version: '2026-10',
|
||||
download_url: 'https://download.kiwix.org/zim/wikipedia/wikipedia_en_all_mini_2026-10.zim',
|
||||
size_bytes: 13_000,
|
||||
})
|
||||
|
||||
assert.equal(
|
||||
resolved.url,
|
||||
'https://download.kiwix.org/zim/wikipedia/wikipedia_en_all_mini_2026-10.zim'
|
||||
)
|
||||
assert.equal(resolved.version, '2026-10')
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in New Issue