@oathompsonjones/mini-games 1.0.1 → 1.0.3

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.
package/build/console.js CHANGED
@@ -14,17 +14,14 @@ async function readLine(prompt = "") {
14
14
  }
15
15
  /**
16
16
  * Writes to the console.
17
- *
18
17
  * @param text The text to write.
19
18
  */
20
19
  function writeLine(...text) {
21
- return console.log(...text);
20
+ console.log(...text);
22
21
  }
23
- /**
24
- * Clears the console.
25
- */
22
+ /** Clears the console. */
26
23
  function clear() {
27
- return console.clear();
24
+ console.clear();
28
25
  }
29
26
  export default { clear, readLine, writeLine };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUV6Qzs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxRQUFRLENBQUMsU0FBaUIsRUFBRTtJQUN2QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsU0FBUyxDQUFDLEdBQUcsSUFBYztJQUNoQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLEtBQUs7SUFDVixPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixDQUFDO0FBRUQsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgcmVhZGxpbmUgZnJvbSBcInJlYWRsaW5lL3Byb21pc2VzXCI7XG5cbi8qKlxuICogUmVhZHMgZnJvbSB0aGUgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gcHJvbXB0IFRoZSBxdWVzdGlvbiB0byBnZXQgdGhlIGFuc3dlciB0by5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSByZWFkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkTGluZShwcm9tcHQ6IHN0cmluZyA9IFwiXCIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlYWRlciA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZShwcm9jZXNzLnN0ZGluLCBwcm9jZXNzLnN0ZG91dCk7XG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkZXIucXVlc3Rpb24ocHJvbXB0KTtcbiAgICByZWFkZXIuY2xvc2UoKTtcbiAgICByZXR1cm4gaW5wdXQ7XG59XG5cbi8qKlxuICogV3JpdGVzIHRvIHRoZSBjb25zb2xlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHdyaXRlLlxuICovXG5mdW5jdGlvbiB3cml0ZUxpbmUoLi4udGV4dDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICByZXR1cm4gY29uc29sZS5sb2coLi4udGV4dCk7XG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBjb25zb2xlLlxuICovXG5mdW5jdGlvbiBjbGVhcigpOiB2b2lkIHtcbiAgICByZXR1cm4gY29uc29sZS5jbGVhcigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IGNsZWFyLCByZWFkTGluZSwgd3JpdGVMaW5lIH07XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUV6Qzs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxRQUFRLENBQUMsU0FBaUIsRUFBRTtJQUN2QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxTQUFTLENBQUMsR0FBRyxJQUFjO0lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsMEJBQTBCO0FBQzFCLFNBQVMsS0FBSztJQUNWLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgcmVhZGxpbmUgZnJvbSBcInJlYWRsaW5lL3Byb21pc2VzXCI7XG5cbi8qKlxuICogUmVhZHMgZnJvbSB0aGUgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gcHJvbXB0IFRoZSBxdWVzdGlvbiB0byBnZXQgdGhlIGFuc3dlciB0by5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSByZWFkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkTGluZShwcm9tcHQ6IHN0cmluZyA9IFwiXCIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlYWRlciA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZShwcm9jZXNzLnN0ZGluLCBwcm9jZXNzLnN0ZG91dCk7XG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkZXIucXVlc3Rpb24ocHJvbXB0KTtcblxuICAgIHJlYWRlci5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIFdyaXRlcyB0byB0aGUgY29uc29sZS5cbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHdyaXRlLlxuICovXG5mdW5jdGlvbiB3cml0ZUxpbmUoLi4udGV4dDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyguLi50ZXh0KTtcbn1cblxuLyoqIENsZWFycyB0aGUgY29uc29sZS4gKi9cbmZ1bmN0aW9uIGNsZWFyKCk6IHZvaWQge1xuICAgIGNvbnNvbGUuY2xlYXIoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBjbGVhciwgcmVhZExpbmUsIHdyaXRlTGluZSB9O1xuIl19
@@ -1,6 +1,7 @@
1
1
  import Base from "../../base/board.js";
2
2
  import LongIntBitBoard from "../../bitBoard/longIntBitBoard.js";
3
3
  import type { Position } from "../../base/board.js";
