UNPKG

@tanstack/ai

Version:

Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.

55 lines (54 loc) 1.95 kB
function entryToSeconds(entry) { if (typeof entry === "number") { return Number.isFinite(entry) ? entry : null; } const stripped = entry.endsWith("s") ? entry.slice(0, -1) : entry; const parsed = Number(stripped); return Number.isFinite(parsed) ? parsed : null; } function snapToDurationOption(seconds, options) { switch (options.kind) { case "none": return void 0; case "discrete": { return pickClosestDiscrete(seconds, options.values); } case "range": { const step = options.step ?? 1; const clamped = Math.min(options.max, Math.max(options.min, seconds)); const snapped = Math.round((clamped - options.min) / step) * step + options.min; return Math.min(options.max, Math.max(options.min, snapped)); } case "mixed": { const discreteCandidate = pickClosestDiscrete(seconds, options.values); if (!options.range) return discreteCandidate; const { min, max, step = 1 } = options.range; const clamped = Math.min(max, Math.max(min, seconds)); const rangeValue = Math.min( max, Math.max(min, Math.round((clamped - min) / step) * step + min) ); const discreteSeconds = typeof discreteCandidate === "number" ? discreteCandidate : discreteCandidate !== void 0 ? entryToSeconds(discreteCandidate) ?? Infinity : Infinity; return Math.abs(discreteSeconds - seconds) <= Math.abs(rangeValue - seconds) ? discreteCandidate : rangeValue; } } } function pickClosestDiscrete(seconds, values) { if (values.length === 0) return void 0; let best; let bestDistance = Infinity; for (const value of values) { const v = entryToSeconds(value); if (v === null) continue; const distance = Math.abs(v - seconds); if (distance < bestDistance) { bestDistance = distance; best = value; } } return best ?? values[0]; } export { snapToDurationOption }; //# sourceMappingURL=snap.js.map