fancive_obsidian-parallel-r.../src/cards.ts
wujunchen 83f35f8ccb feat: add Biome for lint and format
Install @biomejs/biome with lint and format config.
Add npm lint/lint:fix scripts. Auto-fix formatting across all source
files. Update tsconfig lib to ES2022 for Object.hasOwn support.

Change-Id: I13e3ba2f106f7e3d03349080b7ed515d427d24a1
2026-04-25 23:47:49 +08:00

28 lines
1.2 KiB
TypeScript

'use strict';
import type { CardPatch, RawCard } from './types';
export function removeCardAt<T extends RawCard>(cards: T[], index: number): T[] {
const next = Array.isArray(cards) ? cards.slice() : [];
if (!Number.isInteger(index) || index < 0 || index >= next.length) return next;
next.splice(index, 1);
return next;
}
export function activeIndexAfterCardDelete(deleteIndex: number, previousLength: number, activeIdx: number): number {
if (!Number.isInteger(deleteIndex) || !Number.isInteger(previousLength) || previousLength <= 0) return activeIdx;
if (!Number.isInteger(activeIdx) || activeIdx < 0) return activeIdx;
if (deleteIndex < 0 || deleteIndex >= previousLength) return activeIdx;
const nextLength = previousLength - 1;
if (nextLength <= 0) return -1;
if (deleteIndex < activeIdx) return Math.max(0, activeIdx - 1);
if (deleteIndex === activeIdx) return Math.min(activeIdx, nextLength - 1);
return activeIdx;
}
export function updateCardAt<T extends RawCard>(cards: T[], index: number, patch: CardPatch): T[] {
const next = Array.isArray(cards) ? cards.slice() : [];
if (!Number.isInteger(index) || index < 0 || index >= next.length) return next;
next[index] = Object.assign({}, next[index], patch || {});
return next;
}