DefinitelyTyped/types/chess.js/index.d.ts
2018-09-02 13:53:06 -05:00

531 lines
17 KiB
TypeScript

// Type definitions for chess.js 0.10
// Project: https://github.com/jhlywa/chess.js
// Definitions by: Jacob Fischer <https://github.com/JacobFischer>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/**
* One of the possible sqaures on a chess board in san format,
* e.g. "a8" to "h1".
*/
export type Square =
"a8" | "b8" | "c8" | "d8" | "e8" | "f8" | "g8" | "h8" |
"a7" | "b7" | "c7" | "d7" | "e7" | "f7" | "g7" | "h7" |
"a6" | "b6" | "c6" | "d6" | "e6" | "f6" | "g6" | "h6" |
"a5" | "b5" | "c5" | "d5" | "e5" | "f5" | "g5" | "h5" |
"a4" | "b4" | "c4" | "d4" | "e4" | "f4" | "g4" | "h4" |
"a3" | "b3" | "c3" | "d3" | "e3" | "f3" | "g3" | "h3" |
"a2" | "b2" | "c2" | "d2" | "e2" | "f2" | "g2" | "h2" |
"a1" | "b1" | "c1" | "d1" | "e1" | "f1" | "g1" | "h1"
;
/**
* Partial data about a chess move including the from and to square, and if a
* promotion occured.
*/
export interface ShortMove {
/**
* The location the piece is moving from.
* Must be in san format, e.g "h8"
*/
from: Square;
/**
* The location the piece is moving to.
* Must be in san format, e.g "a1"
*/
to: Square;
/**
* If this move results in a promotion, this will have the unit promotion.
* - "n" for Knight
* - "b" for Bishop
* - "r" for Rook
* - "q" for Queen
*/
promotion?: "n" | "b" | "r" | "q";
}
/**
* The full data about a chess move
*/
export interface Move extends ShortMove {
/**
* The color of the piece that moved
* - "b" for Black
* - "w" for White
*/
color: "b" | "w";
/** Flags indicating what occurred, combined into one string */
flags: string;
/**
* The type of the piece that moved
* - "p" for Pawn
* - "n" for Knight
* - "b" for Bishop
* - "r" for Rook
* - "q" for Queen
* - "k" for King
*/
piece: "p" | "n" | "b" | "r" | "q" | "k";
/** The Standard Algebraic Notation (SAN) representation of the move */
san: string;
/**
* If an enemy piece was captured this is their type.
* - "p" for Pawn
* - "n" for Knight
* - "b" for Bishop
* - "r" for Rook
* - "q" for Queen
*/
captured?: "p" | "n" | "b" | "r" | "q";
}
export interface Piece {
/**
* The type of the piece to place
* - "p" for Pawn
* - "n" for Knight
* - "b" for Bishop
* - "r" for Rook
* - "q" for Queen
* - "k" for King
*/
type: "p" | "n" | "b" | "r" | "q" | "k";
/**
* The color of the piece
* - "b" for Black
* - "w" for White
*/
color: "b" | "w";
}
export interface ChessInstance {
/** The string that represents the White color side */
readonly WHITE: "w";
/** The string that represents the Black color side */
readonly BLACK: "b";
/** The string that represents a Pawn */
readonly PAWN: "p";
/** The string that represents a Knight */
readonly KNIGHT: "n";
/** The string that represents a Bishop */
readonly BISHOP: "b";
/** The string that represents a Rook */
readonly ROOK: "r";
/** The string that represents a Queen */
readonly QUEEN: "q";
/** The string that represents a King */
readonly KING: "k";
/** A list of all the squares in the game, from "a1" to "h8" */
readonly SQUARES: [
"a8", "b8", "c8", "d8", "e8", "f8", "g8", "h8",
"a7", "b7", "c7", "d7", "e7", "f7", "g7", "h7",
"a6", "b6", "c6", "d6", "e6", "f6", "g6", "h6",
"a5", "b5", "c5", "d5", "e5", "f5", "g5", "h5",
"a4", "b4", "c4", "d4", "e4", "f4", "g4", "h4",
"a3", "b3", "c3", "d3", "e3", "f3", "g3", "h3",
"a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2",
"a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1"
];
/** Flags used to build flag strings for moves */
readonly FLAGS: {
/** a non-capture */
NORMAL: "n",
/** a standard capture */
CAPTURE: "c",
/** a pawn push of two squares */
BIG_PAWN: "b",
/** an en passant capture */
EP_CAPTURE: "e",
/** a promotion */
PROMOTION: "p",
/** kingside castling */
KSIDE_CASTLE: "k",
/** queenside castling */
QSIDE_CASTLE: "q",
};
/**
* The board is cleared, and the FEN string is loaded.
* Returns true if the position was successfully loaded, otherwise false
* @param fen the fen formatted string to load
* @returns true if the position was successfully loaded, otherwise
* false
*/
load(fen: string): boolean;
/**
* Reset the board to the initial starting position.
*/
reset(): void;
/**
* Returns a list of legal moves from the current position.
* The function takes an optional parameter which controls the
* single-square move generation and verbosity.
* @param options an optional parameter which controls the single-square
* move generation and verbosity.
* @returns The list of all valid moves, either in SAN format, or as
* verbose objects.
*/
moves(options: {
/** Set to true to return verbose move objects instead of strings */
verbose: true;
/**
* The string to test if it is a valid move, if it is not then an
* empty array is returned
*/
square?: string;
}): Move[];
/**
* Returns a list of legal moves from the current position.
* The function takes an optional parameter which controls the
* single-square move generation and verbosity.
* @param options an optional parameter which controls the single-square
* move generation and verbosity.
* @returns The list of all valid moves, either in SAN format, or as
* verbose objects.
*/
moves(options?: {
/** Set to true to return verbose move objects instead of strings */
verbose?: false;
/**
* The string to test if it is a valid move, if it is not then an
* empty array is returned
*/
square?: string;
}): string[];
/**
* Returns a list of legal moves from the current position.
* The function takes an optional parameter which controls the
* single-square move generation and verbosity.
* @param options an optional parameter which controls the single-square
* move generation and verbosity.
* @returns The list of all valid moves, either in SAN format, or as
* verbose objects.
*/
moves(options?: {
/** Set to true to return verbose move objects instead of strings */
verbose?: boolean;
/**
* The string to test if it is a valid move, if it is not then an
* empty array is returned
*/
square?: string;
}): string[] | Move[];
/**
* Returns true or false if the side to move is in check.
* @returns true or false if the side to move is in check.
*/
in_check(): boolean;
/**
* Returns true or false if the side to move has been checkmated.
* @returns true or false if the side to move has been checkmated.
*/
in_checkmate(): boolean;
/**
* Returns true or false if the side to move has been stalemated.
* @returns true or false if the side to move has been stalemated.
*/
in_stalemate(): boolean;
/**
* Returns true or false if the game is drawn (50-move rule or
* insufficient material).
* @returns true or false if the game is drawn (50-move rule or
* insufficient material).
*/
in_draw(): boolean;
/**
* Returns true if the game is drawn due to insufficient material
* (K vs. K, K vs. KB, or K vs. KN); otherwise false.
* @returns True if the game is drawn due to insufficient material
* (K vs. K, K vs. KB, or K vs. KN); otherwise false.
*/
insufficient_material(): boolean;
/**
* Returns true or false if the current board position has occurred three
* or more times.
* @returns true or false if the current board position has occurred three
* or more times.
*/
in_threefold_repetition(): boolean;
/**
* Returns true if the game has ended via checkmate, stalemate, draw,
* threefold repetition, or insufficient material.
* Otherwise, returns false.
* @returns True if the game has ended via checkmate, stalemate, draw,
* threefold repetition, or insufficient material. Otherwise, returns
* false.
*/
game_over(): boolean;
/**
* Returns a validation object specifying validity or the errors found
* within the FEN string.
* @param fen the fen formatted string to validate
*/
validate_fen(fen: string): {
/** Indicates if the fen is valid or not. */
valid: boolean;
/**
* If not valid, then this will a type of error used internally in
* chess.js. Otherwise 0.
*/
error_number: number;
/**
* The string "No errors." if valid. Otherwise a string explaining why
* it is not valid.
*/
error: string;
};
/**
* Returns the FEN string for the current position.
* @returns the FEN string for the current position.
*/
fen(): string;
/**
* Returns the game in PGN format.
* Options is an optional parameter which may include max width and/or a
* newline character settings.
* @param options optional object which may include max width and/or a
* newline character settings.
* @returns the current game state in PGN format.
*/
pgn(options?: {
/** the maximum width of a line */
max_width?: number,
/** Specific newline character */
newline_char?: string;
}): string;
/**
* Load the moves of a game stored in Portable Game Notation.
* @param pgn the pgn should be a string in Portable Game Notation.
* @param options An optional object which may contain a string
* newline_char and a boolean sloppy.
* @returns The method will return true if the PGN was parsed successfully,
* otherwise false.
*/
load_pgn(pgn: string, options?: {
/**
* The newline_char is a string representation of a valid RegExp
* fragment and is used to process the PGN.
* It defaults to \r?\n.
* Special characters should not be pre-escaped, but any literal
* special characters should be escaped as is normal for a RegExp.
* Keep in mind that backslashes in JavaScript strings must
* themselves be escaped.
* Avoid using a newline_char that may occur elsewhere in a PGN,
* such as . or x, as this will result in unexpected behavior.
*/
newline_char?: string;
/**
* The sloppy flag is a boolean that permits chess.js to parse moves in
* non-standard notations.
* See .move documentation for more information about non-SAN
* notations.
*/
sloppy?: boolean;
}): boolean;
/**
* Allows header information to be added to PGN output.
* Any number of key/value pairs can be passed to .header(), with each
* first arg being treated as a header key, and each second as the value.
* @param args (optional) Header pairs to store in the header.
* @returns The current header information after storing any values.
*/
header(...args: string[]): { [key: string]: string | undefined };
/**
* Returns a string containing an ASCII diagram of the current position.
* @returns A string containing an ASCII diagram of the current position.
*/
ascii(): string;
/**
* Returns the current side to move.
* @returns "b" if Black is the side to move, otherwise "w" for White.
*/
turn(): "b" | "w";
/**
* Attempts to make a move on the board, returning a move object if the
* move was legal, otherwise null.
* The .move function can be called two ways, by passing a string in
* Standard Algebraic Notation (SAN),
* Or by passing .move() a move object (only the 'to', 'from', and when
* necessary 'promotion', fields are needed).
* @param move Must be either a string in Standard Algebraic Notation
* (SAN), or a move object (only the 'to', 'from', and when necessary
* 'promotion', fields are needed)
* @param options An optional sloppy flag can be used to parse a variety of
* non-standard move notations:
* @returns The move as a full object is returned if the move was valid,
* and the chess board's state changes.
* If the move was invalid, null is returned and the state does not update.
*/
move(move: string | ShortMove, options?: {
/**
* An optional sloppy flag can be used to parse a variety of
* non-standard move notations.
*/
sloppy?: boolean;
}): Move | null;
/**
* Take back the last half-move, returning a move object if successful,
* otherwise null.
* @returns the move object that was undone if successful, otherwise null.
*/
undo(): Move | null;
/**
* Clears the board of all pieces.
*/
clear(): void;
/**
* Place a piece on the square where piece is an object with the form
* { type: ..., color: ... }.
* put() will fail when passed an invalid piece or square, or when two
* or more kings of the same color are placed.
* @param piece the piece to put somewhere on the game board.
* @param square the square on the chess board to place the piece at.
* @returns true if the piece was successfully placed, otherwise, the
* board remains unchanged and false is returned.
*/
put(piece: Piece, square: Square): boolean;
/**
* Returns the piece on the square
* @param square the square to get the piece on.
* @returns null if no piece is on that square, or it is not a valid
* square. Otherwise a piece object.
*/
get(square: Square): Piece | null;
/**
* Remove and return the piece on square.
* @param square the square to remove the piece from, e.g. "b6"
* @returns null if no piece was removed, otherwise an object with the
* removed piece's type and color.
*/
remove(square: Square): Piece | null;
// This is a debugging utility, and is not documented in their readme.
// So it is not included in these type definitions.
// perft(depth: number): number,
/**
* Returns the color of the square ('light' or 'dark').
* @param square the square to check if it is light or dark.
* @returns "light" if a light square, "dark" if a dark square, or null if
* not a valid square.
*/
square_color(square: Square): "light" | "dark";
/**
* Returns the color of the square ('light' or 'dark').
* @param square the square to check if it is light or dark.
* @returns "light" if a light square, "dark" if a dark square, or null if
* not a valid square.
*/
square_color(square: string): "light" | "dark" | null;
/**
* Returns a list containing the moves of the current game.
* Options is an optional parameter which may contain a 'verbose' flag.
* See .moves() for a description of the verbose move fields.
* @param options an optional parameter which may contain a 'verbose' flag.
* @returns a list of all moves of the current game. They will be strings
* if not passed the verbose flag.
*/
history(options?: {
/**
* Pass true if you want this function to output verbose objects
* instead of strings.
*/
verbose?: false;
}): string[];
/**
* Returns a list containing the moves of the current game.
* Options is an optional parameter which may contain a 'verbose' flag.
* See .moves() for a description of the verbose move fields.
* @param options an optional parameter which may contain a 'verbose' flag.
* @returns a list of all moves of the current game. They will be strings
* if not passed the verbose flag.
*/
history(options: {
/**
* Pass true if you want this function to output verbose objects
* instead of strings.
*/
verbose: true;
}): Move[];
/**
* Returns a list containing the moves of the current game.
* Options is an optional parameter which may contain a 'verbose' flag.
* See .moves() for a description of the verbose move fields.
* @param options an optional parameter which may contain a 'verbose' flag.
* @returns a list of all moves of the current game. They will be strings
* if not passed the verbose flag.
*/
history(options?: {
/**
* Pass true if you want this function to output verbose objects
* instead of strings.
*/
verbose?: boolean;
}): string[] | Move[];
}
/**
* The chess.js function that is used to build chess game instances.
* It can be used with or without `new` to build your instance. Both variants
* work the same.
*/
export const Chess: {
/**
* The Chess() constructor takes an optional parameter which specifies
* the board configuration in Forsyth-Edwards Notation.
* @param fen specifies the board configuration in Forsyth-Edwards Notation.
*/
(fen?: string): ChessInstance;
/**
* The Chess() constructor takes an optional parameter which specifies
* the board configuration in Forsyth-Edwards Notation.
* @param fen specifies the board configuration in Forsyth-Edwards Notation.
*/
new (fen?: string): ChessInstance;
};