Session 7e: Grade adapter, normalize consolidation, ARCH-2 banners
This commit is contained in:
@@ -23,32 +23,14 @@
|
||||
|
||||
const { reverseLineMovement, juiceDegradation, getLineMovement } = require('./lineMovement');
|
||||
const { getSupabaseServiceClient } = require('../../utils/supabase');
|
||||
// DUP-1 (Session 7e): consolidated into src/utils/normalize.js.
|
||||
// Trap matching strips digits — keepDigits stays at the default false.
|
||||
const { normalizeName } = require('../../utils/normalize');
|
||||
|
||||
function inactive(reason) {
|
||||
return { score: 0, active: false, explanation: reason };
|
||||
}
|
||||
|
||||
// Normalize player names for matching across data sources. ParlayAPI may
|
||||
// emit "Brunson, Jalen" while ESPN emits "Jalen Brunson" — strip case,
|
||||
// punctuation, suffixes, and collapse whitespace so equivalence works.
|
||||
//
|
||||
// DUP-1 (Session 7c): a near-identical implementation lives in
|
||||
// scripts/populate-player-ids.js. The script's variant keeps digits
|
||||
// (some legacy roster fields encode jersey numbers); this one strips
|
||||
// them because trap matches go by player name only. If the script
|
||||
// stops needing digits, consolidate to a shared util.
|
||||
function normalizeName(name) {
|
||||
if (!name) return '';
|
||||
return String(name)
|
||||
.normalize('NFD')
|
||||
.replace(/[̀-ͯ]/g, '')
|
||||
.toLowerCase()
|
||||
.replace(/\b(jr|sr|ii|iii|iv|v)\.?\b/g, '')
|
||||
.replace(/[^a-z\s]/g, ' ')
|
||||
.replace(/\s+/g, ' ')
|
||||
.trim();
|
||||
}
|
||||
|
||||
// Detect whether a key teammate transitioned from OUT in the recent past
|
||||
// to AVAILABLE now. Called by the orchestrator (Section 2) before invoking
|
||||
// the trap detector — the orchestrator owns the injury-history context.
|
||||
|
||||
Reference in New Issue
Block a user