PageSourceSearch

https://vogclub.com/dist/chunks/replay-vew3Oaz9.js

js vogclub.com collected 2026-09-24 22:17:37 UTC 11,617 bytes, 1 lines download raw bytes

1import{i as z,l as j}from"./seatColors-DXPgiq7h.js";const O=[[-2,-1],[-2,1],[-1,-2],[-1,2],[1,-2],[1,2],[2,-1],[2,1]],I=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]],R=[[-1,0],[1,0],[0,-1],[0,1]],L=[[-1,-1],[-1,1],[1,-1],[1,1]],H=["q","r","b","n"],q={p:"pawn",r:"rook",n:"knight",b:"bishop",q:"queen",k:"king"},W={pawn:"p",rook:"r",knight:"n",bishop:"b",queen:"q",king:"k"},C=o=>o==="white"?"black":"white",G=o=>o===2?"white":"black",S=(o,e)=>o>=0&&o<8&&e>=0&&e<8,_=(o,e)=>o.row===e.row&&o.col===e.col,Q=o=>o.map(e=>e.map(n=>n?{...n}:null)),F=o=>o==="white"?-1:1,A=o=>JSON.stringify({board:o.board.map(e=>e.map(n=>n?`${n.side}:${n.chess}`:"")),toMove:o.toMove,castling:o.castling,enPassant:o.enPassant}),X=()=>{const o={board:z(),toMove:"white",castling:{whiteShort:!0,whiteLong:!0,blackShort:!0,blackLong:!0},enPassant:null,halfmove:0,repeats:{}};return o.repeats[A(o)]=1,o},B=(o,e,n,[r,t],s,c)=>{var i;for(let l=e+r,a=n+t;S(l,a);l+=r,a+=t){const h=(i=o[l])==null?void 0:i[a];if(h)return h.side===s&&(h.chess===c||h.chess==="q")}return!1},N=(o,e,n,r)=>{var s,c,i;const t=e-F(r);for(const l of[-1,1]){const a=(s=o[t])==null?void 0:s[n+l];if((a==null?void 0:a.side)===r&&a.chess==="p")return!0}for(const[l,a]of O){const h=(c=o[e+l])==null?void 0:c[n+a];if((h==null?void 0:h.side)===r&&h.chess==="n")return!0}for(const[l,a]of I){const h=(i=o[e+l])==null?void 0:i[n+a];if((h==null?void 0:h.side)===r&&h.chess==="k")return!0}return R.some(l=>B(o,e,n,l,r,"r"))||L.some(l=>B(o,e,n,l,r,"b"))},Y=(o,e)=>{var n;for(let r=0;r<8;r++)for(let t=0;t<8;t++){const s=(n=o[r])==null?void 0:n[t];if((s==null?void 0:s.side)===e&&s.chess==="k")return N(o,r,t,C(e))}return!0},x=(o,e,n,r,t,s)=>{var c;for(const[i,l]of t){const a={row:n.row+i,col:n.col+l};if(!S(a.row,a.col))continue;const h=(c=e[a.row])==null?void 0:c[a.col];h?h.side!==r&&o.push({from:n,to:a,piece:s,capture:!0}):o.push({from:n,to:a,piece:s})}},E=(o,e,n,r,t,s)=>{var c;for(const[i,l]of t)for(let a=n.row+i,h=n.col+l;S(a,h);a+=i,h+=l){const d={row:a,col:h},f=(c=e[a])==null?void 0:c[h];if(!f){o.push({from:n,to:d,piece:s});continue}f.side!==r&&o.push({from:n,to:d,piece:s,capture:!0});break}},Z=(o,e,n,r)=>{var l,a,h;const t=F(r),s=r==="white"?0:7,c=r==="white"?6:1,i=d=>{if(d.to.row!==s){o.push(d);return}for(const f of H)o.push({...d,promoteTo:f})};(l=e.board[n.row+t])!=null&&l[n.col]||(i({from:n,to:{row:n.row+t,col:n.col},piece:"p"}),n.row===c&&!((a=e.board[n.row+2*t])!=null&&a[n.col])&&i({from:n,to:{row:n.row+2*t,col:n.col},piece:"p",doublePush:!0}));for(const d of[-1,1]){const f={row:n.row+t,col:n.col+d};if(!S(f.row,f.col))continue;const u=(h=e.board[f.row])==null?void 0:h[f.col];u&&u.side!==r&&i({from:n,to:f,piece:"p",capture:!0}),!u&&e.enPassant&&_(e.enPassant,f)&&i({from:n,to:f,piece:"p",capture:!0,enPassant:!0})}},oo=(o,e,n,r)=>{var l,a,h,d,f,u,w,p,b,g,M,m,k,v,y;const t=r==="white"?7:0;if(n.row!==t||n.col!==4||((a=(l=e.board[t])==null?void 0:l[4])==null?void 0:a.chess)!=="k")return;const s=C(r);if(N(e.board,t,4,s))return;const c=r==="white"?e.castling.whiteShort:e.castling.blackShort,i=r==="white"?e.castling.whiteLong:e.castling.blackLong;c&&((d=(h=e.board[t])==null?void 0:h[7])==null?void 0:d.side)===r&&((u=(f=e.board[t])==null?void 0:f[7])==null?void 0:u.chess)==="r"&&!((w=e.board[t])!=null&&w[5])&&!((p=e.board[t])!=null&&p[6])&&!N(e.board,t,5,s)&&o.push({from:n,to:{row:t,col:6},piece:"k",castleShort:!0}),i&&((g=(b=e.board[t])==null?void 0:b[0])==null?void 0:g.side)===r&&((m=(M=e.board[t])==null?void 0:M[0])==null?void 0:m.chess)==="r"&&!((k=e.board[t])!=null&&k[1])&&!((v=e.board[t])!=null&&v[2])&&!((y=e.board[t])!=null&&y[3])&&!N(e.board,t,3,s)&&o.push({from:n,to:{row:t,col:2},piece:"k",castleLong:!0})},K=(o,e,n)=>{var s;const r=Q(o),t=(s=r[e.from.row])==null?void 0:s[e.from.col];return t&&(r[e.from.row][e.from.col]=null,e.enPassant&&(r[e.from.row][e.to.col]=null),r[e.to.row][e.to.col]=e.promoteTo?{side:n,chess:e.promoteTo}:t,e.castleShort&&(r[e.from.row][5]=r[e.from.row][7],r[e.from.row][7]=null),e.castleLong&&(r[e.from.row][3]=r[e.from.row][0],r[e.from.row][0]=null)),r},J=o=>{var n;const e=[];for(let r=0;r<8;r++)for(let t=0;t<8;t++){const s=(n=o.board[r])==null?void 0:n[t];if(!(s!=null&&s.chess)||s.side!==o.toMove)continue;const c={row:r,col:t};switch(s.chess){case"p":Z(e,o,c,o.toMove);break;case"n":x(e,o.board,c,o.toMove,O,"n");break;case"k":x(e,o.board,c,o.toMove,I,"k"),oo(e,o,c,o.toMove);break;case"r":E(e,o.board,c,o.toMove,R,"r");break;case"b":E(e,o.board,c,o.toMove,L,"b");break;case"q":E(e,o.board,c,o.toMove,R,"q"),E(e,o.board,c,o.toMove,L,"q");break}}return e.filter(r=>!Y(K(o.board,r,o.toMove),o.toMove))},eo=o=>{var t,s;const e=[];let n=-1,r=!0;for(let c=0;c<8;c++)for(let i=0;i<8;i++){const l=(s=(t=o[c])==null?void 0:t[i])==null?void 0:s.chess;if(!(!l||l==="k")){if(l==="n"){e.push(l);continue}if(l==="b"){e.push(l);const a=(c+i)%2;n===-1?n=a:a!==n&&(r=!1);continue}return!1}}return e.length<=1?!0:e.every(c=>c==="b")&&r},no=o=>J(o).length===0||eo(o.board)||o.halfmove>=150||Object.values(o.repeats).some(e=>e>=5),ro=(o,e)=>{const n={...o},r=t=>{t.row===7&&t.col===4&&(n.whiteShort=n.whiteLong=!1),t.row===0&&t.col===4&&(n.blackS
1hort=n.blackLong=!1),t.row===7&&t.col===7&&(n.whiteShort=!1),t.row===7&&t.col===0&&(n.whiteLong=!1),t.row===0&&t.col===7&&(n.blackShort=!1),t.row===0&&t.col===0&&(n.blackLong=!1)};return r(e.from),r(e.to),n},to=o=>o.castleShort?"castle_short":o.castleLong?"castle_long":o.enPassant?"en_passant":o.promoteTo&&o.capture?"promotion_capture":o.promoteTo?"promotion":o.capture?"capture":"",so=o=>{const e=o.from&&o.to?[o.from,o.to]:o.cells;if(!e||e.length!==2)throw new Error("chess move has no from/to cells");const[n,r]=e.map(([t,s])=>({row:t,col:s}));if(![n.row,n.col,r.row,r.col].every(Number.isInteger)||!S(n.row,n.col)||!S(r.row,r.col))throw new Error(`chess move is outside board: ${JSON.stringify(e)}`);return[n,r]},co=(o,e)=>{var p,b;if(no(o))throw new Error("chess game is already over");if(e.by!==1&&e.by!==2)throw new Error(`unknown chess seat ${e.by}`);const n=G(e.by);if(n!==o.toMove)throw new Error(`chess move belongs to ${n}, but ${o.toMove} moves next`);const[r,t]=so(e),s=e.promote_to?W[e.promote_to]:void 0;if(e.promote_to&&!s)throw new Error(`unknown chess promotion ${e.promote_to}`);const c=J(o).filter(g=>_(g.from,r)&&_(g.to,t));let i=c.find(g=>g.promoteTo===s);if(!i&&!s&&(i=c.find(g=>g.promoteTo==="q")??c[0]),!i)throw new Error(`chess move ${JSON.stringify(e.from??((p=e.cells)==null?void 0:p[0]))} → ${JSON.stringify(e.to??((b=e.cells)==null?void 0:b[1]))} is illegal`);const l=q[i.piece],a=to(i);if(e.piece&&e.piece!==l)throw new Error(`chess move says ${e.piece}, but ${l} stands on source cell`);if(e.kind&&e.kind!==a)throw new Error(`chess move says ${e.kind}, but position implies ${a||"ordinary move"}`);const h=K(o.board,i,n),d=!!i.capture,f=i.piece==="p",u={board:h,toMove:C(n),castling:ro(o.castling,i),enPassant:i.doublePush?{row:(i.from.row+i.to.row)/2,col:i.from.col}:null,halfmove:d||f?0:o.halfmove+1,repeats:d||f?{}:{...o.repeats}},w=A(u);return u.repeats[w]=(u.repeats[w]??0)+1,{state:u,move:{no:0,side:n,cell:i.to,cells:[i.from,i.to],captured:i.enPassant?[{row:i.from.row,col:i.to.col}]:void 0,clockRemainingMs:0,thinkMs:e.time_ms,piece:l,kind:a||void 0,promoteTo:i.promoteTo?q[i.promoteTo]:void 0}}},io=o=>o===2?"white":"black",V=(o,e=8)=>{var c,i,l,a;const n=(i=(c=o==null?void 0:o.F)==null?void 0:c.default)==null?void 0:i.h,r=(a=(l=o==null?void 0:o.F)==null?void 0:l.default)==null?void 0:a.w,t=Number.isInteger(o==null?void 0:o.rows)?Number(o==null?void 0:o.rows):Number.isInteger(n)?Number(n):e,s=Number.isInteger(o==null?void 0:o.cols)?Number(o==null?void 0:o.cols):Number.isInteger(r)?Number(r):t;if(t<4||t>16||s<4||s>16)throw new Error(`unsupported board size ${t}x${s}`);return[t,s]},go=o=>{if(!(!o||!o.F&&o.MV==null&&!o.RUL))return{F:o.F,MV:o.MV,RUL:o.RUL}},D=(o,e)=>Array.from({length:o},()=>Array(e).fill(null)),U=o=>o.map(e=>e.map(n=>n?{...n}:null)),lo=o=>{const[e,n]=V(o),r=D(e,n),t=Math.floor(e/2)-1,s=Math.floor(n/2)-1;return r[t][s]={side:"white",king:!1},r[t+1][s+1]={side:"white",king:!1},r[t][s+1]={side:"black",king:!1},r[t+1][s]={side:"black",king:!1},r},P=(o,e,n,r,t)=>o<0||o>=n||e<0||e>=r?!1:t===0?!0:e+o>=t&&e+(n-o)>t&&r-e+o>t&&r-e+(n-o)-1>t,ao=(o,e,n)=>{var p,b,g,M;const r=e.row,t=e.col;if(!Number.isInteger(r)||!Number.isInteger(t))throw new Error("reversi move has no cell");const s=Number(r),c=Number(t),i=o.length,l=((p=o[0])==null?void 0:p.length)??0,a=Number(n==null?void 0:n.octagon)||0;if(!P(s,c,i,l,a)||(b=o[s])!=null&&b[c])throw new Error(`illegal reversi cell ${s},${c}`);const h=io(e.by),d=h==="black"?"white":"black",f=U(o);f[s][c]={side:h,king:!1};const u=[-1,0,1].flatMap(m=>[-1,0,1].filter(k=>m!==0||k!==0).map(k=>[m,k]));let w=0;for(const[m,k]of u){const v=[];let y=s+m,$=c+k;for(;P(y,$,i,l,a)&&((g=o[y][$])==null?void 0:g.side)===d;)v.push({row:y,col:$}),y+=m,$+=k;if(v.length>0&&P(y,$,i,l,a)&&((M=o[y][$])==null?void 0:M.side)===h){for(const T of v)f[T.row][T.col]={side:h,king:!1};w+=v.length}}if(w===0)throw new Error(`reversi move ${s},${c} flips no pieces`);return{board:f,move:{no:0,side:h,cell:{row:s,col:c},clockRemainingMs:0,thinkMs:e.time_ms,cells:[{row:s,col:c}]}}},ho=o=>{const[e,n]=V(o),r=D(e,n),t=Math.floor((e-2)/2);for(let s=0;s<e;s++)for(let c=0;c<n;c++)(s+c)%2===1&&(s<t&&(r[s][c]={side:"black",king:!1}),s>=e-t&&(r[s][c]={side:"white",king:!1}));return r},fo=(o,e,n)=>{var f,u;const r=(e.cells??[]).map(([w,p])=>({row:w,col:p}));if(r.length<2)throw new Error("checkers move has no path");const t=r[0],s=r[r.length-1],c=(f=o[t.row])==null?void 0:f[t.col];if(!(c!=null&&c.side))throw new Error(`checkers source ${t.row},${t.col} is empty`);const i=U(o),l=[];i[t.row][t.col]=null;for(let w=1;w<r.length;w++){const p=r[w-1],b=r[w],g=Math.sign(b.row-p.row),M=Math.sign(b.col-p.col);
1if(g===0||M===0||Math.abs(b.row-p.row)!==Math.abs(b.col-p.col))throw new Error("checkers path is not diagonal");for(let m=p.row+g,k=p.col+M;m!==b.row;m+=g,k+=M){const v=(u=i[m])==null?void 0:u[k];if(v!=null&&v.side&&v.side!==c.side){l.push({row:m,col:k}),i[m][k]=null;break}}}const a=c.side==="white"?0:i.length-1,h=r.some(w=>w.row===a),d=!!c.king||s.row===a||!!(n!=null&&n.promote_on_pass&&h);return i[s.row][s.col]={side:c.side,king:d},{board:i,move:{no:0,side:c.side,cell:s,cells:r,captured:l,clockRemainingMs:0,thinkMs:e.time_ms}}},bo=o=>{var e;return((e=j(o))==null?void 0:e.type)??0},wo=o=>o.blocks.flatMap(e=>e.moves??[]),po=o=>{var s;if(o.version!==1)throw new Error(`unsupported transcript version ${o.version}`);if(o.game!=="reversi"&&o.game!=="checkers"&&o.game!=="chess")throw new Error(`unsupported archive game ${o.game}`);if(o.game==="chess"&&((s=o.rules)!=null&&s.variant)&&!["general","wild"].includes(o.rules.variant))throw new Error(`unsupported chess variant ${o.rules.variant}`);let e;o.game==="chess"&&(e=X());const r=[{board:(e==null?void 0:e.board)??(o.game==="checkers"?ho(o.rules):lo(o.rules)),move:null}],t=wo(o);for(const[c,i]of t.entries())try{let l;if(o.game==="chess"&&e){const a=co(e,i);e=a.state,l={board:a.state.board,move:a.move}}else o.game==="checkers"?l=fo(r[r.length-1].board,i,o.rules):l=ao(r[r.length-1].board,i,o.rules);l.move&&(l.move.no=c+1),r.push(l)}catch(l){return{timeline:r,violation:{moveNo:c+1,move:i,reason:l instanceof Error?l.message:"unknown replay error",remainingMoves:t.length-c-1}}}return{timeline:r}},mo=o=>{const e=po(o);if(e.violation)throw new Error(e.violation.reason);return e.timeline};export{go as archiveCheckersConfig,wo as archiveMoves,po as buildArchiveReplay,mo as buildArchiveTimeline,bo as checkersVariant};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.