first commit

This commit is contained in:
super
2026-03-16 09:43:24 +08:00
commit 72f5bc7306
44 changed files with 9001 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
import type { Market } from "@/src/domain/types";
export type ParsedStockRef = { code: string; market: Market };
export function parseStockRef(raw: string): ParsedStockRef | null {
const s = raw.trim();
if (!s) return null;
// allow forms:
// 600519
// SH:600519
// SZ:000001
// BJ:xxxxxx
const m = s.match(/^(?:(SH|SZ|BJ)[:])?(\d{6})$/i);
if (!m) return null;
const market = (m[1]?.toUpperCase() as Market | undefined) ?? guessMarket(m[2]!);
return { market, code: m[2]! };
}
function guessMarket(code: string): Market {
if (code.startsWith("6")) return "SH";
if (code.startsWith("8") || code.startsWith("9")) return "BJ";
return "SZ";
}
export function normalizeImportedPool(text: string): ParsedStockRef[] {
const lines = text
.split(/\r?\n/)
.map((l) => l.trim())
.filter(Boolean);
const out: ParsedStockRef[] = [];
const seen = new Set<string>();
for (const line of lines) {
const ref = parseStockRef(line);
if (!ref) continue;
const key = `${ref.market}:${ref.code}`;
if (seen.has(key)) continue;
seen.add(key);
out.push(ref);
}
return out;
}