UNPKG

@echecs/pgn

Version:

Parse PGN (Portable Game Notation) chess games into structured JavaScript objects. Zero dependencies, strict TypeScript, no-throw API.

12 lines (11 loc) 26.1 kB
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=((n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)))(o(((e,t)=>{let n=null;function r(e,t,n){return t&&(e.promotion=t),n===`+`&&(e.check=!0),n===`#`&&(e.checkmate=!0),e}function i(e,t){if(t??=0,e.length===0)return[];let r=t>>1,a=Array(Math.ceil((e.length+(t&1))/2));for(let o=0;o<e.length;o++){let s=t+o,c=(s&1)==0,l=(s>>1)-r,u=(s>>1)+1;a[l]===void 0&&(a[l]=[u,void 0]);let d=e[o],f=d.number,p=d.long;n&&f!==void 0&&f!==u&&n({column:1,line:1,message:`Move number mismatch: expected ${u}, got ${f}`,offset:0});let m={piece:d.piece,to:d.to};d.from!==void 0&&(m.from=d.from),d.capture!==void 0&&(m.capture=d.capture),d.castling!==void 0&&(m.castling=d.castling,m.to=c?p?`c1`:`g1`:p?`c8`:`g8`),d.check!==void 0&&(m.check=d.check),d.checkmate!==void 0&&(m.checkmate=d.checkmate),d.promotion!==void 0&&(m.promotion=d.promotion),d.annotations!==void 0&&(m.annotations=d.annotations),d.comment!==void 0&&(m.comment=d.comment),d.variants!==void 0&&(m.variants=d.variants.map(e=>i(e,s))),a[l][c?1:2]=m}return a}function a(e){switch(e){case`1-0`:return 1;case`0-1`:return 0;case`1/2-1/2`:return .5;default:return`?`}}var o=class extends SyntaxError{constructor(e,t,n,r){super(e),this.expected=t,this.found=n,this.location=r,this.name=`SyntaxError`}format(e){let t=`Error: `+this.message;if(this.location){let n=null,r=e.find(e=>e.source===this.location.source);r&&(n=r.text.split(/\r\n|\n|\r/g));let i=this.location.start,a=this.location.source&&typeof this.location.source.offset==`function`?this.location.source.offset(i):i,o=this.location.source+`:`+a.line+`:`+a.column;if(n){let e=this.location.end,r=``.padEnd(a.line.toString().length,` `),s=n[i.line-1],c=(i.line===e.line?e.column:s.length+1)-i.column||1;t+=` --> `+o+` `+r+` | `+a.line+` | `+s+` `+r+` | `+``.padEnd(i.column-1,` `)+``.padEnd(c,`^`)}else t+=` at `+o}return t}static buildMessage(e,t){function n(e){return e.codePointAt(0).toString(16).toUpperCase()}let r=Object.prototype.hasOwnProperty.call(RegExp.prototype,`unicode`)?RegExp(`[\\p{C}\\p{Mn}\\p{Mc}]`,`gu`):null;function i(e){return r?e.replace(r,e=>`\\u{`+n(e)+`}`):e}function a(e){return i(e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/\0/g,`\\0`).replace(/\t/g,`\\t`).replace(/\n/g,`\\n`).replace(/\r/g,`\\r`).replace(/[\x00-\x0F]/g,e=>`\\x0`+n(e)).replace(/[\x10-\x1F\x7F-\x9F]/g,e=>`\\x`+n(e)))}function o(e){return i(e.replace(/\\/g,`\\\\`).replace(/\]/g,`\\]`).replace(/\^/g,`\\^`).replace(/-/g,`\\-`).replace(/\0/g,`\\0`).replace(/\t/g,`\\t`).replace(/\n/g,`\\n`).replace(/\r/g,`\\r`).replace(/[\x00-\x0F]/g,e=>`\\x0`+n(e)).replace(/[\x10-\x1F\x7F-\x9F]/g,e=>`\\x`+n(e)))}let s={literal(e){return`"`+a(e.text)+`"`},class(e){let t=e.parts.map(e=>Array.isArray(e)?o(e[0])+`-`+o(e[1]):o(e));return`[`+(e.inverted?`^`:``)+t.join(``)+`]`+(e.unicode?`u`:``)},any(){return`any character`},end(){return`end of input`},other(e){return e.description}};function c(e){return s[e.type](e)}function l(e){let t=e.map(c);if(t.sort(),t.length>0){let e=1;for(let n=1;n<t.length;n++)t[n-1]!==t[n]&&(t[e]=t[n],e++);t.length=e}switch(t.length){case 1:return t[0];case 2:return t[0]+` or `+t[1];default:return t.slice(0,-1).join(`, `)+`, or `+t[t.length-1]}}function u(e){return e?`"`+a(e)+`"`:`end of input`}return`Expected `+l(e)+` but `+u(t)+` found.`}};function s(e,t){t=t===void 0?{}:t;let s={},c=t.grammarSource,l={DATABASE:dt},u=dt,d=`1/2-1/2`,f=`O-O-O`,p=`+ −`,m=`− +`,h=/^[a-zA-Z0-9_]/,ee=/^[^"\\]/,g=/^[0-9]/,_=/^[+#]/,v=/^[KQBNPR]/,y=/^[a-h]/,b=/^[1-8]/,x=/^[NBRQ]/,S=/^[!?\xB1\u2213\u221E\u25A1\u2A71-\u2A72]/,te=/^[=\u2191-\u2192\u21C6\u25CB\u27F3\u2981\u2A00\u2BF9]/,C=/^[^{}]/,w=/^[\n]/,T=/^[ \t\n\r]/,E=Y(`[`,!1),ne=Y(`]`,!1),D=X([[`a`,`z`],[`A`,`Z`],[`0`,`9`],`_`],!1,!1,!1),O=Y(`"`,!1),k=X([`"`,`\\`],!0,!1,!1),A=Y(`\\`,!1),j=st(),re=Y(`1/2-1/2`,!1),ie=Y(`1-0`,!1),ae=Y(`0-1`,!1),oe=Y(`*`,!1),M=X([[`0`,`9`]],!1,!1,!1),se=Y(`.`,!1),ce=Y(`O-O-O`,!1),N=X([`+`,`#`],!1,!1,!1),le=Y(`O-O`,!1),P=X([`K`,`Q`,`B`,`N`,`P`,`R`],!1,!1,!1),F=X([[`a`,`h`]],!1,!1,!1),I=X([[`1`,`8`]],!1,!1,!1),L=Y(`x`,!1),ue=Y(`=`,!1),de=X([`N`,`B`,`R`,`Q`],!1,!1,!1),fe=Y(`(`,!1),pe=Y(`)`,!1),me=Y(`$`,!1),he=Y(`!!`,!1),ge=Y(`??`,!1),_e=Y(`!?`,!1),ve=Y(`?!`,!1),ye=X([`!`,`?`,`±`,`∓`,`∞`,`□`,[`⩱`,`⩲`]],!1,!1,!1),be=Y(`+ −`,!1),xe=Y(`− +`,!1),Se=X([`=`,[`↑`,`→`],`⇆`,`○`,`⟳`,`⦁`,`⨀`,`⯹`],!1,!1,!1),R=Y(`{`,!1),z=X([`{`,`}`],!0,!1,!1),B=Y(`}`,!1),Ce=Y(`;`,!1),V=X([` `],!1,!1,!1),we=X([` `,` `,` `,`\r`],!1,!1,!1),Te=Y(`%`,!1);function Ee(e,t){return t}function De(e,t){return[e,...t]}function Oe(e,t){return t}function ke(e,t,n){return{meta:e,moves:i(t??[]),result:a(n)}}function Ae(e,t){return t}function je(e,t){let r=[e,...t];if(n){let e=Object.create(null);for(let t of r){let r=t._key;e[r]&&n({column:t._loc.column,line:t._loc.line,message:`Duplicate tag: "${r}"`,offset:t._loc.offset}),e[r]=!0}return Object.assign({},...r.map(({_key:e,_loc:t,...n})=>n))}return Object.assign({},...r)}function Me(){return{}}function Ne(e,t){return n?{_key:e,_loc:at().start,[e]:t}:{[e]:t}}function Pe(e){return e.replace(/\\"/g,`"`).replace(/\\\\/g,`\\`).trim()}function Fe(e,t){return t}function Ie(e,t,n){return n}function Le(e,t,n){return t.length>0&&(e.variants=t),n?[e,...n]:[e]}function Re(e,t,n){return n}function ze(e,t,n,r){return r}function Be(e,t,n,r){if(e!==null&&(t.number=e),n.length>0){let e=[];for(let t=0;t<n.length;t++)n[t]&&e.push(n[t]);e.length>0&&(t.annotations=e)}if(r.length>0){let e=``;for(let t=0;t<r.length;t++)r[t]&&(e+=(e?` `:``)+r[t]);e.length>0&&(t.comment=e.replace(/\n/g,``))}return t}function Ve(e){return parseInt(e.replace(/\./g,``),10)}function He(e){return r({castling:!0,long:!0,piece:`K`,to:`O-O-O`},void 0,e)}function Ue(e){return r({castling:!0,long:!1,piece:`K`,to:`O-O`},void 0,e)}function We(e,t,n,i,a,o){return r({capture:!0,from:t+n,piece:e,to:i+a},void 0,o)}function Ge(e,t,n,i,a,o){return r({from:t+n,piece:e,to:i+a},void 0,o)}function Ke(e,t,n,i,a){return r({capture:!0,from:t,piece:e,to:n+i},void 0,a)}function qe(e,t,n,i,a){return r({capture:!0,from:t,piece:e,to:n+i},void 0,a)}function Je(e,t,n,i,a){return r({from:t,piece:e,to:n+i},void 0,a)}function Ye(e,t,n,i,a){return r({from:t,piece:e,to:n+i},void 0,a)}function Xe(e,t,n,i){return r({capture:!0,piece:e,to:t+n},void 0,i)}function Ze(e,t,n,i){return r({piece:e,to:t+n},void 0,i)}function Qe(e,t,n,i,a){return r({capture:!0,from:e,piece:`P`,to:t+n},i,a)}function $e(e,t,n,i){return r({piece:`P`,to:e+t},n,i)}function et(e){return e}function tt(e){return e}function nt(e){return e}function rt(e){return e.replace(/[\n\t]/g,` `).trim()}function it(e){return e.trim()}let H=t.peg$currPos|0,U=H,W=[{line:1,column:1}],G=H,K=t.peg$maxFailExpected||[],q=t.peg$silentFails|0,J;if(t.startRule){if(!(t.startRule in l))throw Error(`Can't start parsing from rule "`+t.startRule+`".`);u=l[t.startRule]}function at(){return Z(U,H)}function ot(t=H){let n=e.codePointAt(t);return n===void 0?``:String.fromCodePoint(n)}function Y(e,t){return{type:`literal`,text:e,ignoreCase:t}}function X(e,t,n,r){return{type:`class`,parts:e,inverted:t,ignoreCase:n,unicode:r}}function st(){return{type:`any`}}function ct(){return{type:`end`}}function lt(t){let n=W[t],r;if(n)return n;if(t>=W.length)r=W.length-1;else for(r=t;!W[--r];);for(n=W[r],n={line:n.line,column:n.column};r<t;)e.charCodeAt(r)===10?(n.line++,n.column=1):n.column++,r++;return W[t]=n,n}function Z(e,t,n){let r=lt(e),i=lt(t),a={source:c,start:{offset:e,line:r.line,column:r.column},end:{offset:t,line:i.line,column:i.column}};return n&&c&&typeof c.offset==`function`&&(a.start=c.offset(a.start),a.end=c.offset(a.end)),a}function Q(e){H<G||(H>G&&(G=H,K=[]),K.push(e))}function ut(e,t,n){return new o(o.buildMessage(e,t),e,t,n)}function dt(){let e,t,n,r,i;if(e=H,$(),t=ft(),t!==s){for(n=[],r=H,$(),i=ft(),i===s?(H=r,r=s):(U=r,r=Ee(t,i));r!==s;)n.push(r),r=H,$(),i=ft(),i===s?(H=r,r=s):(U=r,r=Ee(t,i));r=$(),U=e,e=De(t,n)}else H=e,e=s;return e}function ft(){let e,t,n,r;return e=H,t=pt(),t===s?(H=e,e=s):($(),n=H,r=vt(),r===s?(H=n,n=s):($(),U=n,n=Oe(t,r)),n===s&&(n=null),r=_t(),r===s?(H=e,e=s):(U=e,e=ke(t,n,r))),e}function pt(){let e,t,n,r,i;if(e=H,t=mt(),t!==s){for(n=[],r=H,$(),i=mt(),i===s?(H=r,r=s):(U=r,r=Ae(t,i));r!==s;)n.push(r),r=H,$(),i=mt(),i===s?(H=r,r=s):(U=r,r=Ae(t,i));U=e,e=je(t,n)}else H=e,e=s;return e===s&&(e=H,t=``,U=e,t=Me(),e=t),e}function mt(){let t,n,r,i,a;return t=H,e.charCodeAt(H)===91?(n=`[`,H++):(n=s,q===0&&Q(E)),n===s?(H=t,t=s):($(),r=ht(),r===s?(H=t,t=s):($(),i=gt(),i===s?(H=t,t=s):($(),e.charCodeAt(H)===93?(a=`]`,H++):(a=s,q===0&&Q(ne)),a===s?(H=t,t=s):(U=t,t=Ne(r,i))))),t}function ht(){let t,n,r;if(t=H,n=[],r=e.charAt(H),h.test(r)?H++:(r=s,q===0&&Q(D)),r!==s)for(;r!==s;)n.push(r),r=e.charAt(H),h.test(r)?H++:(r=s,q===0&&Q(D));else n=s;return t=n===s?n:e.substring(t,H),t}function gt(){let t,n,r,i,a,o,c;if(t=H,e.charCodeAt(H)===34?(n=`"`,H++):(n=s,q===0&&Q(O)),n!==s){for(r=H,i=[],a=e.charAt(H),ee.test(a)?H++:(a=s,q===0&&Q(k)),a===s&&(a=H,e.charCodeAt(H)===92?(o=`\\`,H++):(o=s,q===0&&Q(A)),o===s?(H=a,a=s):(e.length>H?(c=e.charAt(H),H++):(c=s,q===0&&Q(j)),c===s?(H=a,a=s):(o=[o,c],a=o)));a!==s;)i.push(a),a=e.charAt(H),ee.test(a)?H++:(a=s,q===0&&Q(k)),a===s&&(a=H,e.charCodeAt(H)===92?(o=`\\`,H++):(o=s,q===0&&Q(A)),o===s?(H=a,a=s):(e.length>H?(c=e.charAt(H),H++):(c=s,q===0&&Q(j)),c===s?(H=a,a=s):(o=[o,c],a=o)));r=e.substring(r,H),e.charCodeAt(H)===34?(i=`"`,H++):(i=s,q===0&&Q(O)),i===s?(H=t,t=s):(U=t,t=Pe(r))}else H=t,t=s;return t}function _t(){let t;return e.substr(H,7)===d?(t=d,H+=7):(t=s,q===0&&Q(re)),t===s&&(e.substr(H,3)===`1-0`?(t=`1-0`,H+=3):(t=s,q===0&&Q(ie)),t===s&&(e.substr(H,3)===`0-1`?(t=`0-1`,H+=3):(t=s,q===0&&Q(ae)),t===s&&(e.charCodeAt(H)===42?(t=`*`,H++):(t=s,q===0&&Q(oe))))),t}function vt(){let e,t,n,r,i;if(e=H,t=yt(),t!==s){for(n=[],r=H,$(),i=Dt(),i===s?(H=r,r=s):(U=r,r=Fe(t,i));r!==s;)n.push(r),r=H,$(),i=Dt(),i===s?(H=r,r=s):(U=r,r=Fe(t,i));r=H,$(),i=vt(),i===s?(H=r,r=s):(U=r,r=Ie(t,n,i)),r===s&&(r=null),U=e,e=Le(t,n,r)}else H=e,e=s;return e}function yt(){let e,t,n,r,i,a,o,c;if(e=H,t=bt(),t===s&&(t=null),$(),n=xt(),n!==s){for(r=[],i=H,a=$(),o=Ot(),o===s?(H=i,i=s):(U=i,i=Re(t,n,o));i!==s;)r.push(i),i=H,a=$(),o=Ot(),o===s?(H=i,i=s):(U=i,i=Re(t,n,o));for(i=[],a=H,o=$(),c=jt(),c===s?(H=a,a=s):(U=a,a=ze(t,n,r,c));a!==s;)i.push(a),a=H,o=$(),c=jt(),c===s?(H=a,a=s):(U=a,a=ze(t,n,r,c));U=e,e=Be(t,n,r,i)}else H=e,e=s;return e}function bt(){let t,n,r,i,a,o;if(t=H,n=H,r=H,i=[],a=e.charAt(H),g.test(a)?H++:(a=s,q===0&&Q(M)),a!==s)for(;a!==s;)i.push(a),a=e.charAt(H),g.test(a)?H++:(a=s,q===0&&Q(M));else i=s;if(i!==s){for(a=[],e.charCodeAt(H)===46?(o=`.`,H++):(o=s,q===0&&Q(se));o!==s;)a.push(o),e.charCodeAt(H)===46?(o=`.`,H++):(o=s,q===0&&Q(se));i=[i,a],r=i}else H=r,r=s;return n=r===s?r:e.substring(n,H),n!==s&&(U=t,n=Ve(n)),t=n,t}function xt(){let e;return e=St(),e===s&&(e=Ct(),e===s&&(e=wt(),e===s&&(e=Tt()))),e}function St(){let t,n,r,i;return t=H,e.substr(H,5)===f?(n=f,H+=5):(n=s,q===0&&Q(ce)),n===s?(H=t,t=s):(r=H,i=e.charAt(H),_.test(i)?H++:(i=s,q===0&&Q(N)),i===s&&(i=null),r=e.substring(r,H),U=t,t=He(r)),t===s&&(t=H,e.substr(H,3)===`O-O`?(n=`O-O`,H+=3):(n=s,q===0&&Q(le)),n===s?(H=t,t=s):(r=H,i=e.charAt(H),_.test(i)?H++:(i=s,q===0&&Q(N)),i===s&&(i=null),r=e.substring(r,H),U=t,t=Ue(r))),t}function Ct(){let t,n,r,i,a,o,c,l,u;return t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(r=e.charAt(H),y.test(r)?H++:(r=s,q===0&&Q(F)),r===s?(H=t,t=s):(i=e.charAt(H),b.test(i)?H++:(i=s,q===0&&Q(I)),i===s?(H=t,t=s):(e.charCodeAt(H)===120?(a=`x`,H++):(a=s,q===0&&Q(L)),a===s?(H=t,t=s):(o=e.charAt(H),y.test(o)?H++:(o=s,q===0&&Q(F)),o===s?(H=t,t=s):(c=e.charAt(H),b.test(c)?H++:(c=s,q===0&&Q(I)),c===s?(H=t,t=s):(l=H,u=e.charAt(H),_.test(u)?H++:(u=s,q===0&&Q(N)),u===s&&(u=null),l=e.substring(l,H),U=t,t=We(n,r,i,o,c,l))))))),t===s&&(t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(r=e.charAt(H),y.test(r)?H++:(r=s,q===0&&Q(F)),r===s?(H=t,t=s):(i=e.charAt(H),b.test(i)?H++:(i=s,q===0&&Q(I)),i===s?(H=t,t=s):(a=e.charAt(H),y.test(a)?H++:(a=s,q===0&&Q(F)),a===s?(H=t,t=s):(o=e.charAt(H),b.test(o)?H++:(o=s,q===0&&Q(I)),o===s?(H=t,t=s):(c=H,l=e.charAt(H),_.test(l)?H++:(l=s,q===0&&Q(N)),l===s&&(l=null),c=e.substring(c,H),U=t,t=Ge(n,r,i,a,o,c)))))),t===s&&(t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(r=e.charAt(H),y.test(r)?H++:(r=s,q===0&&Q(F)),r===s?(H=t,t=s):(e.charCodeAt(H)===120?(i=`x`,H++):(i=s,q===0&&Q(L)),i===s?(H=t,t=s):(a=e.charAt(H),y.test(a)?H++:(a=s,q===0&&Q(F)),a===s?(H=t,t=s):(o=e.charAt(H),b.test(o)?H++:(o=s,q===0&&Q(I)),o===s?(H=t,t=s):(c=H,l=e.charAt(H),_.test(l)?H++:(l=s,q===0&&Q(N)),l===s&&(l=null),c=e.substring(c,H),U=t,t=Ke(n,r,a,o,c)))))),t===s&&(t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(r=e.charAt(H),b.test(r)?H++:(r=s,q===0&&Q(I)),r===s?(H=t,t=s):(e.charCodeAt(H)===120?(i=`x`,H++):(i=s,q===0&&Q(L)),i===s?(H=t,t=s):(a=e.charAt(H),y.test(a)?H++:(a=s,q===0&&Q(F)),a===s?(H=t,t=s):(o=e.charAt(H),b.test(o)?H++:(o=s,q===0&&Q(I)),o===s?(H=t,t=s):(c=H,l=e.charAt(H),_.test(l)?H++:(l=s,q===0&&Q(N)),l===s&&(l=null),c=e.substring(c,H),U=t,t=qe(n,r,a,o,c)))))),t===s&&(t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(r=e.charAt(H),y.test(r)?H++:(r=s,q===0&&Q(F)),r===s?(H=t,t=s):(i=e.charAt(H),y.test(i)?H++:(i=s,q===0&&Q(F)),i===s?(H=t,t=s):(a=e.charAt(H),b.test(a)?H++:(a=s,q===0&&Q(I)),a===s?(H=t,t=s):(o=H,c=e.charAt(H),_.test(c)?H++:(c=s,q===0&&Q(N)),c===s&&(c=null),o=e.substring(o,H),U=t,t=Je(n,r,i,a,o))))),t===s&&(t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(r=e.charAt(H),b.test(r)?H++:(r=s,q===0&&Q(I)),r===s?(H=t,t=s):(i=e.charAt(H),y.test(i)?H++:(i=s,q===0&&Q(F)),i===s?(H=t,t=s):(a=e.charAt(H),b.test(a)?H++:(a=s,q===0&&Q(I)),a===s?(H=t,t=s):(o=H,c=e.charAt(H),_.test(c)?H++:(c=s,q===0&&Q(N)),c===s&&(c=null),o=e.substring(o,H),U=t,t=Ye(n,r,i,a,o))))),t===s&&(t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(e.charCodeAt(H)===120?(r=`x`,H++):(r=s,q===0&&Q(L)),r===s?(H=t,t=s):(i=e.charAt(H),y.test(i)?H++:(i=s,q===0&&Q(F)),i===s?(H=t,t=s):(a=e.charAt(H),b.test(a)?H++:(a=s,q===0&&Q(I)),a===s?(H=t,t=s):(o=H,c=e.charAt(H),_.test(c)?H++:(c=s,q===0&&Q(N)),c===s&&(c=null),o=e.substring(o,H),U=t,t=Xe(n,i,a,o))))),t===s&&(t=H,n=e.charAt(H),v.test(n)?H++:(n=s,q===0&&Q(P)),n===s?(H=t,t=s):(r=e.charAt(H),y.test(r)?H++:(r=s,q===0&&Q(F)),r===s?(H=t,t=s):(i=e.charAt(H),b.test(i)?H++:(i=s,q===0&&Q(I)),i===s?(H=t,t=s):(a=H,o=e.charAt(H),_.test(o)?H++:(o=s,q===0&&Q(N)),o===s&&(o=null),a=e.substring(a,H),U=t,t=Ze(n,r,i,a))))))))))),t}function wt(){let t,n,r,i,a,o,c,l;return t=H,n=e.charAt(H),y.test(n)?H++:(n=s,q===0&&Q(F)),n===s?(H=t,t=s):(e.charCodeAt(H)===120?(r=`x`,H++):(r=s,q===0&&Q(L)),r===s?(H=t,t=s):(i=e.charAt(H),y.test(i)?H++:(i=s,q===0&&Q(F)),i===s?(H=t,t=s):(a=e.charAt(H),b.test(a)?H++:(a=s,q===0&&Q(I)),a===s?(H=t,t=s):(o=Et(),o===s&&(o=null),c=H,l=e.charAt(H),_.test(l)?H++:(l=s,q===0&&Q(N)),l===s&&(l=null),c=e.substring(c,H),U=t,t=Qe(n,i,a,o,c))))),t}function Tt(){let t,n,r,i,a,o;return t=H,n=e.charAt(H),y.test(n)?H++:(n=s,q===0&&Q(F)),n===s?(H=t,t=s):(r=e.charAt(H),b.test(r)?H++:(r=s,q===0&&Q(I)),r===s?(H=t,t=s):(i=Et(),i===s&&(i=null),a=H,o=e.charAt(H),_.test(o)?H++:(o=s,q===0&&Q(N)),o===s&&(o=null),a=e.substring(a,H),U=t,t=$e(n,r,i,a))),t}function Et(){let t,n,r;return t=H,e.charCodeAt(H)===61?(n=`=`,H++):(n=s,q===0&&Q(ue)),n===s?(H=t,t=s):(r=e.charAt(H),x.test(r)?H++:(r=s,q===0&&Q(de)),r===s?(H=t,t=s):(U=t,t=et(r))),t}function Dt(){let t,n,r,i;return t=H,e.charCodeAt(H)===40?(n=`(`,H++):(n=s,q===0&&Q(fe)),n===s?(H=t,t=s):($(),r=vt(),r===s?(H=t,t=s):($(),e.charCodeAt(H)===41?(i=`)`,H++):(i=s,q===0&&Q(pe)),i===s?(H=t,t=s):(U=t,t=tt(r)))),t}function Ot(){let e;return e=kt(),e===s&&(e=At()),e}function kt(){let t,n,r,i,a;if(t=H,e.charCodeAt(H)===36?(n=`$`,H++):(n=s,q===0&&Q(me)),n!==s){if(r=H,i=[],a=e.charAt(H),g.test(a)?H++:(a=s,q===0&&Q(M)),a!==s)for(;a!==s;)i.push(a),a=e.charAt(H),g.test(a)?H++:(a=s,q===0&&Q(M));else i=s;r=i===s?i:e.substring(r,H),r===s?(H=t,t=s):(U=t,t=nt(r))}else H=t,t=s;return t}function At(){let t;return e.substr(H,2)===`!!`?(t=`!!`,H+=2):(t=s,q===0&&Q(he)),t===s&&(e.substr(H,2)===`??`?(t=`??`,H+=2):(t=s,q===0&&Q(ge)),t===s&&(e.substr(H,2)===`!?`?(t=`!?`,H+=2):(t=s,q===0&&Q(_e)),t===s&&(e.substr(H,2)===`?!`?(t=`?!`,H+=2):(t=s,q===0&&Q(ve)),t===s&&(t=e.charAt(H),S.test(t)?H++:(t=s,q===0&&Q(ye)),t===s&&(e.substr(H,3)===p?(t=p,H+=3):(t=s,q===0&&Q(be)),t===s&&(e.substr(H,3)===m?(t=m,H+=3):(t=s,q===0&&Q(xe)),t===s&&(t=e.charAt(H),te.test(t)?H++:(t=s,q===0&&Q(Se))))))))),t}function jt(){let e;return e=Mt(),e===s&&(e=Nt()),e}function Mt(){let t,n,r,i,a,o,c,l;if(t=H,e.charCodeAt(H)===123?(n=`{`,H++):(n=s,q===0&&Q(R)),n!==s){if(r=H,i=[],a=e.charAt(H),C.test(a)?H++:(a=s,q===0&&Q(z)),a===s)if(a=H,e.charCodeAt(H)===123?(o=`{`,H++):(o=s,q===0&&Q(R)),o!==s){for(c=[],l=e.charAt(H),C.test(l)?H++:(l=s,q===0&&Q(z));l!==s;)c.push(l),l=e.charAt(H),C.test(l)?H++:(l=s,q===0&&Q(z));e.charCodeAt(H)===125?(l=`}`,H++):(l=s,q===0&&Q(B)),l===s?(H=a,a=s):(o=[o,c,l],a=o)}else H=a,a=s;for(;a!==s;)if(i.push(a),a=e.charAt(H),C.test(a)?H++:(a=s,q===0&&Q(z)),a===s)if(a=H,e.charCodeAt(H)===123?(o=`{`,H++):(o=s,q===0&&Q(R)),o!==s){for(c=[],l=e.charAt(H),C.test(l)?H++:(l=s,q===0&&Q(z));l!==s;)c.push(l),l=e.charAt(H),C.test(l)?H++:(l=s,q===0&&Q(z));e.charCodeAt(H)===125?(l=`}`,H++):(l=s,q===0&&Q(B)),l===s?(H=a,a=s):(o=[o,c,l],a=o)}else H=a,a=s;r=e.substring(r,H),e.charCodeAt(H)===125?(i=`}`,H++):(i=s,q===0&&Q(B)),i===s?(H=t,t=s):(U=t,t=rt(r))}else H=t,t=s;return t}function Nt(){let t,n,r,i,a,o,c;if(t=H,e.charCodeAt(H)===59?(n=`;`,H++):(n=s,q===0&&Q(Ce)),n!==s){for(r=H,i=[],a=H,o=H,q++,c=e.charAt(H),w.test(c)?H++:(c=s,q===0&&Q(V)),q--,c===s?o=void 0:(H=o,o=s),o===s?(H=a,a=s):(e.length>H?(c=e.charAt(H),H++):(c=s,q===0&&Q(j)),c===s?(H=a,a=s):(o=[o,c],a=o));a!==s;)i.push(a),a=H,o=H,q++,c=e.charAt(H),w.test(c)?H++:(c=s,q===0&&Q(V)),q--,c===s?o=void 0:(H=o,o=s),o===s?(H=a,a=s):(e.length>H?(c=e.charAt(H),H++):(c=s,q===0&&Q(j)),c===s?(H=a,a=s):(o=[o,c],a=o));r=e.substring(r,H),U=t,t=it(r)}else H=t,t=s;return t}function $(){let t,n;for(t=[],n=e.charAt(H),T.test(n)?H++:(n=s,q===0&&Q(we)),n===s&&(n=Pt());n!==s;)t.push(n),n=e.charAt(H),T.test(n)?H++:(n=s,q===0&&Q(we)),n===s&&(n=Pt());return t}function Pt(){let t,n,r,i,a,o;if(t=H,e.charCodeAt(H)===37?(n=`%`,H++):(n=s,q===0&&Q(Te)),n!==s){for(r=[],i=H,a=H,q++,o=e.charAt(H),w.test(o)?H++:(o=s,q===0&&Q(V)),q--,o===s?a=void 0:(H=a,a=s),a===s?(H=i,i=s):(e.length>H?(o=e.charAt(H),H++):(o=s,q===0&&Q(j)),o===s?(H=i,i=s):(a=[a,o],i=a));i!==s;)r.push(i),i=H,a=H,q++,o=e.charAt(H),w.test(o)?H++:(o=s,q===0&&Q(V)),q--,o===s?a=void 0:(H=a,a=s),a===s?(H=i,i=s):(e.length>H?(o=e.charAt(H),H++):(o=s,q===0&&Q(j)),o===s?(H=i,i=s):(a=[a,o],i=a));i=e.charAt(H),w.test(i)?H++:(i=s,q===0&&Q(V)),i===s&&(i=null),n=[n,r,i],t=n}else H=t,t=s;return t}n=typeof t?.onWarning==`function`?t.onWarning:null,J=u();let Ft=J!==s&&H===e.length;function It(){throw J!==s&&H<e.length&&Q(ct()),ut(K,G<e.length?ot(G):null,G<e.length?Z(G,G+1):Z(G,G))}if(t.peg$library)return{peg$result:J,peg$currPos:H,peg$FAILED:s,peg$maxFailExpected:K,peg$maxFailPos:G,peg$success:Ft,peg$throw:Ft?void 0:It};if(Ft)return J;It()}t.exports={StartRules:[`DATABASE`],SyntaxError:o,parse:s}}))(),1);const l=[`Black`,`Date`,`Event`,`Result`,`Round`,`Site`,`White`];function u(e,t){if(t?.onWarning)for(let n of e)for(let e of l)e in n.meta||t.onWarning({column:1,line:1,message:`Missing STR tag: ${e}`,offset:0})}const d={0:`0-1`,"0.5":`1/2-1/2`,1:`1-0`,"?":`*`};function f(e,t){if(t?.onWarning)for(let n of e){let e=n.meta.Result,r=d[String(n.result)];e!==void 0&&e!==r&&t.onWarning({column:1,line:1,message:`Result tag "${e}" does not match game termination marker "${r??String(n.result)}"`,offset:0})}}const p=/\[%(?:cal|csl)\s*([^[\]]*)\]/gi,m=/\[%clk\s+(\d+):(\d{2}):(\d{2}(?:\.\d+)?)\]/i,h=/\[%eval\s+(?:#([+-]?\d+)|([+-]?(?:\d+\.?\d*|\.\d+)))(?:,(\d+))?\]/i;function ee(e){let t={},n=e,r=[],i=[];n=n.replaceAll(p,(e,t)=>{for(let e of t.split(`,`).map(e=>e.trim())){let t=e[0]?.toUpperCase()??``;if(!t||!/^[BCGORY]$/.test(t))continue;let n=e.slice(1);n.length===2?i.push({color:t,square:n}):n.length===4&&r.push({color:t,from:n.slice(0,2),to:n.slice(2)})}return``}),r.length>0&&(t.arrows=r),i.length>0&&(t.squares=i);let a=m.exec(n);if(a){let e=a[1]??`0`,r=a[2]??`0`,i=a[3]??`0`,o=Number.parseInt(e,10),s=Number.parseInt(r,10),c=Number.parseFloat(i);t.clock=o*3600+s*60+c,n=n.replace(m,``)}let o=h.exec(n);if(o){let e=o[3]===void 0?void 0:Number.parseInt(o[3],10);o[1]===void 0?o[2]!==void 0&&(t.eval={...e!==void 0&&{depth:e},type:`cp`,value:Number.parseFloat(o[2])}):t.eval={...e!==void 0&&{depth:e},type:`mate`,value:Number.parseInt(o[1],10)},n=n.replace(h,``)}let s=n.replaceAll(/\s+/g,` `).trim();return s.length>0&&(t.comment=s),t}function g(e){for(let t of e)for(let e=1;e<=2;e++){let n=t[e];if(n!==void 0){if(n.comment!==void 0){let e=ee(n.comment);delete n.comment,e.arrows!==void 0&&(n.arrows=e.arrows),e.clock!==void 0&&(n.clock=e.clock),e.eval!==void 0&&(n.eval=e.eval),e.squares!==void 0&&(n.squares=e.squares),e.comment!==void 0&&(n.comment=e.comment)}if(n.variants!==void 0)for(let e of n.variants)g(e)}}}function _(e){for(let t of e)g(t.moves)}function v(e){if(typeof e==`object`&&e&&`message`in e){let t=e,n=t.location?.start;return{column:typeof n?.column==`number`?n.column:1,line:typeof n?.line==`number`?n.line:1,message:String(t.message),offset:typeof n?.offset==`number`?n.offset:0}}return{column:1,line:1,message:String(e),offset:0}}function y(e,t){let n=e.replace(/^\uFEFF/,``).replaceAll(/^\s+|\s+$/g,``);try{let e=c.default.parse(n,{onWarning:t?.onWarning});return _(e),u(e,t),f(e,t),e}catch(e){return t?.onError?.(v(e)),[]}}async function*b(e){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)break;n!==void 0&&(yield n)}}finally{t.releaseLock()}}async function*x(e,t){if(`getReader`in e){yield*x(b(e),t);return}let n=``,r=0,i=!1,a=0;function*o(e){let t=/(?:1-0|0-1|1\/2-1\/2|\*)(?=[ \t\n\r]|$)/g,o=0,s=Math.max(0,a-6);for(let e=s;e<n.length;e++){let s=n[e];if(e>=a){if(i){s===`\\`?e++:s===`"`&&(i=!1);continue}if(s===`{`){r++;continue}if(s===`}`){r=Math.max(0,r-1);continue}if(s===`"`&&r===0){i=!0;continue}}if(!i&&r===0&&(s===`1`||s===`0`||s===`*`)){t.lastIndex=e;let r=t.exec(n);if(r&&r.index===e){let t=e+r[0].length;yield n.slice(o,t),o=t,e=t-1}}}if(a=n.length,e&&o<n.length){let e=n.slice(o).trim();e.length>0&&(yield e),n=``,a=0}else n=n.slice(o),a=n.length}for await(let r of e){n.length===0?n=r.replace(/^\uFEFF/,``):n+=r;for(let e of o(!1)){let n=y(e,t);n.length>0&&(yield n[0])}}for(let e of o(!0)){let n=y(e,t);for(let e of n)yield e}}const S=[`Event`,`Site`,`Date`,`Round`,`White`,`Black`,`Result`],te=new Set([`g1`,`g8`]),C=new Set([`c1`,`c8`]);function w(e){let t=[],n=new Set(S);for(let n of S){let r=e[n];r!==void 0&&t.push(`[${n} "${r}"]`)}for(let r of Object.keys(e).toSorted())if(!n.has(r)){let n=e[r];n!==void 0&&t.push(`[${r} "${n}"]`)}return t.join(` `)}function T(e,t){return t.checkmate?e+`#`:t.check?e+`+`:e}function E(e,t){if(e.castling)return te.has(e.to)?T(`O-O`,e):C.has(e.to)?T(`O-O-O`,e):(t?.onWarning?.({column:1,line:1,message:`Invalid castling destination: ${e.to}`,offset:0}),``);let n=``;if(e.piece===`P`){if(e.capture)n+=(e.from??``)+`x`+e.to;else{if(!e.to)return t?.onWarning?.({column:1,line:1,message:`Pawn move missing destination square`,offset:0}),``;n+=e.to}e.promotion!==void 0&&(n+=`=`+e.promotion)}else n+=e.piece,e.from!==void 0&&(n+=e.from),e.capture&&(n+=`x`),n+=e.to;return T(n,e)}function ne(e){let t=Math.round(e*1e3),n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4),i=t%6e4,a=Math.floor(i/1e3),o=i%1e3,s=o===0?String(a).padStart(2,`0`):`${String(a).padStart(2,`0`)}.${String(o).replace(/0+$/,``)}`;return`${String(n)}:${String(r).padStart(2,`0`)}:${s}`}function D(e){let t=`depth`in e&&e.depth!==void 0?`,${e.depth}`:``;return e.type===`mate`?`[%eval #${e.value}${t}]`:`[%eval ${e.value.toFixed(2)}${t}]`}function O(e,t){let n=[];if(e.arrows&&e.arrows.length>0){let t=e.arrows.map(e=>`${e.color}${e.from}${e.to}`);n.push(`[%cal ${t.join(`,`)}]`)}if(e.squares&&e.squares.length>0){let t=e.squares.map(e=>`${e.color}${e.square}`);n.push(`[%csl ${t.join(`,`)}]`)}if(e.clock!==void 0){let r=e.clock;r<0&&(t?.onWarning?.({column:1,line:1,message:`Negative clock value: ${r}`,offset:0}),r=0),n.push(`[%clk ${ne(r)}]`)}return e.eval!==void 0&&n.push(D(e.eval)),e.comment!==void 0&&n.push(e.comment),n.length===0?``:`{ ${n.join(` `)} }`}function k(e){return e.annotations!==void 0&&e.annotations.length>0||e.comment!==void 0||e.arrows!==void 0||e.squares!==void 0||e.clock!==void 0||e.eval!==void 0||e.variants!==void 0&&e.variants.length>0}function A(e,t){let n=[];for(let r of e){let[e,i,a]=r;if(i!==void 0){n.push(`${e}.`,E(i,t)),i.annotations&&i.annotations.length>0&&n.push(i.annotations.map(e=>/^\d+$/.test(e)?`$${e}`:e).join(` `));let r=O(i,t);if(r&&n.push(r),i.variants&&i.variants.length>0)for(let e of i.variants)n.push(`(${A(e,t)})`)}if(a!==void 0){(i===void 0||k(i))&&n.push(`${e}...`),n.push(E(a,t)),a.annotations&&a.annotations.length>0&&n.push(a.annotations.map(e=>/^\d+$/.test(e)?`$${e}`:e).join(` `));let r=O(a,t);if(r&&n.push(r),a.variants&&a.variants.length>0)for(let e of a.variants)n.push(`(${A(e,t)})`)}}return n.join(` `)}function j(e,t){let n=w(e.meta),r=A(e.moves,t),i=d[String(e.result)]??`*`;return`${n.length>0?n+` `:``}${r}${r.length>0?` `:``}${i}\n`}function re(e,t){return Array.isArray(e)?e.map(e=>j(e,t)).join(` `):j(e,t)}export{y as default,x as stream,re as stringify};