← back to Tk10630 Sku Suffix Canary
scan-custom.mjs
24 lines
import { gql } from './shopify.mjs';
import { FABRICATED } from './lib.mjs';
import { writeFileSync } from 'node:fs';
const PAGE=`query($c:String){ products(first:60, query:"vendor:\\"Hollywood Wallcoverings\\"", after:$c){
pageInfo{hasNextPage endCursor}
nodes{ id handle status
cdw:metafield(namespace:"custom",key:"dw_sku"){value}
cmf:metafield(namespace:"custom",key:"manufacturer_sku"){value}
dmf:metafield(namespace:"dwc",key:"manufacturer_sku"){value}
variants(first:6){ nodes{ sku } } } } }`;
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
let cur=null, scanned=0, custFab=0, custPresent=0, mfrMissing=0; const ex=[]; const fabList=[];
while(true){ let res;
for(let a=0;;a++){ try{ res=await gql(PAGE,{c:cur}); break;}catch(e){ if(/THROTTLED/i.test(e.message)&&a<8){await sleep(2000*(a+1));continue;} throw e;} }
for(const p of res.data.products.nodes){ scanned++;
if(p.cdw?.value!=null){ custPresent++; if(FABRICATED.test(p.cdw.value)){ custFab++; let base=null; for(const v of p.variants.nodes){const m=(v.sku||"").match(/^([A-Z]{2,5}-\d+)/i);if(m){base=m[1].toUpperCase();break;}} fabList.push({id:p.id,handle:p.handle,from:p.cdw.value,to:base}); if(ex.length<6)ex.push(`${p.handle}: custom.dw_sku=${p.cdw.value} -> ${base}`);} }
const mfr=p.cmf?.value||p.dmf?.value; if(!mfr) mfrMissing++;
}
if(!res.data.products.pageInfo.hasNextPage) break; cur=res.data.products.pageInfo.endCursor;
if(scanned%600===0) process.stderr.write(` ...${scanned} custFab=${custFab} mfrMissing=${mfrMissing}\n`);
}
writeFileSync('custom-fab.json', JSON.stringify(fabList,null,2));
console.log(JSON.stringify({scanned, custom_dwsku_present:custPresent, custom_dwsku_FABRICATED:custFab, manufacturer_sku_MISSING:mfrMissing, examples:ex},null,2));