js-chess-engine 1.0.3 → 2.0.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 (104) hide show
  1. package/README.md +586 -205
  2. package/dist/adapters/APIAdapter.d.ts +88 -0
  3. package/dist/adapters/APIAdapter.d.ts.map +1 -0
  4. package/dist/adapters/APIAdapter.js +225 -0
  5. package/dist/adapters/APIAdapter.js.map +1 -0
  6. package/dist/ai/AIEngine.d.ts +42 -0
  7. package/dist/ai/AIEngine.d.ts.map +1 -0
  8. package/dist/ai/AIEngine.js +62 -0
  9. package/dist/ai/AIEngine.js.map +1 -0
  10. package/dist/ai/Evaluator.d.ts +48 -0
  11. package/dist/ai/Evaluator.d.ts.map +1 -0
  12. package/dist/ai/Evaluator.js +248 -0
  13. package/dist/ai/Evaluator.js.map +1 -0
  14. package/dist/ai/MoveOrdering.d.ts +60 -0
  15. package/dist/ai/MoveOrdering.d.ts.map +1 -0
  16. package/dist/ai/MoveOrdering.js +173 -0
  17. package/dist/ai/MoveOrdering.js.map +1 -0
  18. package/dist/ai/Search.d.ts +62 -0
  19. package/dist/ai/Search.d.ts.map +1 -0
  20. package/dist/ai/Search.js +340 -0
  21. package/dist/ai/Search.js.map +1 -0
  22. package/dist/ai/TranspositionTable.d.ts +100 -0
  23. package/dist/ai/TranspositionTable.d.ts.map +1 -0
  24. package/dist/ai/TranspositionTable.js +176 -0
  25. package/dist/ai/TranspositionTable.js.map +1 -0
  26. package/dist/core/AttackDetector.d.ts +52 -0
  27. package/dist/core/AttackDetector.d.ts.map +1 -0
  28. package/dist/core/AttackDetector.js +397 -0
  29. package/dist/core/AttackDetector.js.map +1 -0
  30. package/dist/core/Board.d.ts +109 -0
  31. package/dist/core/Board.d.ts.map +1 -0
  32. package/dist/core/Board.js +410 -0
  33. package/dist/core/Board.js.map +1 -0
  34. package/dist/core/MoveGenerator.d.ts +48 -0
  35. package/dist/core/MoveGenerator.d.ts.map +1 -0
  36. package/dist/core/MoveGenerator.js +678 -0
  37. package/dist/core/MoveGenerator.js.map +1 -0
  38. package/dist/core/Position.d.ts +135 -0
  39. package/dist/core/Position.d.ts.map +1 -0
  40. package/dist/core/Position.js +351 -0
  41. package/dist/core/Position.js.map +1 -0
  42. package/dist/core/index.d.ts +9 -0
  43. package/dist/core/index.d.ts.map +1 -0
  44. package/dist/core/index.js +25 -0
  45. package/dist/core/index.js.map +1 -0
  46. package/dist/core/zobrist.d.ts +93 -0
  47. package/dist/core/zobrist.d.ts.map +1 -0
  48. package/dist/core/zobrist.js +273 -0
  49. package/dist/core/zobrist.js.map +1 -0
  50. package/dist/index.d.ts +154 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +353 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/types/ai.types.d.ts +97 -0
  55. package/dist/types/ai.types.d.ts.map +1 -0
  56. package/dist/types/ai.types.js +17 -0
  57. package/dist/types/ai.types.js.map +1 -0
  58. package/dist/types/board.types.d.ts +140 -0
  59. package/dist/types/board.types.d.ts.map +1 -0
  60. package/dist/types/board.types.js +34 -0
  61. package/dist/types/board.types.js.map +1 -0
  62. package/dist/types/index.d.ts +7 -0
  63. package/dist/types/index.d.ts.map +1 -0
  64. package/dist/types/index.js +26 -0
  65. package/dist/types/index.js.map +1 -0
  66. package/dist/types/move.types.d.ts +70 -0
  67. package/dist/types/move.types.d.ts.map +1 -0
  68. package/dist/types/move.types.js +53 -0
  69. package/dist/types/move.types.js.map +1 -0
  70. package/dist/utils/constants.d.ts +123 -0
  71. package/dist/utils/constants.d.ts.map +1 -0
  72. package/dist/utils/constants.js +259 -0
  73. package/dist/utils/constants.js.map +1 -0
  74. package/dist/utils/conversion.d.ts +152 -0
  75. package/dist/utils/conversion.d.ts.map +1 -0
  76. package/dist/utils/conversion.js +288 -0
  77. package/dist/utils/conversion.js.map +1 -0
  78. package/dist/utils/environment.d.ts +33 -0
  79. package/dist/utils/environment.d.ts.map +1 -0
  80. package/dist/utils/environment.js +71 -0
  81. package/dist/utils/environment.js.map +1 -0
  82. package/dist/utils/fen.d.ts +28 -0
  83. package/dist/utils/fen.d.ts.map +1 -0
  84. package/dist/utils/fen.js +203 -0
  85. package/dist/utils/fen.js.map +1 -0
  86. package/package.json +29 -30
  87. package/.eslintrc.json +0 -16
  88. package/.github/workflows/main.yml +0 -20
  89. package/.nvmrc +0 -1
  90. package/CHANGELOG.md +0 -597
  91. package/dist/js-chess-engine.js +0 -1
  92. package/example/aiMatch.mjs +0 -21
  93. package/example/console.mjs +0 -37
  94. package/example/server.mjs +0 -27
  95. package/lib/Board.mjs +0 -946
  96. package/lib/const/board.mjs +0 -838
  97. package/lib/js-chess-engine.mjs +0 -99
  98. package/lib/utils.mjs +0 -154
  99. package/test/.eslintrc.json +0 -11
  100. package/test/ai.test.mjs +0 -132
  101. package/test/badge.svg +0 -1
  102. package/test/importExport.mjs +0 -108
  103. package/test/moves.test.mjs +0 -798
  104. package/webpack.config.js +0 -12
