feat(code): add parseCodeNumber helper to lib/code.ts

Pure helper that extracts the trailing numeric sequence from a code string
(ST-007 → 7, T-42 → 42). Non-conforming codes fall back to Number.MAX_SAFE_INTEGER
so they sort to the end. Includes 5 unit tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scrum4Me Agent 2026-05-14 15:47:51 +02:00
parent 7bb252c528
commit 9d3235bcd8
2 changed files with 35 additions and 0 deletions

View file

@ -0,0 +1,25 @@
import { describe, it, expect } from 'vitest'
import { parseCodeNumber } from '@/lib/code'
describe('parseCodeNumber', () => {
it('parses a standard story code', () => {
expect(parseCodeNumber('ST-001')).toBe(1)
})
it('parses a task code', () => {
expect(parseCodeNumber('T-42')).toBe(42)
})
it('parses a large number', () => {
expect(parseCodeNumber('ST-1000')).toBe(1000)
})
it('returns MAX_SAFE_INTEGER for a code with no trailing digits', () => {
expect(parseCodeNumber('FOO')).toBe(Number.MAX_SAFE_INTEGER)
})
it('returns MAX_SAFE_INTEGER for an empty string', () => {
expect(parseCodeNumber('')).toBe(Number.MAX_SAFE_INTEGER)
})
})

View file

@ -14,3 +14,13 @@ export function normalizeCode(input: string | null | undefined): string | null {
const trimmed = input.trim()
return trimmed === '' ? null : trimmed
}
/**
* Extract the trailing numeric sequence from a code (e.g. "ST-007" 7, "T-42" 42).
* Non-conforming codes (no trailing digits, empty string) return Number.MAX_SAFE_INTEGER
* so they sort to the end.
*/
export function parseCodeNumber(code: string): number {
const m = code.match(/(\d+)$/)
return m ? Number.parseInt(m[1], 10) : Number.MAX_SAFE_INTEGER
}