[object Object]

← back to Rentv 2026

harden(location): Cody gate — normalize whitespace before the state-name lookup + add a bare 'dc' key so 'D.C.' and double-spaced 'New Mexico' resolve instead of silently dropping to null

17716ea2b08b3a9647edbfc63bd57a2377c8ab08 · 2026-08-06 12:58:01 -0700 · Steve

Files touched

Diff

commit 17716ea2b08b3a9647edbfc63bd57a2377c8ab08
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Aug 6 12:58:01 2026 -0700

    harden(location): Cody gate — normalize whitespace before the state-name lookup + add a bare 'dc' key so 'D.C.' and double-spaced 'New  Mexico' resolve instead of silently dropping to null
---
 scripts/lib/parse-location.mjs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/lib/parse-location.mjs b/scripts/lib/parse-location.mjs
index 91040fab..791b0911 100644
--- a/scripts/lib/parse-location.mjs
+++ b/scripts/lib/parse-location.mjs
@@ -69,7 +69,7 @@ const TITLE_ST = /\b(CA|AZ|NV|TX|WA)\b/;
 const US_STATES = new Set(['AL','AK','AZ','AR','CA','CO','CT','DE','FL','GA','HI','ID','IL','IN','IA','KS','KY','LA','ME','MD','MA','MI','MN','MS','MO','MT','NE','NV','NH','NJ','NM','NY','NC','ND','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VT','VA','WA','WV','WI','WY','DC']);
 // Full state NAME → code, so a model that ignores "2-letter state" and returns "Arizona" isn't truncated
 // to "AR" (Arkansas!) / "Nevada"→"NE" (Nebraska!) / "Texas"→"TE" (dropped) by a blind slice(0,2).
-const STATE_NAMES = { alabama:'AL', alaska:'AK', arizona:'AZ', arkansas:'AR', california:'CA', colorado:'CO', connecticut:'CT', delaware:'DE', florida:'FL', georgia:'GA', hawaii:'HI', idaho:'ID', illinois:'IL', indiana:'IN', iowa:'IA', kansas:'KS', kentucky:'KY', louisiana:'LA', maine:'ME', maryland:'MD', massachusetts:'MA', michigan:'MI', minnesota:'MN', mississippi:'MS', missouri:'MO', montana:'MT', nebraska:'NE', nevada:'NV', 'new hampshire':'NH', 'new jersey':'NJ', 'new mexico':'NM', 'new york':'NY', 'north carolina':'NC', 'north dakota':'ND', ohio:'OH', oklahoma:'OK', oregon:'OR', pennsylvania:'PA', 'rhode island':'RI', 'south carolina':'SC', 'south dakota':'SD', tennessee:'TN', texas:'TX', utah:'UT', vermont:'VT', virginia:'VA', washington:'WA', 'west virginia':'WV', wisconsin:'WI', wyoming:'WY', 'district of columbia':'DC', 'washington dc':'DC' };
+const STATE_NAMES = { alabama:'AL', alaska:'AK', arizona:'AZ', arkansas:'AR', california:'CA', colorado:'CO', connecticut:'CT', delaware:'DE', florida:'FL', georgia:'GA', hawaii:'HI', idaho:'ID', illinois:'IL', indiana:'IN', iowa:'IA', kansas:'KS', kentucky:'KY', louisiana:'LA', maine:'ME', maryland:'MD', massachusetts:'MA', michigan:'MI', minnesota:'MN', mississippi:'MS', missouri:'MO', montana:'MT', nebraska:'NE', nevada:'NV', 'new hampshire':'NH', 'new jersey':'NJ', 'new mexico':'NM', 'new york':'NY', 'north carolina':'NC', 'north dakota':'ND', ohio:'OH', oklahoma:'OK', oregon:'OR', pennsylvania:'PA', 'rhode island':'RI', 'south carolina':'SC', 'south dakota':'SD', tennessee:'TN', texas:'TX', utah:'UT', vermont:'VT', virginia:'VA', washington:'WA', 'west virginia':'WV', wisconsin:'WI', wyoming:'WY', 'district of columbia':'DC', 'washington dc':'DC', dc:'DC' };
 const BAD_CITY = new Set(['county','valley','beauty','america','fresco','downtown','city','various','region','regional','metro','usa','us','na','unknown','none','tbd','multiple']);
 export function sanitizeLocation(loc = {}) {
   let city = loc.city == null ? null : String(loc.city).trim();
@@ -77,7 +77,7 @@ export function sanitizeLocation(loc = {}) {
   if (state) {
     const up = state.toUpperCase();
     if (up.length === 2 && US_STATES.has(up)) state = up;            // already a valid 2-letter code
-    else state = STATE_NAMES[state.toLowerCase().replace(/\./g, '')] || null; // full name → code, else drop
+    else state = STATE_NAMES[state.toLowerCase().replace(/\./g, '').replace(/\s+/g, ' ').trim()] || null; // full name (period/space-normalized) → code, else drop
   }
   if (city && BAD_CITY.has(city.toLowerCase())) city = null; // bare non-city token → drop
   return { ...loc, city: city || null, state: state || null };

← 33804967 auto-data-snapshot: 2026-08-06T12:57:07 (7 data files) — dat  ·  back to Rentv 2026  ·  feat(services): 'Solicit all visible' bulk action (admin) 0250fee3 →