package/dist/index.js ADDED
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+ /**
3
+ * js-chess-engine v2
4
+ *
5
+ * Public API for chess game management
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.Game = void 0;
23
+ exports.moves = moves;
24
+ exports.status = status;
25
+ exports.getFen = getFen;
26
+ exports.move = move;
27
+ exports.aiMove = aiMove;
28
+ exports.ai = ai;
29
+ const Board_1 = require("./core/Board");
30
+ const MoveGenerator_1 = require("./core/MoveGenerator");
31
+ const fen_1 = require("./utils/fen");
32
+ const conversion_1 = require("./utils/conversion");
33
+ const environment_1 = require("./utils/environment");
34
+ const APIAdapter_1 = require("./adapters/APIAdapter");
35
+ const AIEngine_1 = require("./ai/AIEngine");
36
+ // Export types for TypeScript users
37
+ __exportStar(require("./types"), exports);
38
+ /**
39
+ * Main Game class - manages chess game state and moves
40
+ */
41
+ class Game {
42
+ board;
43
+ history = [];
44
+ aiEngine;
45
+ /**
46
+ * Create a new game
47
+ *
48
+ * @param configuration - Optional board configuration (JSON object, FEN string, or undefined for new game)
49
+ */
50
+ constructor(configuration) {
51
+ this.aiEngine = new AIEngine_1.AIEngine();
52
+ if (!configuration) {
53
+ // New game with standard starting position
54
+ this.board = (0, Board_1.createStartingBoard)();
55
+ }
56
+ else if (typeof configuration === 'string') {
57
+ // FEN string
58
+ this.board = (0, fen_1.parseFEN)(configuration);
59
+ }
60
+ else {
61
+ // BoardConfig object
62
+ this.board = (0, APIAdapter_1.configToBoard)(configuration);
63
+ }
64
+ }
65
+ /**
66
+ * Make a move
67
+ *
68
+ * @param from - From square (case-insensitive, e.g., 'E2' or 'e2')
69
+ * @param to - To square (case-insensitive, e.g., 'E4' or 'e4')
70
+ * @returns Board configuration after the move
71
+ */
72
+ move(from, to) {
73
+ const fromNorm = (0, APIAdapter_1.normalizeSquare)(from);
74
+ const toNorm = (0, APIAdapter_1.normalizeSquare)(to);
75
+ const fromIndex = (0, conversion_1.squareToIndex)(fromNorm);
76
+ const toIndex = (0, conversion_1.squareToIndex)(toNorm);
77
+ // Find the matching legal move
78
+ const legalMoves = (0, MoveGenerator_1.generateLegalMoves)(this.board);
79
+ const move = legalMoves.find(m => m.from === fromIndex && m.to === toIndex);
80
+ if (!move) {
81
+ throw new Error(`Invalid move from ${fromNorm} to ${toNorm}`);
82
+ }
83
+ // Record move in history
84
+ const historyEntry = { [fromNorm]: toNorm };
85
+ this.history.push(historyEntry);
86
+ // Apply the move
87
+ (0, MoveGenerator_1.applyMoveComplete)(this.board, move);
88
+ return (0, APIAdapter_1.boardToConfig)(this.board);
89
+ }
90
+ /**
91
+ * Get all legal moves, optionally filtered by from-square
92
+ *
93
+ * @param from - Optional from square to filter moves
94
+ * @returns Map of from-squares to array of to-squares
95
+ */
96
+ moves(from) {
97
+ if (from) {
98
+ const fromNorm = (0, APIAdapter_1.normalizeSquare)(from);
99
+ const fromIndex = (0, conversion_1.squareToIndex)(fromNorm);
100
+ const pieceMoves = (0, MoveGenerator_1.getMovesForPiece)(this.board, fromIndex);
101
+ const toSquares = (0, APIAdapter_1.movesFromSquare)(pieceMoves, fromIndex);
102
+ return { [fromNorm]: toSquares };
103
+ }
104
+ else {
105
+ const allMoves = (0, MoveGenerator_1.generateLegalMoves)(this.board);
106
+ return (0, APIAdapter_1.movesToMap)(allMoves);
107
+ }
108
+ }
109
+ /**
110
+ * Set a piece on a square
111
+ *
112
+ * @param square - Square to place piece (case-insensitive)
113
+ * @param piece - Piece symbol (K, Q, R, B, N, P, k, q, r, b, n, p)
114
+ */
115
+ setPiece(square, piece) {
116
+ const squareNorm = (0, APIAdapter_1.normalizeSquare)(square);
117
+ const squareIndex = (0, conversion_1.squareToIndex)(squareNorm);
118
+ const pieceEnum = (0, APIAdapter_1.symbolToPiece)(piece);
119
+ (0, Board_1.setPiece)(this.board, squareIndex, pieceEnum);
120
+ }
121
+ /**
122
+ * Remove a piece from a square
123
+ *
124
+ * @param square - Square to remove piece from (case-insensitive)
125
+ */
126
+ removePiece(square) {
127
+ const squareNorm = (0, APIAdapter_1.normalizeSquare)(square);
128
+ const squareIndex = (0, conversion_1.squareToIndex)(squareNorm);
129
+ (0, Board_1.removePiece)(this.board, squareIndex);
130
+ }
131
+ /**
132
+ * Get move history
133
+ *
134
+ * @returns Array of history entries with board state after each move
135
+ */
136
+ getHistory() {
137
+ const result = [];
138
+ // Replay all moves from the beginning
139
+ const startingBoard = typeof this.board === 'string'
140
+ ? (0, fen_1.parseFEN)(this.board)
141
+ : (0, Board_1.createStartingBoard)();
142
+ const tempBoard = (0, Board_1.copyBoard)(startingBoard);
143
+ for (const move of this.history) {
144
+ const [from, to] = Object.entries(move)[0];
145
+ const fromIndex = (0, conversion_1.squareToIndex)(from);
146
+ const toIndex = (0, conversion_1.squareToIndex)(to);
147
+ const legalMoves = (0, MoveGenerator_1.generateLegalMoves)(tempBoard);
148
+ const matchingMove = legalMoves.find(m => m.from === fromIndex && m.to === toIndex);
149
+ if (matchingMove) {
150
+ (0, MoveGenerator_1.applyMoveComplete)(tempBoard, matchingMove);
151
+ const config = (0, APIAdapter_1.boardToConfig)(tempBoard);
152
+ result.push({ ...config, move });
153
+ }
154
+ }
155
+ return result;
156
+ }
157
+ /**
158
+ * Export current board state as JSON configuration
159
+ *
160
+ * @returns Board configuration object
161
+ */
162
+ exportJson() {
163
+ return (0, APIAdapter_1.boardToConfig)(this.board);
164
+ }
165
+ /**
166
+ * Export current board state as FEN string
167
+ *
168
+ * @returns FEN string
169
+ */
170
+ exportFEN() {
171
+ return (0, fen_1.toFEN)(this.board);
172
+ }
173
+ /**
174
+ * Print board to console (Unicode chess pieces)
175
+ */
176
+ printToConsole() {
177
+ process.stdout.write('\n');
178
+ for (let rank = 7; rank >= 0; rank--) {
179
+ process.stdout.write(`${rank + 1}`);
180
+ for (let file = 0; file < 8; file++) {
181
+ const index = rank * 8 + file;
182
+ const piece = this.board.mailbox[index];
183
+ const isWhiteSquare = (rank + file) % 2 === 0;
184
+ const symbol = pieceToUnicode(piece, isWhiteSquare);
185
+ process.stdout.write(symbol);
186
+ }
187
+ process.stdout.write('\n');
188
+ }
189
+ process.stdout.write(' ABCDEFGH\n');
190
+ }
191
+ /**
192
+ * Make an AI move (v1 compatible - returns only the move)
193
+ *
194
+ * @param level - AI level (1-5, default 3)
195
+ * @returns The played move object (e.g., {"E2": "E4"})
196
+ */
197
+ aiMove(level = 3) {
198
+ // Validate level
199
+ if (level < 1 || level > 5) {
200
+ throw new Error('AI level must be between 1 and 5');
201
+ }
202
+ // Find best move
203
+ const bestMove = this.aiEngine.findBestMove(this.board, level);
204
+ if (!bestMove) {
205
+ // No legal moves available - game must be finished (checkmate or stalemate)
206
+ throw new Error('Game is already finished');
207
+ }
208
+ // Record move in history
209
+ const fromSquare = (0, conversion_1.indexToSquare)(bestMove.from);
210
+ const toSquare = (0, conversion_1.indexToSquare)(bestMove.to);
211
+ const historyEntry = { [fromSquare]: toSquare };
212
+ this.history.push(historyEntry);
213
+ // Apply the move
214
+ (0, MoveGenerator_1.applyMoveComplete)(this.board, bestMove);
215
+ return historyEntry;
216
+ }
217
+ /**
218
+ * Make an AI move and return both move and board state
219
+ *
220
+ * @param options - Optional configuration object
221
+ * @param options.level - AI difficulty level (1-5, default: 3)
222
+ * @param options.play - Whether to apply the move to the game (default: true). If false, only returns the move without modifying game state.
223
+ * @param options.ttSizeMB - Transposition table size in MB (0 to disable, 0.25-256). Default: auto-scaled by level (e.g., level 3: 16 MB Node.js, 2 MB browser)
224
+ * @returns Object containing the move and board configuration (current state if play=false, updated state if play=true)
225
+ */
226
+ ai(options = {}) {
227
+ const level = options.level ?? 3;
228
+ const play = options.play ?? true;
229
+ // Allow 0 to disable TT, or 0.25-256 MB range
230
+ // Default: auto-scaled by AI level (lower levels use less memory, higher levels use more)
231
+ const defaultSize = (0, environment_1.getRecommendedTTSize)(level);
232
+ const ttSizeMB = options.ttSizeMB === 0 ? 0 : Math.max(0.25, Math.min(256, options.ttSizeMB ?? defaultSize));
233
+ // Validate level
234
+ if (level < 1 || level > 5) {
235
+ throw new Error('AI level must be between 1 and 5');
236
+ }
237
+ // Find best move
238
+ const bestMove = this.aiEngine.findBestMove(this.board, level, ttSizeMB);
239
+ if (!bestMove) {
240
+ // No legal moves available - game must be finished (checkmate or stalemate)
241
+ throw new Error('Game is already finished');
242
+ }
243
+ // Create move entry
244
+ const fromSquare = (0, conversion_1.indexToSquare)(bestMove.from);
245
+ const toSquare = (0, conversion_1.indexToSquare)(bestMove.to);
246
+ const historyEntry = { [fromSquare]: toSquare };
247
+ if (!play) {
248
+ // Return move without applying it, with current board state
249
+ return {
250
+ move: historyEntry,
251
+ board: (0, APIAdapter_1.boardToConfig)(this.board),
252
+ };
253
+ }
254
+ // Record move in history and apply it
255
+ this.history.push(historyEntry);
256
+ (0, MoveGenerator_1.applyMoveComplete)(this.board, bestMove);
257
+ return {
258
+ move: historyEntry,
259
+ board: (0, APIAdapter_1.boardToConfig)(this.board),
260
+ };
261
+ }
262
+ }
263
+ exports.Game = Game;
264
+ /**
265
+ * Helper function to convert piece enum to Unicode symbol for printing
266
+ */
267
+ function pieceToUnicode(piece, isWhiteSquare) {
268
+ const symbols = {
269
+ 0: isWhiteSquare ? '\u2588' : '\u2591', // EMPTY - filled/light block
270
+ 1: '\u2659', // WHITE_PAWN ♙
271
+ 2: '\u2658', // WHITE_KNIGHT ♘
272
+ 3: '\u2657', // WHITE_BISHOP ♗
273
+ 4: '\u2656', // WHITE_ROOK ♖
274
+ 5: '\u2655', // WHITE_QUEEN ♕
275
+ 6: '\u2654', // WHITE_KING ♔
276
+ 7: '\u265F', // BLACK_PAWN ♟
277
+ 8: '\u265E', // BLACK_KNIGHT ♞
278
+ 9: '\u265D', // BLACK_BISHOP ♝
279
+ 10: '\u265C', // BLACK_ROOK ♜
280
+ 11: '\u265B', // BLACK_QUEEN ♛
281
+ 12: '\u265A', // BLACK_KING ♚
282
+ };
283
+ return symbols[piece] || (isWhiteSquare ? '\u2588' : '\u2591');
284
+ }
285
+ // ==================== Stateless Functions ====================
286
+ /**
287
+ * Get all legal moves for a position
288
+ *
289
+ * @param config - Board configuration or FEN string
290
+ * @returns Map of from-squares to array of to-squares
291
+ */
292
+ function moves(config) {
293
+ const game = new Game(config);
294
+ return game.moves();
295
+ }
296
+ /**
297
+ * Get board status
298
+ *
299
+ * @param config - Board configuration or FEN string
300
+ * @returns Board configuration with current status
301
+ */
302
+ function status(config) {
303
+ const game = new Game(config);
304
+ return game.exportJson();
305
+ }
306
+ /**
307
+ * Get FEN string for a position
308
+ *
309
+ * @param config - Board configuration or FEN string
310
+ * @returns FEN string
311
+ */
312
+ function getFen(config) {
313
+ const game = new Game(config);
314
+ return game.exportFEN();
315
+ }
316
+ /**
317
+ * Make a move on a board
318
+ *
319
+ * @param config - Board configuration or FEN string
320
+ * @param from - From square
321
+ * @param to - To square
322
+ * @returns Board configuration after the move
323
+ */
324
+ function move(config, from, to) {
325
+ const game = new Game(config);
326
+ return game.move(from, to);
327
+ }
328
+ /**
329
+ * Make an AI move (v1 compatible - returns only the move)
330
+ *
331
+ * @param config - Board configuration or FEN string
332
+ * @param level - AI level (1-5, default 3)
333
+ * @returns The played move object (e.g., {"E2": "E4"})
334
+ */
335
+ function aiMove(config, level = 3) {
336
+ const game = new Game(config);
337
+ return game.aiMove(level);
338
+ }
339
+ /**
340
+ * Make an AI move and return both move and board state
341
+ *
342
+ * @param config - Board configuration or FEN string
343
+ * @param options - Optional configuration object
344
+ * @param options.level - AI difficulty level (1-5, default: 3)
345
+ * @param options.play - Whether to apply the move to the game (default: true). If false, only returns the move without modifying game state.
346
+ * @param options.ttSizeMB - Transposition table size in MB (0 to disable, 0.25-256). Default: auto-scaled by level (e.g., level 3: 16 MB Node.js, 2 MB browser)
347
+ * @returns Object containing the move and board configuration (current state if play=false, updated state if play=true)
348
+ */
349
+ function ai(config, options = {}) {
350
+ const game = new Game(config);
351
+ return game.ai(options);
352
+ }
353
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * AI and search-related types for js-chess-engine
3
+ */
4
+ import { InternalMove } from './move.types';
5
+ /**
6
+ * AI difficulty level (1-5)
7
+ */
8
+ export type AILevel = 1 | 2 | 3 | 4 | 5;
9
+ /**
10
+ * Search depth
11
+ */
12
+ export type Depth = number;
13
+ /**
14
+ * Evaluation score (centipawns)
15
+ * Positive = good for white, negative = good for black
16
+ */
17
+ export type Score = number;
18
+ /**
19
+ * Search result
20
+ */
21
+ export interface SearchResult {
22
+ move: InternalMove;
23
+ score: Score;
24
+ depth: Depth;
25
+ nodesSearched: number;
26
+ }
27
+ /**
28
+ * Alpha-beta search bounds
29
+ */
30
+ export interface SearchBounds {
31
+ alpha: Score;
32
+ beta: Score;
33
+ }
34
+ /**
35
+ * Transposition table entry type
36
+ */
37
+ export declare enum TTEntryType {
38
+ EXACT = 0,// Exact score
39
+ LOWERBOUND = 1,// Beta cutoff (fail-high)
40
+ UPPERBOUND = 2
41
+ }
42
+ /**
43
+ * Transposition table entry
44
+ */
45
+ export interface TTEntry {
46
+ zobristHash: bigint;
47
+ depth: Depth;
48
+ score: Score;
49
+ type: TTEntryType;
50
+ bestMove: InternalMove | null;
51
+ age: number;
52
+ }
53
+ /**
54
+ * Killer move table (indexed by ply)
55
+ */
56
+ export type KillerMoves = Array<[InternalMove | null, InternalMove | null]>;
57
+ /**
58
+ * History heuristic table
59
+ * [from][to] -> score
60
+ */
61
+ export type HistoryTable = number[][];
62
+ /**
63
+ * MVV-LVA (Most Valuable Victim - Least Valuable Aggressor) score
64
+ */
65
+ export interface MVVLVAScore {
66
+ victim: number;
67
+ aggressor: number;
68
+ }
69
+ /**
70
+ * Position evaluation components
71
+ */
72
+ export interface EvaluationComponents {
73
+ material: Score;
74
+ pieceSquareTables: Score;
75
+ pawnStructure: Score;
76
+ kingSafety: Score;
77
+ mobility: Score;
78
+ rookBonus: Score;
79
+ }
80
+ /**
81
+ * Pawn structure analysis
82
+ */
83
+ export interface PawnStructure {
84
+ doubledPawns: number;
85
+ isolatedPawns: number;
86
+ passedPawns: number;
87
+ pawnChains: number;
88
+ }
89
+ /**
90
+ * King safety analysis
91
+ */
92
+ export interface KingSafety {
93
+ pawnShield: number;
94
+ attackingPieces: number;
95
+ attackZoneControl: number;
96
+ }
97
+ //# sourceMappingURL=ai.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.types.d.ts","sourceRoot":"","sources":["../../src/types/ai.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;CACf;AAID;;GAEG;AACH,oBAAY,WAAW;IACnB,KAAK,IAAI,CAAO,cAAc;IAC9B,UAAU,IAAI,CAAE,0BAA0B;IAC1C,UAAU,IAAI;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACf;AAID;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,EAAE,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB;AAID;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,KAAK,CAAC;IAChB,iBAAiB,EAAE,KAAK,CAAC;IACzB,aAAa,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * AI and search-related types for js-chess-engine
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TTEntryType = void 0;
7
+ // ==================== Transposition Table Types ====================
8
+ /**
9
+ * Transposition table entry type
10
+ */
11
+ var TTEntryType;
12
+ (function (TTEntryType) {
13
+ TTEntryType[TTEntryType["EXACT"] = 0] = "EXACT";
14
+ TTEntryType[TTEntryType["LOWERBOUND"] = 1] = "LOWERBOUND";
15
+ TTEntryType[TTEntryType["UPPERBOUND"] = 2] = "UPPERBOUND";
16
+ })(TTEntryType || (exports.TTEntryType = TTEntryType = {}));
17
+ //# sourceMappingURL=ai.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.types.js","sourceRoot":"","sources":["../../src/types/ai.types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAwCH,sEAAsE;AAEtE;;GAEG;AACH,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,+CAAS,CAAA;IACT,yDAAc,CAAA;IACd,yDAAc,CAAA;AAClB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Board-related types for js-chess-engine
3
+ */
4
+ /**
5
+ * Color of a piece or player
6
+ */
7
+ export type Color = 'white' | 'black';
8
+ /**
9
+ * Piece notation using standard chess symbols
10
+ * Uppercase = white, lowercase = black
11
+ */
12
+ export type PieceSymbol = 'K' | 'Q' | 'R' | 'B' | 'N' | 'P' | 'k' | 'q' | 'r' | 'b' | 'n' | 'p';
13
+ /**
14
+ * Piece type (without color)
15
+ */
16
+ export type PieceType = 'king' | 'queen' | 'rook' | 'bishop' | 'knight' | 'pawn';
17
+ /**
18
+ * Square notation (A1-H8)
19
+ */
20
+ export type Square = string;
21
+ /**
22
+ * Column notation (A-H)
23
+ */
24
+ export type Column = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H';
25
+ /**
26
+ * Row notation (1-8)
27
+ */
28
+ export type Row = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8';
29
+ /**
30
+ * Castling rights configuration
31
+ */
32
+ export interface CastlingRights {
33
+ whiteShort: boolean;
34
+ blackShort: boolean;
35
+ whiteLong: boolean;
36
+ blackLong: boolean;
37
+ }
38
+ /**
39
+ * Public board configuration (API format)
40
+ * Maps square strings (e.g., "E1", "A8") to piece symbols
41
+ */
42
+ export interface BoardConfig {
43
+ pieces: Record<Square, PieceSymbol>;
44
+ turn: Color;
45
+ isFinished: boolean;
46
+ check: boolean;
47
+ checkMate: boolean;
48
+ castling: CastlingRights;
49
+ enPassant: Square | null;
50
+ halfMove: number;
51
+ fullMove: number;
52
+ }
53
+ /**
54
+ * Move history entry
55
+ */
56
+ export interface HistoryEntry {
57
+ [from: Square]: Square;
58
+ }
59
+ /**
60
+ * Possible moves map (API format)
61
+ * Maps from-square to array of to-squares
62
+ */
63
+ export type MovesMap = Record<Square, Square[]>;
64
+ /**
65
+ * Square index (0-63)
66
+ * 0 = A1, 7 = H1, 56 = A8, 63 = H8
67
+ */
68
+ export type SquareIndex = number;
69
+ /**
70
+ * Internal piece representation
71
+ */
72
+ export declare enum Piece {
73
+ EMPTY = 0,
74
+ WHITE_PAWN = 1,
75
+ WHITE_KNIGHT = 2,
76
+ WHITE_BISHOP = 3,
77
+ WHITE_ROOK = 4,
78
+ WHITE_QUEEN = 5,
79
+ WHITE_KING = 6,
80
+ BLACK_PAWN = 7,
81
+ BLACK_KNIGHT = 8,
82
+ BLACK_BISHOP = 9,
83
+ BLACK_ROOK = 10,
84
+ BLACK_QUEEN = 11,
85
+ BLACK_KING = 12
86
+ }
87
+ /**
88
+ * Internal color representation
89
+ */
90
+ export declare enum InternalColor {
91
+ WHITE = 0,
92
+ BLACK = 1
93
+ }
94
+ /**
95
+ * Bitboard (64-bit integer for piece positions)
96
+ */
97
+ export type Bitboard = bigint;
98
+ /**
99
+ * Internal board state using bitboards and mailbox
100
+ */
101
+ export interface InternalBoard {
102
+ mailbox: Int8Array;
103
+ whitePawns: Bitboard;
104
+ whiteKnights: Bitboard;
105
+ whiteBishops: Bitboard;
106
+ whiteRooks: Bitboard;
107
+ whiteQueens: Bitboard;
108
+ whiteKing: Bitboard;
109
+ blackPawns: Bitboard;
110
+ blackKnights: Bitboard;
111
+ blackBishops: Bitboard;
112
+ blackRooks: Bitboard;
113
+ blackQueens: Bitboard;
114
+ blackKing: Bitboard;
115
+ whitePieces: Bitboard;
116
+ blackPieces: Bitboard;
117
+ allPieces: Bitboard;
118
+ turn: InternalColor;
119
+ castlingRights: CastlingRights;
120
+ enPassantSquare: SquareIndex | null;
121
+ halfMoveClock: number;
122
+ fullMoveNumber: number;
123
+ zobristHash: bigint;
124
+ isCheck: boolean;
125
+ isCheckmate: boolean;
126
+ isStalemate: boolean;
127
+ }
128
+ /**
129
+ * Direction offset for piece movement
130
+ */
131
+ export type Direction = number;
132
+ /**
133
+ * File index (0-7 for A-H)
134
+ */
135
+ export type FileIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
136
+ /**
137
+ * Rank index (0-7 for 1-8)
138
+ */
139
+ export type RankIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
140
+ //# sourceMappingURL=board.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.types.d.ts","sourceRoot":"","sources":["../../src/types/board.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /**
3
+ * Board-related types for js-chess-engine
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InternalColor = exports.Piece = void 0;
7
+ /**
8
+ * Internal piece representation
9
+ */
10
+ var Piece;
11
+ (function (Piece) {
12
+ Piece[Piece["EMPTY"] = 0] = "EMPTY";
13
+ Piece[Piece["WHITE_PAWN"] = 1] = "WHITE_PAWN";
14
+ Piece[Piece["WHITE_KNIGHT"] = 2] = "WHITE_KNIGHT";
15
+ Piece[Piece["WHITE_BISHOP"] = 3] = "WHITE_BISHOP";
16
+ Piece[Piece["WHITE_ROOK"] = 4] = "WHITE_ROOK";
17
+ Piece[Piece["WHITE_QUEEN"] = 5] = "WHITE_QUEEN";
18
+ Piece[Piece["WHITE_KING"] = 6] = "WHITE_KING";
19
+ Piece[Piece["BLACK_PAWN"] = 7] = "BLACK_PAWN";
20
+ Piece[Piece["BLACK_KNIGHT"] = 8] = "BLACK_KNIGHT";
21
+ Piece[Piece["BLACK_BISHOP"] = 9] = "BLACK_BISHOP";
22
+ Piece[Piece["BLACK_ROOK"] = 10] = "BLACK_ROOK";
23
+ Piece[Piece["BLACK_QUEEN"] = 11] = "BLACK_QUEEN";
24
+ Piece[Piece["BLACK_KING"] = 12] = "BLACK_KING";
25
+ })(Piece || (exports.Piece = Piece = {}));
26
+ /**
27
+ * Internal color representation
28
+ */
29
+ var InternalColor;
30
+ (function (InternalColor) {
31
+ InternalColor[InternalColor["WHITE"] = 0] = "WHITE";
32
+ InternalColor[InternalColor["BLACK"] = 1] = "BLACK";
33
+ })(InternalColor || (exports.InternalColor = InternalColor = {}));
34
+ //# sourceMappingURL=board.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.types.js","sourceRoot":"","sources":["../../src/types/board.types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAkFH;;GAEG;AACH,IAAY,KAcX;AAdD,WAAY,KAAK;IACb,mCAAS,CAAA;IACT,6CAAc,CAAA;IACd,iDAAgB,CAAA;IAChB,iDAAgB,CAAA;IAChB,6CAAc,CAAA;IACd,+CAAe,CAAA;IACf,6CAAc,CAAA;IACd,6CAAc,CAAA;IACd,iDAAgB,CAAA;IAChB,iDAAgB,CAAA;IAChB,8CAAe,CAAA;IACf,gDAAgB,CAAA;IAChB,8CAAe,CAAA;AACnB,CAAC,EAdW,KAAK,qBAAL,KAAK,QAchB;AAED;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,mDAAS,CAAA;IACT,mDAAS,CAAA;AACb,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB"}