@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,81 @@
1
+ /**
2
+ * Compatibility with other libraries.
3
+ *
4
+ * Convert between the formats used by chessops,
5
+ * [chessground](https://github.com/lichess-org/chessground),
6
+ * and [scalachess](https://github.com/lichess-org/scalachess).
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import { isDrop } from "./types.js";
11
+ import { makeSquare, squareFile } from "./util.js";
12
+ /**
13
+ * Computes the legal move destinations in the format used by chessground.
14
+ *
15
+ * Includes both possible representations of castling moves (unless
16
+ * `chess960` mode is enabled), so that the `rookCastles` option will work
17
+ * correctly.
18
+ */
19
+ export const chessgroundDests = (pos, opts) => {
20
+ const result = new Map();
21
+ const ctx = pos.ctx();
22
+ for (const [from, squares] of pos.allDests(ctx)) {
23
+ if (squares.nonEmpty()) {
24
+ const d = Array.from(squares, makeSquare);
25
+ if (!(opts === null || opts === void 0 ? void 0 : opts.chess960) && from === ctx.king && squareFile(from) === 4) {
26
+ // Chessground needs both types of castling dests and filters based on
27
+ // a rookCastles setting.
28
+ if (squares.has(0))
29
+ d.push("c1");
30
+ else if (squares.has(56))
31
+ d.push("c8");
32
+ if (squares.has(7))
33
+ d.push("g1");
34
+ else if (squares.has(63))
35
+ d.push("g8");
36
+ }
37
+ result.set(makeSquare(from), d);
38
+ }
39
+ }
40
+ return result;
41
+ };
42
+ export const chessgroundMove = (move) => isDrop(move) ? [makeSquare(move.to)] : [makeSquare(move.from), makeSquare(move.to)];
43
+ export const scalachessCharPair = (move) => isDrop(move)
44
+ ? String.fromCharCode(35 + move.to, 35 + 64 + 8 * 5 + ["queen", "rook", "bishop", "knight", "pawn"].indexOf(move.role))
45
+ : String.fromCharCode(35 + move.from, move.promotion
46
+ ? 35 +
47
+ 64 +
48
+ 8 * ["queen", "rook", "bishop", "knight", "king"].indexOf(move.promotion) +
49
+ squareFile(move.to)
50
+ : 35 + move.to);
51
+ export const lichessRules = (variant) => {
52
+ switch (variant) {
53
+ case "standard":
54
+ case "chess960":
55
+ case "fromPosition":
56
+ return "chess";
57
+ case "threeCheck":
58
+ return "3check";
59
+ case "kingOfTheHill":
60
+ return "kingofthehill";
61
+ case "racingKings":
62
+ return "racingkings";
63
+ default:
64
+ return variant;
65
+ }
66
+ };
67
+ export const lichessVariant = (rules) => {
68
+ switch (rules) {
69
+ case "chess":
70
+ return "standard";
71
+ case "3check":
72
+ return "threeCheck";
73
+ case "kingofthehill":
74
+ return "kingOfTheHill";
75
+ case "racingkings":
76
+ return "racingKings";
77
+ default:
78
+ return rules;
79
+ }
80
+ };
81
+ //# sourceMappingURL=compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.js","sourceRoot":"","sources":["../../src/compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { makePiece } from "./fen.js";
2
+ import { SquareSet } from "./squareSet.js";
3
+ import { ROLES } from "./types.js";
4
+ import { makeSquare, makeUci, opposite, squareRank } from "./util.js";
5
+ export const squareSet = (squares) => {
6
+ const r = [];
7
+ for (let y = 7; y >= 0; y--) {
8
+ for (let x = 0; x < 8; x++) {
9
+ const square = x + y * 8;
10
+ r.push(squares.has(square) ? "1" : ".");
11
+ r.push(x < 7 ? " " : "\n");
12
+ }
13
+ }
14
+ return r.join("");
15
+ };
16
+ export const piece = (piece) => makePiece(piece);
17
+ export const board = (board) => {
18
+ const r = [];
19
+ for (let y = 7; y >= 0; y--) {
20
+ for (let x = 0; x < 8; x++) {
21
+ const square = x + y * 8;
22
+ const p = board.get(square);
23
+ const col = p ? piece(p) : ".";
24
+ r.push(col);
25
+ r.push(x < 7 ? (col.length < 2 ? " " : "") : "\n");
26
+ }
27
+ }
28
+ return r.join("");
29
+ };
30
+ export const square = (sq) => makeSquare(sq);
31
+ export const dests = (dests) => {
32
+ const lines = [];
33
+ for (const [from, to] of dests) {
34
+ lines.push(`${makeSquare(from)}: ${Array.from(to, square).join(" ")}`);
35
+ }
36
+ return lines.join("\n");
37
+ };
38
+ export const perft = (pos, depth, log = false) => {
39
+ if (depth < 1)
40
+ return 1;
41
+ const promotionRoles = ["queen", "knight", "rook", "bishop"];
42
+ if (pos.rules === "antichess")
43
+ promotionRoles.push("king");
44
+ const ctx = pos.ctx();
45
+ const dropDests = pos.dropDests(ctx);
46
+ if (!log && depth === 1 && dropDests.isEmpty()) {
47
+ // Optimization for leaf nodes.
48
+ let nodes = 0;
49
+ for (const [from, to] of pos.allDests(ctx)) {
50
+ nodes += to.size();
51
+ if (pos.board.pawn.has(from)) {
52
+ const backrank = SquareSet.backrank(opposite(pos.turn));
53
+ nodes += to.intersect(backrank).size() * (promotionRoles.length - 1);
54
+ }
55
+ }
56
+ return nodes;
57
+ }
58
+ else {
59
+ let nodes = 0;
60
+ for (const [from, dests] of pos.allDests(ctx)) {
61
+ const promotions = squareRank(from) === (pos.turn === "white" ? 6 : 1) && pos.board.pawn.has(from)
62
+ ? promotionRoles
63
+ : [undefined];
64
+ for (const to of dests) {
65
+ for (const promotion of promotions) {
66
+ const child = pos.clone();
67
+ const move = { from, to, promotion };
68
+ child.play(move);
69
+ const children = perft(child, depth - 1, false);
70
+ if (log)
71
+ console.log(makeUci(move), children);
72
+ nodes += children;
73
+ }
74
+ }
75
+ }
76
+ if (pos.pockets) {
77
+ for (const role of ROLES) {
78
+ if (pos.pockets[pos.turn][role] > 0) {
79
+ for (const to of role === "pawn" ? dropDests.diff(SquareSet.backranks()) : dropDests) {
80
+ const child = pos.clone();
81
+ const move = { role, to };
82
+ child.play(move);
83
+ const children = perft(child, depth - 1, false);
84
+ if (log)
85
+ console.log(makeUci(move), children);
86
+ nodes += children;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return nodes;
92
+ }
93
+ };
94
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ import { Result } from "@badrap/result";
2
+ import { Board } from "./board.js";
3
+ import { Material, RemainingChecks } from "./setup.js";
4
+ import { SquareSet } from "./squareSet.js";
5
+ import { COLORS, FILE_NAMES, ROLES } from "./types.js";
6
+ import { charToRole, defined, makeSquare, parseSquare, roleToChar, squareFile, squareFromCoords, } from "./util.js";
7
+ export const INITIAL_BOARD_FEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR";
8
+ export const INITIAL_EPD = INITIAL_BOARD_FEN + " w KQkq -";
9
+ export const INITIAL_FEN = INITIAL_EPD + " 0 1";
10
+ export const EMPTY_BOARD_FEN = "8/8/8/8/8/8/8/8";
11
+ export const EMPTY_EPD = EMPTY_BOARD_FEN + " w - -";
12
+ export const EMPTY_FEN = EMPTY_EPD + " 0 1";
13
+ export var InvalidFen;
14
+ (function (InvalidFen) {
15
+ InvalidFen["Fen"] = "ERR_FEN";
16
+ InvalidFen["Board"] = "ERR_BOARD";
17
+ InvalidFen["Pockets"] = "ERR_POCKETS";
18
+ InvalidFen["Turn"] = "ERR_TURN";
19
+ InvalidFen["Castling"] = "ERR_CASTLING";
20
+ InvalidFen["EpSquare"] = "ERR_EP_SQUARE";
21
+ InvalidFen["RemainingChecks"] = "ERR_REMAINING_CHECKS";
22
+ InvalidFen["Halfmoves"] = "ERR_HALFMOVES";
23
+ InvalidFen["Fullmoves"] = "ERR_FULLMOVES";
24
+ })(InvalidFen || (InvalidFen = {}));
25
+ export class FenError extends Error {
26
+ }
27
+ const nthIndexOf = (haystack, needle, n) => {
28
+ let index = haystack.indexOf(needle);
29
+ while (n-- > 0) {
30
+ if (index === -1)
31
+ break;
32
+ index = haystack.indexOf(needle, index + needle.length);
33
+ }
34
+ return index;
35
+ };
36
+ const parseSmallUint = (str) => /^\d{1,4}$/.test(str) ? parseInt(str, 10) : undefined;
37
+ const charToPiece = (ch) => {
38
+ const role = charToRole(ch);
39
+ return role && { role, color: ch.toLowerCase() === ch ? "black" : "white" };
40
+ };
41
+ export const parseBoardFen = (boardPart) => {
42
+ const board = Board.empty();
43
+ let rank = 7;
44
+ let file = 0;
45
+ for (let i = 0; i < boardPart.length; i++) {
46
+ const c = boardPart[i];
47
+ if (c === "/" && file === 8) {
48
+ file = 0;
49
+ rank--;
50
+ }
51
+ else {
52
+ const step = parseInt(c, 10);
53
+ if (step > 0)
54
+ file += step;
55
+ else {
56
+ if (file >= 8 || rank < 0)
57
+ return Result.err(new FenError(InvalidFen.Board));
58
+ const square = file + rank * 8;
59
+ const piece = charToPiece(c);
60
+ if (!piece)
61
+ return Result.err(new FenError(InvalidFen.Board));
62
+ if (boardPart[i + 1] === "~") {
63
+ piece.promoted = true;
64
+ i++;
65
+ }
66
+ board.set(square, piece);
67
+ file++;
68
+ }
69
+ }
70
+ }
71
+ if (rank !== 0 || file !== 8)
72
+ return Result.err(new FenError(InvalidFen.Board));
73
+ return Result.ok(board);
74
+ };
75
+ export const parsePockets = (pocketPart) => {
76
+ if (pocketPart.length > 64)
77
+ return Result.err(new FenError(InvalidFen.Pockets));
78
+ const pockets = Material.empty();
79
+ for (const c of pocketPart) {
80
+ const piece = charToPiece(c);
81
+ if (!piece)
82
+ return Result.err(new FenError(InvalidFen.Pockets));
83
+ pockets[piece.color][piece.role]++;
84
+ }
85
+ return Result.ok(pockets);
86
+ };
87
+ export const parseCastlingFen = (board, castlingPart) => {
88
+ let castlingRights = SquareSet.empty();
89
+ if (castlingPart === "-")
90
+ return Result.ok(castlingRights);
91
+ for (const c of castlingPart) {
92
+ const lower = c.toLowerCase();
93
+ const color = c === lower ? "black" : "white";
94
+ const rank = color === "white" ? 0 : 7;
95
+ if ("a" <= lower && lower <= "h") {
96
+ castlingRights = castlingRights.with(squareFromCoords(lower.charCodeAt(0) - "a".charCodeAt(0), rank));
97
+ }
98
+ else if (lower === "k" || lower === "q") {
99
+ const rooksAndKings = board[color]
100
+ .intersect(SquareSet.backrank(color))
101
+ .intersect(board.rook.union(board.king));
102
+ const candidate = lower === "k" ? rooksAndKings.last() : rooksAndKings.first();
103
+ castlingRights = castlingRights.with(defined(candidate) && board.rook.has(candidate)
104
+ ? candidate
105
+ : squareFromCoords(lower === "k" ? 7 : 0, rank));
106
+ }
107
+ else
108
+ return Result.err(new FenError(InvalidFen.Castling));
109
+ }
110
+ if (COLORS.some((color) => SquareSet.backrank(color).intersect(castlingRights).size() > 2)) {
111
+ return Result.err(new FenError(InvalidFen.Castling));
112
+ }
113
+ return Result.ok(castlingRights);
114
+ };
115
+ export const parseRemainingChecks = (part) => {
116
+ const parts = part.split("+");
117
+ if (parts.length === 3 && parts[0] === "") {
118
+ const white = parseSmallUint(parts[1]);
119
+ const black = parseSmallUint(parts[2]);
120
+ if (!defined(white) || white > 3 || !defined(black) || black > 3) {
121
+ return Result.err(new FenError(InvalidFen.RemainingChecks));
122
+ }
123
+ return Result.ok(new RemainingChecks(3 - white, 3 - black));
124
+ }
125
+ else if (parts.length === 2) {
126
+ const white = parseSmallUint(parts[0]);
127
+ const black = parseSmallUint(parts[1]);
128
+ if (!defined(white) || white > 3 || !defined(black) || black > 3) {
129
+ return Result.err(new FenError(InvalidFen.RemainingChecks));
130
+ }
131
+ return Result.ok(new RemainingChecks(white, black));
132
+ }
133
+ else
134
+ return Result.err(new FenError(InvalidFen.RemainingChecks));
135
+ };
136
+ export const parseFen = (fen) => {
137
+ const parts = fen.split(/[\s_]+/);
138
+ const boardPart = parts.shift();
139
+ // Board and pockets
140
+ let board;
141
+ let pockets = Result.ok(undefined);
142
+ if (boardPart.endsWith("]")) {
143
+ const pocketStart = boardPart.indexOf("[");
144
+ if (pocketStart === -1)
145
+ return Result.err(new FenError(InvalidFen.Fen));
146
+ board = parseBoardFen(boardPart.slice(0, pocketStart));
147
+ pockets = parsePockets(boardPart.slice(pocketStart + 1, -1));
148
+ }
149
+ else {
150
+ const pocketStart = nthIndexOf(boardPart, "/", 7);
151
+ if (pocketStart === -1)
152
+ board = parseBoardFen(boardPart);
153
+ else {
154
+ board = parseBoardFen(boardPart.slice(0, pocketStart));
155
+ pockets = parsePockets(boardPart.slice(pocketStart + 1));
156
+ }
157
+ }
158
+ // Turn
159
+ let turn;
160
+ const turnPart = parts.shift();
161
+ if (!defined(turnPart) || turnPart === "w")
162
+ turn = "white";
163
+ else if (turnPart === "b")
164
+ turn = "black";
165
+ else
166
+ return Result.err(new FenError(InvalidFen.Turn));
167
+ return board.chain((board) => {
168
+ // Castling
169
+ const castlingPart = parts.shift();
170
+ const castlingRights = defined(castlingPart)
171
+ ? parseCastlingFen(board, castlingPart)
172
+ : Result.ok(SquareSet.empty());
173
+ // En passant square
174
+ const epPart = parts.shift();
175
+ let epSquare;
176
+ if (defined(epPart) && epPart !== "-") {
177
+ epSquare = parseSquare(epPart);
178
+ if (!defined(epSquare))
179
+ return Result.err(new FenError(InvalidFen.EpSquare));
180
+ }
181
+ // Halfmoves or remaining checks
182
+ let halfmovePart = parts.shift();
183
+ let earlyRemainingChecks;
184
+ if (defined(halfmovePart) && halfmovePart.includes("+")) {
185
+ earlyRemainingChecks = parseRemainingChecks(halfmovePart);
186
+ halfmovePart = parts.shift();
187
+ }
188
+ const halfmoves = defined(halfmovePart) ? parseSmallUint(halfmovePart) : 0;
189
+ if (!defined(halfmoves))
190
+ return Result.err(new FenError(InvalidFen.Halfmoves));
191
+ const fullmovesPart = parts.shift();
192
+ const fullmoves = defined(fullmovesPart) ? parseSmallUint(fullmovesPart) : 1;
193
+ if (!defined(fullmoves))
194
+ return Result.err(new FenError(InvalidFen.Fullmoves));
195
+ const remainingChecksPart = parts.shift();
196
+ let remainingChecks = Result.ok(undefined);
197
+ if (defined(remainingChecksPart)) {
198
+ if (defined(earlyRemainingChecks))
199
+ return Result.err(new FenError(InvalidFen.RemainingChecks));
200
+ remainingChecks = parseRemainingChecks(remainingChecksPart);
201
+ }
202
+ else if (defined(earlyRemainingChecks)) {
203
+ remainingChecks = earlyRemainingChecks;
204
+ }
205
+ if (parts.length > 0)
206
+ return Result.err(new FenError(InvalidFen.Fen));
207
+ return pockets.chain((pockets) => castlingRights.chain((castlingRights) => remainingChecks.map((remainingChecks) => {
208
+ return {
209
+ board,
210
+ pockets,
211
+ turn,
212
+ castlingRights,
213
+ remainingChecks,
214
+ epSquare,
215
+ halfmoves,
216
+ fullmoves: Math.max(1, fullmoves),
217
+ };
218
+ })));
219
+ });
220
+ };
221
+ export const parsePiece = (str) => {
222
+ if (!str)
223
+ return;
224
+ const piece = charToPiece(str[0]);
225
+ if (!piece)
226
+ return;
227
+ if (str.length === 2 && str[1] === "~")
228
+ piece.promoted = true;
229
+ else if (str.length > 1)
230
+ return;
231
+ return piece;
232
+ };
233
+ export const makePiece = (piece) => {
234
+ let r = roleToChar(piece.role);
235
+ if (piece.color === "white")
236
+ r = r.toUpperCase();
237
+ if (piece.promoted)
238
+ r += "~";
239
+ return r;
240
+ };
241
+ export const makeBoardFen = (board) => {
242
+ let fen = "";
243
+ let empty = 0;
244
+ for (let rank = 7; rank >= 0; rank--) {
245
+ for (let file = 0; file < 8; file++) {
246
+ const square = file + rank * 8;
247
+ const piece = board.get(square);
248
+ if (!piece)
249
+ empty++;
250
+ else {
251
+ if (empty > 0) {
252
+ fen += empty;
253
+ empty = 0;
254
+ }
255
+ fen += makePiece(piece);
256
+ }
257
+ if (file === 7) {
258
+ if (empty > 0) {
259
+ fen += empty;
260
+ empty = 0;
261
+ }
262
+ if (rank !== 0)
263
+ fen += "/";
264
+ }
265
+ }
266
+ }
267
+ return fen;
268
+ };
269
+ export const makePocket = (material) => ROLES.map((role) => roleToChar(role).repeat(material[role])).join("");
270
+ export const makePockets = (pocket) => makePocket(pocket.white).toUpperCase() + makePocket(pocket.black);
271
+ export const makeCastlingFen = (board, castlingRights) => {
272
+ let fen = "";
273
+ for (const color of COLORS) {
274
+ const backrank = SquareSet.backrank(color);
275
+ let king = board.kingOf(color);
276
+ if (defined(king) && !backrank.has(king))
277
+ king = undefined;
278
+ const candidates = board.pieces(color, "rook").intersect(backrank);
279
+ for (const rook of castlingRights.intersect(backrank).reversed()) {
280
+ if (rook === candidates.first() && defined(king) && rook < king) {
281
+ fen += color === "white" ? "Q" : "q";
282
+ }
283
+ else if (rook === candidates.last() && defined(king) && king < rook) {
284
+ fen += color === "white" ? "K" : "k";
285
+ }
286
+ else {
287
+ const file = FILE_NAMES[squareFile(rook)];
288
+ fen += color === "white" ? file.toUpperCase() : file;
289
+ }
290
+ }
291
+ }
292
+ return fen || "-";
293
+ };
294
+ export const makeRemainingChecks = (checks) => `${checks.white}+${checks.black}`;
295
+ export const makeFen = (setup, opts) => [
296
+ makeBoardFen(setup.board) + (setup.pockets ? `[${makePockets(setup.pockets)}]` : ""),
297
+ setup.turn[0],
298
+ makeCastlingFen(setup.board, setup.castlingRights),
299
+ defined(setup.epSquare) ? makeSquare(setup.epSquare) : "-",
300
+ ...(setup.remainingChecks ? [makeRemainingChecks(setup.remainingChecks)] : []),
301
+ ...((opts === null || opts === void 0 ? void 0 : opts.epd)
302
+ ? []
303
+ : [
304
+ Math.max(0, Math.min(setup.halfmoves, 9999)),
305
+ Math.max(1, Math.min(setup.fullmoves, 9999)),
306
+ ]),
307
+ ].join(" ");
308
+ //# sourceMappingURL=fen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fen.js","sourceRoot":"","sources":["../../src/fen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { CASTLING_SIDES, COLORS, FILE_NAMES, isDrop, isNormal, RANK_NAMES, ROLE_CHARS, ROLES, } from "./types.js";
2
+ export { charToRole, defined, kingCastlesTo, makeSquare, makeUci, opposite, parseSquare, parseUci, roleToChar, squareFile, squareRank, } from "./util.js";
3
+ export { SquareSet } from "./squareSet.js";
4
+ export { attacks, between, bishopAttacks, kingAttacks, knightAttacks, pawnAttacks, queenAttacks, ray, rookAttacks, } from "./attacks.js";
5
+ export { Board, boardEquals } from "./board.js";
6
+ export { defaultSetup, emptySetup, Material, MaterialSide, RemainingChecks, setupClone, setupEquals, } from "./setup.js";
7
+ export { Castles, Chess, IllegalSetup, Position, PositionError } from "./chess.js";
8
+ export * as compat from "./compat.js";
9
+ export * as debug from "./debug.js";
10
+ export * as fen from "./fen.js";
11
+ export * as san from "./san.js";
12
+ export * as transform from "./transform.js";
13
+ export * as variant from "./variant.js";
14
+ export * as pgn from "./pgn.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,cAAc,EAGd,MAAM,EAEN,UAAU,EAEV,MAAM,EACN,QAAQ,EAKR,UAAU,EAGV,UAAU,EAEV,KAAK,GAIN,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,OAAO,EACP,aAAa,EACb,UAAU,EACV,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EACL,OAAO,EACP,OAAO,EACP,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,GAAG,EACH,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EAEf,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAW,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5F,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC"}