40 lines
796 B
TypeScript
40 lines
796 B
TypeScript
export interface ParsedAuthorIds {
|
||
duplicates: string[];
|
||
invalidTokens: string[];
|
||
ids: string[];
|
||
}
|
||
|
||
const AUTHOR_ID_PATTERN = /^\d{16,20}$/;
|
||
|
||
export function parseAuthorIds(input: string): ParsedAuthorIds {
|
||
const ids: string[] = [];
|
||
const duplicates: string[] = [];
|
||
const invalidTokens: string[] = [];
|
||
const seen = new Set<string>();
|
||
|
||
input
|
||
.split(/[\s,,;;]+/)
|
||
.map((token) => token.trim())
|
||
.filter(Boolean)
|
||
.forEach((token) => {
|
||
if (!/^\d+$/.test(token) || !AUTHOR_ID_PATTERN.test(token)) {
|
||
invalidTokens.push(token);
|
||
return;
|
||
}
|
||
|
||
if (seen.has(token)) {
|
||
duplicates.push(token);
|
||
return;
|
||
}
|
||
|
||
seen.add(token);
|
||
ids.push(token);
|
||
});
|
||
|
||
return {
|
||
duplicates,
|
||
ids,
|
||
invalidTokens
|
||
};
|
||
}
|