js-chess-engine 2.1.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +11 -15
  2. package/dist/ai/AIEngine.d.ts +17 -4
  3. package/dist/ai/AIEngine.d.ts.map +1 -1
  4. package/dist/ai/AIEngine.js +58 -10
  5. package/dist/ai/AIEngine.js.map +1 -1
  6. package/dist/ai/Evaluator.d.ts +8 -80
  7. package/dist/ai/Evaluator.d.ts.map +1 -1
  8. package/dist/ai/Evaluator.js +132 -465
  9. package/dist/ai/Evaluator.js.map +1 -1
  10. package/dist/ai/MoveOrdering.d.ts +9 -50
  11. package/dist/ai/MoveOrdering.d.ts.map +1 -1
  12. package/dist/ai/MoveOrdering.js +58 -144
  13. package/dist/ai/MoveOrdering.js.map +1 -1
  14. package/dist/ai/Search.d.ts +13 -47
  15. package/dist/ai/Search.d.ts.map +1 -1
  16. package/dist/ai/Search.js +193 -387
  17. package/dist/ai/Search.js.map +1 -1
  18. package/dist/ai/TranspositionTable.d.ts +2 -2
  19. package/dist/ai/TranspositionTable.d.ts.map +1 -1
  20. package/dist/ai/TranspositionTable.js +41 -12
  21. package/dist/ai/TranspositionTable.js.map +1 -1
  22. package/dist/core/MoveGenerator.d.ts.map +1 -1
  23. package/dist/core/MoveGenerator.js +97 -74
  24. package/dist/core/MoveGenerator.js.map +1 -1
  25. package/dist/core/Position.d.ts +0 -14
  26. package/dist/core/Position.d.ts.map +1 -1
  27. package/dist/core/Position.js +63 -59
  28. package/dist/core/Position.js.map +1 -1
  29. package/dist/index.d.ts +5 -4
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +31 -14
  32. package/dist/index.js.map +1 -1
  33. package/dist/types/ai.types.d.ts +1 -1
  34. package/dist/types/ai.types.d.ts.map +1 -1
  35. package/dist/utils/conversion.d.ts +5 -4
  36. package/dist/utils/conversion.d.ts.map +1 -1
  37. package/dist/utils/conversion.js +27 -13
  38. package/dist/utils/conversion.js.map +1 -1
  39. package/dist/utils/environment.d.ts +1 -1
  40. package/dist/utils/environment.d.ts.map +1 -1
  41. package/dist/utils/environment.js +1 -3
  42. package/dist/utils/environment.js.map +1 -1
  43. package/dist/utils/fen.d.ts.map +1 -1
  44. package/dist/utils/fen.js +20 -0
  45. package/dist/utils/fen.js.map +1 -1
  46. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Search.js","sourceRoot":"","sources":["../../src/ai/Search.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,oCAAuF;AACvF,yDAA8E;AAC9E,2DAAuD;AACvD,2CAA8D;AAE9D,6DAAuE;AACvE,iDAAyD;AACzD,2DAA0D;AAE1D;;GAEG;AACH,MAAa,MAAM;IACP,aAAa,GAAW,CAAC,CAAC;IAC1B,kBAAkB,CAA4B;IAC9C,WAAW,CAAc;IACzB,gBAAgB,GAAY,IAAI,CAAC;IAEzC,YAAY,WAAmB,EAAE;QAC7B,6BAA6B;QAC7B,IAAI,CAAC,kBAAkB,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,uCAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAW,CAAC;QACxF,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAgB;QAC7B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CACR,KAAoB,EACpB,SAAiB,EACjB,aAAqB;QAErB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;QAE/B,2BAA2B;QAC3B,MAAM,KAAK,GAAG,IAAA,kCAAkB,EAAC,KAAK,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,CAAC,iBAAiB;QAClC,CAAC;QAED,IAAI,QAAQ,GAAiB,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,SAAS,GAAG,qBAAS,CAAC;QAE1B,mDAAmD;QACnD,kDAAkD;QAClD,IAAI,IAAI,CAAC,gBAAgB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACzC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC,WAAW,CACZ,KAAK,EACL,WAAW,EACX,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,aAAa,CAAC,EAClC,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC;QAED,wEAAwE;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB;YAC3D,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC;QAEX,4CAA4C;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB;YACtC,CAAC,CAAC,IAAA,yBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAChD,CAAC,CAAC,KAAK,CAAC;QAEhB,+DAA+D;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,4BAA4B;QACrD,MAAM,UAAU,GAA2C,EAAE,CAAC;QAElE,wBAAwB;QACpB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,+DAA+D;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxC,IAAA,iCAAiB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEnC,0CAA0C;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC;YAE5C,qDAAqD;YACrD,MAAM,YAAY,GAAG,UAAU;gBAC3B,CAAC,CAAC,qBAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC;YAEX,2DAA2D;YAC3D,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC1D,0DAA0D;gBAC1D,OAAO;oBACH,IAAI;oBACJ,KAAK,EAAE,qBAAS;oBAChB,KAAK,EAAE,SAAS;oBAChB,aAAa,EAAE,IAAI,CAAC,aAAa;iBACpC,CAAC;YACN,CAAC;YAED,qDAAqD;YACrD,8EAA8E;YAC9E,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3D,MAAM,gBAAgB,GAClB,IAAI,CAAC,cAAc,KAAK,aAAK,CAAC,WAAW;oBACzC,IAAI,CAAC,cAAc,KAAK,aAAK,CAAC,WAAW,CAAC;gBAE9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACpB,wDAAwD;oBACxD,SAAS;gBACb,CAAC;YACL,CAAC;YAED,mBAAmB;YACnB,2EAA2E;YAC3E,qFAAqF;YACrF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CACxB,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,CAAC,EAAE,YAAY;YACf,UAAU,EACV,YAAY,EACZ,qBAAS,EACT,qBAAS,CACZ,CAAC;YAEF,kFAAkF;YAClF,6FAA6F;YAC7F,+EAA+E;YAC/E,IAAI,UAAU,GAAG,KAAK,CAAC;YAEvB,qEAAqE;YACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,MAAM,OAAO,GAAG,QAAQ,KAAK,aAAK,CAAC,WAAW,IAAI,QAAQ,KAAK,aAAK,CAAC,WAAW,CAAC;YACjF,MAAM,MAAM,GAAG,QAAQ,KAAK,aAAK,CAAC,UAAU,IAAI,QAAQ,KAAK,aAAK,CAAC,UAAU,CAAC;YAC9E,MAAM,QAAQ,GAAG,QAAQ,KAAK,aAAK,CAAC,YAAY,IAAI,QAAQ,KAAK,aAAK,CAAC,YAAY,CAAC;YACpF,MAAM,QAAQ,GAAG,QAAQ,KAAK,aAAK,CAAC,YAAY,IAAI,QAAQ,KAAK,aAAK,CAAC,YAAY,CAAC;YACpF,MAAM,MAAM,GAAG,QAAQ,KAAK,aAAK,CAAC,UAAU,IAAI,QAAQ,KAAK,aAAK,CAAC,UAAU,CAAC;YAC9E,MAAM,MAAM,GAAG,QAAQ,KAAK,aAAK,CAAC,UAAU,IAAI,QAAQ,KAAK,aAAK,CAAC,UAAU,CAAC;YAE9E,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,WAAW,KAAK,qBAAa,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAa,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAa,CAAC,KAAK,CAAC;YACtG,MAAM,kBAAkB,GAAG,IAAA,iCAAgB,EAAC,SAAS,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;YACxF,IAAI,kBAAkB,EAAE,CAAC;gBAErB,sEAAsE;gBACtE,8CAA8C;gBAC9C,4CAA4C;gBAC5C,uGAAuG;gBACvG,gFAAgF;gBAChF,wGAAwG;gBACxG,EAAE;gBACF,2CAA2C;gBAC3C,0DAA0D;gBAC1D,0DAA0D;gBAC1D,wGAAwG;gBACxG,oFAAoF;gBACpF,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxD,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC;gBACzC,MAAM,iBAAiB,GAAG,cAAc,IAAI,SAAS,CAAC;gBACtD,MAAM,gBAAgB,GAAG,SAAS,IAAI,CAAC,cAAc,CAAC;gBACtD,MAAM,eAAe,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,8BAA8B;gBAEzE,mCAAmC;gBACnC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEhG,IAAI,CAAC,SAAS,EAAE,CAAC;wBACb,4BAA4B;wBAC5B,UAAU,IAAI,WAAW,CAAC;oBAC9B,CAAC;yBAAM,IAAI,iBAAiB,EAAE,CAAC;wBAC3B,sDAAsD;wBACtD,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;oBAChD,CAAC;yBAAM,IAAI,gBAAgB,IAAI,eAAe,EAAE,CAAC;wBAC7C,4EAA4E;wBAC5E,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;oBAChD,CAAC;oBACD,uEAAuE;gBAC3E,CAAC;YACL,CAAC;YAED,6CAA6C;YAC7C,+FAA+F;YAC/F,IAAI,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,SAAS,EAAE,CAAC;gBAClC,UAAU,IAAI,GAAG,CAAC;YACtB,CAAC;YAED,qDAAqD;YACrD,yEAAyE;YACzE,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,2BAA2B;YAC5E,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;gBAC1B,UAAU,IAAI,EAAE,CAAC,CAAC,oCAAoC;YAC1D,CAAC;YAED,4CAA4C;YAC5C,mDAAmD;YACnD,IAAI,MAAM,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBAE3B,+EAA+E;gBAC/E,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,cAAc;gBAClE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC1D,MAAM,kBAAkB,GAAG,CAAC,WAAW,KAAK,qBAAa,CAAC,KAAK,IAAI,QAAQ,KAAK,CAAC,CAAC;oBACvD,CAAC,WAAW,KAAK,qBAAa,CAAC,KAAK,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC;gBAEnF,IAAI,aAAa,IAAI,eAAe,IAAI,kBAAkB,EAAE,CAAC;oBACzD,UAAU,IAAI,EAAE,CAAC,CAAC,+BAA+B;gBACrD,CAAC;YACL,CAAC;YAED,gBAAgB;YAChB,IAAI,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAE,oCAAoC;gBAC5E,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,GAAG,QAAQ,GAAG,QAAQ,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;gBAC5D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,oBAAoB;YACpB,wFAAwF;YACxF,UAAU;YACV,cAAc;YACd,gBAAgB;YAChB,YAAY;YACZ,MAAM,UAAU,GACZ,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,cAAc,GAChB,CAAC,QAAQ,CAAC,KAAK,GAAG,gBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,CAAC,QAAQ,CAAC,KAAK,GAAG,gBAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAE,QAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/C,kFAAkF;YAClF,qCAAqC;YACpC,IAAY,CAAC,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC;YAEjD,IAAI,UAAU,GAAG,SAAS,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC;gBACtF,SAAS,GAAG,UAAU,CAAC;gBACvB,QAAQ,GAAG,IAAI,CAAC;YACpB,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CACzB,KAAK,CAAC,WAAW,EACjB,SAAS,EACT,SAAS,EACT,gCAAW,CAAC,KAAK,EACjB,QAAQ,CACX,CAAC;QACN,CAAC;QAED,eAAe;QACf,IAAI,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC;YACrE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7C,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,WAAW,CACf,KAAoB,EACpB,WAA0B,EAC1B,SAAiB,EACjB,aAAqB,EACrB,KAAqB;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YAClC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,YAAY,GAAG,IAAA,yBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAEpE,IAAI,QAAQ,GAAiB,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,SAAS,GAAG,qBAAS,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxC,IAAA,iCAAiB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,UAAU;gBAC3B,CAAC,CAAC,qBAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC;YAEX,2DAA2D;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CACxB,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,CAAC,EACD,UAAU,EACV,YAAY,EACZ,qBAAS,EACT,qBAAS,CACZ,CAAC;YAEF,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACpB,SAAS,GAAG,KAAK,CAAC;gBAClB,QAAQ,GAAG,IAAI,CAAC;YACpB,CAAC;QACL,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CACzB,KAAK,CAAC,WAAW,EACjB,SAAS,EACT,SAAS,EACT,gCAAW,CAAC,KAAK,EACjB,QAAQ,CACX,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,SAAS,CACb,KAAoB,EACpB,eAA8B,EAC9B,SAAiB,EACjB,aAAqB,EACrB,KAAa,EACb,UAAmB,EACnB,YAA0B,EAC1B,KAAY,EACZ,IAAW;QAEX,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,mEAAmE;QACnE,4CAA4C;QAC5C,MAAM,aAAa,GAAG,KAAK,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC;QAE1B,wBAAwB;QACxB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,qBAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CACzC,KAAK,CAAC,WAAW,EACjB,SAAS,GAAG,KAAK,GAAG,CAAC,EACrB,KAAK,EACL,IAAI,CACP,CAAC;YAEF,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;gBACpD,wBAAwB;gBACxB,IAAI,OAAO,CAAC,IAAI,KAAK,gCAAW,CAAC,KAAK,EAAE,CAAC;oBACrC,OAAO,OAAO,CAAC,KAAK,CAAC;gBACzB,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,gCAAW,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;oBACpE,OAAO,OAAO,CAAC,KAAK,CAAC;gBACzB,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,gCAAW,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;oBACrE,OAAO,OAAO,CAAC,KAAK,CAAC;gBACzB,CAAC;YACL,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,MAAM,OAAO,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC;QAErC,mDAAmD;QACnD,IAAI,KAAK,GAAG,aAAa,IAAI,OAAO,EAAE,CAAC;YACnC,YAAY,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,6CAA6C;aACxC,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,UAAU,IAAI,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC;YAClE,YAAY,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBACxB,OAAO,YAAY,CAAC;YACxB,CAAC;YACD,OAAO,qBAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACtD,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,GAAG,IAAA,kCAAkB,EAAC,KAAK,CAAC,CAAC;QAExC,wEAAwE;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB;YAC3D,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC;QAEX,iCAAiC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB;YACtC,CAAC,CAAC,IAAA,yBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;YACpD,CAAC,CAAC,KAAK,CAAC;QAEZ,8CAA8C;QAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC;QACpD,IAAI,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,CAAC,CAAC,qBAAS,CAAC;QACrD,IAAI,QAAQ,GAAwB,IAAI,CAAC;QACzC,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,mBAAmB;QACnB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,eAAe;gBAAE,MAAM;YAE3B,+DAA+D;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxC,IAAA,iCAAiB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEnC,sCAAsC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC;YAEhD,6BAA6B;YAC7B,MAAM,gBAAgB,GAAG,cAAc;gBACnC,CAAC,CAAC,qBAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;gBAChD,CAAC,CAAC,IAAI,CAAC;YAEX,mBAAmB;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CACxB,SAAS,EACT,eAAe,EACf,SAAS,EACT,aAAa,EACb,KAAK,GAAG,CAAC,EACT,cAAc,EACd,gBAAgB,EAChB,KAAK,EACL,IAAI,CACP,CAAC;YAEF,6BAA6B;YAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,qBAAS,GAAG,GAAG,EAAE,CAAC;gBACrC,eAAe,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,+BAA+B;YAC/B,IAAI,YAAY,EAAE,CAAC;gBACf,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;oBACpB,SAAS,GAAG,KAAK,CAAC;oBAClB,QAAQ,GAAG,IAAI,CAAC;gBACpB,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;oBACpB,SAAS,GAAG,KAAK,CAAC;oBAClB,QAAQ,GAAG,IAAI,CAAC;gBACpB,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YAED,oBAAoB;YACpB,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBAChB,sDAAsD;gBACtD,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM,CAAC,QAAQ;YACnB,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,IAAI,QAAQ,EAAE,CAAC;YAC/D,IAAI,SAAsB,CAAC;YAC3B,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;gBAC7B,SAAS,GAAG,gCAAW,CAAC,WAAW,CAAC;YACxC,CAAC;iBAAM,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;gBACnC,SAAS,GAAG,gCAAW,CAAC,WAAW,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACJ,SAAS,GAAG,gCAAW,CAAC,KAAK,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,kBAAkB,CAAC,KAAK,CACzB,KAAK,CAAC,WAAW,EACjB,SAAS,GAAG,KAAK,GAAG,CAAC,EACrB,SAAS,EACT,SAAS,EACT,QAAQ,CACX,CAAC;QACN,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACK,SAAS,CAAC,KAAoB;QAClC,OAAO;YACH,OAAO,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;YACrC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,cAAc,EAAE,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE;YAC3C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC,CAAC;IACN,CAAC;CACJ;AAvjBD,wBAujBC"}