4
+ /** Represents a Connect 4 board. */
4
5
  export default class Board extends Base<LongIntBitBoard> {
5
6
  protected winningStates: LongIntBitBoard[];
6
7
  private readonly FULL_BOARD;
@@ -8,8 +9,16 @@ export default class Board extends Base<LongIntBitBoard> {
8
9
  private readonly VERTICAL;
9
10
  private readonly LEADING_DIAGONAL;
10
11
  private readonly NON_LEADING_DIAGONAL;
12
+ /** Creates an instance of Board. */
11
13
  constructor();
14
+ /** Calculates the heuristic score for the current board state. */
12
15
  get heuristic(): number;
16
+ /** Generates a list of empty cells. */
13
17
  get emptyCells(): Position[];
18
+ /**
19
+ * Makes a move on the board.
20
+ * @param move The move to make.
21
+ * @param playerId The player making the move.
22
+ */
14
23
  makeMove(move: Position, playerId: number): void;
15
24
  }
@@ -1,6 +1,7 @@
1
1
  import Base from "../../base/board.js";
2
2
  import LongInt from "../../bitBoard/longInt.js";
3
3
  import LongIntBitBoard from "../../bitBoard/longIntBitBoard.js";
4
+ /** Represents a Connect 4 board. */
4
5
  export default class Board extends Base {
5
6
  winningStates = [];
6
7
  FULL_BOARD = new LongInt([0b1111_1111111_1111111_1111111_1111111, 0b1111111_111]);
@@ -8,6 +9,7 @@ export default class Board extends Base {
8
9
  VERTICAL = new LongInt([0b0000_0000001_0000001_0000001_0000001, 0b0000000_000]);
9
10
  LEADING_DIAGONAL = new LongInt([0b0000_0001000_0000100_0000010_0000001, 0b0000000_000]);
10
11
  NON_LEADING_DIAGONAL = new LongInt([0b0000_0000001_0000010_0000100_0001000, 0b0000000_000]);
12
+ /** Creates an instance of Board. */
11
13
  constructor() {
12
14
  super(7, 6);
13
15
  for (let i = 0; i < 4; i++) {
@@ -39,6 +41,7 @@ export default class Board extends Base {
39
41
  }
40
42
  }
41
43
  }
44
+ /** Calculates the heuristic score for the current board state. */
42
45
  get heuristic() {
43
46
  const { winner } = this;
44
47
  if (winner === 0)
@@ -65,6 +68,7 @@ export default class Board extends Base {
65
68
  const p1Score = 10 * p1LineOfThreeScore + p1LineOfTwoScore;
66
69
  return p0Score - p1Score;
67
70
  }
71
+ /** Generates a list of empty cells. */
68
72
  get emptyCells() {
69
73
  const emptyCells = [];
70
74
  for (let x = 0; x < this.boardWidth; x++) {
@@ -74,6 +78,11 @@ export default class Board extends Base {
74
78
  }
75
79
  return emptyCells;
76
80
  }
81
+ /**
82
+ * Makes a move on the board.
83
+ * @param move The move to make.
84
+ * @param playerId The player making the move.
85
+ */
77
86
  makeMove(move, playerId) {
78
87
  const updatedMove = move;
79
88
  for (let i = 5; i >= 0; i--) {
@@ -85,4 +94,4 @@ export default class Board extends Base {
85
94
  super.makeMove(updatedMove, playerId);
86
95
  }
87
96
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZXMvY29ubmVjdDQvYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0scUJBQXFCLENBQUM7QUFDdkMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUM7QUFDaEQsT0FBTyxlQUFlLE1BQU0sbUNBQW1DLENBQUM7QUFHaEUsTUFBTSxDQUFDLE9BQU8sT0FBTyxLQUFNLFNBQVEsSUFBcUI7SUFDMUMsYUFBYSxHQUFzQixFQUFFLENBQUM7SUFFL0IsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsc0NBQXNDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUVsRixVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxzQ0FBc0MsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRWxGLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLHNDQUFzQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFaEYsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxzQ0FBc0MsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRXhGLG9CQUFvQixHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsc0NBQXNDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUU3RztRQUNJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxPQUFPO3FCQUM5QyxTQUFTLENB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O0lBRUQsSUFBb0IsVUFBVTtRQUMxQixNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksR0FBYSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUk7Z0JBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFZSxRQUFRLENBQUMsSUFBYyxFQUFFLFFBQWdCO1FBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNYLE1BQU07WUFDVixDQUFDO1FBQ0wsQ0FBQztRQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlIGZyb20gXCIuLi8uLi9iYXNlL2JvYXJkLmpzXCI7XG5pbXBvcnQgTG9uZ0ludCBmcm9tIFwiLi4vLi4vYml0Qm9hcmQvbG9uZ0ludC5qc1wiO1xuaW1wb3J0IExvbmdJbnRCaXRCb2FyZCBmcm9tIFwiLi4vLi4vYml0Qm9hcmQvbG9uZ0ludEJpdEJvYXJkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcIi4uLy4uL2Jhc2UvYm9hcmQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9hcmQgZXh0ZW5kcyBCYXNlPExvbmdJbnRCaXRCb2FyZD4ge1xuICAgIHByb3RlY3RlZCB3aW5uaW5nU3RhdGVzOiBMb25nSW50Qml0Qm9hcmRbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBGVUxMX0JPQVJEID0gbmV3IExvbmdJbnQoWzBiMTExMV8xMTExMTExXzExMTExMTFfMTExMTExMV8xMTExMTExLCAwYjExMTExMTFfMTExXSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IEhPUklaT05UQUwgPSBuZXcgTG9uZ0ludChbMGIwMDAwXzAwMDAwMDBfMDAwMDAwMF8wMDAwMDAwXzAwMDExMTEsIDBiMDAwMDAwMF8wMDBdKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgVkVSVElDQUwgPSBuZXcgTG9uZ0ludChbMGIwMDAwXzAwMDAwMDFfMDAwMDAwMV8wMDAwMDAxXzAwMDAwMDEsIDBiMDAwMDAwMF8wMDBdKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgTEVBRElOR19ESUFHT05BTCA9IG5ldyBMb25nSW50KFswYjAwMDBfMDAwMTAwMF8wMDAwMTAwXzAwMDAwMTBfMDAwMDAwMSwgMGIwMDAwMDAwXzAwMF0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBOT05fTEVBRElOR19ESUFHT05BTCA9IG5ldyBMb25nSW50KFswYjAwMDBfMDAwMDAwMV8wMDAwMDEwXzAwMDAxMDBfMDAwMTAwMCwgMGIwMDAwMDAwXzAwMF0pO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcig3LCA2KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNjsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aW5uaW5nU3RhdGVzLnB1c2gobmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50XG4gICAgICAgICAgICAgICAgICAgIC5sZWZ0U2hpZnQodGhpcy5IT1JJWk9OVEFMLCBpICsgNyAqIGopXG4gICAgICAgICAgICAgICAgICAgIC5hbmQodGhpcy5GVUxMX0JPQVJEKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDM7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lubmluZ1N0YXRlcy5wdXNoKG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludFxuICAgICAgICAgICAgICAgICAgICAubGVmdFNoaWZ0KHRoaXMuVkVSVElDQUwsIGkgKyA3ICogailcbiAgICAgICAgICAgICAgICAgICAgLmFuZCh0aGlzLkZVTExfQk9BUkQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aW5uaW5nU3RhdGVzLnB1c2gobmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50XG4gICAgICAgICAgICAgICAgICAgIC5sZWZ0U2hpZnQodGhpcy5MRUFESU5HX0RJQUdPTkFMLCBpICsgNyAqIGopXG4gICAgICAgICAgICAgICAgICAgIC5hbmQodGhpcy5GVUxMX0JPQVJEKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDM7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lubmluZ1N0YXRlcy5wdXNoKG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludFxuICAgICAgICAgICAgICAgICAgICAubGVmdFNoaWZ0KHRoaXMuTk9OX0xFQURJTkdfRElBR09OQUwsIGkgKyA3ICogailcbiAgICAgICAgICAgICAgICAgICAgLmFuZCh0aGlzLkZVTExfQk9BUkQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhldXJpc3RpYygpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB7IHdpbm5lciB9ID0gdGhpcztcbiAgICAgICAgaWYgKHdpbm5lciA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiAxMDAwO1xuICAgICAgICBpZiAod2lubmVyID09PSAxKVxuICAgICAgICAgICAgcmV0dXJuIC0xMDAwO1xuICAgICAgICBjb25zdCBwMExpbmVPZlRocmVlTm9HYXBzID0gdGhpcy5oYXNMaW5lKDAsIDMpO1xuICAgICAgICBjb25zdCBwMUxpbmVPZlRocmVlTm9HYXBzID0gdGhpcy5oYXNMaW5lKDEsIDMpO1xuICAgICAgICBjb25zdCBwMExpbmVPZlRocmVlT25lR2FwID0gdGhpcy5oYXNMaW5lKDAsIDMsIDEpO1xuICAgICAgICBjb25zdCBwMUxpbmVPZlRocmVlT25lR2FwID0gdGhpcy5oYXNMaW5lKDEsIDMsIDEpO1xuICAgICAgICBjb25zdCBwMExpbmVPZlRocmVlVHdvR2FwcyA9IHRoaXMuaGFzTGluZSgwLCAzLCAyKTtcbiAgICAgICAgY29uc3QgcDFMaW5lT2ZUaHJlZVR3b0dhcHMgPSB0aGlzLmhhc0xpbmUoMSwgMywgMik7XG4gICAgICAgIGNvbnN0IHAwTGluZU9mVHdvTm9HYXBzID0gdGhpcy5oYXNMaW5lKDAsIDIpO1xuICAgICAgICBjb25zdCBwMUxpbmVPZlR3b05vR2FwcyA9IHRoaXMuaGFzTGluZSgxLCAyKTtcbiAgICAgICAgY29uc3QgcDBMaW5lT2ZUd29PbmVHYXAgPSB0aGlzLmhhc0xpbmUoMCwgMiwgMSk7XG4gICAgICAgIGNvbnN0IHAxTGluZU9mVHdvT25lR2FwID0gdGhpcy5oYXNMaW5lKDEsIDIsIDEpO1xuICAgICAgICBjb25zdCBwMExpbmVPZlR3b1R3b0dhcHMgPSB0aGlzLmhhc0xpbmUoMCwgMiwgMik7XG4gICAgICAgIGNvbnN0IHAxTGluZU9mVHdvVHdvR2FwcyA9IHRoaXMuaGFzTGluZSgxLCAyLCAyKTtcbiAgICAgICAgY29uc3QgcDBMaW5lT2ZUaHJlZVNjb3JlID0gMyAqIHAwTGluZU9mVGhyZWVOb0dhcHMgKyAyICogcDBMaW5lT2ZUaHJlZU9uZUdhcCArIHAwTGluZU9mVGhyZWVUd29HYXBzO1xuICAgICAgICBjb25zdCBwMUxpbmVPZlRocmVlU2NvcmUgPSAzICogcDFMaW5lT2ZUaHJlZU5vR2FwcyArIDIgKiBwMUxpbmVPZlRocmVlT25lR2FwICsgcDFMaW5lT2ZUaHJlZVR3b0dhcHM7XG4gICAgICAgIGNvbnN0IHAwTGluZU9mVHdvU2NvcmUgPSAzICogcDBMaW5lT2ZUd29Ob0dhcHMgKyAyICogcDBMaW5lT2ZUd29PbmVHYXAgKyBwMExpbmVPZlR3b1R3b0dhcHM7XG4gICAgICAgIGNvbnN0IHAxTGluZU9mVHdvU2NvcmUgPSAzICogcDFMaW5lT2ZUd29Ob0dhcHMgKyAyICogcDFMaW5lT2ZUd29PbmVHYXAgKyBwMUxpbmVPZlR3b1R3b0dhcHM7XG4gICAgICAgIGNvbnN0IHAwU2NvcmUgPSAxMCAqIHAwTGluZU9mVGhyZWVTY29yZSArIHAwTGluZU9mVHdvU2NvcmU7XG4gICAgICAgIGNvbnN0IHAxU2NvcmUgPSAxMCAqIHAxTGluZU9mVGhyZWVTY29yZSArIHAxTGluZU9mVHdvU2NvcmU7XG4gICAgICAgIHJldHVybiBwMFNjb3JlIC0gcDFTY29yZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGVtcHR5Q2VsbHMoKTogUG9zaXRpb25bXSB7XG4gICAgICAgIGNvbnN0IGVtcHR5Q2VsbHM6IFBvc2l0aW9uW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLmJvYXJkV2lkdGg7IHgrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbDogUG9zaXRpb24gPSB7IHgsIHk6IDAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNlbGxPY2N1cGllcihjZWxsKSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICBlbXB0eUNlbGxzLnB1c2goY2VsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVtcHR5Q2VsbHM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIG1ha2VNb3ZlKG1vdmU6IFBvc2l0aW9uLCBwbGF5ZXJJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRNb3ZlID0gbW92ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDU7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jZWxsT2NjdXBpZXIoeyB4OiBtb3ZlLngsIHk6IGkgfSkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBtb3ZlLnkgPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm1ha2VNb3ZlKHVwZGF0ZWRNb3ZlLCBwbGF5ZXJJZCk7XG4gICAgfVxufVxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZXMvY29ubmVjdDQvYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0scUJBQXFCLENBQUM7QUFDdkMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUM7QUFDaEQsT0FBTyxlQUFlLE1BQU0sbUNBQW1DLENBQUM7QUFHaEUsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sS0FBTSxTQUFRLElBQXFCO0lBQzFDLGFBQWEsR0FBc0IsRUFBRSxDQUFDO0lBRS9CLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLHNDQUFzQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFbEYsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsc0NBQXNDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUVsRixRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxzQ0FBc0MsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRWhGLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsc0NBQXNDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUV4RixvQkFBb0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLHNDQUFzQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFN0csb0NBQW9DO0lBQ3BDO1FBQ0ksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksZUFB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RTNELE9BQU8sT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLElBQW9CLFVBQVU7UUFDMUIsTUFBTSxVQUFVLEdBQWUsRUFBRSxDQUFDO1FBRWxDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBRW5DLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJO2dCQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNhLFFBQVEsQ0FBQyxJQUFjLEVBQUUsUUFBZ0I7UUFDckQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1gsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2UgZnJvbSBcIi4uLy4uL2Jhc2UvYm9hcmQuanNcIjtcbmltcG9ydCBMb25nSW50IGZyb20gXCIuLi8uLi9iaXRCb2FyZC9sb25nSW50LmpzXCI7XG5pbXBvcnQgTG9uZ0ludEJpdEJvYXJkIGZyb20gXCIuLi8uLi9iaXRCb2FyZC9sb25nSW50Qml0Qm9hcmQuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zaXRpb24gfSBmcm9tIFwiLi4vLi4vYmFzZS9ib2FyZC5qc1wiO1xuXG4vKiogUmVwcmVzZW50cyBhIENvbm5lY3QgNCBib2FyZC4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvYXJkIGV4dGVuZHMgQmFzZTxMb25nSW50Qml0Qm9hcmQ+IHtcbiAgICBwcm90ZWN0ZWQgd2lubmluZ1N0YXRlczogTG9uZ0ludEJpdEJvYXJkW10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgRlVMTF9CT0FSRCA9IG5ldyBMb25nSW50KFswYjExMTFfMTExMTExMV8xMTExMTExXzExMTExMTFfMTExMTExMSwgMGIxMTExMTExXzExMV0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBIT1JJWk9OVEFMID0gbmV3IExvbmdJbnQoWzBiMDAwMF8wMDAwMDAwXzAwMDAwMDBfMDAwMDAwMF8wMDAxMTExLCAwYjAwMDAwMDBfMDAwXSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IFZFUlRJQ0FMID0gbmV3IExvbmdJbnQoWzBiMDAwMF8wMDAwMDAxXzAwMDAwMDFfMDAwMDAwMV8wMDAwMDAxLCAwYjAwMDAwMDBfMDAwXSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IExFQURJTkdfRElBR09OQUwgPSBuZXcgTG9uZ0ludChbMGIwMDAwXzAwMDEwMDBfMDAwMDEwMF8wMDAwMDEwXzAwMDAwMDEsIDBiMDAwMDAwMF8wMDBdKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgTk9OX0xFQURJTkdfRElBR09OQUwgPSBuZXcgTG9uZ0ludChbMGIwMDAwXzAwMDAwMDFfMDAwMDAxMF8wMDAwMTAwXzAwMDEwMDAsIDBiMDAwMDAwMF8wMDBdKTtcblxuICAgIC8qKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJvYXJkLiAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoNywgNik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDY7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lubmluZ1N0YXRlcy5wdXNoKG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludFxuICAgICAgICAgICAgICAgICAgICAubGVmdFNoaWZ0KHRoaXMuSE9SSVpPTlRBTCwgaSArIDcgKiBqKVxuICAgICAgICAgICAgICAgICAgICAuYW5kKHRoaXMuRlVMTF9CT0FSRCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpbm5pbmdTdGF0ZXMucHVzaChuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnRcbiAgICAgICAgICAgICAgICAgICAgLmxlZnRTaGlmdCh0aGlzLlZFUlRJQ0FMLCBpICsgNyAqIGopXG4gICAgICAgICAgICAgICAgICAgIC5hbmQodGhpcy5GVUxMX0JPQVJEKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDM7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lubmluZ1N0YXRlcy5wdXNoKG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludFxuICAgICAgICAgICAgICAgICAgICAubGVmdFNoaWZ0KHRoaXMuTEVBRElOR19ESUFHT05BTCwgaSArIDcgKiBqKVxuICAgICAgICAgICAgICAgICAgICAuYW5kKHRoaXMuRlVMTF9CT0FSRCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpbm5pbmdTdGF0ZXMucHVzaChuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnRcbiAgICAgICAgICAgICAgICAgICAgLmxlZnRTaGlmdCh0aGlzLk5PTl9MRUFESU5HX0RJQUdPTkFMLCBpICsgNyAqIGopXG4gICAgICAgICAgICAgICAgICAgIC5hbmQodGhpcy5GVUxMX0JPQVJEKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENhbGN1bGF0ZXMgdGhlIGhldXJpc3RpYyBzY29yZSBmb3IgdGhlIGN1cnJlbnQgYm9hcmQgc3RhdGUuICovXG4gICAgcHVibGljIGdldCBoZXVyaXN0aWMoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgeyB3aW5uZXIgfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHdpbm5lciA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiAxMDAwO1xuXG4gICAgICAgIGlmICh3aW5uZXIgPT09IDEpXG4gICAgICAgICAgICByZXR1cm4gLTEwMDA7XG5cbiAgICAgICAgY29uc3QgcDBMaW5lT2ZUaHJlZU5vR2FwcyA9IHRoaXMuaGFzTGluZSgwLCAzKTtcbiAgICAgICAgY29uc3QgcDFMaW5lT2ZUaHJlZU5vR2FwcyA9IHRoaXMuaGFzTGluZSgxLCAzKTtcbiAgICAgICAgY29uc3QgcDBMaW5lT2ZUaHJlZU9uZUdhcCA9IHRoaXMuaGFzTGluZSgwLCAzLCAxKTtcbiAgICAgICAgY29uc3QgcDFMaW5lT2ZUaHJlZU9uZUdhcCA9IHRoaXMuaGFzTGluZSgxLCAzLCAxKTtcbiAgICAgICAgY29uc3QgcDBMaW5lT2ZUaHJlZVR3b0dhcHMgPSB0aGlzLmhhc0xpbmUoMCwgMywgMik7XG4gICAgICAgIGNvbnN0IHAxTGluZU9mVGhyZWVUd29HYXBzID0gdGhpcy5oYXNMaW5lKDEsIDMsIDIpO1xuICAgICAgICBjb25zdCBwMExpbmVPZlR3b05vR2FwcyA9IHRoaXMuaGFzTGluZSgwLCAyKTtcbiAgICAgICAgY29uc3QgcDFMaW5lT2ZUd29Ob0dhcHMgPSB0aGlzLmhhc0xpbmUoMSwgMik7XG4gICAgICAgIGNvbnN0IHAwTGluZU9mVHdvT25lR2FwID0gdGhpcy5oYXNMaW5lKDAsIDIsIDEpO1xuICAgICAgICBjb25zdCBwMUxpbmVPZlR3b09uZUdhcCA9IHRoaXMuaGFzTGluZSgxLCAyLCAxKTtcbiAgICAgICAgY29uc3QgcDBMaW5lT2ZUd29Ud29HYXBzID0gdGhpcy5oYXNMaW5lKDAsIDIsIDIpO1xuICAgICAgICBjb25zdCBwMUxpbmVPZlR3b1R3b0dhcHMgPSB0aGlzLmhhc0xpbmUoMSwgMiwgMik7XG4gICAgICAgIGNvbnN0IHAwTGluZU9mVGhyZWVTY29yZSA9IDMgKiBwMExpbmVPZlRocmVlTm9HYXBzICsgMiAqIHAwTGluZU9mVGhyZWVPbmVHYXAgKyBwMExpbmVPZlRocmVlVHdvR2FwcztcbiAgICAgICAgY29uc3QgcDFMaW5lT2ZUaHJlZVNjb3JlID0gMyAqIHAxTGluZU9mVGhyZWVOb0dhcHMgKyAyICogcDFMaW5lT2ZUaHJlZU9uZUdhcCArIHAxTGluZU9mVGhyZWVUd29HYXBzO1xuICAgICAgICBjb25zdCBwMExpbmVPZlR3b1Njb3JlID0gMyAqIHAwTGluZU9mVHdvTm9HYXBzICsgMiAqIHAwTGluZU9mVHdvT25lR2FwICsgcDBMaW5lT2ZUd29Ud29HYXBzO1xuICAgICAgICBjb25zdCBwMUxpbmVPZlR3b1Njb3JlID0gMyAqIHAxTGluZU9mVHdvTm9HYXBzICsgMiAqIHAxTGluZU9mVHdvT25lR2FwICsgcDFMaW5lT2ZUd29Ud29HYXBzO1xuICAgICAgICBjb25zdCBwMFNjb3JlID0gMTAgKiBwMExpbmVPZlRocmVlU2NvcmUgKyBwMExpbmVPZlR3b1Njb3JlO1xuICAgICAgICBjb25zdCBwMVNjb3JlID0gMTAgKiBwMUxpbmVPZlRocmVlU2NvcmUgKyBwMUxpbmVPZlR3b1Njb3JlO1xuXG4gICAgICAgIHJldHVybiBwMFNjb3JlIC0gcDFTY29yZTtcbiAgICB9XG5cbiAgICAvKiogR2VuZXJhdGVzIGEgbGlzdCBvZiBlbXB0eSBjZWxscy4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGVtcHR5Q2VsbHMoKTogUG9zaXRpb25bXSB7XG4gICAgICAgIGNvbnN0IGVtcHR5Q2VsbHM6IFBvc2l0aW9uW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuYm9hcmRXaWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsOiBQb3NpdGlvbiA9IHsgeCwgeTogMCB9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jZWxsT2NjdXBpZXIoY2VsbCkgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgZW1wdHlDZWxscy5wdXNoKGNlbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVtcHR5Q2VsbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFrZXMgYSBtb3ZlIG9uIHRoZSBib2FyZC5cbiAgICAgKiBAcGFyYW0gbW92ZSBUaGUgbW92ZSB0byBtYWtlLlxuICAgICAqIEBwYXJhbSBwbGF5ZXJJZCBUaGUgcGxheWVyIG1ha2luZyB0aGUgbW92ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbWFrZU1vdmUobW92ZTogUG9zaXRpb24sIHBsYXllcklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZE1vdmUgPSBtb3ZlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSA1OyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2VsbE9jY3VwaWVyKHsgeDogbW92ZS54LCB5OiBpIH0pID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbW92ZS55ID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5tYWtlTW92ZSh1cGRhdGVkTW92ZSwgcGxheWVySWQpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,9 +1,27 @@
1
1
  import type { Algorithm, GameConstructorOptions, PlayerType } from "../../base/controller.js";
2
2
  import Base from "../../base/controller.js";
3
3
  import type { Position } from "../../base/board.js";
4
+ /** Represents the controller for connect 4. */
4
5
  export default class Connect4 extends Base {
6
+ /**
7
+ * Creates an instance of Connect4.
8
+ * @param playerOneType The type of player one.
9
+ * @param playerTwoType The type of player two.
10
+ * @param options The options for the game.
11
+ * */
5
12
  constructor(playerOneType: PlayerType, playerTwoType: PlayerType, options?: GameConstructorOptions);
13
+ /**
14
+ * Calculates the CPU's move.
15
+ * @param difficulty The difficulty of the CPU.
16
+ * @param algorithm The algorithm to use.
17
+ * @returns The CPU's move.
18
+ */
6
19
  determineCPUMove(difficulty: Omit<PlayerType, "human">, algorithm?: Algorithm): Position;
20
+ /**
21
+ * Finds the optimal move for the current board state.
22
+ * @param options The options for the algorithm.
23
+ * @returns The optimal move.
24
+ */
7
25
  findOptimalMove(options?: {
8
26
  algorithm?: Algorithm;
9
27
  maxDepth?: number;
@@ -7,6 +7,10 @@
7
7
  import Base, { Game } from "../../base/controller.js";
8
8
  import Board from "./board.js";
9
9
  import Console from "../../console.js";
10
+ /**
11
+ * The default renderer for connect 4.
12
+ * @param controller The controller to render.
13
+ */
10
14
  function defaultRender(controller) {
11
15
  Console.clear();
12
16
  Console.writeLine(controller.board.toString(true, true, false, ["⬤ ", "⬤ "]));
@@ -15,9 +19,21 @@ function defaultRender(controller) {
15
19
  Console.writeLine(winner === null ? "It's a tie!" : `Player ${winner + 1} wins!`);
16
20
  }
17
21
  let Connect4 = class Connect4 extends Base {
22
+ /**
23
+ * Creates an instance of Connect4.
24
+ * @param playerOneType The type of player one.
25
+ * @param playerTwoType The type of player two.
26
+ * @param options The options for the game.
27
+ * */
18
28
  constructor(playerOneType, playerTwoType, options) {
19
29
  super([playerOneType, playerTwoType], new Board(), options?.renderer ?? defaultRender, options?.id, options?.onEnd, options?.onInvalidInput);
20
30
  }
31
+ /**
32
+ * Calculates the CPU's move.
33
+ * @param difficulty The difficulty of the CPU.
34
+ * @param algorithm The algorithm to use.
35
+ * @returns The CPU's move.
36
+ */
21
37
  determineCPUMove(difficulty, algorithm = "alphabeta") {
22
38
  const { emptyCells } = this.board;
23
39
  const randomMove = emptyCells[Math.floor(Math.random() * emptyCells.length)];
@@ -34,6 +50,11 @@ let Connect4 = class Connect4 extends Base {
34
50
  throw new Error("Invalid difficulty.");
35
51
  }
36
52
  }
53
+ /**
54
+ * Finds the optimal move for the current board state.
55
+ * @param options The options for the algorithm.
56
+ * @returns The optimal move.
57
+ */
37
58
  findOptimalMove(options) {
38
59
  const { maxDepth = Infinity, algorithm = "alphabeta" } = options ?? {};
39
60
  if (this.board.isEmpty)
@@ -44,6 +65,7 @@ let Connect4 = class Connect4 extends Base {
44
65
  };
45
66
  Connect4 = __decorate([
46
67
  Game
68
+ /** Represents the controller for connect 4. */
47
69
  ], Connect4);
48
70
  export default Connect4;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy9jb25uZWN0NC9jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBR3ZDLFNBQVMsYUFBYSxDQUFDLFVBQW9CO0lBQ3ZDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNwQyxJQUFJLE1BQU0sS0FBSyxLQUFLO1FBQ2hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFHYyxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVMsU0FBUSxJQUFJO0lBQ3RDLFlBQW1CLGFBQXlCLEVBQUUsYUFBeUIsRUFBRSxPQUFnQztRQUNyRyxLQUFLLENBQ0QsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEVBQzlCLElBQUksS0FBSyxFQUFFLEVBQ1gsT0FBTyxFQUFFLFFBQVEsSUFBSSxhQUFhLEVBQ2xDLE9BQU8sRUFBRSxFQUFFLEVBQ1gsT0FBTyxFQUFFLEtBQUssRUFDZCxPQUFPLEVBQUUsY0FBYyxDQUMxQixDQUFDO0lBQ04sQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQXFDLEVBQUUsWUFBdUIsV0FBVztRQUM3RixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFFLENBQUM7UUFDOUUsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNqQixLQUFLLGVBQWU7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RCxLQUFLLFNBQVM7Z0JBQ1YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELEtBQUssV0FBVztnQkFDWixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUQsS0FBSyxTQUFTO2dCQUNWLE9BQU8sVUFBVSxDQUFDO1lBQ3RCO2dCQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FBQyxPQUd0QjtRQUNHLE1BQU0sRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLFNBQVMsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3ZFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Q0FDSixDQUFBO0FBdkNvQixRQUFRO0lBRDVCLElBQUk7R0FDZ0IsUUFBUSxDQXVDNUI7ZUF2Q29CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFsZ29yaXRobSwgR2FtZUNvbnN0cnVjdG9yT3B0aW9ucywgUGxheWVyVHlwZSB9IGZyb20gXCIuLi8uLi9iYXNlL2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCBCYXNlLCB7IEdhbWUgfSBmcm9tIFwiLi4vLi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgQm9hcmQgZnJvbSBcIi4vYm9hcmQuanNcIjtcbmltcG9ydCBDb25zb2xlIGZyb20gXCIuLi8uLi9jb25zb2xlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcIi4uLy4uL2Jhc2UvYm9hcmQuanNcIjtcblxuZnVuY3Rpb24gZGVmYXVsdFJlbmRlcihjb250cm9sbGVyOiBDb25uZWN0NCk6IHZvaWQge1xuICAgIENvbnNvbGUuY2xlYXIoKTtcbiAgICBDb25zb2xlLndyaXRlTGluZShjb250cm9sbGVyLmJvYXJkLnRvU3RyaW5nKHRydWUsIHRydWUsIGZhbHNlLCBbXCLirKQgXCIsIFwi4qykIFwiXSkpO1xuICAgIGNvbnN0IHsgd2lubmVyIH0gPSBjb250cm9sbGVyLmJvYXJkO1xuICAgIGlmICh3aW5uZXIgIT09IGZhbHNlKVxuICAgICAgICBDb25zb2xlLndyaXRlTGluZSh3aW5uZXIgPT09IG51bGwgPyBcIkl0J3MgYSB0aWUhXCIgOiBgUGxheWVyICR7d2lubmVyICsgMX0gd2lucyFgKTtcbn1cblxuQEdhbWVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbm5lY3Q0IGV4dGVuZHMgQmFzZSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBsYXllck9uZVR5cGU6IFBsYXllclR5cGUsIHBsYXllclR3b1R5cGU6IFBsYXllclR5cGUsIG9wdGlvbnM/OiBHYW1lQ29uc3RydWN0b3JPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgW3BsYXllck9uZVR5cGUsIHBsYXllclR3b1R5cGVdLFxuICAgICAgICAgICAgbmV3IEJvYXJkKCksXG4gICAgICAgICAgICBvcHRpb25zPy5yZW5kZXJlciA/PyBkZWZhdWx0UmVuZGVyLFxuICAgICAgICAgICAgb3B0aW9ucz8uaWQsXG4gICAgICAgICAgICBvcHRpb25zPy5vbkVuZCxcbiAgICAgICAgICAgIG9wdGlvbnM/Lm9uSW52YWxpZElucHV0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGRldGVybWluZUNQVU1vdmUoZGlmZmljdWx0eTogT21pdDxQbGF5ZXJUeXBlLCBcImh1bWFuXCI+LCBhbGdvcml0aG06IEFsZ29yaXRobSA9IFwiYWxwaGFiZXRhXCIpOiBQb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IHsgZW1wdHlDZWxscyB9ID0gdGhpcy5ib2FyZDtcbiAgICAgICAgY29uc3QgcmFuZG9tTW92ZSA9IGVtcHR5Q2VsbHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZW1wdHlDZWxscy5sZW5ndGgpXSE7XG4gICAgICAgIHN3aXRjaCAoZGlmZmljdWx0eSkge1xuICAgICAgICAgICAgY2FzZSBcImltcG9zc2libGVDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kT3B0aW1hbE1vdmUoeyBhbGdvcml0aG0sIG1heERlcHRoOiAxMCB9KTtcbiAgICAgICAgICAgIGNhc2UgXCJoYXJkQ1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCBtYXhEZXB0aDogNSB9KTtcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpdW1DUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kT3B0aW1hbE1vdmUoeyBhbGdvcml0aG0sIG1heERlcHRoOiAzIH0pO1xuICAgICAgICAgICAgY2FzZSBcImVhc3lDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tTW92ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkaWZmaWN1bHR5LlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kT3B0aW1hbE1vdmUob3B0aW9ucz86IHtcbiAgICAgICAgYWxnb3JpdGhtPzogQWxnb3JpdGhtO1xuICAgICAgICBtYXhEZXB0aD86IG51bWJlcjtcbiAgICB9KTogUG9zaXRpb24ge1xuICAgICAgICBjb25zdCB7IG1heERlcHRoID0gSW5maW5pdHksIGFsZ29yaXRobSA9IFwiYWxwaGFiZXRhXCIgfSA9IG9wdGlvbnMgPz8ge307XG4gICAgICAgIGlmICh0aGlzLmJvYXJkLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4geyB4OiAzLCB5OiA1IH07XG4gICAgICAgIGNvbnN0IG1pbmltYXggPSB0aGlzW2FsZ29yaXRobV0obWF4RGVwdGgpO1xuICAgICAgICByZXR1cm4gbWluaW1heC5tb3ZlO1xuICAgIH1cbn1cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy9jb25uZWN0NC9jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBR3ZDOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLFVBQW9CO0lBQ3ZDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUVwQyxJQUFJLE1BQU0sS0FBSyxLQUFLO1FBQ2hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFJYyxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVMsU0FBUSxJQUFJO0lBQ3RDOzs7OztTQUtLO0lBQ0wsWUFBbUIsYUFBeUIsRUFBRSxhQUF5QixFQUFFLE9BQWdDO1FBQ3JHLEtBQUssQ0FDRCxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFDOUIsSUFBSSxLQUFLLEVBQUUsRUFDWCxPQUFPLEVBQUUsUUFBUSxJQUFJLGFBQWEsRUFDbEMsT0FBTyxFQUFFLEVBQUUsRUFDWCxPQUFPLEVBQUUsS0FBSyxFQUNkLE9BQU8sRUFBRSxjQUFjLENBQzFCLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxnQkFBZ0IsQ0FBQyxVQUFxQyxFQUFFLFlBQXVCLFdBQVc7UUFDN0YsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUFDO1FBRTlFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDakIsS0FBSyxlQUFlO2dCQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0QsS0FBSyxTQUFTO2dCQUNWLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RCxLQUFLLFdBQVc7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELEtBQUssU0FBUztnQkFDVixPQUFPLFVBQVUsQ0FBQztZQUN0QjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZSxDQUFDLE9BR3RCO1FBQ0csTUFBTSxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsU0FBUyxHQUFHLFdBQVcsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFdkUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDbEIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBRTFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztDQUNKLENBQUE7QUE1RG9CLFFBQVE7SUFGNUIsSUFBSTtJQUNMLCtDQUErQztHQUMxQixRQUFRLENBNEQ1QjtlQTVEb0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWxnb3JpdGhtLCBHYW1lQ29uc3RydWN0b3JPcHRpb25zLCBQbGF5ZXJUeXBlIH0gZnJvbSBcIi4uLy4uL2Jhc2UvY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IEJhc2UsIHsgR2FtZSB9IGZyb20gXCIuLi8uLi9iYXNlL2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCBCb2FyZCBmcm9tIFwiLi9ib2FyZC5qc1wiO1xuaW1wb3J0IENvbnNvbGUgZnJvbSBcIi4uLy4uL2NvbnNvbGUuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zaXRpb24gfSBmcm9tIFwiLi4vLi4vYmFzZS9ib2FyZC5qc1wiO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHJlbmRlcmVyIGZvciBjb25uZWN0IDQuXG4gKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlciB0byByZW5kZXIuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRSZW5kZXIoY29udHJvbGxlcjogQ29ubmVjdDQpOiB2b2lkIHtcbiAgICBDb25zb2xlLmNsZWFyKCk7XG4gICAgQ29uc29sZS53cml0ZUxpbmUoY29udHJvbGxlci5ib2FyZC50b1N0cmluZyh0cnVlLCB0cnVlLCBmYWxzZSwgW1wi4qykIFwiLCBcIuKspCBcIl0pKTtcbiAgICBjb25zdCB7IHdpbm5lciB9ID0gY29udHJvbGxlci5ib2FyZDtcblxuICAgIGlmICh3aW5uZXIgIT09IGZhbHNlKVxuICAgICAgICBDb25zb2xlLndyaXRlTGluZSh3aW5uZXIgPT09IG51bGwgPyBcIkl0J3MgYSB0aWUhXCIgOiBgUGxheWVyICR7d2lubmVyICsgMX0gd2lucyFgKTtcbn1cblxuQEdhbWVcbi8qKiBSZXByZXNlbnRzIHRoZSBjb250cm9sbGVyIGZvciBjb25uZWN0IDQuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25uZWN0NCBleHRlbmRzIEJhc2Uge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ29ubmVjdDQuXG4gICAgICogQHBhcmFtIHBsYXllck9uZVR5cGUgVGhlIHR5cGUgb2YgcGxheWVyIG9uZS5cbiAgICAgKiBAcGFyYW0gcGxheWVyVHdvVHlwZSBUaGUgdHlwZSBvZiBwbGF5ZXIgdHdvLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgZ2FtZS5cbiAgICAgKiAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwbGF5ZXJPbmVUeXBlOiBQbGF5ZXJUeXBlLCBwbGF5ZXJUd29UeXBlOiBQbGF5ZXJUeXBlLCBvcHRpb25zPzogR2FtZUNvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIFtwbGF5ZXJPbmVUeXBlLCBwbGF5ZXJUd29UeXBlXSxcbiAgICAgICAgICAgIG5ldyBCb2FyZCgpLFxuICAgICAgICAgICAgb3B0aW9ucz8ucmVuZGVyZXIgPz8gZGVmYXVsdFJlbmRlcixcbiAgICAgICAgICAgIG9wdGlvbnM/LmlkLFxuICAgICAgICAgICAgb3B0aW9ucz8ub25FbmQsXG4gICAgICAgICAgICBvcHRpb25zPy5vbkludmFsaWRJbnB1dCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBDUFUncyBtb3ZlLlxuICAgICAqIEBwYXJhbSBkaWZmaWN1bHR5IFRoZSBkaWZmaWN1bHR5IG9mIHRoZSBDUFUuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobSBUaGUgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgQ1BVJ3MgbW92ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0ZXJtaW5lQ1BVTW92ZShkaWZmaWN1bHR5OiBPbWl0PFBsYXllclR5cGUsIFwiaHVtYW5cIj4sIGFsZ29yaXRobTogQWxnb3JpdGhtID0gXCJhbHBoYWJldGFcIik6IFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgeyBlbXB0eUNlbGxzIH0gPSB0aGlzLmJvYXJkO1xuICAgICAgICBjb25zdCByYW5kb21Nb3ZlID0gZW1wdHlDZWxsc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBlbXB0eUNlbGxzLmxlbmd0aCldITtcblxuICAgICAgICBzd2l0Y2ggKGRpZmZpY3VsdHkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvc3NpYmxlQ1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCBtYXhEZXB0aDogMTAgfSk7XG4gICAgICAgICAgICBjYXNlIFwiaGFyZENQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRPcHRpbWFsTW92ZSh7IGFsZ29yaXRobSwgbWF4RGVwdGg6IDUgfSk7XG4gICAgICAgICAgICBjYXNlIFwibWVkaXVtQ1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCBtYXhEZXB0aDogMyB9KTtcbiAgICAgICAgICAgIGNhc2UgXCJlYXN5Q1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbU1vdmU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGlmZmljdWx0eS5cIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgb3B0aW1hbCBtb3ZlIGZvciB0aGUgY3VycmVudCBib2FyZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIGFsZ29yaXRobS5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT3B0aW1hbE1vdmUob3B0aW9ucz86IHtcbiAgICAgICAgYWxnb3JpdGhtPzogQWxnb3JpdGhtO1xuICAgICAgICBtYXhEZXB0aD86IG51bWJlcjtcbiAgICB9KTogUG9zaXRpb24ge1xuICAgICAgICBjb25zdCB7IG1heERlcHRoID0gSW5maW5pdHksIGFsZ29yaXRobSA9IFwiYWxwaGFiZXRhXCIgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICAgICAgaWYgKHRoaXMuYm9hcmQuaXNFbXB0eSlcbiAgICAgICAgICAgIHJldHVybiB7IHg6IDMsIHk6IDUgfTtcblxuICAgICAgICBjb25zdCBtaW5pbWF4ID0gdGhpc1thbGdvcml0aG1dKG1heERlcHRoKTtcblxuICAgICAgICByZXR1cm4gbWluaW1heC5tb3ZlO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,7 +1,10 @@
1
1
  import Base from "../../base/board.js";
2
2
  import IntBitBoard from "../../bitBoard/intBitBoard.js";
3
+ /** Represents a Tic Tac Toe board. */
3
4
  export default class Board extends Base<IntBitBoard> {
4
5
  protected winningStates: IntBitBoard[];
6
+ /** Creates an instance of Board. */
5
7
  constructor();
8
+ /** Calculates the heuristic score for the current board state. */
6
9
  get heuristic(): number;
7
10
  }
@@ -1,11 +1,14 @@
1
1
  import Base from "../../base/board.js";
2
2
  import IntBitBoard from "../../bitBoard/intBitBoard.js";
3
+ /** Represents a Tic Tac Toe board. */
3
4
  export default class Board extends Base {
4
5
  winningStates = [0x007, 0x038, 0x1C0, 0x049, 0x092, 0x124, 0x111, 0x054]
5
6
  .map((data) => new IntBitBoard(data));
7
+ /** Creates an instance of Board. */
6
8
  constructor() {
7
9
  super(3, 3);
8
10
  }
11
+ /** Calculates the heuristic score for the current board state. */
9
12
  get heuristic() {
10
13
  const { winner } = this;
11
14
  if (winner === 0)
@@ -15,4 +18,4 @@ export default class Board extends Base {
15
18
  return 0;
16
19
  }
17
20
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZXMvdGljdGFjdG9lL2JvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZDLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxPQUFPLE9BQU8sS0FBTSxTQUFRLElBQWlCO0lBQ3RDLGFBQWEsR0FBa0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1NBQzVGLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUUxQztRQUNJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQVcsU0FBUztRQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksTUFBTSxLQUFLLENBQUM7WUFDWixPQUFPLENBQUMsQ0FBQztRQUNiLElBQUksTUFBTSxLQUFLLENBQUM7WUFDWixPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZSBmcm9tIFwiLi4vLi4vYmFzZS9ib2FyZC5qc1wiO1xuaW1wb3J0IEludEJpdEJvYXJkIGZyb20gXCIuLi8uLi9iaXRCb2FyZC9pbnRCaXRCb2FyZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2FyZCBleHRlbmRzIEJhc2U8SW50Qml0Qm9hcmQ+IHtcbiAgICBwcm90ZWN0ZWQgd2lubmluZ1N0YXRlczogSW50Qml0Qm9hcmRbXSA9IFsweDAwNywgMHgwMzgsIDB4MUMwLCAweDA0OSwgMHgwOTIsIDB4MTI0LCAweDExMSwgMHgwNTRdXG4gICAgICAgIC5tYXAoKGRhdGEpID0+IG5ldyBJbnRCaXRCb2FyZChkYXRhKSk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKDMsIDMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGV1cmlzdGljKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHsgd2lubmVyIH0gPSB0aGlzO1xuICAgICAgICBpZiAod2lubmVyID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIGlmICh3aW5uZXIgPT09IDEpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZXMvdGljdGFjdG9lL2JvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZDLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBRXhELHNDQUFzQztBQUN0QyxNQUFNLENBQUMsT0FBTyxPQUFPLEtBQU0sU0FBUSxJQUFpQjtJQUN0QyxhQUFhLEdBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztTQUM1RixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFMUMsb0NBQW9DO0lBQ3BDO1FBQ0ksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLElBQVcsU0FBUztRQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRXhCLElBQUksTUFBTSxLQUFLLENBQUM7WUFDWixPQUFPLENBQUMsQ0FBQztRQUViLElBQUksTUFBTSxLQUFLLENBQUM7WUFDWixPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRWQsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZSBmcm9tIFwiLi4vLi4vYmFzZS9ib2FyZC5qc1wiO1xuaW1wb3J0IEludEJpdEJvYXJkIGZyb20gXCIuLi8uLi9iaXRCb2FyZC9pbnRCaXRCb2FyZC5qc1wiO1xuXG4vKiogUmVwcmVzZW50cyBhIFRpYyBUYWMgVG9lIGJvYXJkLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9hcmQgZXh0ZW5kcyBCYXNlPEludEJpdEJvYXJkPiB7XG4gICAgcHJvdGVjdGVkIHdpbm5pbmdTdGF0ZXM6IEludEJpdEJvYXJkW10gPSBbMHgwMDcsIDB4MDM4LCAweDFDMCwgMHgwNDksIDB4MDkyLCAweDEyNCwgMHgxMTEsIDB4MDU0XVxuICAgICAgICAubWFwKChkYXRhKSA9PiBuZXcgSW50Qml0Qm9hcmQoZGF0YSkpO1xuXG4gICAgLyoqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQm9hcmQuICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigzLCAzKTtcbiAgICB9XG5cbiAgICAvKiogQ2FsY3VsYXRlcyB0aGUgaGV1cmlzdGljIHNjb3JlIGZvciB0aGUgY3VycmVudCBib2FyZCBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgZ2V0IGhldXJpc3RpYygpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB7IHdpbm5lciB9ID0gdGhpcztcblxuICAgICAgICBpZiAod2lubmVyID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIDE7XG5cbiAgICAgICAgaWYgKHdpbm5lciA9PT0gMSlcbiAgICAgICAgICAgIHJldHVybiAtMTtcblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG59XG4iXX0=
@@ -1,9 +1,29 @@
1
1
  import type { Algorithm, GameConstructorOptions, PlayerType } from "../../base/controller.js";
2
2
  import Base from "../../base/controller.js";
3
3
  import type { Position } from "../../base/board.js";
4
+ /** A game of TicTacToe. */
4
5
  export default class TicTacToe extends Base {
6
+ /**
7
+ * Creates a new TicTacToe game.
8
+ * @param playerOneType The type of player one.
9
+ * @param playerTwoType The type of player two.
10
+ * @param options The options for the game.
11
+ */
5
12
  constructor(playerOneType: PlayerType, playerTwoType: PlayerType, options?: GameConstructorOptions);
13
+ /**
14
+ * Calculates the CPU's move.
15
+ * @param difficulty The difficulty of the CPU.
16
+ * @param algorithm The algorithm to use.
17
+ * @returns The CPU's move.
18
+ */
6
19
  determineCPUMove(difficulty: Omit<PlayerType, "human">, algorithm?: Algorithm): Position;
20
+ /**
21
+ * Finds the optimal move for the current player.
22
+ * @param algorithm The algorithm to use.
23
+ * @param maxDepth The maximum depth to search.
24
+ * @param randomMove The move to return if the board is empty.
25
+ * @returns The optimal move.
26
+ */
7
27
  findOptimalMove({ algorithm, randomMove }?: {
8
28
  algorithm: Algorithm;
9
29
  randomMove: Position;
@@ -7,6 +7,10 @@
7
7
  import Base, { Game } from "../../base/controller.js";
8
8
  import Board from "./board.js";
9
9
  import Console from "../../console.js";
10
+ /**
11
+ * The default rendering function for TicTacToe.
12
+ * @param controller The controller to render.
13
+ */
10
14
  function defaultRender(controller) {
11
15
  Console.clear();
12
16
  Console.writeLine(controller.board.toString(false));
@@ -15,9 +19,21 @@ function defaultRender(controller) {
15
19
  Console.writeLine(winner === null ? "It's a tie!" : `Player ${winner + 1} wins!`);
16
20
  }
17
21
  let TicTacToe = class TicTacToe extends Base {
22
+ /**
23
+ * Creates a new TicTacToe game.
24
+ * @param playerOneType The type of player one.
25
+ * @param playerTwoType The type of player two.
26
+ * @param options The options for the game.
27
+ */
18
28
  constructor(playerOneType, playerTwoType, options) {
19
29
  super([playerOneType, playerTwoType], new Board(), options?.renderer ?? defaultRender, options?.id, options?.onEnd, options?.onInvalidInput);
20
30
  }
31
+ /**
32
+ * Calculates the CPU's move.
33
+ * @param difficulty The difficulty of the CPU.
34
+ * @param algorithm The algorithm to use.
35
+ * @returns The CPU's move.
36
+ */
21
37
  determineCPUMove(difficulty, algorithm = "alphabeta") {
22
38
  const { emptyCells } = this.board;
23
39
  const randomMove = emptyCells[Math.floor(Math.random() * emptyCells.length)];
@@ -35,6 +51,13 @@ let TicTacToe = class TicTacToe extends Base {
35
51
  throw new Error("Invalid difficulty.");
36
52
  }
37
53
  }
54
+ /**
55
+ * Finds the optimal move for the current player.
56
+ * @param algorithm The algorithm to use.
57
+ * @param maxDepth The maximum depth to search.
58
+ * @param randomMove The move to return if the board is empty.
59
+ * @returns The optimal move.
60
+ */
38
61
  findOptimalMove({ algorithm, randomMove } = { algorithm: "alphabeta", randomMove: { x: 2, y: 2 } }) {
39
62
  if (this.board.isEmpty)
40
63
  return randomMove;
@@ -44,6 +67,7 @@ let TicTacToe = class TicTacToe extends Base {
44
67
  };
45
68
  TicTacToe = __decorate([
46
69
  Game
70
+ /** A game of TicTacToe. */
47
71
  ], TicTacToe);
48
72
  export default TicTacToe;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy90aWN0YWN0b2UvY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUd2QyxTQUFTLGFBQWEsQ0FBQyxVQUFxQjtJQUN4QyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ3BDLElBQUksTUFBTSxLQUFLLEtBQUs7UUFDaEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQUdjLElBQU0sU0FBUyxHQUFmLE1BQU0sU0FBVSxTQUFRLElBQUk7SUFDdkMsWUFBbUIsYUFBeUIsRUFBRSxhQUF5QixFQUFFLE9BQWdDO1FBQ3JHLEtBQUssQ0FDRCxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFDOUIsSUFBSSxLQUFLLEVBQUUsRUFDWCxPQUFPLEVBQUUsUUFBUSxJQUFJLGFBQWEsRUFDbEMsT0FBTyxFQUFFLEVBQUUsRUFDWCxPQUFPLEVBQUUsS0FBSyxFQUNkLE9BQU8sRUFBRSxjQUFjLENBQzFCLENBQUM7SUFDTixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsVUFBcUMsRUFBRSxZQUF1QixXQUFXO1FBQzdGLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUUsQ0FBQztRQUM5RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEUsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNqQixLQUFLLGVBQWU7Z0JBQ2hCLE9BQU8sV0FBVyxDQUFDO1lBQ3ZCLEtBQUssU0FBUztnQkFDVixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzFELEtBQUssV0FBVztnQkFDWixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzFELEtBQUssU0FBUztnQkFDVixPQUFPLFVBQVUsQ0FBQztZQUN0QjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxLQUcxQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDbEIsT0FBTyxVQUFVLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Q0FDSixDQUFBO0FBdkNvQixTQUFTO0lBRDdCLElBQUk7R0FDZ0IsU0FBUyxDQXVDN0I7ZUF2Q29CLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFsZ29yaXRobSwgR2FtZUNvbnN0cnVjdG9yT3B0aW9ucywgUGxheWVyVHlwZSB9IGZyb20gXCIuLi8uLi9iYXNlL2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCBCYXNlLCB7IEdhbWUgfSBmcm9tIFwiLi4vLi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgQm9hcmQgZnJvbSBcIi4vYm9hcmQuanNcIjtcbmltcG9ydCBDb25zb2xlIGZyb20gXCIuLi8uLi9jb25zb2xlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcIi4uLy4uL2Jhc2UvYm9hcmQuanNcIjtcblxuZnVuY3Rpb24gZGVmYXVsdFJlbmRlcihjb250cm9sbGVyOiBUaWNUYWNUb2UpOiB2b2lkIHtcbiAgICBDb25zb2xlLmNsZWFyKCk7XG4gICAgQ29uc29sZS53cml0ZUxpbmUoY29udHJvbGxlci5ib2FyZC50b1N0cmluZyhmYWxzZSkpO1xuICAgIGNvbnN0IHsgd2lubmVyIH0gPSBjb250cm9sbGVyLmJvYXJkO1xuICAgIGlmICh3aW5uZXIgIT09IGZhbHNlKVxuICAgICAgICBDb25zb2xlLndyaXRlTGluZSh3aW5uZXIgPT09IG51bGwgPyBcIkl0J3MgYSB0aWUhXCIgOiBgUGxheWVyICR7d2lubmVyICsgMX0gd2lucyFgKTtcbn1cblxuQEdhbWVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpY1RhY1RvZSBleHRlbmRzIEJhc2Uge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwbGF5ZXJPbmVUeXBlOiBQbGF5ZXJUeXBlLCBwbGF5ZXJUd29UeXBlOiBQbGF5ZXJUeXBlLCBvcHRpb25zPzogR2FtZUNvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIFtwbGF5ZXJPbmVUeXBlLCBwbGF5ZXJUd29UeXBlXSxcbiAgICAgICAgICAgIG5ldyBCb2FyZCgpLFxuICAgICAgICAgICAgb3B0aW9ucz8ucmVuZGVyZXIgPz8gZGVmYXVsdFJlbmRlcixcbiAgICAgICAgICAgIG9wdGlvbnM/LmlkLFxuICAgICAgICAgICAgb3B0aW9ucz8ub25FbmQsXG4gICAgICAgICAgICBvcHRpb25zPy5vbkludmFsaWRJbnB1dFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXRlcm1pbmVDUFVNb3ZlKGRpZmZpY3VsdHk6IE9taXQ8UGxheWVyVHlwZSwgXCJodW1hblwiPiwgYWxnb3JpdGhtOiBBbGdvcml0aG0gPSBcImFscGhhYmV0YVwiKTogUG9zaXRpb24ge1xuICAgICAgICBjb25zdCB7IGVtcHR5Q2VsbHMgfSA9IHRoaXMuYm9hcmQ7XG4gICAgICAgIGNvbnN0IHJhbmRvbU1vdmUgPSBlbXB0eUNlbGxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGVtcHR5Q2VsbHMubGVuZ3RoKV0hO1xuICAgICAgICBjb25zdCBvcHRpbWFsTW92ZSA9IHRoaXMuZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCByYW5kb21Nb3ZlIH0pO1xuICAgICAgICBzd2l0Y2ggKGRpZmZpY3VsdHkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvc3NpYmxlQ1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGltYWxNb3ZlO1xuICAgICAgICAgICAgY2FzZSBcImhhcmRDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSA8IDAuOCA/IG9wdGltYWxNb3ZlIDogcmFuZG9tTW92ZTtcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpdW1DUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSA8IDAuNSA/IG9wdGltYWxNb3ZlIDogcmFuZG9tTW92ZTtcbiAgICAgICAgICAgIGNhc2UgXCJlYXN5Q1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbU1vdmU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGlmZmljdWx0eS5cIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCByYW5kb21Nb3ZlIH06IHtcbiAgICAgICAgYWxnb3JpdGhtOiBBbGdvcml0aG07XG4gICAgICAgIHJhbmRvbU1vdmU6IFBvc2l0aW9uO1xuICAgIH0gPSB7IGFsZ29yaXRobTogXCJhbHBoYWJldGFcIiwgcmFuZG9tTW92ZTogeyB4OiAyLCB5OiAyIH0gfSk6IFBvc2l0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYm9hcmQuaXNFbXB0eSlcbiAgICAgICAgICAgIHJldHVybiByYW5kb21Nb3ZlO1xuICAgICAgICBjb25zdCBtaW5pbWF4ID0gdGhpc1thbGdvcml0aG1dKCk7XG4gICAgICAgIHJldHVybiBtaW5pbWF4Lm1vdmU7XG4gICAgfVxufVxuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy90aWN0YWN0b2UvY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUd2Qzs7O0dBR0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxVQUFxQjtJQUN4QyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBRXBDLElBQUksTUFBTSxLQUFLLEtBQUs7UUFDaEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQUljLElBQU0sU0FBUyxHQUFmLE1BQU0sU0FBVSxTQUFRLElBQUk7SUFDdkM7Ozs7O09BS0c7SUFDSCxZQUFtQixhQUF5QixFQUFFLGFBQXlCLEVBQUUsT0FBZ0M7UUFDckcsS0FBSyxDQUNELENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLEtBQUssRUFBRSxFQUNYLE9BQU8sRUFBRSxRQUFRLElBQUksYUFBYSxFQUNsQyxPQUFPLEVBQUUsRUFBRSxFQUNYLE9BQU8sRUFBRSxLQUFLLEVBQ2QsT0FBTyxFQUFFLGNBQWMsQ0FDMUIsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLFVBQXFDLEVBQUUsWUFBdUIsV0FBVztRQUM3RixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFFLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDakIsS0FBSyxlQUFlO2dCQUNoQixPQUFPLFdBQVcsQ0FBQztZQUN2QixLQUFLLFNBQVM7Z0JBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUMxRCxLQUFLLFdBQVc7Z0JBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUMxRCxLQUFLLFNBQVM7Z0JBQ1YsT0FBTyxVQUFVLENBQUM7WUFDdEI7Z0JBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsS0FHMUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2xCLE9BQU8sVUFBVSxDQUFDO1FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBRWxDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0NBQ0osQ0FBQTtBQTdEb0IsU0FBUztJQUY3QixJQUFJO0lBQ0wsMkJBQTJCO0dBQ04sU0FBUyxDQTZEN0I7ZUE3RG9CLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFsZ29yaXRobSwgR2FtZUNvbnN0cnVjdG9yT3B0aW9ucywgUGxheWVyVHlwZSB9IGZyb20gXCIuLi8uLi9iYXNlL2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCBCYXNlLCB7IEdhbWUgfSBmcm9tIFwiLi4vLi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgQm9hcmQgZnJvbSBcIi4vYm9hcmQuanNcIjtcbmltcG9ydCBDb25zb2xlIGZyb20gXCIuLi8uLi9jb25zb2xlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcIi4uLy4uL2Jhc2UvYm9hcmQuanNcIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCByZW5kZXJpbmcgZnVuY3Rpb24gZm9yIFRpY1RhY1RvZS5cbiAqIEBwYXJhbSBjb250cm9sbGVyIFRoZSBjb250cm9sbGVyIHRvIHJlbmRlci5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFJlbmRlcihjb250cm9sbGVyOiBUaWNUYWNUb2UpOiB2b2lkIHtcbiAgICBDb25zb2xlLmNsZWFyKCk7XG4gICAgQ29uc29sZS53cml0ZUxpbmUoY29udHJvbGxlci5ib2FyZC50b1N0cmluZyhmYWxzZSkpO1xuICAgIGNvbnN0IHsgd2lubmVyIH0gPSBjb250cm9sbGVyLmJvYXJkO1xuXG4gICAgaWYgKHdpbm5lciAhPT0gZmFsc2UpXG4gICAgICAgIENvbnNvbGUud3JpdGVMaW5lKHdpbm5lciA9PT0gbnVsbCA/IFwiSXQncyBhIHRpZSFcIiA6IGBQbGF5ZXIgJHt3aW5uZXIgKyAxfSB3aW5zIWApO1xufVxuXG5AR2FtZVxuLyoqIEEgZ2FtZSBvZiBUaWNUYWNUb2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaWNUYWNUb2UgZXh0ZW5kcyBCYXNlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFRpY1RhY1RvZSBnYW1lLlxuICAgICAqIEBwYXJhbSBwbGF5ZXJPbmVUeXBlIFRoZSB0eXBlIG9mIHBsYXllciBvbmUuXG4gICAgICogQHBhcmFtIHBsYXllclR3b1R5cGUgVGhlIHR5cGUgb2YgcGxheWVyIHR3by5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIGdhbWUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBsYXllck9uZVR5cGU6IFBsYXllclR5cGUsIHBsYXllclR3b1R5cGU6IFBsYXllclR5cGUsIG9wdGlvbnM/OiBHYW1lQ29uc3RydWN0b3JPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgW3BsYXllck9uZVR5cGUsIHBsYXllclR3b1R5cGVdLFxuICAgICAgICAgICAgbmV3IEJvYXJkKCksXG4gICAgICAgICAgICBvcHRpb25zPy5yZW5kZXJlciA/PyBkZWZhdWx0UmVuZGVyLFxuICAgICAgICAgICAgb3B0aW9ucz8uaWQsXG4gICAgICAgICAgICBvcHRpb25zPy5vbkVuZCxcbiAgICAgICAgICAgIG9wdGlvbnM/Lm9uSW52YWxpZElucHV0LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIENQVSdzIG1vdmUuXG4gICAgICogQHBhcmFtIGRpZmZpY3VsdHkgVGhlIGRpZmZpY3VsdHkgb2YgdGhlIENQVS5cbiAgICAgKiBAcGFyYW0gYWxnb3JpdGhtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIFRoZSBDUFUncyBtb3ZlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRlcm1pbmVDUFVNb3ZlKGRpZmZpY3VsdHk6IE9taXQ8UGxheWVyVHlwZSwgXCJodW1hblwiPiwgYWxnb3JpdGhtOiBBbGdvcml0aG0gPSBcImFscGhhYmV0YVwiKTogUG9zaXRpb24ge1xuICAgICAgICBjb25zdCB7IGVtcHR5Q2VsbHMgfSA9IHRoaXMuYm9hcmQ7XG4gICAgICAgIGNvbnN0IHJhbmRvbU1vdmUgPSBlbXB0eUNlbGxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGVtcHR5Q2VsbHMubGVuZ3RoKV0hO1xuICAgICAgICBjb25zdCBvcHRpbWFsTW92ZSA9IHRoaXMuZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCByYW5kb21Nb3ZlIH0pO1xuXG4gICAgICAgIHN3aXRjaCAoZGlmZmljdWx0eSkge1xuICAgICAgICAgICAgY2FzZSBcImltcG9zc2libGVDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW1hbE1vdmU7XG4gICAgICAgICAgICBjYXNlIFwiaGFyZENQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgMC44ID8gb3B0aW1hbE1vdmUgOiByYW5kb21Nb3ZlO1xuICAgICAgICAgICAgY2FzZSBcIm1lZGl1bUNQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgMC41ID8gb3B0aW1hbE1vdmUgOiByYW5kb21Nb3ZlO1xuICAgICAgICAgICAgY2FzZSBcImVhc3lDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tTW92ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkaWZmaWN1bHR5LlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBvcHRpbWFsIG1vdmUgZm9yIHRoZSBjdXJyZW50IHBsYXllci5cbiAgICAgKiBAcGFyYW0gYWxnb3JpdGhtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEBwYXJhbSBtYXhEZXB0aCBUaGUgbWF4aW11bSBkZXB0aCB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIHJhbmRvbU1vdmUgVGhlIG1vdmUgdG8gcmV0dXJuIGlmIHRoZSBib2FyZCBpcyBlbXB0eS5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT3B0aW1hbE1vdmUoeyBhbGdvcml0aG0sIHJhbmRvbU1vdmUgfToge1xuICAgICAgICBhbGdvcml0aG06IEFsZ29yaXRobTtcbiAgICAgICAgcmFuZG9tTW92ZTogUG9zaXRpb247XG4gICAgfSA9IHsgYWxnb3JpdGhtOiBcImFscGhhYmV0YVwiLCByYW5kb21Nb3ZlOiB7IHg6IDIsIHk6IDIgfSB9KTogUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5ib2FyZC5pc0VtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIHJhbmRvbU1vdmU7XG5cbiAgICAgICAgY29uc3QgbWluaW1heCA9IHRoaXNbYWxnb3JpdGhtXSgpO1xuXG4gICAgICAgIHJldHVybiBtaW5pbWF4Lm1vdmU7XG4gICAgfVxufVxuIl19
package/build/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { default as TicTacToe } from "./games/tictactoe/controller.js";
2
2
  export { default as Connect4 } from "./games/connect4/controller.js";
3
+ export type { default as Game } from "./base/controller.js";
package/build/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { default as TicTacToe } from "./games/tictactoe/controller.js";
2
2
  export { default as Connect4 } from "./games/connect4/controller.js";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBUaWNUYWNUb2UgfSBmcm9tIFwiLi9nYW1lcy90aWN0YWN0b2UvY29udHJvbGxlci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25uZWN0NCB9IGZyb20gXCIuL2dhbWVzL2Nvbm5lY3Q0L2NvbnRyb2xsZXIuanNcIjtcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBUaWNUYWNUb2UgfSBmcm9tIFwiLi9nYW1lcy90aWN0YWN0b2UvY29udHJvbGxlci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25uZWN0NCB9IGZyb20gXCIuL2dhbWVzL2Nvbm5lY3Q0L2NvbnRyb2xsZXIuanNcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBHYW1lIH0gZnJvbSBcIi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import createConfig from "@oathompsonjones/eslint-config";
2
+
3
+ export default createConfig("./tsconfig.json");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oathompsonjones/mini-games",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "A selection of MiniGames. You will soon be able to play these games on [my website](https://oathompsonjones.co.uk/arcade).",
5
5
  "repository": {
6
6
  "url": "https://github.com/oathompsonjones/MiniGames.git"
@@ -12,21 +12,19 @@
12
12
  "author": "oathompsonjones",
13
13
  "license": "MIT",
14
14
  "devDependencies": {
15
- "@oathompsonjones/eslint-config": "^0.0.72",
16
- "@oathompsonjones/ts-config": "^0.0.27",
17
- "@types/node": "^20.10.5",
15
+ "@oathompsonjones/eslint-config": "^1.0.9",
16
+ "@oathompsonjones/ts-config": "^0.0.31",
17
+ "@types/node": "^20.11.7",
18
18
  "typescript": "^5.3.3",
19
- "vitest": "^1.1.0"
19
+ "vitest": "^1.2.2"
20
20
  },
21
21
  "dependencies": {
22
- "@milahu/patch-package": "^6.4.14",
23
22
  "eventemitter3": "^5.0.1"
24
23
  },
25
24
  "scripts": {
26
25
  "lint": "eslint .",
27
26
  "test": "vitest run",
28
27
  "build": "tsc --project tsconfig.build.json",
29
- "start": "node .",
30
- "postinstall": "patch-package"
28
+ "start": "node ."
31
29
  }
32
30
  }
package/.eslintrc DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "extends": "@oathompsonjones/eslint-config",
3
- "parserOptions": {
4
- "project": "./tsconfig.json"
5
- }
6
- }