@connectorvol/chessops 0.15.1

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 (93) hide show
  1. package/LICENSE.txt +674 -0
  2. package/README.md +61 -0
  3. package/dist/cjs/attacks.js +152 -0
  4. package/dist/cjs/attacks.js.map +1 -0
  5. package/dist/cjs/board.js +143 -0
  6. package/dist/cjs/board.js.map +1 -0
  7. package/dist/cjs/chess.js +638 -0
  8. package/dist/cjs/chess.js.map +1 -0
  9. package/dist/cjs/compat.js +89 -0
  10. package/dist/cjs/compat.js.map +1 -0
  11. package/dist/cjs/debug.js +103 -0
  12. package/dist/cjs/debug.js.map +1 -0
  13. package/dist/cjs/fen.js +325 -0
  14. package/dist/cjs/fen.js.map +1 -0
  15. package/dist/cjs/index.js +94 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/pgn.js +796 -0
  18. package/dist/cjs/pgn.js.map +1 -0
  19. package/dist/cjs/san.js +174 -0
  20. package/dist/cjs/san.js.map +1 -0
  21. package/dist/cjs/setup.js +167 -0
  22. package/dist/cjs/setup.js.map +1 -0
  23. package/dist/cjs/squareSet.js +206 -0
  24. package/dist/cjs/squareSet.js.map +1 -0
  25. package/dist/cjs/transform.js +57 -0
  26. package/dist/cjs/transform.js.map +1 -0
  27. package/dist/cjs/types.js +24 -0
  28. package/dist/cjs/types.js.map +1 -0
  29. package/dist/cjs/util.js +104 -0
  30. package/dist/cjs/util.js.map +1 -0
  31. package/dist/cjs/variant.js +833 -0
  32. package/dist/cjs/variant.js.map +1 -0
  33. package/dist/esm/attacks.js +140 -0
  34. package/dist/esm/attacks.js.map +1 -0
  35. package/dist/esm/board.js +138 -0
  36. package/dist/esm/board.js.map +1 -0
  37. package/dist/esm/chess.js +624 -0
  38. package/dist/esm/chess.js.map +1 -0
  39. package/dist/esm/compat.js +81 -0
  40. package/dist/esm/compat.js.map +1 -0
  41. package/dist/esm/debug.js +94 -0
  42. package/dist/esm/debug.js.map +1 -0
  43. package/dist/esm/fen.js +308 -0
  44. package/dist/esm/fen.js.map +1 -0
  45. package/dist/esm/index.js +15 -0
  46. package/dist/esm/index.js.map +1 -0
  47. package/dist/esm/pgn.js +769 -0
  48. package/dist/esm/pgn.js.map +1 -0
  49. package/dist/esm/san.js +167 -0
  50. package/dist/esm/san.js.map +1 -0
  51. package/dist/esm/setup.js +157 -0
  52. package/dist/esm/setup.js.map +1 -0
  53. package/dist/esm/squareSet.js +202 -0
  54. package/dist/esm/squareSet.js.map +1 -0
  55. package/dist/esm/transform.js +48 -0
  56. package/dist/esm/transform.js.map +1 -0
  57. package/dist/esm/types.js +19 -0
  58. package/dist/esm/types.js.map +1 -0
  59. package/dist/esm/util.js +87 -0
  60. package/dist/esm/util.js.map +1 -0
  61. package/dist/esm/variant.js +812 -0
  62. package/dist/esm/variant.js.map +1 -0
  63. package/dist/types/attacks.d.ts +58 -0
  64. package/dist/types/board.d.ts +62 -0
  65. package/dist/types/chess.d.ts +82 -0
  66. package/dist/types/compat.d.ts +26 -0
  67. package/dist/types/debug.d.ts +10 -0
  68. package/dist/types/fen.d.ts +40 -0
  69. package/dist/types/index.d.ts +14 -0
  70. package/dist/types/pgn.d.ts +203 -0
  71. package/dist/types/san.d.ts +6 -0
  72. package/dist/types/setup.d.ts +65 -0
  73. package/dist/types/squareSet.d.ts +50 -0
  74. package/dist/types/transform.d.ts +9 -0
  75. package/dist/types/types.d.ts +58 -0
  76. package/dist/types/util.d.ts +21 -0
  77. package/dist/types/variant.d.ts +92 -0
  78. package/package.json +86 -0
  79. package/src/attacks.ts +160 -0
  80. package/src/board.ts +168 -0
  81. package/src/chess.ts +687 -0
  82. package/src/compat.ts +120 -0
  83. package/src/debug.ts +100 -0
  84. package/src/fen.ts +328 -0
  85. package/src/index.ts +85 -0
  86. package/src/pgn.ts +876 -0
  87. package/src/san.ts +190 -0
  88. package/src/setup.ts +203 -0
  89. package/src/squareSet.ts +243 -0
  90. package/src/transform.ts +49 -0
  91. package/src/types.ts +93 -0
  92. package/src/util.ts +116 -0
  93. package/src/variant.ts +939 -0
