@datawheel/bespoke-cms-warmup
Version:
Warmup utility for Bespoke CMS pages
9 lines • 7.55 kB
JavaScript
;var b=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var Q=(i,e)=>()=>(i&&(e=i(i=0)),e);var q=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports);var $=Q(()=>{});var E=q((oe,K)=>{$();var R=b("path"),P=__dirname.endsWith("models")?__dirname:R.resolve(__dirname,"models");K.exports={modelPaths:{report:R.resolve(P,"report.js"),dimension:R.resolve(P,"dimension.js"),variant:R.resolve(P,"variant.js"),search:R.resolve(P,"search.js")}};});var F=q((ce,T)=>{$();var{Sequelize:k,DataTypes:j}=b("sequelize");T.exports={hydrateModels:X};async function X(i,e){let t=k.Op,s=i.db||"postgresql://".concat(i["db-user"],":",i["db-pass"],"@",i["db-host"],"/",i["db-name"]);e.print(`Database Connection: ${s}`);let n;n=e.step("Creating new sequelize instance");let h=new k(s,{logging:false,pool:{max:10,min:1,acquire:5*1e3,idle:10*1e3,evict:1*1e3}});n.resolve(),n=e.step("Testing connection"),await h.authenticate().then(n.resolve,n.reject),n=e.step("Retrieving database models");let{modelPaths:m}=E(),o=b(m.report)(h,j),p=b(m.dimension)(h,j),u=b(m.variant)(h,j),d=b(m.search)(h,j);return o.associate&&o.associate({dimension:p}),p.associate&&p.associate({report:o,variant:u}),u.associate&&u.associate({dimension:p}),d.associate&&d.associate({dimension:p,report:o,variant:u}),n.resolve(),o.findAllIn=function(a=[],r=[]){let f=e.step("Requesting configured profiles");return o.findAll({where:{id:a&&a.length>0?{[t.in]:a}:{[t.ne]:0},visible:true},include:[{association:"dimensions",separate:true,include:[{association:"variants",separate:true,where:{id:r&&Array.isArray(r)&&r.length>0?{[t.in]:r}:{[t.ne]:0}}}],order:[["ordering","ASC"]]}]}).then(f.resolve,f.reject).then(A=>(a.length>0&&e.print(`User requested for profiles: ${a.join(", ")}`),r.length>0&&e.print(`User requested for variants: ${r.join(", ")}`),A.sort((g,w)=>a.indexOf(g.id)-a.indexOf(w.id)).map(g=>(e.print(`Profile found: ${g.id} ${g.name}`),g.dimensions.forEach(w=>{e.print(` Dimension found: ${w.id} ${w.name}`),w.variants.forEach(C=>{e.print(` Variant found: ${C.id} ${C.name}`);});}),g))))},d.findAllFromProfile=function(a,r){let f={};return r&&Array.isArray(r)&&r.length>0&&(f.variant_id={[t.in]:r}),d.findAll({where:{report_id:a.id,visible:true,...f},order:[["zvalue","DESC"]]})},d.findAllMembers=function(a,r,f){return d.findAll({where:{report_id:a,dimension_id:r,variant_id:f,visible:true},attributes:["id","slug"],raw:true})},d.findAllFromBilateralPair=function(a,r,f,A,g,w,C){return d.findAll({where:{report_id:a,[t.or]:[{dimension_id:r,variant_id:f,id:A},{dimension_id:g,variant_id:w,id:C}],visible:true},order:[["zvalue","DESC"]]})},{Report:o,Search:d}}});var L=q((de,W)=>{$();var M=b("fs"),O=b("path"),D=class{errorCount;failures;outputPath;successCount;writer;constructor(e){this.resetCounters(),e&&this.setOutput(e);}setOutput(e){let t=O.resolve(process.cwd(),e);M.existsSync(t)||M.mkdirSync(t),process.stdout.write(`Reports will be saved on:
${t}
`),this.outputPath=t;let s=O.resolve(t,"results.json");this.writer=M.createWriteStream(s,{flags:"w"});}log(e){this.writer.write(`${e}
`);}close(){return new Promise((e,t)=>{this.writer?(this.writer.end(()=>e()),this.writer.on("error",t)):e();})}writeReport(e){let t=B(this.failures),s=O.resolve(this.outputPath,`profile_${e}.json`);return M.promises.writeFile(s,t)}print(e,t=true){process.stdout.write(`${e}${t?`
`:""}`);}printLine(e="-"){let t=process.stdout.columns*1||80,s=new Array(t).fill(e).join("").slice(0,t);process.stdout.write(`${s}
`);}countResult(e){e.status==="ERROR"&&this.errorCount++,e.status==="SUCCESS"&&this.successCount++,e.status==="FAILURE"&&this.failures.push(e);}resetCounters(){this.errorCount=0,this.failures=[],this.successCount=0;}printCount(e){let t="";this.errorCount>0&&(t=`with ${this.errorCount} errors`),this.failures.length>0&&(t=`${t?", and":"with"} ${this.failures.length} failures`),this.print(`
Profile "${e}" completed ${t||"without errors"}.`);}step(e){return process.stdout.write(`WAIT: ${e}...`),{reject(t){throw process.stdout.write("\r\x1B[K"),process.stdout.write(`ERR : ${e}
`),t},resolve(t){return process.stdout.write("\r\x1B[K"),process.stdout.write(`OK : ${e}
`),t}}}};function B(i){let e=new Map([["",[""].slice(0,0)]]);e.clear();let t=s=>{let n=e.get(s);if(n!==void 0)return n;let h=[];return e.set(s,h),h};for(let s of i){let{test_na:n}=s.result;if(n&&n.length>0){let{url:h}=s.job;for(let m of n)t(m).push(h);}}return JSON.stringify([...e.entries()],null,2)}function Y(i){return [].concat(i).reduce((e,t)=>{let s=t.indexOf(":"),n=t.substr(0,s).trim();return e[n]=t.substr(s+1).trim(),e},{})}var I=class{constructor(){this.cache=new Map;}getCanonicalKey(e,t){let[s,n]=[e,t].sort((h,m)=>h-m);return `${s}-${n}`}hasBeenProcessed(e,t,s){if(!this.cache.has(e))return false;let n=this.getCanonicalKey(t,s);return this.cache.get(e).has(n)}markAsProcessed(e,t,s){this.cache.has(e)||this.cache.set(e,new Set);let n=this.getCanonicalKey(t,s);this.cache.get(e).add(n);}};W.exports={Reporter:D,parseHeaders:Y,transposeResults:B,BilateralCache:I};});var ie=q((he,N)=>{$();var{hydrateModels:Z}=F(),{Reporter:ee,BilateralCache:te}=L(),_=new ee;N.exports=async function(i){_.setOutput(i.output),_.printLine();let e=i.base||"",{Report:t,Search:s}=await Z(i,_),n=i.profile?`${i.profile}`.split(",").filter(o=>o.trim()):[],h=await t.findAllIn(n,[]),m=new te;for(let o of h)if(o.dimensions.length===1){let p=await s.findAllFromProfile(o,[]);for(let u of p){let d={page:u.slug,profile:u.id},a=e.replace(/:(\w+)\b/g,(r,f)=>d[f]);_.log(a);}}else if(o.dimensions.length>=2){let p=o.dimensions[0],u;if(i["variant1-id"]){if(u=p.variants.find(c=>c.id===parseInt(i["variant1-id"],10)),!u){_.print(` Variant ID ${i["variant1-id"]} not found for dimension ${p.name}. Skipping.`);continue}}else u=p.variants[0];if(!u)continue;let d=await s.findAllMembers(o.id,p.id,u.id),a=o.dimensions[1],r;if(i["variant2-id"]){if(r=a.variants.find(c=>c.id===parseInt(i["variant2-id"],10)),!r){_.print(` Variant ID ${i["variant2-id"]} not found for dimension ${a.name}. Skipping.`);continue}}else r=a.variants[0];if(!r)continue;let f=await s.findAllMembers(o.id,a.id,r.id);_.print(`Bilateral ${o.name}: ${p.name}(${d.length}) \xD7 ${a.name}(${f.length})`);let A=await s.findAll({where:{report_id:o.id,dimension_id:p.id,variant_id:u.id,visible:true}}),g=await s.findAll({where:{report_id:o.id,dimension_id:a.id,variant_id:r.id,visible:true}}),w=i["random-pairs"],C=w?d.sort(()=>Math.random()-.5):d.map(c=>{var l;return {...c,zvalue:((l=A.find(v=>v.id===c.id))==null?void 0:l.zvalue)||0}}).sort((c,l)=>(l.zvalue||0)-(c.zvalue||0)),V=w?f.sort(()=>Math.random()-.5):f.map(c=>{var l;return {...c,zvalue:((l=g.find(v=>v.id===c.id))==null?void 0:l.zvalue)||0}}).sort((c,l)=>(l.zvalue||0)-(c.zvalue||0)),S=[],U=new Set;for(let c of C)for(let l of V){if(c.id===l.id)continue;let v=m.getCanonicalKey(c.id,l.id);U.has(v)||(U.add(v),S.push({member1:c,member2:l,canonicalKey:v}));}let x=S,y=i["limit-pairs"]?parseInt(i["limit-pairs"],10):null;y&&y>0&&S.length>y&&(w?x=S.sort(()=>Math.random()-.5).slice(0,y):x=S.slice(0,y));for(let c of x){let{member1:l,member2:v}=c;if(m.hasBeenProcessed(o.id,l.id,v.id))continue;m.markAsProcessed(o.id,l.id,v.id);let H={variant1:u.slug,profile1:l.slug,variant2:r.slug,profile2:v.slug},J=e.replace(/:(\w+)\b/g,(se,G)=>H[G]);_.log(J);}}await _.close();};});var list = ie();module.exports=list;