{"record":{"id":"f3541ca9853fd89f","repo":"slidevjs/slidev","slug":"invalid-timestamp-format","errorCode":null,"errorMessage":"Invalid timestamp format","messagePattern":"Invalid timestamp format","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/parser/src/timesplit/timestring.ts","lineNumber":52,"sourceCode":"  if (timestamp.includes(':')) {\n    const parts = timestamp.split(':').map(Number)\n    let h = 0\n    let m = 0\n    let s = 0\n    if (parts.length === 3) {\n      h = parts[0]\n      m = parts[1]\n      s = parts[2]\n    }\n    else if (parts.length === 2) {\n      m = parts[0]\n      s = parts[1]\n    }\n    else if (parts.length === 1) {\n      s = parts[0]\n    }\n    else {\n      throw new TypeError('Invalid timestamp format')\n    }\n    if (Number.isNaN(h) || Number.isNaN(m) || Number.isNaN(s)) {\n      throw new TypeError('Invalid timestamp format')\n    }\n    seconds = (h || 0) * 3600 + (m || 0) * 60 + (s || 0)\n  }\n  else if (!RE_ALPHA.test(timestamp)) {\n    seconds = Number(timestamp)\n  }\n  else {\n    const unitMap: Record<string, number> = {\n      s: 1,\n      sec: 1,\n      secs: 1,\n      m: 60,\n      min: 60,\n      mins: 60,\n      h: 3600,","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/slidevjs/slidev/blob/0d798ace5828966d9f77f62094d5f7a971ad98f7/packages/parser/src/timesplit/timestring.ts#L34-L70","documentation":"parseTimeString only accepts colon-timestamps with exactly 1, 2, or 3 components (ss, mm:ss, hh:mm:ss). This first guard fires when the split produced any other number of parts (e.g. 4+).","triggerScenarios":"Passing a string like '1:2:3:4' (4 parts) or an empty/edge string that splits into 0 or 4+ parts.","commonSituations":"Extra colons, pasting timestamps with sub-frame counters, malformed user input.","solutions":["Use ss, mm:ss, or hh:mm:ss form only","Remove extra colons from the timestamp","Switch to a unit-based form (e.g. 90s) if the value is awkward"],"exampleFix":"// before\ntimesplit: 1:2:3:4\n// after\ntimesplit: 1:02:03","handlingStrategy":"validation","validationCode":"function validColonParts(ts: string): boolean {\n  if (!ts.includes(':')) return true\n  const parts = ts.split(':')\n  return parts.length >= 1 && parts.length <= 3 && parts.every(p => Number.isFinite(Number(p)))\n}","typeGuard":"function isColonTimestamp(ts: string): ts is string {\n  return ts.includes(':') && ts.split(':').length <= 3\n}","tryCatchPattern":null,"preventionTips":["Use only ss / mm:ss / hh:mm:ss forms","Validate timestamps in a pre-commit hook on slides.md frontmatter"],"tags":["timestamp","parser","validation"],"backgroundTag":null,"analyzedSha":"0d798ace5828966d9f77f62094d5f7a971ad98f7","analyzedAt":"2026-08-12T17:10:56.221Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}