1
+ {"version":3,"file":"Search.js","sourceRoot":"","sources":["../../src/ai/Search.ts"],"names":[],"mappings":"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"}
@@ -52,7 +52,7 @@ export declare class TranspositionTable {
52
52
  * @param type - Entry type
53
53
  * @param bestMove - Best move found
54
54
  */
55
- store(zobristHash: bigint, depth: number, score: Score, type: TTEntryType, bestMove: InternalMove | null): void;
55
+ store(zobristHash: bigint, depth: number, score: Score, type: TTEntryType, bestMove: InternalMove | null, ply?: number): void;
56
56
  /**
57
57
  * Probe the transposition table
58
58
  *
@@ -62,7 +62,7 @@ export declare class TranspositionTable {
62
62
  * @param beta - Beta bound
63
63
  * @returns Entry if found and usable, null otherwise
64
64
  */
65
- probe(zobristHash: bigint, depth: number, alpha: Score, beta: Score): TTEntry | null;
65
+ probe(zobristHash: bigint, depth: number, alpha: Score, beta: Score, ply?: number): TTEntry | null;
66
66
  /**
67
67
  * Get best move from transposition table (for move ordering)
68
68
  *
@@ -1 +1 @@
1
- {"version":3,"file":"TranspositionTable.d.ts","sourceRoot":"","sources":["../../src/ai/TranspositionTable.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;GAEG;AACH,oBAAY,WAAW;IACnB,KAAK,IAAI,CAAO,cAAc;IAC9B,WAAW,IAAI,CAAE,2BAA2B;IAC5C,WAAW,IAAI;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAE3B;;;;OAIG;gBACS,MAAM,GAAE,MAAW;IAW/B;;;;;;;;OAQG;IACH,KAAK,CACD,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,YAAY,GAAG,IAAI,GAC9B,IAAI;IA2BP;;;;;;;;OAQG;IACH,KAAK,CACD,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,KAAK,GACZ,OAAO,GAAG,IAAI;IA0CjB;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAWrD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAKhB;;;;OAIG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAW9E"}
1
+ {"version":3,"file":"TranspositionTable.d.ts","sourceRoot":"","sources":["../../src/ai/TranspositionTable.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AA0B1C;;GAEG;AACH,oBAAY,WAAW;IACnB,KAAK,IAAI,CAAO,cAAc;IAC9B,WAAW,IAAI,CAAE,2BAA2B;IAC5C,WAAW,IAAI;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAE3B;;;;OAIG;gBACS,MAAM,GAAE,MAAW;IAW/B;;;;;;;;OAQG;IACH,KAAK,CACD,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,YAAY,GAAG,IAAI,EAC7B,GAAG,GAAE,MAAU,GAChB,IAAI;IA2BP;;;;;;;;OAQG;IACH,KAAK,CACD,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,KAAK,EACX,GAAG,GAAE,MAAU,GAChB,OAAO,GAAG,IAAI;IA8CjB;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAWrD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAKhB;;;;OAIG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAW9E"}
@@ -7,6 +7,31 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.TranspositionTable = exports.TTEntryType = void 0;
10
+ const Evaluator_1 = require("./Evaluator");
11
+ /** Threshold for detecting mate scores. */
12
+ const MATE_THRESHOLD = 500;
13
+ /**
14
+ * Normalize a mate score for TT storage by removing the current ply component.
15
+ * Mate scores use SCORE_MIN + ply (mated) or SCORE_MAX - ply (mating).
16
+ * We store the distance-from-this-node instead.
17
+ */
18
+ function adjustMateScoreForStorage(score, ply) {
19
+ if (score > Evaluator_1.SCORE_MAX - MATE_THRESHOLD)
20
+ return score + ply;
21
+ if (score < Evaluator_1.SCORE_MIN + MATE_THRESHOLD)
22
+ return score - ply;
23
+ return score;
24
+ }
25
+ /**
26
+ * Denormalize a mate score retrieved from TT by adding the current ply.
27
+ */
28
+ function adjustMateScoreForRetrieval(score, ply) {
29
+ if (score > Evaluator_1.SCORE_MAX - MATE_THRESHOLD)
30
+ return score - ply;
31
+ if (score < Evaluator_1.SCORE_MIN + MATE_THRESHOLD)
32
+ return score + ply;
33
+ return score;
34
+ }
10
35
  /**
11
36
  * Types of transposition table entries
12
37
  */
@@ -51,7 +76,7 @@ class TranspositionTable {
51
76
  * @param type - Entry type
52
77
  * @param bestMove - Best move found
53
78
  */
54
- store(zobristHash, depth, score, type, bestMove) {
79
+ store(zobristHash, depth, score, type, bestMove, ply = 0) {
55
80
  const index = this.getIndex(zobristHash);
56
81
  const existingEntry = this.table[index];
57
82
  // Replacement strategy: always replace if:
@@ -67,7 +92,7 @@ class TranspositionTable {
67
92
  this.table[index] = {
68
93
  zobristHash,
69
94
  depth,
70
- score,
95
+ score: adjustMateScoreForStorage(score, ply),
71
96
  type,
72
97
  bestMove,
73
98
  age: this.currentAge,
@@ -83,7 +108,7 @@ class TranspositionTable {
83
108
  * @param beta - Beta bound
84
109
  * @returns Entry if found and usable, null otherwise
85
110
  */
86
- probe(zobristHash, depth, alpha, beta) {
111
+ probe(zobristHash, depth, alpha, beta, ply = 0) {
87
112
  const index = this.getIndex(zobristHash);
88
113
  const entry = this.table[index];
89
114
  // Check if entry exists and matches hash
@@ -96,26 +121,30 @@ class TranspositionTable {
96
121
  this.misses++;
97
122
  return null;
98
123
  }
99
- this.hits++;
100
- // Check if we can use this score
124
+ // Adjust mate scores for the current ply
125
+ const adjustedScore = adjustMateScoreForRetrieval(entry.score, ply);
126
+ // Count hits only when usable for pruning / exact score.
101
127
  switch (entry.type) {
102
128
  case TTEntryType.EXACT:
103
- return entry;
129
+ this.hits++;
130
+ return { ...entry, score: adjustedScore };
104
131
  case TTEntryType.LOWER_BOUND:
105
132
  // Fail-high (score >= beta)
106
- if (entry.score >= beta) {
107
- return entry;
133
+ if (adjustedScore >= beta) {
134
+ this.hits++;
135
+ return { ...entry, score: adjustedScore };
108
136
  }
109
137
  break;
110
138
  case TTEntryType.UPPER_BOUND:
111
139
  // Fail-low (score <= alpha)
112
- if (entry.score <= alpha) {
113
- return entry;
140
+ if (adjustedScore <= alpha) {
141
+ this.hits++;
142
+ return { ...entry, score: adjustedScore };
114
143
  }
115
144
  break;
116
145
  }
117
- // Can't use score, but return entry for move ordering
118
- return entry;
146
+ // Not usable for pruning, but still return for move ordering.
147
+ return { ...entry, score: adjustedScore };
119
148
  }
120
149
  /**
121
150
  * Get best move from transposition table (for move ordering)
@@ -1 +1 @@
1
- {"version":3,"file":"TranspositionTable.js","sourceRoot":"","sources":["../../src/ai/TranspositionTable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TranspositionTable.js","sourceRoot":"","sources":["../../src/ai/TranspositionTable.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MoveGenerator.d.ts","sourceRoot":"","sources":["../../src/core/MoveGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACH,aAAa,EAEb,WAAW,EAGX,YAAY,EAEf,MAAM,UAAU,CAAC;AAmBlB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAoCvE;AA+ED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAiB7E;AAkcD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAG1F;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAG7F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CA+ExF"}
1
+ {"version":3,"file":"MoveGenerator.d.ts","sourceRoot":"","sources":["../../src/core/MoveGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACH,aAAa,EAEb,WAAW,EAGX,YAAY,EAEf,MAAM,UAAU,CAAC;AA4BlB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAoCvE;AA+ED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAiB7E;AAodD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAG1F;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAG7F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CA6HxF"}
@@ -17,6 +17,7 @@ const AttackDetector_1 = require("./AttackDetector");
17
17
  const conversion_1 = require("../utils/conversion");
18
18
  const Board_1 = require("./Board");
19
19
  const constants_1 = require("../utils/constants");
20
+ const zobrist_1 = require("./zobrist");
20
21
  /**
21
22
  * Generate all legal moves for the current position
22
23
  *
@@ -164,9 +165,10 @@ function generatePawnMoves(board, moves, color, _friendlyPieces, enemyPieces) {
164
165
  const empty = ~board.allPieces;
165
166
  if (color === types_1.InternalColor.WHITE) {
166
167
  // Single push
167
- const singlePush = (0, Position_1.shiftNorth)(pawns) & empty;
168
- const singlePushIndices = (0, conversion_1.bitboardToIndices)(singlePush);
169
- for (const to of singlePushIndices) {
168
+ let singlePushBB = (0, Position_1.shiftNorth)(pawns) & empty;
169
+ while (singlePushBB !== 0n) {
170
+ const to = (0, conversion_1.getLowestSetBit)(singlePushBB);
171
+ singlePushBB &= singlePushBB - 1n;
170
172
  const from = (to - 8);
171
173
  const toRank = (0, conversion_1.getRankIndex)(to);
172
174
  // Check for promotion
@@ -183,16 +185,18 @@ function generatePawnMoves(board, moves, color, _friendlyPieces, enemyPieces) {
183
185
  }
184
186
  // Double push
185
187
  const doublePushSource = pawns & 0x000000000000ff00n; // Rank 2
186
- const doublePush = (0, Position_1.shiftNorth)((0, Position_1.shiftNorth)(doublePushSource) & empty) & empty;
187
- const doublePushIndices = (0, conversion_1.bitboardToIndices)(doublePush);
188
- for (const to of doublePushIndices) {
188
+ let doublePushBB = (0, Position_1.shiftNorth)((0, Position_1.shiftNorth)(doublePushSource) & empty) & empty;
189
+ while (doublePushBB !== 0n) {
190
+ const to = (0, conversion_1.getLowestSetBit)(doublePushBB);
191
+ doublePushBB &= doublePushBB - 1n;
189
192
  const from = (to - 16);
190
193
  moves.push(createMove(from, to, pawnPiece, types_1.Piece.EMPTY, types_1.MoveFlag.PAWN_DOUBLE_PUSH));
191
194
  }
192
195
  // Captures north-east
193
- const capturesNE = (0, Position_1.shiftNorthEast)(pawns) & enemyPieces;
194
- const capturesNEIndices = (0, conversion_1.bitboardToIndices)(capturesNE);
195
- for (const to of capturesNEIndices) {
196
+ let capturesNEBB = (0, Position_1.shiftNorthEast)(pawns) & enemyPieces;
197
+ while (capturesNEBB !== 0n) {
198
+ const to = (0, conversion_1.getLowestSetBit)(capturesNEBB);
199
+ capturesNEBB &= capturesNEBB - 1n;
196
200
  const from = (to - 9);
197
201
  const capturedPiece = (0, Board_1.getPiece)(board, to);
198
202
  const toRank = (0, conversion_1.getRankIndex)(to);
@@ -208,9 +212,10 @@ function generatePawnMoves(board, moves, color, _friendlyPieces, enemyPieces) {
208
212
  }
209
213
  }
210
214
  // Captures north-west
211
- const capturesNW = (0, Position_1.shiftNorthWest)(pawns) & enemyPieces;
212
- const capturesNWIndices = (0, conversion_1.bitboardToIndices)(capturesNW);
213
- for (const to of capturesNWIndices) {
215
+ let capturesNWBB = (0, Position_1.shiftNorthWest)(pawns) & enemyPieces;
216
+ while (capturesNWBB !== 0n) {
217
+ const to = (0, conversion_1.getLowestSetBit)(capturesNWBB);
218
+ capturesNWBB &= capturesNWBB - 1n;
214
219
  const from = (to - 7);
215
220
  const capturedPiece = (0, Board_1.getPiece)(board, to);
216
221
  const toRank = (0, conversion_1.getRankIndex)(to);
@@ -231,21 +236,22 @@ function generatePawnMoves(board, moves, color, _friendlyPieces, enemyPieces) {
231
236
  const epTarget = 1n << BigInt(epSquare);
232
237
  // Check if any pawn can capture en passant
233
238
  const canCaptureEP = ((0, Position_1.shiftSouthWest)(epTarget) | (0, Position_1.shiftSouthEast)(epTarget)) & pawns;
234
- if (canCaptureEP !== 0n) {
235
- const attackerIndices = (0, conversion_1.bitboardToIndices)(canCaptureEP);
236
- for (const from of attackerIndices) {
237
- const capturedPiece = types_1.Piece.BLACK_PAWN;
238
- moves.push(createMove(from, epSquare, pawnPiece, capturedPiece, types_1.MoveFlag.EN_PASSANT | types_1.MoveFlag.CAPTURE));
239
- }
239
+ let epBB = canCaptureEP;
240
+ while (epBB !== 0n) {
241
+ const from = (0, conversion_1.getLowestSetBit)(epBB);
242
+ epBB &= epBB - 1n;
243
+ const capturedPiece = types_1.Piece.BLACK_PAWN;
244
+ moves.push(createMove(from, epSquare, pawnPiece, capturedPiece, types_1.MoveFlag.EN_PASSANT | types_1.MoveFlag.CAPTURE));
240
245
  }
241
246
  }
242
247
  }
243
248
  else {
244
249
  // Black pawns (move south)
245
250
  // Single push
246
- const singlePush = (0, Position_1.shiftSouth)(pawns) & empty;
247
- const singlePushIndices = (0, conversion_1.bitboardToIndices)(singlePush);
248
- for (const to of singlePushIndices) {
251
+ let singlePushBB = (0, Position_1.shiftSouth)(pawns) & empty;
252
+ while (singlePushBB !== 0n) {
253
+ const to = (0, conversion_1.getLowestSetBit)(singlePushBB);
254
+ singlePushBB &= singlePushBB - 1n;
249
255
  const from = (to + 8);
250
256
  const toRank = (0, conversion_1.getRankIndex)(to);
251
257
  // Check for promotion
@@ -262,16 +268,18 @@ function generatePawnMoves(board, moves, color, _friendlyPieces, enemyPieces) {
262
268
  }
263
269
  // Double push
264
270
  const doublePushSource = pawns & 0x00ff000000000000n; // Rank 7
265
- const doublePush = (0, Position_1.shiftSouth)((0, Position_1.shiftSouth)(doublePushSource) & empty) & empty;
266
- const doublePushIndices = (0, conversion_1.bitboardToIndices)(doublePush);
267
- for (const to of doublePushIndices) {
271
+ let doublePushBB = (0, Position_1.shiftSouth)((0, Position_1.shiftSouth)(doublePushSource) & empty) & empty;
272
+ while (doublePushBB !== 0n) {
273
+ const to = (0, conversion_1.getLowestSetBit)(doublePushBB);
274
+ doublePushBB &= doublePushBB - 1n;
268
275
  const from = (to + 16);
269
276
  moves.push(createMove(from, to, pawnPiece, types_1.Piece.EMPTY, types_1.MoveFlag.PAWN_DOUBLE_PUSH));
270
277
  }
271
278
  // Captures south-east
272
- const capturesSE = (0, Position_1.shiftSouthEast)(pawns) & enemyPieces;
273
- const capturesSEIndices = (0, conversion_1.bitboardToIndices)(capturesSE);
274
- for (const to of capturesSEIndices) {
279
+ let capturesSEBB = (0, Position_1.shiftSouthEast)(pawns) & enemyPieces;
280
+ while (capturesSEBB !== 0n) {
281
+ const to = (0, conversion_1.getLowestSetBit)(capturesSEBB);
282
+ capturesSEBB &= capturesSEBB - 1n;
275
283
  const from = (to + 7);
276
284
  const capturedPiece = (0, Board_1.getPiece)(board, to);
277
285
  const toRank = (0, conversion_1.getRankIndex)(to);
@@ -287,9 +295,10 @@ function generatePawnMoves(board, moves, color, _friendlyPieces, enemyPieces) {
287
295
  }
288
296
  }
289
297
  // Captures south-west
290
- const capturesSW = (0, Position_1.shiftSouthWest)(pawns) & enemyPieces;
291
- const capturesSWIndices = (0, conversion_1.bitboardToIndices)(capturesSW);
292
- for (const to of capturesSWIndices) {
298
+ let capturesSWBB = (0, Position_1.shiftSouthWest)(pawns) & enemyPieces;
299
+ while (capturesSWBB !== 0n) {
300
+ const to = (0, conversion_1.getLowestSetBit)(capturesSWBB);
301
+ capturesSWBB &= capturesSWBB - 1n;
293
302
  const from = (to + 9);
294
303
  const capturedPiece = (0, Board_1.getPiece)(board, to);
295
304
  const toRank = (0, conversion_1.getRankIndex)(to);
@@ -310,12 +319,12 @@ function generatePawnMoves(board, moves, color, _friendlyPieces, enemyPieces) {
310
319
  const epTarget = 1n << BigInt(epSquare);
311
320
  // Check if any pawn can capture en passant
312
321
  const canCaptureEP = ((0, Position_1.shiftNorthWest)(epTarget) | (0, Position_1.shiftNorthEast)(epTarget)) & pawns;
313
- if (canCaptureEP !== 0n) {
314
- const attackerIndices = (0, conversion_1.bitboardToIndices)(canCaptureEP);
315
- for (const from of attackerIndices) {
316
- const capturedPiece = types_1.Piece.WHITE_PAWN;
317
- moves.push(createMove(from, epSquare, pawnPiece, capturedPiece, types_1.MoveFlag.EN_PASSANT | types_1.MoveFlag.CAPTURE));
318
- }
322
+ let epBB = canCaptureEP;
323
+ while (epBB !== 0n) {
324
+ const from = (0, conversion_1.getLowestSetBit)(epBB);
325
+ epBB &= epBB - 1n;
326
+ const capturedPiece = types_1.Piece.WHITE_PAWN;
327
+ moves.push(createMove(from, epSquare, pawnPiece, capturedPiece, types_1.MoveFlag.EN_PASSANT | types_1.MoveFlag.CAPTURE));
319
328
  }
320
329
  }
321
330
  }
@@ -330,8 +339,10 @@ function generateKnightMoves(board, moves, color, friendlyPieces) {
330
339
  while (knightsBB !== 0n) {
331
340
  const from = (0, conversion_1.getLowestSetBit)(knightsBB);
332
341
  const attacks = (0, Position_1.getKnightAttacks)(from) & ~friendlyPieces;
333
- const attackIndices = (0, conversion_1.bitboardToIndices)(attacks);
334
- for (const to of attackIndices) {
342
+ let attacksBB = attacks;
343
+ while (attacksBB !== 0n) {
344
+ const to = (0, conversion_1.getLowestSetBit)(attacksBB);
345
+ attacksBB &= attacksBB - 1n;
335
346
  const capturedPiece = (0, Board_1.getPiece)(board, to);
336
347
  const flags = capturedPiece !== types_1.Piece.EMPTY ? types_1.MoveFlag.CAPTURE : types_1.MoveFlag.NONE;
337
348
  moves.push(createMove(from, to, knightPiece, capturedPiece, flags));
@@ -349,8 +360,10 @@ function generateBishopMoves(board, moves, color, friendlyPieces) {
349
360
  while (bishopsBB !== 0n) {
350
361
  const from = (0, conversion_1.getLowestSetBit)(bishopsBB);
351
362
  const attacks = (0, Position_1.getBishopAttacks)(from, board.allPieces) & ~friendlyPieces;
352
- const attackIndices = (0, conversion_1.bitboardToIndices)(attacks);
353
- for (const to of attackIndices) {
363
+ let attacksBB = attacks;
364
+ while (attacksBB !== 0n) {
365
+ const to = (0, conversion_1.getLowestSetBit)(attacksBB);
366
+ attacksBB &= attacksBB - 1n;
354
367
  const capturedPiece = (0, Board_1.getPiece)(board, to);
355
368
  const flags = capturedPiece !== types_1.Piece.EMPTY ? types_1.MoveFlag.CAPTURE : types_1.MoveFlag.NONE;
356
369
  moves.push(createMove(from, to, bishopPiece, capturedPiece, flags));
@@ -368,8 +381,10 @@ function generateRookMoves(board, moves, color, friendlyPieces) {
368
381
  while (rooksBB !== 0n) {
369
382
  const from = (0, conversion_1.getLowestSetBit)(rooksBB);
370
383
  const attacks = (0, Position_1.getRookAttacks)(from, board.allPieces) & ~friendlyPieces;
371
- const attackIndices = (0, conversion_1.bitboardToIndices)(attacks);
372
- for (const to of attackIndices) {
384
+ let attacksBB = attacks;
385
+ while (attacksBB !== 0n) {
386
+ const to = (0, conversion_1.getLowestSetBit)(attacksBB);
387
+ attacksBB &= attacksBB - 1n;
373
388
  const capturedPiece = (0, Board_1.getPiece)(board, to);
374
389
  const flags = capturedPiece !== types_1.Piece.EMPTY ? types_1.MoveFlag.CAPTURE : types_1.MoveFlag.NONE;
375
390
  moves.push(createMove(from, to, rookPiece, capturedPiece, flags));
@@ -387,8 +402,10 @@ function generateQueenMoves(board, moves, color, friendlyPieces) {
387
402
  while (queensBB !== 0n) {
388
403
  const from = (0, conversion_1.getLowestSetBit)(queensBB);
389
404
  const attacks = (0, Position_1.getQueenAttacks)(from, board.allPieces) & ~friendlyPieces;
390
- const attackIndices = (0, conversion_1.bitboardToIndices)(attacks);
391
- for (const to of attackIndices) {
405
+ let attacksBB = attacks;
406
+ while (attacksBB !== 0n) {
407
+ const to = (0, conversion_1.getLowestSetBit)(attacksBB);
408
+ attacksBB &= attacksBB - 1n;
392
409
  const capturedPiece = (0, Board_1.getPiece)(board, to);
393
410
  const flags = capturedPiece !== types_1.Piece.EMPTY ? types_1.MoveFlag.CAPTURE : types_1.MoveFlag.NONE;
394
411
  moves.push(createMove(from, to, queenPiece, capturedPiece, flags));
@@ -406,8 +423,10 @@ function generateKingMoves(board, moves, color, friendlyPieces) {
406
423
  return;
407
424
  const from = (0, conversion_1.getLowestSetBit)(king);
408
425
  const attacks = (0, Position_1.getKingAttacks)(from) & ~friendlyPieces;
409
- const attackIndices = (0, conversion_1.bitboardToIndices)(attacks);
410
- for (const to of attackIndices) {
426
+ let attacksBB = attacks;
427
+ while (attacksBB !== 0n) {
428
+ const to = (0, conversion_1.getLowestSetBit)(attacksBB);
429
+ attacksBB &= attacksBB - 1n;
411
430
  const capturedPiece = (0, Board_1.getPiece)(board, to);
412
431
  const flags = capturedPiece !== types_1.Piece.EMPTY ? types_1.MoveFlag.CAPTURE : types_1.MoveFlag.NONE;
413
432
  moves.push(createMove(from, to, kingPiece, capturedPiece, flags));
@@ -519,50 +538,60 @@ function isMoveLegal(board, from, to) {
519
538
  */
520
539
  function applyMoveComplete(board, move) {
521
540
  const { from, to, piece, capturedPiece, flags, promotionPiece } = move;
541
+ // Snapshot state needed for incremental hash updates
542
+ const oldEnPassant = board.enPassantSquare;
543
+ const oldCastling = { ...board.castlingRights };
522
544
  // Reset en passant square (will be set if this is a double pawn push)
523
545
  board.enPassantSquare = null;
524
- // Handle captures
546
+ // Handle captures (+hash)
525
547
  if (capturedPiece !== types_1.Piece.EMPTY) {
548
+ // Remove captured piece from board and hash
526
549
  (0, Board_1.removePiece)(board, to);
550
+ board.zobristHash = (0, zobrist_1.updateHashCapture)(board.zobristHash, capturedPiece, to);
527
551
  board.halfMoveClock = 0;
528
552
  }
529
553
  else {
530
554
  board.halfMoveClock++;
531
555
  }
532
- // Handle en passant capture
556
+ // Handle en passant capture (+hash)
533
557
  if (flags & types_1.MoveFlag.EN_PASSANT) {
534
558
  const captureSquare = board.turn === types_1.InternalColor.WHITE ? to - 8 : to + 8;
559
+ const capturedPawn = board.turn === types_1.InternalColor.WHITE ? types_1.Piece.BLACK_PAWN : types_1.Piece.WHITE_PAWN;
535
560
  (0, Board_1.removePiece)(board, captureSquare);
561
+ board.zobristHash = (0, zobrist_1.updateHashCapture)(board.zobristHash, capturedPawn, captureSquare);
536
562
  board.halfMoveClock = 0;
537
563
  }
538
- // Handle castling
564
+ // Handle castling rook move (+hash)
539
565
  if (flags & types_1.MoveFlag.CASTLING) {
540
- // Move the rook
541
566
  if (to === constants_1.CASTLING.WHITE_SHORT.kingTo) {
542
- // White kingside
543
567
  (0, Board_1.removePiece)(board, constants_1.CASTLING.WHITE_SHORT.rookFrom);
544
568
  (0, Board_1.setPiece)(board, constants_1.CASTLING.WHITE_SHORT.rookTo, types_1.Piece.WHITE_ROOK);
569
+ board.zobristHash = (0, zobrist_1.updateHashMove)(board.zobristHash, types_1.Piece.WHITE_ROOK, constants_1.CASTLING.WHITE_SHORT.rookFrom, constants_1.CASTLING.WHITE_SHORT.rookTo);
545
570
  }
546
571
  else if (to === constants_1.CASTLING.WHITE_LONG.kingTo) {
547
- // White queenside
548
572
  (0, Board_1.removePiece)(board, constants_1.CASTLING.WHITE_LONG.rookFrom);
549
573
  (0, Board_1.setPiece)(board, constants_1.CASTLING.WHITE_LONG.rookTo, types_1.Piece.WHITE_ROOK);
574
+ board.zobristHash = (0, zobrist_1.updateHashMove)(board.zobristHash, types_1.Piece.WHITE_ROOK, constants_1.CASTLING.WHITE_LONG.rookFrom, constants_1.CASTLING.WHITE_LONG.rookTo);
550
575
  }
551
576
  else if (to === constants_1.CASTLING.BLACK_SHORT.kingTo) {
552
- // Black kingside
553
577
  (0, Board_1.removePiece)(board, constants_1.CASTLING.BLACK_SHORT.rookFrom);
554
578
  (0, Board_1.setPiece)(board, constants_1.CASTLING.BLACK_SHORT.rookTo, types_1.Piece.BLACK_ROOK);
579
+ board.zobristHash = (0, zobrist_1.updateHashMove)(board.zobristHash, types_1.Piece.BLACK_ROOK, constants_1.CASTLING.BLACK_SHORT.rookFrom, constants_1.CASTLING.BLACK_SHORT.rookTo);
555
580
  }
556
581
  else if (to === constants_1.CASTLING.BLACK_LONG.kingTo) {
557
- // Black queenside
558
582
  (0, Board_1.removePiece)(board, constants_1.CASTLING.BLACK_LONG.rookFrom);
559
583
  (0, Board_1.setPiece)(board, constants_1.CASTLING.BLACK_LONG.rookTo, types_1.Piece.BLACK_ROOK);
584
+ board.zobristHash = (0, zobrist_1.updateHashMove)(board.zobristHash, types_1.Piece.BLACK_ROOK, constants_1.CASTLING.BLACK_LONG.rookFrom, constants_1.CASTLING.BLACK_LONG.rookTo);
560
585
  }
561
586
  }
562
- // Move the piece
587
+ // Move the piece (+hash)
563
588
  (0, Board_1.removePiece)(board, from);
564
- // Handle promotion
589
+ board.zobristHash = (0, zobrist_1.updateHashMove)(board.zobristHash, piece, from, to);
590
+ // Handle promotion (piece identity at destination changes)
565
591
  if (flags & types_1.MoveFlag.PROMOTION && promotionPiece) {
592
+ // updateHashMove added the pawn at `to`, swap it with promotion piece.
593
+ board.zobristHash = (0, zobrist_1.removePieceFromHash)(board.zobristHash, piece, to);
594
+ board.zobristHash = (0, zobrist_1.addPieceToHash)(board.zobristHash, promotionPiece, to);
566
595
  (0, Board_1.setPiece)(board, to, promotionPiece);
567
596
  }
568
597
  else {
@@ -579,8 +608,12 @@ function applyMoveComplete(board, move) {
579
608
  }
580
609
  // Update castling rights
581
610
  updateCastlingRights(board, from, to, piece);
582
- // Switch turn
611
+ // Update hash for castling/en-passant state
612
+ board.zobristHash = (0, zobrist_1.updateHashEnPassant)(board.zobristHash, oldEnPassant, board.enPassantSquare);
613
+ board.zobristHash = (0, zobrist_1.updateHashCastling)(board.zobristHash, oldCastling.whiteShort, board.castlingRights.whiteShort, oldCastling.whiteLong, board.castlingRights.whiteLong, oldCastling.blackShort, board.castlingRights.blackShort, oldCastling.blackLong, board.castlingRights.blackLong);
614
+ // Switch turn (+hash)
583
615
  board.turn = board.turn === types_1.InternalColor.WHITE ? types_1.InternalColor.BLACK : types_1.InternalColor.WHITE;
616
+ board.zobristHash = (0, zobrist_1.toggleSide)(board.zobristHash);
584
617
  // Increment full move number after black's move
585
618
  if (board.turn === types_1.InternalColor.WHITE) {
586
619
  board.fullMoveNumber++;
@@ -656,23 +689,13 @@ function updateGameStatus(board) {
656
689
  // Check if the current player's king is attacked by the OPPONENT
657
690
  const opponentColor = currentColor === types_1.InternalColor.WHITE ? types_1.InternalColor.BLACK : types_1.InternalColor.WHITE;
658
691
  const inCheck = (0, AttackDetector_1.isSquareAttacked)(board, kingSquare, opponentColor);
692
+ // Fast status update — only sets isCheck.
693
+ // IMPORTANT: isCheckmate and isStalemate are NOT set here to avoid recursive
694
+ // generateLegalMoves() calls (applyMoveComplete -> updateGameStatus -> generateLegalMoves).
695
+ // The search detects mate/stalemate via moves.length === 0.
696
+ // The public API (Game class) patches these flags via updateConfigStatusFromBoard().
659
697
  board.isCheck = inCheck;
660
- // Check if there are any legal moves
661
- const legalMoves = generateLegalMoves(board);
662
- const hasLegalMoves = legalMoves.length > 0;
663
- if (!hasLegalMoves) {
664
- if (inCheck) {
665
- board.isCheckmate = true;
666
- board.isStalemate = false;
667
- }
668
- else {
669
- board.isCheckmate = false;
670
- board.isStalemate = true;
671
- }
672
- }
673
- else {
674
- board.isCheckmate = false;
675
- board.isStalemate = false;
676
- }
698
+ board.isCheckmate = false;
699
+ board.isStalemate = false;
677
700
  }
678
701
  //# sourceMappingURL=MoveGenerator.js.map