UNPKG

@shirokuma-library/mcp-knowledge-base

Version:

Shirokuma MCP Server for comprehensive knowledge management including issues, plans, documents, and work sessions. All stored data is structured for AI processing, not human readability.

60 lines (59 loc) 1.63 kB
export function normalizeVersion(version) { if (!version) { return null; } const trimmed = version.trim(); if (!/^\d+\.\d+\.\d+$/.test(trimmed)) { return null; } const parts = trimmed.split('.'); const [major, minor, patch] = parts; const majorNum = parseInt(major, 10); const minorNum = parseInt(minor, 10); const patchNum = parseInt(patch, 10); if (isNaN(majorNum) || isNaN(minorNum) || isNaN(patchNum)) { return null; } if (majorNum > 99999 || minorNum > 99999 || patchNum > 99999) { return null; } const normalized = [ major.padStart(5, '0'), minor.padStart(5, '0'), patch.padStart(5, '0') ].join('.'); return normalized; } export function denormalizeVersion(normalized) { if (!normalized) { return null; } try { const parts = normalized.split('.'); if (parts.length !== 3) { return normalized; } const denormalized = parts .map(part => { const num = parseInt(part, 10); if (isNaN(num)) { return part; } return num.toString(); }) .join('.'); return denormalized; } catch { return normalized; } } export function normalizeVersionForComparison(versionQuery) { const match = versionQuery.match(/^(>=|>|<=|<|=)?(.*)$/); const operator = match?.[1] || '='; const versionPart = match?.[2]?.trim() || versionQuery.trim(); return { operator, version: normalizeVersion(versionPart) }; }