@@ -0,0 +1,48 @@
1
+ import { Board } from "./board.js";
2
+ import { SquareSet } from "./squareSet.js";
3
+ import { COLORS, ROLES } from "./types.js";
4
+ import { defined } from "./util.js";
5
+ export const flipVertical = (s) => s.bswap64();
6
+ export const flipHorizontal = (s) => {
7
+ const k1 = new SquareSet(0x55555555, 0x55555555);
8
+ const k2 = new SquareSet(0x33333333, 0x33333333);
9
+ const k4 = new SquareSet(0x0f0f0f0f, 0x0f0f0f0f);
10
+ s = s.shr64(1).intersect(k1).union(s.intersect(k1).shl64(1));
11
+ s = s.shr64(2).intersect(k2).union(s.intersect(k2).shl64(2));
12
+ s = s.shr64(4).intersect(k4).union(s.intersect(k4).shl64(4));
13
+ return s;
14
+ };
15
+ export const flipDiagonal = (s) => {
16
+ let t = s.xor(s.shl64(28)).intersect(new SquareSet(0, 0x0f0f0f0f));
17
+ s = s.xor(t.xor(t.shr64(28)));
18
+ t = s.xor(s.shl64(14)).intersect(new SquareSet(0x33330000, 0x33330000));
19
+ s = s.xor(t.xor(t.shr64(14)));
20
+ t = s.xor(s.shl64(7)).intersect(new SquareSet(0x55005500, 0x55005500));
21
+ s = s.xor(t.xor(t.shr64(7)));
22
+ return s;
23
+ };
24
+ export const rotate180 = (s) => s.rbit64();
25
+ export const transformBoard = (board, f) => {
26
+ const b = Board.empty();
27
+ b.occupied = f(board.occupied);
28
+ b.promoted = f(board.promoted);
29
+ for (const color of COLORS)
30
+ b[color] = f(board[color]);
31
+ for (const role of ROLES)
32
+ b[role] = f(board[role]);
33
+ return b;
34
+ };
35
+ export const transformSetup = (setup, f) => {
36
+ var _a, _b;
37
+ return ({
38
+ board: transformBoard(setup.board, f),
39
+ pockets: (_a = setup.pockets) === null || _a === void 0 ? void 0 : _a.clone(),
40
+ turn: setup.turn,
41
+ castlingRights: f(setup.castlingRights),
42
+ epSquare: defined(setup.epSquare) ? f(SquareSet.fromSquare(setup.epSquare)).first() : undefined,
43
+ remainingChecks: (_b = setup.remainingChecks) === null || _b === void 0 ? void 0 : _b.clone(),
44
+ halfmoves: setup.halfmoves,
45
+ fullmoves: setup.fullmoves,
46
+ });
47
+ };
48
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export const FILE_NAMES = ["a", "b", "c", "d", "e", "f", "g", "h"];
2
+ export const RANK_NAMES = ["1", "2", "3", "4", "5", "6", "7", "8"];
3
+ export const ROLE_CHARS = ["q", "n", "r", "b", "p", "k"];
4
+ export const COLORS = ["white", "black"];
5
+ export const ROLES = ["pawn", "knight", "bishop", "rook", "queen", "king"];
6
+ export const CASTLING_SIDES = ["a", "h"];
7
+ export const isDrop = (v) => "role" in v;
8
+ export const isNormal = (v) => "from" in v;
9
+ export const RULES = [
10
+ "chess",
11
+ "antichess",
12
+ "kingofthehill",
13
+ "3check",
14
+ "atomic",
15
+ "horde",
16
+ "racingkings",
17
+ "crazyhouse",
18
+ ];
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAI5E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAQ5E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AASlE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,CAAU,CAAC;AAWlD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAWpF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU,CAAC;AA8BlD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAO,EAAiB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAO,EAAmB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO;IACP,WAAW;IACX,eAAe;IACf,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,aAAa;IACb,YAAY;CACJ,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { FILE_NAMES, isDrop, isNormal, RANK_NAMES, } from "./types.js";
2
+ export const defined = (v) => v !== undefined;
3
+ export const opposite = (color) => (color === "white" ? "black" : "white");
4
+ export const squareRank = (square) => square >> 3;
5
+ export const squareFile = (square) => square & 0x7;
6
+ export const squareFromCoords = (file, rank) => 0 <= file && file < 8 && 0 <= rank && rank < 8 ? file + 8 * rank : undefined;
7
+ export const roleToChar = (role) => {
8
+ switch (role) {
9
+ case "pawn":
10
+ return "p";
11
+ case "knight":
12
+ return "n";
13
+ case "bishop":
14
+ return "b";
15
+ case "rook":
16
+ return "r";
17
+ case "queen":
18
+ return "q";
19
+ case "king":
20
+ return "k";
21
+ }
22
+ };
23
+ export function charToRole(ch) {
24
+ switch (ch.toLowerCase()) {
25
+ case "p":
26
+ return "pawn";
27
+ case "n":
28
+ return "knight";
29
+ case "b":
30
+ return "bishop";
31
+ case "r":
32
+ return "rook";
33
+ case "q":
34
+ return "queen";
35
+ case "k":
36
+ return "king";
37
+ default:
38
+ return;
39
+ }
40
+ }
41
+ export function parseSquare(str) {
42
+ if (str.length !== 2)
43
+ return;
44
+ return squareFromCoords(str.charCodeAt(0) - "a".charCodeAt(0), str.charCodeAt(1) - "1".charCodeAt(0));
45
+ }
46
+ export const makeSquare = (square) => (FILE_NAMES[squareFile(square)] + RANK_NAMES[squareRank(square)]);
47
+ export const parseUci = (str) => {
48
+ if (str[1] === "@" && str.length === 4) {
49
+ const role = charToRole(str[0]);
50
+ const to = parseSquare(str.slice(2));
51
+ if (role && defined(to))
52
+ return { role, to };
53
+ }
54
+ else if (str.length === 4 || str.length === 5) {
55
+ const from = parseSquare(str.slice(0, 2));
56
+ const to = parseSquare(str.slice(2, 4));
57
+ let promotion;
58
+ if (str.length === 5) {
59
+ promotion = charToRole(str[4]);
60
+ if (!promotion)
61
+ return;
62
+ }
63
+ if (defined(from) && defined(to))
64
+ return { from, to, promotion };
65
+ }
66
+ return;
67
+ };
68
+ export const moveEquals = (left, right) => {
69
+ if (left.to !== right.to)
70
+ return false;
71
+ if (isDrop(left))
72
+ return isDrop(right) && left.role === right.role;
73
+ else
74
+ return isNormal(right) && left.from === right.from && left.promotion === right.promotion;
75
+ };
76
+ /**
77
+ * Converts a move to UCI notation, like `g1f3` for a normal move,
78
+ * `a7a8q` for promotion to a queen, and `Q@f7` for a Crazyhouse drop.
79
+ */
80
+ export const makeUci = (move) => isDrop(move)
81
+ ? `${roleToChar(move.role).toUpperCase()}@${makeSquare(move.to)}`
82
+ : makeSquare(move.from) +
83
+ makeSquare(move.to) +
84
+ (move.promotion ? roleToChar(move.promotion) : "");
85
+ export const kingCastlesTo = (color, side) => color === "white" ? (side === "a" ? 2 : 6) : side === "a" ? 58 : 62;
86
+ export const rookCastlesTo = (color, side) => color === "white" ? (side === "a" ? 3 : 5) : side === "a" ? 59 : 61;
87
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}