@oathompsonjones/mini-games 1.0.13 → 1.0.14

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.
@@ -4,36 +4,31 @@ import type LongInt from "../bitBoard/longInt.js";
4
4
  import type { Position } from "./board.js";
5
5
  export type PlayerType = "easyCPU" | "hardCPU" | "human" | "impossibleCPU" | "mediumCPU";
6
6
  export type Algorithm = "alphabeta" | "minimax";
7
- export type GameConstructorOptions<T, U extends LongInt | number> = {
8
- id: T;
7
+ export type GameConstructorOptions<T extends Board<LongInt | number>> = {
9
8
  onEnd?: (winner: number | null) => Promise<void> | void;
10
9
  onInvalidInput?: (position: Position) => Promise<void> | void;
11
- renderer?: (controller: Controller<T, U>) => Promise<void> | void;
10
+ renderer?: (controller: Controller<T>) => Promise<void> | void;
12
11
  };
13
- export type GameConstructor<T, U extends LongInt | number> = {
14
- new (playerOneType: PlayerType, playerTwoType: PlayerType, options: GameConstructorOptions<T, U>): Controller<T, U>;
12
+ export type GameConstructor<T extends Board<LongInt | number>> = {
13
+ new (playerOneType: PlayerType, playerTwoType: PlayerType, options?: GameConstructorOptions<T>): Controller<T>;
15
14
  };
16
15
  /**
17
16
  * Decorator to check that the constructor type for the given class is correct.
18
- * @template T - The type of the game ID.
19
- * @template U - The type of the board values.
17
+ * @template T - The type of board.
20
18
  * @param constructor - The class to check.
21
19
  */
22
- export declare function Game<T, U extends LongInt | number>(constructor: GameConstructor<T, U>): void;
20
+ export declare function Game<T extends Board<LongInt | number>>(constructor: GameConstructor<T>): void;
23
21
  /**
24
22
  * Represents a game controller.
25
- * @template T - The type of the game ID.
26
- * @template U - The type of the board values.
23
+ * @template T - The type of board.
27
24
  */
28
- export default abstract class Controller<T, U extends LongInt | number> extends EventEmitter<{
29
- end: GameConstructorOptions<T, U>["onEnd"];
30
- input: GameConstructorOptions<T, U>["onInvalidInput"];
31
- invalidInput: GameConstructorOptions<T, U>["onInvalidInput"];
25
+ export default abstract class Controller<T extends Board<LongInt | number>> extends EventEmitter<{
26
+ end: GameConstructorOptions<T>["onEnd"];
27
+ input: GameConstructorOptions<T>["onInvalidInput"];
28
+ invalidInput: GameConstructorOptions<T>["onInvalidInput"];
32
29
  }> {
33
- /** Contains the ID of the game. */
34
- readonly gameID: T;
35
30
  /** Contains the board. */
36
- readonly board: Board<U>;
31
+ readonly board: T;
37
32
  /** Contains the view object. */
38
33
  readonly render: () => Promise<void> | void;
39
34
  /** Contains the player objects. */
@@ -48,11 +43,10 @@ export default abstract class Controller<T, U extends LongInt | number> extends
48
43
  * @param playerTypes - The types of player for the game.
49
44
  * @param board - The board object.
50
45
  * @param render - The render function.
51
- * @param gameID - The ID of the game instance.
52
46
  * @param onEnd - The function to call when the game ends.
53
47
  * @param onInvalidInput - The function to call when the input is invalid.
54
48
  */
55
- protected constructor(playerTypes: PlayerType[], board: Board<U>, render: Required<GameConstructorOptions<T, U>>["renderer"], gameID: T, onEnd?: GameConstructorOptions<T, U>["onEnd"], onInvalidInput?: GameConstructorOptions<T, U>["onInvalidInput"]);
49
+ protected constructor(playerTypes: PlayerType[], board: T, render: Required<GameConstructorOptions<T>>["renderer"], onEnd?: GameConstructorOptions<T>["onEnd"], onInvalidInput?: GameConstructorOptions<T>["onInvalidInput"]);
56
50
  /**
57
51
  * Gets the current player object.
58
52
  * @returns The current player object.
@@ -1,8 +1,7 @@
1
1
  import { EventEmitter } from "eventemitter3";
2
2
  /**
3
3
  * Decorator to check that the constructor type for the given class is correct.
4
- * @template T - The type of the game ID.
5
- * @template U - The type of the board values.
4
+ * @template T - The type of board.
6
5
  * @param constructor - The class to check.
7
6
  */
8
7
  export function Game(constructor) {
@@ -10,12 +9,9 @@ export function Game(constructor) {
10
9
  }
11
10
  /**
12
11
  * Represents a game controller.
13
- * @template T - The type of the game ID.
14
- * @template U - The type of the board values.
12
+ * @template T - The type of board.
15
13
  */
16
14
  export default class Controller extends EventEmitter {
17
- /** Contains the ID of the game. */
18
- gameID;
19
15
  /** Contains the board. */
20
16
  board;
21
17
  /** Contains the view object. */
@@ -29,14 +25,11 @@ export default class Controller extends EventEmitter {
29
25
  * @param playerTypes - The types of player for the game.
30
26
  * @param board - The board object.
31
27
  * @param render - The render function.
32
- * @param gameID - The ID of the game instance.
33
28
  * @param onEnd - The function to call when the game ends.
34
29
  * @param onInvalidInput - The function to call when the input is invalid.
35
30
  */
36
- // eslint-disable-next-line @typescript-eslint/max-params
37
- constructor(playerTypes, board, render, gameID, onEnd, onInvalidInput) {
31
+ constructor(playerTypes, board, render, onEnd, onInvalidInput) {
38
32
  super();
39
- this.gameID = gameID;
40
33
  this.board = board;
41
34
  this.players = playerTypes.map((playerType, id) => ({ id, playerType }));
42
35
  this.render = render.bind(null, this);
@@ -178,4 +171,4 @@ export default class Controller extends EventEmitter {
178
171
  this.nextTurn();
179
172
  }
180
173
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL2NvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWdCN0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFnQyxXQUFrQztJQUNsRixLQUFLLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQWdCLFVBQTBDLFNBQVEsWUFJOUU7SUFDRSxtQ0FBbUM7SUFDbkIsTUFBTSxDQUFJO0lBRTFCLDBCQUEwQjtJQUNWLEtBQUssQ0FBVztJQUVoQyxnQ0FBZ0M7SUFDaEIsTUFBTSxDQUE2QjtJQUVuRCxtQ0FBbUM7SUFDaEIsT0FBTyxDQUFpRDtJQUUzRSw2Q0FBNkM7SUFDckMsZUFBZSxHQUFXLENBQUMsQ0FBQztJQUVwQzs7Ozs7Ozs7T0FRRztJQUNILHlEQUF5RDtJQUN6RCxZQUNJLFdBQXlCLEVBQ3pCLEtBQWUsRUFDZixNQUEwRCxFQUMxRCxNQUFTLEVBQ1QsS0FBNkMsRUFDN0MsY0FBK0Q7UUFFL0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXRDLElBQUksS0FBSyxLQUFLLFNBQVM7WUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVB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Q0FBQztRQUU5QixJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV6QixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBdUJKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQm9hcmQgZnJvbSBcIi4vYm9hcmQuanNcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudGVtaXR0ZXIzXCI7XG5pbXBvcnQgdHlwZSBMb25nSW50IGZyb20gXCIuLi9iaXRCb2FyZC9sb25nSW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcIi4vYm9hcmQuanNcIjtcblxuZXhwb3J0IHR5cGUgUGxheWVyVHlwZSA9IFwiZWFzeUNQVVwiIHwgXCJoYXJkQ1BVXCIgfCBcImh1bWFuXCIgfCBcImltcG9zc2libGVDUFVcIiB8IFwibWVkaXVtQ1BVXCI7XG5leHBvcnQgdHlwZSBBbGdvcml0aG0gPSBcImFscGhhYmV0YVwiIHwgXCJtaW5pbWF4XCI7XG5leHBvcnQgdHlwZSBHYW1lQ29uc3RydWN0b3JPcHRpb25zPFQsIFUgZXh0ZW5kcyBMb25nSW50IHwgbnVtYmVyPiA9IHtcbiAgICBpZDogVDtcbiAgICBvbkVuZD86ICh3aW5uZXI6IG51bWJlciB8IG51bGwpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uSW52YWxpZElucHV0PzogKHBvc2l0aW9uOiBQb3NpdGlvbikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgcmVuZGVyZXI/OiAoY29udHJvbGxlcjogQ29udHJvbGxlcjxULCBVPikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59O1xuZXhwb3J0IHR5cGUgR2FtZUNvbnN0cnVjdG9yPFQsIFUgZXh0ZW5kcyBMb25nSW50IHwgbnVtYmVyPiA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mdW5jdGlvbi10eXBlXG4gICAgbmV3KHBsYXllck9uZVR5cGU6IFBsYXllclR5cGUsIHBsYXllclR3b1R5cGU6IFBsYXllclR5cGUsIG9wdGlvbnM6IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8VCwgVT4pOiBDb250cm9sbGVyPFQsIFU+O1xufTtcbi8qKlxuICogRGVjb3JhdG9yIHRvIGNoZWNrIHRoYXQgdGhlIGNvbnN0cnVjdG9yIHR5cGUgZm9yIHRoZSBnaXZlbiBjbGFzcyBpcyBjb3JyZWN0LlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgZ2FtZSBJRC5cbiAqIEB0ZW1wbGF0ZSBVIC0gVGhlIHR5cGUgb2YgdGhlIGJvYXJkIHZhbHVlcy5cbiAqIEBwYXJhbSBjb25zdHJ1Y3RvciAtIFRoZSBjbGFzcyB0byBjaGVjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEdhbWU8VCwgVSBleHRlbmRzIExvbmdJbnQgfCBudW1iZXI+KGNvbnN0cnVjdG9yOiBHYW1lQ29uc3RydWN0b3I8VCwgVT4pOiB2b2lkIHtcbiAgICB2b2lkIGNvbnN0cnVjdG9yO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnYW1lIGNvbnRyb2xsZXIuXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBnYW1lIElELlxuICogQHRlbXBsYXRlIFUgLSBUaGUgdHlwZSBvZiB0aGUgYm9hcmQgdmFsdWVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBDb250cm9sbGVyPFQsIFUgZXh0ZW5kcyBMb25nSW50IHwgbnVtYmVyPiBleHRlbmRzIEV2ZW50RW1pdHRlcjx7XG4gICAgZW5kOiBHYW1lQ29uc3RydWN0b3JPcHRpb25zPFQsIFU+W1wib25FbmRcIl07XG4gICAgaW5wdXQ6IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8VCwgVT5bXCJvbkludmFsaWRJbnB1dFwiXTtcbiAgICBpbnZhbGlkSW5wdXQ6IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8VCwgVT5bXCJvbkludmFsaWRJbnB1dFwiXTtcbn0+IHtcbiAgICAvKiogQ29udGFpbnMgdGhlIElEIG9mIHRoZSBnYW1lLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBnYW1lSUQ6IFQ7XG5cbiAgICAvKiogQ29udGFpbnMgdGhlIGJvYXJkLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBib2FyZDogQm9hcmQ8VT47XG5cbiAgICAvKiogQ29udGFpbnMgdGhlIHZpZXcgb2JqZWN0LiAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZW5kZXI6ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gICAgLyoqIENvbnRhaW5zIHRoZSBwbGF5ZXIgb2JqZWN0cy4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGxheWVyczogQXJyYXk8eyBpZDogbnVtYmVyOyBwbGF5ZXJUeXBlOiBQbGF5ZXJUeXBlOyB9PjtcblxuICAgIC8qKiBDb250YWlucyB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgcGxheWVyLiAqL1xuICAgIHByaXZhdGUgY3VycmVudFBsYXllcklkOiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb250cm9sbGVyLlxuICAgICAqIEBwYXJhbSBwbGF5ZXJUeXBlcyAtIFRoZSB0eXBlcyBvZiBwbGF5ZXIgZm9yIHRoZSBnYW1lLlxuICAgICAqIEBwYXJhbSBib2FyZCAtIFRoZSBib2FyZCBvYmplY3QuXG4gICAgICogQHBhcmFtIHJlbmRlciAtIFRoZSByZW5kZXIgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIGdhbWVJRCAtIFRoZSBJRCBvZiB0aGUgZ2FtZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gb25FbmQgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBnYW1lIGVuZHMuXG4gICAgICogQHBhcmFtIG9uSW52YWxpZElucHV0IC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21heC1wYXJhbXNcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHBsYXllclR5cGVzOiBQbGF5ZXJUeXBlW10sXG4gICAgICAgIGJvYXJkOiBCb2FyZDxVPixcbiAgICAgICAgcmVuZGVyOiBSZXF1aXJlZDxHYW1lQ29uc3RydWN0b3JPcHRpb25zPFQsIFU+PltcInJlbmRlcmVyXCJdLFxuICAgICAgICBnYW1lSUQ6IFQsXG4gICAgICAgIG9uRW5kPzogR2FtZUNvbnN0cnVjdG9yT3B0aW9uczxULCBVPltcIm9uRW5kXCJdLFxuICAgICAgICBvbkludmFsaWRJbnB1dD86IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8VCwgVT5bXCJvbkludmFsaWRJbnB1dFwiXSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5nYW1lSUQgPSBnYW1lSUQ7XG4gICAgICAgIHRoaXMuYm9hcmQgPSBib2FyZDtcbiAgICAgICAgdGhpcy5wbGF5ZXJzID0gcGxheWVyVHlwZXMubWFwKChwbGF5ZXJUeXBlLCBpZCkgPT4gKHsgaWQsIHBsYXllclR5cGUgfSkpO1xuICAgICAgICB0aGlzLnJlbmRlciA9IHJlbmRlci5iaW5kKG51bGwsIHRoaXMpO1xuXG4gICAgICAgIGlmIChvbkVuZCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5vbihcImVuZFwiLCBvbkVuZCBhcyAoKSA9PiB2b2lkKTtcblxuICAgICAgICBpZiAob25JbnZhbGlkSW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMub24oXCJpbnZhbGlkSW5wdXRcIiwgb25JbnZhbGlkSW5wdXQgYXMgKCkgPT4gdm9pZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBwbGF5ZXIgb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHBsYXllciBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldCBjdXJyZW50UGxheWVyKCk6IHsgaWQ6IG51bWJlcjsgcGxheWVyVHlwZTogUGxheWVyVHlwZTsgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXllcnNbdGhpcy5jdXJyZW50UGxheWVySWRdITtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB0aGUgbWFpbiBnYW1lIGZsb3cuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobSAtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIFRoZSB3aW5uZXIgb3IgbnVsbCBpbiB0aGUgZXZlbnQgb2YgYSB0aWUuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHBsYXkoYWxnb3JpdGhtOiBBbGdvcml0aG0gPSBcImFscGhhYmV0YVwiKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVuZGVyKCk7XG4gICAgICAgIHRoaXMub24oXCJpbnB1dFwiLCAoYXN5bmMgKG1vdmU6IFBvc2l0aW9uKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1ha2VNb3ZlKG1vdmUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGxheWVyLnBsYXllclR5cGUgIT09IFwiaHVtYW5cIilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1ha2VNb3ZlKGFsZ29yaXRobSk7XG4gICAgICAgIH0pIGFzIChtb3ZlOiBQb3NpdGlvbikgPT4gdm9pZCk7XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFBsYXllci5wbGF5ZXJUeXBlICE9PSBcImh1bWFuXCIgJiYgdGhpcy5ib2FyZC53aW5uZXIgPT09IGZhbHNlKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubWFrZU1vdmUoYWxnb3JpdGhtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm9nIHN0YW5kYXJkIG1pbmltYXggYWxnb3JpdGhtLiBMZWZ0IGluIGZvciByZWZlcmVuY2UgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01pbmltYXgpLlxuICAgICAqIEBwYXJhbSBkZXB0aCAtIFRoZSBkZXB0aCBvZiB0aGUgYWxnb3JpdGhtLlxuICAgICAqIEBwYXJhbSBtYXhpbWlzaW5nUGxheWVyIC0gV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgcGxheWVyIGlzIHRoZSBtYXhpbWlzaW5nIHBsYXllci5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtaW5pbWF4KGRlcHRoOiBudW1iZXIgPSBJbmZpbml0eSwgbWF4aW1pc2luZ1BsYXllcjogYm9vbGVhbiA9IHRydWUpOiB7IG1vdmU6IFBvc2l0aW9uOyBzY29yZTogbnVtYmVyOyB9IHtcbiAgICAgICAgY29uc3QgcGxheWVySWRzID0gWyh0aGlzLmN1cnJlbnRQbGF5ZXJJZCArIDEpICUgMiwgdGhpcy5jdXJyZW50UGxheWVySWRdIGFzIGNvbnN0O1xuXG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCB8fCB0aGlzLmJvYXJkLndpbm5lciAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbW92ZTogeyB4OiBOYU4sIHk6IE5hTiB9LFxuICAgICAgICAgICAgICAgIHNjb3JlOiB0aGlzLmJvYXJkLmhldXJpc3RpYyAqICh0aGlzLmN1cnJlbnRQbGF5ZXJJZCA9PT0gMCA/IDEgOiAtMSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJlc3RNb3ZlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLm1pbmltYXg+ID0ge1xuICAgICAgICAgICAgbW92ZTogeyB4OiBOYU4sIHk6IE5hTiB9LFxuICAgICAgICAgICAgc2NvcmU6IG1heGltaXNpbmdQbGF5ZXIgPyAtSW5maW5pdHkgOiBJbmZpbml0eSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBlbXB0eUNlbGxzIH0gPSB0aGlzLmJvYXJkO1xuXG4gICAgICAgIGZvciAoY29uc3QgbW92ZSBvZiBlbXB0eUNlbGxzKSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkLm1ha2VNb3ZlKG1vdmUsIHBsYXllcklkc1tOdW1iZXIobWF4aW1pc2luZ1BsYXllcildISk7XG4gICAgICAgICAgICBjb25zdCBzY29yZSA9ICg5IC0gZW1wdHlDZWxscy5sZW5ndGgpICogdGhpcy5taW5pbWF4KGRlcHRoIC0gMSwgIW1heGltaXNpbmdQbGF5ZXIpLnNjb3JlO1xuXG4gICAgICAgICAgICB0aGlzLmJvYXJkLnVuZG9MYXN0TW92ZSgpO1xuXG4gICAgICAgICAgICBpZiAobWF4aW1pc2luZ1BsYXllcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlc3RTY29yZSA9IE1hdGgubWF4KHNjb3JlLCBiZXN0TW92ZS5zY29yZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVzdFNjb3JlICE9PSBiZXN0TW92ZS5zY29yZSlcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vdmUgPSB7IG1vdmUsIHNjb3JlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlc3RTY29yZSA9IE1hdGgubWluKHNjb3JlLCBiZXN0TW92ZS5zY29yZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVzdFNjb3JlICE9PSBiZXN0TW92ZS5zY29yZSlcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vdmUgPSB7IG1vdmUsIHNjb3JlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmVzdE1vdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltYXggYWxnb3JpdGhtIHdpdGggYWxwaGEtYmV0YSBwcnVuaW5nIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaW5pbWF4KS5cbiAgICAgKiBAcGFyYW0gZGVwdGggLSBUaGUgZGVwdGggb2YgdGhlIGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0gYWxwaGEgLSBUaGUgYm91bmRzIGZvciB0aGUgYWxwaGEtYmV0YSB2YXJpYXRpb24gb2YgdGhlIGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0gYmV0YSAtIFRoZSBib3VuZHMgZm9yIHRoZSBhbHBoYS1iZXRhIHZhcmlhdGlvbiBvZiB0aGUgYWxnb3JpdGhtLlxuICAgICAqIEBwYXJhbSBtYXhpbWlzaW5nUGxheWVyIC0gV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgcGxheWVyIGlzIHRoZSBtYXhpbWlzaW5nIHBsYXllci5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhbHBoYWJldGEoXG4gICAgICAgIGRlcHRoOiBudW1iZXIgPSBJbmZpbml0eSxcbiAgICAgICAgYWxwaGE6IG51bWJlciA9IC1JbmZpbml0eSxcbiAgICAgICAgYmV0YTogbnVtYmVyID0gSW5maW5pdHksXG4gICAgICAgIG1heGltaXNpbmdQbGF5ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgICk6IHsgbW92ZTogUG9zaXRpb247IHNjb3JlOiBudW1iZXI7IH0ge1xuICAgICAgICBjb25zdCBwbGF5ZXJJZHMgPSBbKHRoaXMuY3VycmVudFBsYXllcklkICsgMSkgJSAyLCB0aGlzLmN1cnJlbnRQbGF5ZXJJZF0gYXMgY29uc3Q7XG5cbiAgICAgICAgaWYgKGRlcHRoID09PSAwIHx8IHRoaXMuYm9hcmQud2lubmVyICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb3ZlOiB7IHg6IE5hTiwgeTogTmFOIH0sXG4gICAgICAgICAgICAgICAgc2NvcmU6IHRoaXMuYm9hcmQuaGV1cmlzdGljICogKHRoaXMuY3VycmVudFBsYXllcklkID09PSAwID8gMSA6IC0xKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYmVzdE1vdmU6IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuYWxwaGFiZXRhPiA9IHtcbiAgICAgICAgICAgIG1vdmU6IHsgeDogTmFOLCB5OiBOYU4gfSxcbiAgICAgICAgICAgIHNjb3JlOiBtYXhpbWlzaW5nUGxheWVyID8gLUluZmluaXR5IDogSW5maW5pdHksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgZW1wdHlDZWxscyB9ID0gdGhpcy5ib2FyZDtcblxuICAgICAgICBmb3IgKGNvbnN0IG1vdmUgb2YgZW1wdHlDZWxscykge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC5tYWtlTW92ZShtb3ZlLCBwbGF5ZXJJZHNbTnVtYmVyKG1heGltaXNpbmdQbGF5ZXIpXSEpO1xuICAgICAgICAgICAgY29uc3Qgc2NvcmUgPSAoOSAtIGVtcHR5Q2VsbHMubGVuZ3RoKSAqIHRoaXMuYWxwaGFiZXRhKGRlcHRoIC0gMSwgYWxwaGEsIGJldGEsICFtYXhpbWlzaW5nUGxheWVyKS5zY29yZTtcblxuICAgICAgICAgICAgdGhpcy5ib2FyZC51bmRvTGFzdE1vdmUoKTtcblxuICAgICAgICAgICAgaWYgKG1heGltaXNpbmdQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZXN0U2NvcmUgPSBNYXRoLm1heChzY29yZSwgYmVzdE1vdmUuc2NvcmUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlc3RTY29yZSAhPT0gYmVzdE1vdmUuc2NvcmUpXG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb3ZlID0geyBtb3ZlLCBzY29yZSB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlc3RNb3ZlLnNjb3JlID4gYmV0YSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBhbHBoYSA9IE1hdGgubWF4KGFscGhhLCBiZXN0U2NvcmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZXN0U2NvcmUgPSBNYXRoLm1pbihzY29yZSwgYmVzdE1vdmUuc2NvcmUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlc3RTY29yZSAhPT0gYmVzdE1vdmUuc2NvcmUpXG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb3ZlID0geyBtb3ZlLCBzY29yZSB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlc3RNb3ZlLnNjb3JlIDwgYWxwaGEpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgYmV0YSA9IE1hdGgubWluKGJldGEsIGJlc3RTY29yZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmVzdE1vdmU7XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZXMgd2hpY2ggcGxheWVyJ3MgdHVybiBpdCBpcy4gKi9cbiAgICBwcml2YXRlIG5leHRUdXJuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRQbGF5ZXJJZCA9ICh0aGlzLmN1cnJlbnRQbGF5ZXJJZCArIDEpICUgdGhpcy5wbGF5ZXJzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIG1vdmUuXG4gICAgICogQHBhcmFtIGlucHV0IC0gRWl0aGVyIHRoZSBhbGdvcml0aG0gdG8gdXNlIHRvIGNhbGN1bGF0ZSB0aGUgbW92ZSBvciB0aGUgbW92ZSBpdHNlbGYuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBtYWtlTW92ZShpbnB1dDogQWxnb3JpdGhtIHwgUG9zaXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC5tYWtlTW92ZSh0aGlzLmRldGVybWluZUNQVU1vdmUodGhpcy5jdXJyZW50UGxheWVyLnBsYXllclR5cGUsIGlucHV0KSwgdGhpcy5jdXJyZW50UGxheWVyLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQbGF5ZXIucGxheWVyVHlwZSAhPT0gXCJodW1hblwiIHx8ICF0aGlzLmJvYXJkLm1vdmVJc1ZhbGlkKGlucHV0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImludmFsaWRJbnB1dFwiLCBpbnB1dCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYm9hcmQubWFrZU1vdmUoaW5wdXQsIHRoaXMuY3VycmVudFBsYXllci5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICBjb25zdCB7IHdpbm5lciB9ID0gdGhpcy5ib2FyZDtcblxuICAgICAgICBpZiAod2lubmVyICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIsIHdpbm5lcik7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmV4dFR1cm4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBDUFUgbW92ZS5cbiAgICAgKiBAcGFyYW0gZGlmZmljdWx0eSAtIFRoZSBkaWZmaWN1bHR5IG9mIHRoZSBBSS5cbiAgICAgKiBAcGFyYW0gYWxnb3JpdGhtIC0gVGhlIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHJldHVybnMgVGhlIG1vdmUuXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGRldGVybWluZUNQVU1vdmUoZGlmZmljdWx0eTogT21pdDxQbGF5ZXJUeXBlLCBcImh1bWFuXCI+LCBhbGdvcml0aG0/OiBBbGdvcml0aG0pOiBQb3NpdGlvbjtcblxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBvcHRpbWFsIG1vdmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byB1c2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYWxnb3JpdGhtIC0gVGhlIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMubWF4RGVwdGggLSBUaGUgbWF4aW11bSBkZXB0aCB0byBzZWFyY2guXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmFuZG9tTW92ZSAtIEEgcmFuZG9tIG1vdmUgdG8gbWFrZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlIHRvIG1ha2UuXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGZpbmRPcHRpbWFsTW92ZShvcHRpb25zPzoge1xuICAgICAgICBhbGdvcml0aG0/OiBBbGdvcml0aG07XG4gICAgICAgIG1heERlcHRoPzogbnVtYmVyO1xuICAgICAgICByYW5kb21Nb3ZlPzogUG9zaXRpb247XG4gICAgfSk6IFBvc2l0aW9uO1xufVxuIl19
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL2NvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWU3Qzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBb0MsV0FBK0I7SUFDbkYsS0FBSyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQWdCLFVBQThDLFNBQVEsWUFJbEY7SUFDRSwwQkFBMEI7SUFDVixLQUFLLENBQUk7SUFFekIsZ0NBQWdDO0lBQ2hCLE1BQU0sQ0FBNkI7SUFFbkQsbUNBQW1DO0lBQ2hCLE9BQU8sQ0FBaUQ7SUFFM0UsNkNBQTZDO0lBQ3JDLGVBQWUsR0FBVyxDQUFDLENBQUM7SUFFcEM7Ozs7Ozs7T0FPRztJQUVILFlBQ0ksV0FBeUIsRUFDekIsS0FBUSxFQUNSLE1BQXVELEVBQ3ZELEtBQTBDLEVBQzFDLGNBQTREO1FBRTVELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0QyxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQW1CLENBQUMsQ0FBQztRQUV4QyxJQUFJLGNBQWMsS0FBSyxTQUFTO1lBQzVCLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQTRCLENBQUMs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WUFFekIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztDQXVCSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEJvYXJkIGZyb20gXCIuL2JvYXJkLmpzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuaW1wb3J0IHR5cGUgTG9uZ0ludCBmcm9tIFwiLi4vYml0Qm9hcmQvbG9uZ0ludC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb3NpdGlvbiB9IGZyb20gXCIuL2JvYXJkLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBsYXllclR5cGUgPSBcImVhc3lDUFVcIiB8IFwiaGFyZENQVVwiIHwgXCJodW1hblwiIHwgXCJpbXBvc3NpYmxlQ1BVXCIgfCBcIm1lZGl1bUNQVVwiO1xuZXhwb3J0IHR5cGUgQWxnb3JpdGhtID0gXCJhbHBoYWJldGFcIiB8IFwibWluaW1heFwiO1xuZXhwb3J0IHR5cGUgR2FtZUNvbnN0cnVjdG9yT3B0aW9uczxUIGV4dGVuZHMgQm9hcmQ8TG9uZ0ludCB8IG51bWJlcj4+ID0ge1xuICAgIG9uRW5kPzogKHdpbm5lcjogbnVtYmVyIHwgbnVsbCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25JbnZhbGlkSW5wdXQ/OiAocG9zaXRpb246IFBvc2l0aW9uKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgICByZW5kZXJlcj86IChjb250cm9sbGVyOiBDb250cm9sbGVyPFQ+KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn07XG5leHBvcnQgdHlwZSBHYW1lQ29uc3RydWN0b3I8VCBleHRlbmRzIEJvYXJkPExvbmdJbnQgfCBudW1iZXI+PiA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mdW5jdGlvbi10eXBlXG4gICAgbmV3KHBsYXllck9uZVR5cGU6IFBsYXllclR5cGUsIHBsYXllclR3b1R5cGU6IFBsYXllclR5cGUsIG9wdGlvbnM/OiBHYW1lQ29uc3RydWN0b3JPcHRpb25zPFQ+KTogQ29udHJvbGxlcjxUPjtcbn07XG4vKipcbiAqIERlY29yYXRvciB0byBjaGVjayB0aGF0IHRoZSBjb25zdHJ1Y3RvciB0eXBlIGZvciB0aGUgZ2l2ZW4gY2xhc3MgaXMgY29ycmVjdC5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgYm9hcmQuXG4gKiBAcGFyYW0gY29uc3RydWN0b3IgLSBUaGUgY2xhc3MgdG8gY2hlY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHYW1lPFQgZXh0ZW5kcyBCb2FyZDxMb25nSW50IHwgbnVtYmVyPj4oY29uc3RydWN0b3I6IEdhbWVDb25zdHJ1Y3RvcjxUPik6IHZvaWQge1xuICAgIHZvaWQgY29uc3RydWN0b3I7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdhbWUgY29udHJvbGxlci5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgYm9hcmQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIENvbnRyb2xsZXI8VCBleHRlbmRzIEJvYXJkPExvbmdJbnQgfCBudW1iZXI+PiBleHRlbmRzIEV2ZW50RW1pdHRlcjx7XG4gICAgZW5kOiBHYW1lQ29uc3RydWN0b3JPcHRpb25zPFQ+W1wib25FbmRcIl07XG4gICAgaW5wdXQ6IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8VD5bXCJvbkludmFsaWRJbnB1dFwiXTtcbiAgICBpbnZhbGlkSW5wdXQ6IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8VD5bXCJvbkludmFsaWRJbnB1dFwiXTtcbn0+IHtcbiAgICAvKiogQ29udGFpbnMgdGhlIGJvYXJkLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBib2FyZDogVDtcblxuICAgIC8qKiBDb250YWlucyB0aGUgdmlldyBvYmplY3QuICovXG4gICAgcHVibGljIHJlYWRvbmx5IHJlbmRlcjogKCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cbiAgICAvKiogQ29udGFpbnMgdGhlIHBsYXllciBvYmplY3RzLiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwbGF5ZXJzOiBBcnJheTx7IGlkOiBudW1iZXI7IHBsYXllclR5cGU6IFBsYXllclR5cGU7IH0+O1xuXG4gICAgLyoqIENvbnRhaW5zIHRoZSBJRCBvZiB0aGUgY3VycmVudCBwbGF5ZXIuICovXG4gICAgcHJpdmF0ZSBjdXJyZW50UGxheWVySWQ6IG51bWJlciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIENvbnRyb2xsZXIuXG4gICAgICogQHBhcmFtIHBsYXllclR5cGVzIC0gVGhlIHR5cGVzIG9mIHBsYXllciBmb3IgdGhlIGdhbWUuXG4gICAgICogQHBhcmFtIGJvYXJkIC0gVGhlIGJvYXJkIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gcmVuZGVyIC0gVGhlIHJlbmRlciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gb25FbmQgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBnYW1lIGVuZHMuXG4gICAgICogQHBhcmFtIG9uSW52YWxpZElucHV0IC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICAgKi9cblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGxheWVyVHlwZXM6IFBsYXllclR5cGVbXSxcbiAgICAgICAgYm9hcmQ6IFQsXG4gICAgICAgIHJlbmRlcjogUmVxdWlyZWQ8R2FtZUNvbnN0cnVjdG9yT3B0aW9uczxUPj5bXCJyZW5kZXJlclwiXSxcbiAgICAgICAgb25FbmQ/OiBHYW1lQ29uc3RydWN0b3JPcHRpb25zPFQ+W1wib25FbmRcIl0sXG4gICAgICAgIG9uSW52YWxpZElucHV0PzogR2FtZUNvbnN0cnVjdG9yT3B0aW9uczxUPltcIm9uSW52YWxpZElucHV0XCJdLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmJvYXJkID0gYm9hcmQ7XG4gICAgICAgIHRoaXMucGxheWVycyA9IHBsYXllclR5cGVzLm1hcCgocGxheWVyVHlwZSwgaWQpID0+ICh7IGlkLCBwbGF5ZXJUeXBlIH0pKTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSByZW5kZXIuYmluZChudWxsLCB0aGlzKTtcblxuICAgICAgICBpZiAob25FbmQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMub24oXCJlbmRcIiwgb25FbmQgYXMgKCkgPT4gdm9pZCk7XG5cbiAgICAgICAgaWYgKG9uSW52YWxpZElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLm9uKFwiaW52YWxpZElucHV0XCIsIG9uSW52YWxpZElucHV0IGFzICgpID0+IHZvaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgcGxheWVyIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBwbGF5ZXIgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVudFBsYXllcigpOiB7IGlkOiBudW1iZXI7IHBsYXllclR5cGU6IFBsYXllclR5cGU7IH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5ZXJzW3RoaXMuY3VycmVudFBsYXllcklkXSE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIG1haW4gZ2FtZSBmbG93LlxuICAgICAqIEBwYXJhbSBhbGdvcml0aG0gLSBUaGUgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgd2lubmVyIG9yIG51bGwgaW4gdGhlIGV2ZW50IG9mIGEgdGllLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBwbGF5KGFsZ29yaXRobTogQWxnb3JpdGhtID0gXCJhbHBoYWJldGFcIik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICB0aGlzLm9uKFwiaW5wdXRcIiwgKGFzeW5jIChtb3ZlOiBQb3NpdGlvbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYWtlTW92ZShtb3ZlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBsYXllci5wbGF5ZXJUeXBlICE9PSBcImh1bWFuXCIpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tYWtlTW92ZShhbGdvcml0aG0pO1xuICAgICAgICB9KSBhcyAobW92ZTogUG9zaXRpb24pID0+IHZvaWQpO1xuXG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRQbGF5ZXIucGxheWVyVHlwZSAhPT0gXCJodW1hblwiICYmIHRoaXMuYm9hcmQud2lubmVyID09PSBmYWxzZSlcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1ha2VNb3ZlKGFsZ29yaXRobSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJvZyBzdGFuZGFyZCBtaW5pbWF4IGFsZ29yaXRobS4gTGVmdCBpbiBmb3IgcmVmZXJlbmNlIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaW5pbWF4KS5cbiAgICAgKiBAcGFyYW0gZGVwdGggLSBUaGUgZGVwdGggb2YgdGhlIGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0gbWF4aW1pc2luZ1BsYXllciAtIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHBsYXllciBpcyB0aGUgbWF4aW1pc2luZyBwbGF5ZXIuXG4gICAgICogQHJldHVybnMgVGhlIG9wdGltYWwgbW92ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWluaW1heChkZXB0aDogbnVtYmVyID0gSW5maW5pdHksIG1heGltaXNpbmdQbGF5ZXI6IGJvb2xlYW4gPSB0cnVlKTogeyBtb3ZlOiBQb3NpdGlvbjsgc2NvcmU6IG51bWJlcjsgfSB7XG4gICAgICAgIGNvbnN0IHBsYXllcklkcyA9IFsodGhpcy5jdXJyZW50UGxheWVySWQgKyAxKSAlIDIsIHRoaXMuY3VycmVudFBsYXllcklkXSBhcyBjb25zdDtcblxuICAgICAgICBpZiAoZGVwdGggPT09IDAgfHwgdGhpcy5ib2FyZC53aW5uZXIgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1vdmU6IHsgeDogTmFOLCB5OiBOYU4gfSxcbiAgICAgICAgICAgICAgICBzY29yZTogdGhpcy5ib2FyZC5oZXVyaXN0aWMgKiAodGhpcy5jdXJyZW50UGxheWVySWQgPT09IDAgPyAxIDogLTEpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBiZXN0TW92ZTogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5taW5pbWF4PiA9IHtcbiAgICAgICAgICAgIG1vdmU6IHsgeDogTmFOLCB5OiBOYU4gfSxcbiAgICAgICAgICAgIHNjb3JlOiBtYXhpbWlzaW5nUGxheWVyID8gLUluZmluaXR5IDogSW5maW5pdHksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgZW1wdHlDZWxscyB9ID0gdGhpcy5ib2FyZDtcblxuICAgICAgICBmb3IgKGNvbnN0IG1vdmUgb2YgZW1wdHlDZWxscykge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC5tYWtlTW92ZShtb3ZlLCBwbGF5ZXJJZHNbTnVtYmVyKG1heGltaXNpbmdQbGF5ZXIpXSEpO1xuICAgICAgICAgICAgY29uc3Qgc2NvcmUgPSAoOSAtIGVtcHR5Q2VsbHMubGVuZ3RoKSAqIHRoaXMubWluaW1heChkZXB0aCAtIDEsICFtYXhpbWlzaW5nUGxheWVyKS5zY29yZTtcblxuICAgICAgICAgICAgdGhpcy5ib2FyZC51bmRvTGFzdE1vdmUoKTtcblxuICAgICAgICAgICAgaWYgKG1heGltaXNpbmdQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZXN0U2NvcmUgPSBNYXRoLm1heChzY29yZSwgYmVzdE1vdmUuc2NvcmUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlc3RTY29yZSAhPT0gYmVzdE1vdmUuc2NvcmUpXG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb3ZlID0geyBtb3ZlLCBzY29yZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZXN0U2NvcmUgPSBNYXRoLm1pbihzY29yZSwgYmVzdE1vdmUuc2NvcmUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlc3RTY29yZSAhPT0gYmVzdE1vdmUuc2NvcmUpXG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb3ZlID0geyBtb3ZlLCBzY29yZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJlc3RNb3ZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbWF4IGFsZ29yaXRobSB3aXRoIGFscGhhLWJldGEgcHJ1bmluZyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWluaW1heCkuXG4gICAgICogQHBhcmFtIGRlcHRoIC0gVGhlIGRlcHRoIG9mIHRoZSBhbGdvcml0aG0uXG4gICAgICogQHBhcmFtIGFscGhhIC0gVGhlIGJvdW5kcyBmb3IgdGhlIGFscGhhLWJldGEgdmFyaWF0aW9uIG9mIHRoZSBhbGdvcml0aG0uXG4gICAgICogQHBhcmFtIGJldGEgLSBUaGUgYm91bmRzIGZvciB0aGUgYWxwaGEtYmV0YSB2YXJpYXRpb24gb2YgdGhlIGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0gbWF4aW1pc2luZ1BsYXllciAtIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHBsYXllciBpcyB0aGUgbWF4aW1pc2luZyBwbGF5ZXIuXG4gICAgICogQHJldHVybnMgVGhlIG9wdGltYWwgbW92ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWxwaGFiZXRhKFxuICAgICAgICBkZXB0aDogbnVtYmVyID0gSW5maW5pdHksXG4gICAgICAgIGFscGhhOiBudW1iZXIgPSAtSW5maW5pdHksXG4gICAgICAgIGJldGE6IG51bWJlciA9IEluZmluaXR5LFxuICAgICAgICBtYXhpbWlzaW5nUGxheWVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICApOiB7IG1vdmU6IFBvc2l0aW9uOyBzY29yZTogbnVtYmVyOyB9IHtcbiAgICAgICAgY29uc3QgcGxheWVySWRzID0gWyh0aGlzLmN1cnJlbnRQbGF5ZXJJZCArIDEpICUgMiwgdGhpcy5jdXJyZW50UGxheWVySWRdIGFzIGNvbnN0O1xuXG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCB8fCB0aGlzLmJvYXJkLndpbm5lciAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbW92ZTogeyB4OiBOYU4sIHk6IE5hTiB9LFxuICAgICAgICAgICAgICAgIHNjb3JlOiB0aGlzLmJvYXJkLmhldXJpc3RpYyAqICh0aGlzLmN1cnJlbnRQbGF5ZXJJZCA9PT0gMCA/IDEgOiAtMSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJlc3RNb3ZlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmFscGhhYmV0YT4gPSB7XG4gICAgICAgICAgICBtb3ZlOiB7IHg6IE5hTiwgeTogTmFOIH0sXG4gICAgICAgICAgICBzY29yZTogbWF4aW1pc2luZ1BsYXllciA/IC1JbmZpbml0eSA6IEluZmluaXR5LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IGVtcHR5Q2VsbHMgfSA9IHRoaXMuYm9hcmQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBtb3ZlIG9mIGVtcHR5Q2VsbHMpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQubWFrZU1vdmUobW92ZSwgcGxheWVySWRzW051bWJlcihtYXhpbWlzaW5nUGxheWVyKV0hKTtcbiAgICAgICAgICAgIGNvbnN0IHNjb3JlID0gKDkgLSBlbXB0eUNlbGxzLmxlbmd0aCkgKiB0aGlzLmFscGhhYmV0YShkZXB0aCAtIDEsIGFscGhhLCBiZXRhLCAhbWF4aW1pc2luZ1BsYXllcikuc2NvcmU7XG5cbiAgICAgICAgICAgIHRoaXMuYm9hcmQudW5kb0xhc3RNb3ZlKCk7XG5cbiAgICAgICAgICAgIGlmIChtYXhpbWlzaW5nUGxheWVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVzdFNjb3JlID0gTWF0aC5tYXgoc2NvcmUsIGJlc3RNb3ZlLnNjb3JlKTtcblxuICAgICAgICAgICAgICAgIGlmIChiZXN0U2NvcmUgIT09IGJlc3RNb3ZlLnNjb3JlKVxuICAgICAgICAgICAgICAgICAgICBiZXN0TW92ZSA9IHsgbW92ZSwgc2NvcmUgfTtcblxuICAgICAgICAgICAgICAgIGlmIChiZXN0TW92ZS5zY29yZSA+IGJldGEpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgYWxwaGEgPSBNYXRoLm1heChhbHBoYSwgYmVzdFNjb3JlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVzdFNjb3JlID0gTWF0aC5taW4oc2NvcmUsIGJlc3RNb3ZlLnNjb3JlKTtcblxuICAgICAgICAgICAgICAgIGlmIChiZXN0U2NvcmUgIT09IGJlc3RNb3ZlLnNjb3JlKVxuICAgICAgICAgICAgICAgICAgICBiZXN0TW92ZSA9IHsgbW92ZSwgc2NvcmUgfTtcblxuICAgICAgICAgICAgICAgIGlmIChiZXN0TW92ZS5zY29yZSA8IGFscGhhKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGJldGEgPSBNYXRoLm1pbihiZXRhLCBiZXN0U2NvcmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJlc3RNb3ZlO1xuICAgIH1cblxuICAgIC8qKiBDaGFuZ2VzIHdoaWNoIHBsYXllcidzIHR1cm4gaXQgaXMuICovXG4gICAgcHJpdmF0ZSBuZXh0VHVybigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGxheWVySWQgPSAodGhpcy5jdXJyZW50UGxheWVySWQgKyAxKSAlIHRoaXMucGxheWVycy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFrZXMgYSBtb3ZlLlxuICAgICAqIEBwYXJhbSBpbnB1dCAtIEVpdGhlciB0aGUgYWxnb3JpdGhtIHRvIHVzZSB0byBjYWxjdWxhdGUgdGhlIG1vdmUgb3IgdGhlIG1vdmUgaXRzZWxmLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbWFrZU1vdmUoaW5wdXQ6IEFsZ29yaXRobSB8IFBvc2l0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQubWFrZU1vdmUodGhpcy5kZXRlcm1pbmVDUFVNb3ZlKHRoaXMuY3VycmVudFBsYXllci5wbGF5ZXJUeXBlLCBpbnB1dCksIHRoaXMuY3VycmVudFBsYXllci5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGxheWVyLnBsYXllclR5cGUgIT09IFwiaHVtYW5cIiB8fCAhdGhpcy5ib2FyZC5tb3ZlSXNWYWxpZChpbnB1dCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoXCJpbnZhbGlkSW5wdXRcIiwgaW5wdXQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJvYXJkLm1ha2VNb3ZlKGlucHV0LCB0aGlzLmN1cnJlbnRQbGF5ZXIuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgY29uc3QgeyB3aW5uZXIgfSA9IHRoaXMuYm9hcmQ7XG5cbiAgICAgICAgaWYgKHdpbm5lciAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChcImVuZFwiLCB3aW5uZXIpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5leHRUdXJuKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgQ1BVIG1vdmUuXG4gICAgICogQHBhcmFtIGRpZmZpY3VsdHkgLSBUaGUgZGlmZmljdWx0eSBvZiB0aGUgQUkuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobSAtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIFRoZSBtb3ZlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBkZXRlcm1pbmVDUFVNb3ZlKGRpZmZpY3VsdHk6IE9taXQ8UGxheWVyVHlwZSwgXCJodW1hblwiPiwgYWxnb3JpdGhtPzogQWxnb3JpdGhtKTogUG9zaXRpb247XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgb3B0aW1hbCBtb3ZlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gdXNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLmFsZ29yaXRobSAtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLm1heERlcHRoIC0gVGhlIG1heGltdW0gZGVwdGggdG8gc2VhcmNoLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLnJhbmRvbU1vdmUgLSBBIHJhbmRvbSBtb3ZlIHRvIG1ha2UuXG4gICAgICogQHJldHVybnMgVGhlIG9wdGltYWwgbW92ZSB0byBtYWtlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmaW5kT3B0aW1hbE1vdmUob3B0aW9ucz86IHtcbiAgICAgICAgYWxnb3JpdGhtPzogQWxnb3JpdGhtO1xuICAgICAgICBtYXhEZXB0aD86IG51bWJlcjtcbiAgICAgICAgcmFuZG9tTW92ZT86IFBvc2l0aW9uO1xuICAgIH0pOiBQb3NpdGlvbjtcbn1cbiJdfQ==
@@ -1,19 +1,16 @@
1
1
  import type { Algorithm, GameConstructorOptions, PlayerType } from "../../base/controller.js";
2
2
  import Base from "../../base/controller.js";
3
- import type LongInt from "../../bitBoard/longInt.js";
3
+ import Board from "./board.js";
4
4
  import type { Position } from "../../base/board.js";
5
- /**
6
- * Represents the controller for connect 4.
7
- * @template T - The type of the game ID.
8
- */
9
- export default class Connect4<T> extends Base<T, LongInt> {
5
+ /** Represents the controller for connect 4. */
6
+ export default class Connect4 extends Base<Board> {
10
7
  /**
11
8
  * Creates an instance of Connect4.
12
9
  * @param playerOneType - The type of player one (human or CPU).
13
10
  * @param playerTwoType - The type of player two (human or CPU).
14
11
  * @param options - The options for the game.
15
12
  */
16
- constructor(playerOneType: PlayerType, playerTwoType: PlayerType, options: GameConstructorOptions<T, LongInt>);
13
+ constructor(playerOneType: PlayerType, playerTwoType: PlayerType, options?: GameConstructorOptions<Board>);
17
14
  /**
18
15
  * Calculates the CPU's move.
19
16
  * @param difficulty - The difficulty of the CPU.
@@ -8,22 +8,18 @@ import Base, { Game } from "../../base/controller.js";
8
8
  import Board from "./board.js";
9
9
  /**
10
10
  * The default renderer for connect 4.
11
- * @template T - The type of the game ID.
12
11
  * @param controller - The controller to render.
13
12
  */
14
13
  function defaultRender(controller) {
15
14
  /* eslint-disable no-console */
16
15
  console.clear();
17
- console.log(controller.board.toString(true, true, false, ["⬤ ", "⬤ "]));
16
+ console.log(controller.board.toString(true, true, false, ["⬤", "⬤"]));
18
17
  const { winner } = controller.board;
19
18
  if (winner !== false)
20
19
  console.log(winner === null ? "It's a tie!" : `Player ${winner + 1} wins!`);
21
20
  /* eslint-enable no-console */
22
21
  }
23
- /**
24
- * Represents the controller for connect 4.
25
- * @template T - The type of the game ID.
26
- */
22
+ /** Represents the controller for connect 4. */
27
23
  let Connect4 = class Connect4 extends Base {
28
24
  /**
29
25
  * Creates an instance of Connect4.
@@ -32,7 +28,7 @@ let Connect4 = class Connect4 extends Base {
32
28
  * @param options - The options for the game.
33
29
  */
34
30
  constructor(playerOneType, playerTwoType, options) {
35
- super([playerOneType, playerTwoType], new Board(), options.renderer ?? defaultRender, options.id, options.onEnd, options.onInvalidInput);
31
+ super([playerOneType, playerTwoType], new Board(), options?.renderer ?? defaultRender, options?.onEnd, options?.onInvalidInput);
36
32
  }
37
33
  /**
38
34
  * Calculates the CPU's move.
@@ -46,7 +42,7 @@ let Connect4 = class Connect4 extends Base {
46
42
  const randomMove = emptyCells[Math.floor(Math.random() * emptyCells.length)];
47
43
  switch (difficulty) {
48
44
  case "impossibleCPU":
49
- return this.findOptimalMove({ algorithm, maxDepth: 10 });
45
+ return this.findOptimalMove({ algorithm, maxDepth: 7 });
50
46
  case "hardCPU":
51
47
  return this.findOptimalMove({ algorithm, maxDepth: 5 });
52
48
  case "mediumCPU":
@@ -77,4 +73,4 @@ Connect4 = __decorate([
77
73
  Game
78
74
  ], Connect4);
79
75
  export default Connect4;
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy9jb25uZWN0NC9jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBSS9COzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBSSxVQUF1QjtJQUM3QywrQkFBK0I7SUFDL0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBRXBDLElBQUksTUFBTSxLQUFLLEtBQUs7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEYsOEJBQThCO0FBQ2xDLENBQUM7QUFFRDs7O0dBR0c7QUFFWSxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVksU0FBUSxJQUFnQjtJQUNyRDs7Ozs7T0FLRztJQUNILFlBQ0ksYUFBeUIsRUFDekIsYUFBeUIsRUFDekIsT0FBMkM7UUFFM0MsS0FBSyxDQUNELENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLEtBQUssRUFBRSxFQUNYLE9BQU8sQ0FBQyxRQUFRLElBQUksYUFBYSxFQUNqQyxPQUFPLENBQUMsRUFBRSxFQUNWLE9BQU8sQ0FBQyxLQUFLLEVBQ2IsT0FBTyxDQUFDLGNBQWMsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0IsQ0FBQyxVQUFxQyxFQUFFLFlBQXVCLFdBQVc7UUFDN0YsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUFDO1FBRTlFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDakIsS0FBSyxlQUFlO2dCQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0QsS0FBSyxTQUFTO2dCQUNWLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RCxLQUFLLFdBQVc7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELEtBQUssU0FBUztnQkFDVixPQUFPLFVBQVUsQ0FBQztZQUN0QjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksZUFBZSxDQUFDLE9BQXVEO1FBQzFFLE1BQU0sRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLFNBQVMsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRXZFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUUxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Q0FDSixDQUFBO0FBakVvQixRQUFRO0lBRDVCLElBQUk7R0FDZ0IsUUFBUSxDQWlFNUI7ZUFqRW9CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFsZ29yaXRobSwgR2FtZUNvbnN0cnVjdG9yT3B0aW9ucywgUGxheWVyVHlwZSB9IGZyb20gXCIuLi8uLi9iYXNlL2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCBCYXNlLCB7IEdhbWUgfSBmcm9tIFwiLi4vLi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgQm9hcmQgZnJvbSBcIi4vYm9hcmQuanNcIjtcbmltcG9ydCB0eXBlIExvbmdJbnQgZnJvbSBcIi4uLy4uL2JpdEJvYXJkL2xvbmdJbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zaXRpb24gfSBmcm9tIFwiLi4vLi4vYmFzZS9ib2FyZC5qc1wiO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHJlbmRlcmVyIGZvciBjb25uZWN0IDQuXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBnYW1lIElELlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBUaGUgY29udHJvbGxlciB0byByZW5kZXIuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRSZW5kZXI8VD4oY29udHJvbGxlcjogQ29ubmVjdDQ8VD4pOiB2b2lkIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgY29uc29sZS5jbGVhcigpO1xuICAgIGNvbnNvbGUubG9nKGNvbnRyb2xsZXIuYm9hcmQudG9TdHJpbmcodHJ1ZSwgdHJ1ZSwgZmFsc2UsIFtcIuKspCBcIiwgXCLirKQgXCJdKSk7XG4gICAgY29uc3QgeyB3aW5uZXIgfSA9IGNvbnRyb2xsZXIuYm9hcmQ7XG5cbiAgICBpZiAod2lubmVyICE9PSBmYWxzZSlcbiAgICAgICAgY29uc29sZS5sb2cod2lubmVyID09PSBudWxsID8gXCJJdCdzIGEgdGllIVwiIDogYFBsYXllciAke3dpbm5lciArIDF9IHdpbnMhYCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29udHJvbGxlciBmb3IgY29ubmVjdCA0LlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgZ2FtZSBJRC5cbiAqL1xuQEdhbWVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbm5lY3Q0PFQ+IGV4dGVuZHMgQmFzZTxULCBMb25nSW50PiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb25uZWN0NC5cbiAgICAgKiBAcGFyYW0gcGxheWVyT25lVHlwZSAtIFRoZSB0eXBlIG9mIHBsYXllciBvbmUgKGh1bWFuIG9yIENQVSkuXG4gICAgICogQHBhcmFtIHBsYXllclR3b1R5cGUgLSBUaGUgdHlwZSBvZiBwbGF5ZXIgdHdvIChodW1hbiBvciBDUFUpLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBnYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGxheWVyT25lVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgcGxheWVyVHdvVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgb3B0aW9uczogR2FtZUNvbnN0cnVjdG9yT3B0aW9uczxULCBMb25nSW50PixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBbcGxheWVyT25lVHlwZSwgcGxheWVyVHdvVHlwZV0sXG4gICAgICAgICAgICBuZXcgQm9hcmQoKSxcbiAgICAgICAgICAgIG9wdGlvbnMucmVuZGVyZXIgPz8gZGVmYXVsdFJlbmRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuaWQsXG4gICAgICAgICAgICBvcHRpb25zLm9uRW5kLFxuICAgICAgICAgICAgb3B0aW9ucy5vbkludmFsaWRJbnB1dCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBDUFUncyBtb3ZlLlxuICAgICAqIEBwYXJhbSBkaWZmaWN1bHR5IC0gVGhlIGRpZmZpY3VsdHkgb2YgdGhlIENQVS5cbiAgICAgKiBAcGFyYW0gYWxnb3JpdGhtIC0gVGhlIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHJldHVybnMgVGhlIENQVSdzIG1vdmUuXG4gICAgICogQHRocm93cyB7RXJyb3J9IEFuIGVycm9yIGlmIHRoZSBkaWZmaWN1bHR5IGlzIGludmFsaWQuXG4gICAgICovXG4gICAgcHVibGljIGRldGVybWluZUNQVU1vdmUoZGlmZmljdWx0eTogT21pdDxQbGF5ZXJUeXBlLCBcImh1bWFuXCI+LCBhbGdvcml0aG06IEFsZ29yaXRobSA9IFwiYWxwaGFiZXRhXCIpOiBQb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IHsgZW1wdHlDZWxscyB9ID0gdGhpcy5ib2FyZDtcbiAgICAgICAgY29uc3QgcmFuZG9tTW92ZSA9IGVtcHR5Q2VsbHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZW1wdHlDZWxscy5sZW5ndGgpXSE7XG5cbiAgICAgICAgc3dpdGNoIChkaWZmaWN1bHR5KSB7XG4gICAgICAgICAgICBjYXNlIFwiaW1wb3NzaWJsZUNQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRPcHRpbWFsTW92ZSh7IGFsZ29yaXRobSwgbWF4RGVwdGg6IDEwIH0pO1xuICAgICAgICAgICAgY2FzZSBcImhhcmRDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kT3B0aW1hbE1vdmUoeyBhbGdvcml0aG0sIG1heERlcHRoOiA1IH0pO1xuICAgICAgICAgICAgY2FzZSBcIm1lZGl1bUNQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRPcHRpbWFsTW92ZSh7IGFsZ29yaXRobSwgbWF4RGVwdGg6IDMgfSk7XG4gICAgICAgICAgICBjYXNlIFwiZWFzeUNQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByYW5kb21Nb3ZlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRpZmZpY3VsdHkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgdGhlIG9wdGltYWwgbW92ZSBmb3IgdGhlIGN1cnJlbnQgYm9hcmQgc3RhdGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5hbGdvcml0aG0gLSBUaGUgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5tYXhEZXB0aCAtIFRoZSBtYXhpbXVtIGRlcHRoIHRvIHNlYXJjaC5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlIGZvciB0aGUgY3VycmVudCBib2FyZCBzdGF0ZS5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gQW4gZXJyb3IgaWYgdGhlIGFsZ29yaXRobSBpcyBpbnZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT3B0aW1hbE1vdmUob3B0aW9ucz86IHsgYWxnb3JpdGhtPzogQWxnb3JpdGhtOyBtYXhEZXB0aD86IG51bWJlcjsgfSk6IFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgeyBtYXhEZXB0aCA9IEluZmluaXR5LCBhbGdvcml0aG0gPSBcImFscGhhYmV0YVwiIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLmJvYXJkLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4geyB4OiAzLCB5OiA1IH07XG5cbiAgICAgICAgY29uc3QgbWluaW1heCA9IHRoaXNbYWxnb3JpdGhtXShtYXhEZXB0aCk7XG5cbiAgICAgICAgcmV0dXJuIG1pbmltYXgubW92ZTtcbiAgICB9XG59XG4iXX0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy9jb25uZWN0NC9jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRy9COzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLFVBQW9CO0lBQ3ZDLCtCQUErQjtJQUMvQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFFcEMsSUFBSSxNQUFNLEtBQUssS0FBSztRQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRiw4QkFBOEI7QUFDbEMsQ0FBQztBQUVELCtDQUErQztBQUVoQyxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVMsU0FBUSxJQUFXO0lBQzdDOzs7OztPQUtHO0lBQ0gsWUFDSSxhQUF5QixFQUN6QixhQUF5QixFQUN6QixPQUF1QztRQUV2QyxLQUFLLENBQ0QsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEVBQzlCLElBQUksS0FBSyxFQUFFLEVBQ1gsT0FBTyxFQUFFLFFBQVEsSUFBSSxhQUFhLEVBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQ2QsT0FBTyxFQUFFLGNBQWMsQ0FDMUIsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0IsQ0FBQyxVQUFxQyxFQUFFLFlBQXVCLFdBQVc7UUFDN0YsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUFDO1FBRTlFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDakIsS0FBSyxlQUFlO2dCQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUQsS0FBSyxTQUFTO2dCQUNWLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RCxLQUFLLFdBQVc7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELEtBQUssU0FBUztnQkFDVixPQUFPLFVBQVUsQ0FBQztZQUN0QjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksZUFBZSxDQUFDLE9BQXVEO1FBQzFFLE1BQU0sRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLFNBQVMsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRXZFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUUxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Q0FDSixDQUFBO0FBaEVvQixRQUFRO0lBRDVCLElBQUk7R0FDZ0IsUUFBUSxDQWdFNUI7ZUFoRW9CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFsZ29yaXRobSwgR2FtZUNvbnN0cnVjdG9yT3B0aW9ucywgUGxheWVyVHlwZSB9IGZyb20gXCIuLi8uLi9iYXNlL2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCBCYXNlLCB7IEdhbWUgfSBmcm9tIFwiLi4vLi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgQm9hcmQgZnJvbSBcIi4vYm9hcmQuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zaXRpb24gfSBmcm9tIFwiLi4vLi4vYmFzZS9ib2FyZC5qc1wiO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHJlbmRlcmVyIGZvciBjb25uZWN0IDQuXG4gKiBAcGFyYW0gY29udHJvbGxlciAtIFRoZSBjb250cm9sbGVyIHRvIHJlbmRlci5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFJlbmRlcihjb250cm9sbGVyOiBDb25uZWN0NCk6IHZvaWQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICBjb25zb2xlLmNsZWFyKCk7XG4gICAgY29uc29sZS5sb2coY29udHJvbGxlci5ib2FyZC50b1N0cmluZyh0cnVlLCB0cnVlLCBmYWxzZSwgW1wi4qykXCIsIFwi4qykXCJdKSk7XG4gICAgY29uc3QgeyB3aW5uZXIgfSA9IGNvbnRyb2xsZXIuYm9hcmQ7XG5cbiAgICBpZiAod2lubmVyICE9PSBmYWxzZSlcbiAgICAgICAgY29uc29sZS5sb2cod2lubmVyID09PSBudWxsID8gXCJJdCdzIGEgdGllIVwiIDogYFBsYXllciAke3dpbm5lciArIDF9IHdpbnMhYCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG59XG5cbi8qKiBSZXByZXNlbnRzIHRoZSBjb250cm9sbGVyIGZvciBjb25uZWN0IDQuICovXG5AR2FtZVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29ubmVjdDQgZXh0ZW5kcyBCYXNlPEJvYXJkPiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb25uZWN0NC5cbiAgICAgKiBAcGFyYW0gcGxheWVyT25lVHlwZSAtIFRoZSB0eXBlIG9mIHBsYXllciBvbmUgKGh1bWFuIG9yIENQVSkuXG4gICAgICogQHBhcmFtIHBsYXllclR3b1R5cGUgLSBUaGUgdHlwZSBvZiBwbGF5ZXIgdHdvIChodW1hbiBvciBDUFUpLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBnYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGxheWVyT25lVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgcGxheWVyVHdvVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgb3B0aW9ucz86IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8Qm9hcmQ+LFxuICAgICkge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIFtwbGF5ZXJPbmVUeXBlLCBwbGF5ZXJUd29UeXBlXSxcbiAgICAgICAgICAgIG5ldyBCb2FyZCgpLFxuICAgICAgICAgICAgb3B0aW9ucz8ucmVuZGVyZXIgPz8gZGVmYXVsdFJlbmRlcixcbiAgICAgICAgICAgIG9wdGlvbnM/Lm9uRW5kLFxuICAgICAgICAgICAgb3B0aW9ucz8ub25JbnZhbGlkSW5wdXQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgQ1BVJ3MgbW92ZS5cbiAgICAgKiBAcGFyYW0gZGlmZmljdWx0eSAtIFRoZSBkaWZmaWN1bHR5IG9mIHRoZSBDUFUuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobSAtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIFRoZSBDUFUncyBtb3ZlLlxuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBBbiBlcnJvciBpZiB0aGUgZGlmZmljdWx0eSBpcyBpbnZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRlcm1pbmVDUFVNb3ZlKGRpZmZpY3VsdHk6IE9taXQ8UGxheWVyVHlwZSwgXCJodW1hblwiPiwgYWxnb3JpdGhtOiBBbGdvcml0aG0gPSBcImFscGhhYmV0YVwiKTogUG9zaXRpb24ge1xuICAgICAgICBjb25zdCB7IGVtcHR5Q2VsbHMgfSA9IHRoaXMuYm9hcmQ7XG4gICAgICAgIGNvbnN0IHJhbmRvbU1vdmUgPSBlbXB0eUNlbGxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGVtcHR5Q2VsbHMubGVuZ3RoKV0hO1xuXG4gICAgICAgIHN3aXRjaCAoZGlmZmljdWx0eSkge1xuICAgICAgICAgICAgY2FzZSBcImltcG9zc2libGVDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kT3B0aW1hbE1vdmUoeyBhbGdvcml0aG0sIG1heERlcHRoOiA3IH0pO1xuICAgICAgICAgICAgY2FzZSBcImhhcmRDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kT3B0aW1hbE1vdmUoeyBhbGdvcml0aG0sIG1heERlcHRoOiA1IH0pO1xuICAgICAgICAgICAgY2FzZSBcIm1lZGl1bUNQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRPcHRpbWFsTW92ZSh7IGFsZ29yaXRobSwgbWF4RGVwdGg6IDMgfSk7XG4gICAgICAgICAgICBjYXNlIFwiZWFzeUNQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByYW5kb21Nb3ZlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRpZmZpY3VsdHkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgdGhlIG9wdGltYWwgbW92ZSBmb3IgdGhlIGN1cnJlbnQgYm9hcmQgc3RhdGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFsZ29yaXRobS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5hbGdvcml0aG0gLSBUaGUgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5tYXhEZXB0aCAtIFRoZSBtYXhpbXVtIGRlcHRoIHRvIHNlYXJjaC5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlIGZvciB0aGUgY3VycmVudCBib2FyZCBzdGF0ZS5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gQW4gZXJyb3IgaWYgdGhlIGFsZ29yaXRobSBpcyBpbnZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT3B0aW1hbE1vdmUob3B0aW9ucz86IHsgYWxnb3JpdGhtPzogQWxnb3JpdGhtOyBtYXhEZXB0aD86IG51bWJlcjsgfSk6IFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgeyBtYXhEZXB0aCA9IEluZmluaXR5LCBhbGdvcml0aG0gPSBcImFscGhhYmV0YVwiIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLmJvYXJkLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4geyB4OiAzLCB5OiA1IH07XG5cbiAgICAgICAgY29uc3QgbWluaW1heCA9IHRoaXNbYWxnb3JpdGhtXShtYXhEZXB0aCk7XG5cbiAgICAgICAgcmV0dXJuIG1pbmltYXgubW92ZTtcbiAgICB9XG59XG4iXX0=
@@ -1,18 +1,16 @@
1
1
  import type { Algorithm, GameConstructorOptions, PlayerType } from "../../base/controller.js";
2
2
  import Base from "../../base/controller.js";
3
+ import Board from "./board.js";
3
4
  import type { Position } from "../../base/board.js";
4
- /**
5
- * A game of TicTacToe.
6
- * @template T - The type of the game ID.
7
- */
8
- export default class TicTacToe<T> extends Base<T, number> {
5
+ /** A game of TicTacToe. */
6
+ export default class TicTacToe extends Base<Board> {
9
7
  /**
10
8
  * Creates a new TicTacToe game.
11
9
  * @param playerOneType - The type of player one (human or CPU).
12
10
  * @param playerTwoType - The type of player two (human or CPU).
13
11
  * @param options - The options for the game.
14
12
  */
15
- constructor(playerOneType: PlayerType, playerTwoType: PlayerType, options: GameConstructorOptions<T, number>);
13
+ constructor(playerOneType: PlayerType, playerTwoType: PlayerType, options?: GameConstructorOptions<Board>);
16
14
  /**
17
15
  * Calculates the CPU's move.
18
16
  * @param difficulty - The difficulty of the CPU.
@@ -8,7 +8,6 @@ import Base, { Game } from "../../base/controller.js";
8
8
  import Board from "./board.js";
9
9
  /**
10
10
  * The default rendering function for TicTacToe.
11
- * @template T - The type of the game ID.
12
11
  * @param controller - The controller to render.
13
12
  */
14
13
  function defaultRender(controller) {
@@ -20,10 +19,7 @@ function defaultRender(controller) {
20
19
  console.log(winner === null ? "It's a tie!" : `Player ${winner + 1} wins!`);
21
20
  /* eslint-enable no-console */
22
21
  }
23
- /**
24
- * A game of TicTacToe.
25
- * @template T - The type of the game ID.
26
- */
22
+ /** A game of TicTacToe. */
27
23
  let TicTacToe = class TicTacToe extends Base {
28
24
  /**
29
25
  * Creates a new TicTacToe game.
@@ -32,7 +28,7 @@ let TicTacToe = class TicTacToe extends Base {
32
28
  * @param options - The options for the game.
33
29
  */
34
30
  constructor(playerOneType, playerTwoType, options) {
35
- super([playerOneType, playerTwoType], new Board(), options.renderer ?? defaultRender, options.id, options.onEnd, options.onInvalidInput);
31
+ super([playerOneType, playerTwoType], new Board(), options?.renderer ?? defaultRender, options?.onEnd, options?.onInvalidInput);
36
32
  }
37
33
  /**
38
34
  * Calculates the CPU's move.
@@ -77,4 +73,4 @@ TicTacToe = __decorate([
77
73
  Game
78
74
  ], TicTacToe);
79
75
  export default TicTacToe;
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy90aWN0YWN0b2UvY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUcvQjs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUksVUFBd0I7SUFDOUMsK0JBQStCO0lBQy9CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFFcEMsSUFBSSxNQUFNLEtBQUssS0FBSztRQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRiw4QkFBOEI7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUVZLElBQU0sU0FBUyxHQUFmLE1BQU0sU0FBYSxTQUFRLElBQWU7SUFDckQ7Ozs7O09BS0c7SUFDSCxZQUNJLGFBQXlCLEVBQ3pCLGFBQXlCLEVBQ3pCLE9BQTBDO1FBRTFDLEtBQUssQ0FDRCxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFDOUIsSUFBSSxLQUFLLEVBQUUsRUFDWCxPQUFPLENBQUMsUUFBUSxJQUFJLGFBQWEsRUFDakMsT0FBTyxDQUFDLEVBQUUsRUFDVixPQUFPLENBQUMsS0FBSyxFQUNiLE9BQU8sQ0FBQyxjQUFjLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZ0JBQWdCLENBQUMsVUFBcUMsRUFBRSxZQUF1QixXQUFXO1FBQzdGLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUUsQ0FBQztRQUM5RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFcEUsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNqQixLQUFLLGVBQWU7Z0JBQ2hCLE9BQU8sV0FBVyxDQUFDO1lBQ3ZCLEtBQUssU0FBUztnQkFDVixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzFELEtBQUssV0FBVztnQkFDWixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzFELEtBQUssU0FBUztnQkFDVixPQUFPLFVBQVUsQ0FBQztZQUN0QjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsS0FHMUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2xCLE9BQU8sVUFBVSxDQUFDO1FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBRWxDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0NBQ0osQ0FBQTtBQW5Fb0IsU0FBUztJQUQ3QixJQUFJO0dBQ2dCLFNBQVMsQ0FtRTdCO2VBbkVvQixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbGdvcml0aG0sIEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnMsIFBsYXllclR5cGUgfSBmcm9tIFwiLi4vLi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgQmFzZSwgeyBHYW1lIH0gZnJvbSBcIi4uLy4uL2Jhc2UvY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IEJvYXJkIGZyb20gXCIuL2JvYXJkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcIi4uLy4uL2Jhc2UvYm9hcmQuanNcIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCByZW5kZXJpbmcgZnVuY3Rpb24gZm9yIFRpY1RhY1RvZS5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIGdhbWUgSUQuXG4gKiBAcGFyYW0gY29udHJvbGxlciAtIFRoZSBjb250cm9sbGVyIHRvIHJlbmRlci5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFJlbmRlcjxUPihjb250cm9sbGVyOiBUaWNUYWNUb2U8VD4pOiB2b2lkIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgY29uc29sZS5jbGVhcigpO1xuICAgIGNvbnNvbGUubG9nKGNvbnRyb2xsZXIuYm9hcmQudG9TdHJpbmcoZmFsc2UpKTtcbiAgICBjb25zdCB7IHdpbm5lciB9ID0gY29udHJvbGxlci5ib2FyZDtcblxuICAgIGlmICh3aW5uZXIgIT09IGZhbHNlKVxuICAgICAgICBjb25zb2xlLmxvZyh3aW5uZXIgPT09IG51bGwgPyBcIkl0J3MgYSB0aWUhXCIgOiBgUGxheWVyICR7d2lubmVyICsgMX0gd2lucyFgKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbn1cblxuLyoqXG4gKiBBIGdhbWUgb2YgVGljVGFjVG9lLlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgZ2FtZSBJRC5cbiAqL1xuQEdhbWVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpY1RhY1RvZTxUPiBleHRlbmRzIEJhc2U8VCwgbnVtYmVyPiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBUaWNUYWNUb2UgZ2FtZS5cbiAgICAgKiBAcGFyYW0gcGxheWVyT25lVHlwZSAtIFRoZSB0eXBlIG9mIHBsYXllciBvbmUgKGh1bWFuIG9yIENQVSkuXG4gICAgICogQHBhcmFtIHBsYXllclR3b1R5cGUgLSBUaGUgdHlwZSBvZiBwbGF5ZXIgdHdvIChodW1hbiBvciBDUFUpLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBnYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGxheWVyT25lVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgcGxheWVyVHdvVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgb3B0aW9uczogR2FtZUNvbnN0cnVjdG9yT3B0aW9uczxULCBudW1iZXI+LFxuICAgICkge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIFtwbGF5ZXJPbmVUeXBlLCBwbGF5ZXJUd29UeXBlXSxcbiAgICAgICAgICAgIG5ldyBCb2FyZCgpLFxuICAgICAgICAgICAgb3B0aW9ucy5yZW5kZXJlciA/PyBkZWZhdWx0UmVuZGVyLFxuICAgICAgICAgICAgb3B0aW9ucy5pZCxcbiAgICAgICAgICAgIG9wdGlvbnMub25FbmQsXG4gICAgICAgICAgICBvcHRpb25zLm9uSW52YWxpZElucHV0LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIENQVSdzIG1vdmUuXG4gICAgICogQHBhcmFtIGRpZmZpY3VsdHkgLSBUaGUgZGlmZmljdWx0eSBvZiB0aGUgQ1BVLlxuICAgICAqIEBwYXJhbSBhbGdvcml0aG0gLSBUaGUgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgQ1BVJ3MgbW92ZS5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gQW4gZXJyb3IgaWYgdGhlIGRpZmZpY3VsdHkgaXMgaW52YWxpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0ZXJtaW5lQ1BVTW92ZShkaWZmaWN1bHR5OiBPbWl0PFBsYXllclR5cGUsIFwiaHVtYW5cIj4sIGFsZ29yaXRobTogQWxnb3JpdGhtID0gXCJhbHBoYWJldGFcIik6IFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgeyBlbXB0eUNlbGxzIH0gPSB0aGlzLmJvYXJkO1xuICAgICAgICBjb25zdCByYW5kb21Nb3ZlID0gZW1wdHlDZWxsc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBlbXB0eUNlbGxzLmxlbmd0aCldITtcbiAgICAgICAgY29uc3Qgb3B0aW1hbE1vdmUgPSB0aGlzLmZpbmRPcHRpbWFsTW92ZSh7IGFsZ29yaXRobSwgcmFuZG9tTW92ZSB9KTtcblxuICAgICAgICBzd2l0Y2ggKGRpZmZpY3VsdHkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvc3NpYmxlQ1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGltYWxNb3ZlO1xuICAgICAgICAgICAgY2FzZSBcImhhcmRDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSA8IDAuOCA/IG9wdGltYWxNb3ZlIDogcmFuZG9tTW92ZTtcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpdW1DUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSA8IDAuNSA/IG9wdGltYWxNb3ZlIDogcmFuZG9tTW92ZTtcbiAgICAgICAgICAgIGNhc2UgXCJlYXN5Q1BVXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbU1vdmU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGlmZmljdWx0eS5cIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgb3B0aW1hbCBtb3ZlIGZvciB0aGUgY3VycmVudCBwbGF5ZXIuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobSAtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEBwYXJhbSBhbGdvcml0aG0uYWxnb3JpdGhtIC0gVGhlIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobS5yYW5kb21Nb3ZlIC0gVGhlIG1vdmUgdG8gcmV0dXJuIGlmIHRoZSBib2FyZCBpcyBlbXB0eS5cbiAgICAgKiBAcmV0dXJucyBUaGUgb3B0aW1hbCBtb3ZlIGZvciB0aGUgY3VycmVudCBwbGF5ZXIuXG4gICAgICogQHRocm93cyB7RXJyb3J9IEFuIGVycm9yIGlmIHRoZSBhbGdvcml0aG0gaXMgaW52YWxpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCByYW5kb21Nb3ZlIH06IHtcbiAgICAgICAgYWxnb3JpdGhtOiBBbGdvcml0aG07XG4gICAgICAgIHJhbmRvbU1vdmU6IFBvc2l0aW9uO1xuICAgIH0gPSB7IGFsZ29yaXRobTogXCJhbHBoYWJldGFcIiwgcmFuZG9tTW92ZTogeyB4OiAyLCB5OiAyIH0gfSk6IFBvc2l0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYm9hcmQuaXNFbXB0eSlcbiAgICAgICAgICAgIHJldHVybiByYW5kb21Nb3ZlO1xuXG4gICAgICAgIGNvbnN0IG1pbmltYXggPSB0aGlzW2FsZ29yaXRobV0oKTtcblxuICAgICAgICByZXR1cm4gbWluaW1heC5tb3ZlO1xuICAgIH1cbn1cbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nYW1lcy90aWN0YWN0b2UvY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUcvQjs7O0dBR0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxVQUFxQjtJQUN4QywrQkFBK0I7SUFDL0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUVwQyxJQUFJLE1BQU0sS0FBSyxLQUFLO1FBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hGLDhCQUE4QjtBQUNsQyxDQUFDO0FBRUQsMkJBQTJCO0FBRVosSUFBTSxTQUFTLEdBQWYsTUFBTSxTQUFVLFNBQVEsSUFBVztJQUM5Qzs7Ozs7T0FLRztJQUNILFlBQ0ksYUFBeUIsRUFDekIsYUFBeUIsRUFDekIsT0FBdUM7UUFFdkMsS0FBSyxDQUNELENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLEtBQUssRUFBRSxFQUNYLE9BQU8sRUFBRSxRQUFRLElBQUksYUFBYSxFQUNsQyxPQUFPLEVBQUUsS0FBSyxFQUNkLE9BQU8sRUFBRSxjQUFjLENBQzFCLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZ0JBQWdCLENBQUMsVUFBcUMsRUFBRSxZQUF1QixXQUFXO1FBQzdGLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUUsQ0FBQztRQUM5RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFcEUsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNqQixLQUFLLGVBQWU7Z0JBQ2hCLE9BQU8sV0FBVyxDQUFDO1lBQ3ZCLEtBQUssU0FBUztnQkFDVixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzFELEtBQUssV0FBVztnQkFDWixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzFELEtBQUssU0FBUztnQkFDVixPQUFPLFVBQVUsQ0FBQztZQUN0QjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsS0FHMUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2xCLE9BQU8sVUFBVSxDQUFDO1FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBRWxDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0NBQ0osQ0FBQTtBQWxFb0IsU0FBUztJQUQ3QixJQUFJO0dBQ2dCLFNBQVMsQ0FrRTdCO2VBbEVvQixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbGdvcml0aG0sIEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnMsIFBsYXllclR5cGUgfSBmcm9tIFwiLi4vLi4vYmFzZS9jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgQmFzZSwgeyBHYW1lIH0gZnJvbSBcIi4uLy4uL2Jhc2UvY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IEJvYXJkIGZyb20gXCIuL2JvYXJkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcIi4uLy4uL2Jhc2UvYm9hcmQuanNcIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCByZW5kZXJpbmcgZnVuY3Rpb24gZm9yIFRpY1RhY1RvZS5cbiAqIEBwYXJhbSBjb250cm9sbGVyIC0gVGhlIGNvbnRyb2xsZXIgdG8gcmVuZGVyLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0UmVuZGVyKGNvbnRyb2xsZXI6IFRpY1RhY1RvZSk6IHZvaWQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICBjb25zb2xlLmNsZWFyKCk7XG4gICAgY29uc29sZS5sb2coY29udHJvbGxlci5ib2FyZC50b1N0cmluZyhmYWxzZSkpO1xuICAgIGNvbnN0IHsgd2lubmVyIH0gPSBjb250cm9sbGVyLmJvYXJkO1xuXG4gICAgaWYgKHdpbm5lciAhPT0gZmFsc2UpXG4gICAgICAgIGNvbnNvbGUubG9nKHdpbm5lciA9PT0gbnVsbCA/IFwiSXQncyBhIHRpZSFcIiA6IGBQbGF5ZXIgJHt3aW5uZXIgKyAxfSB3aW5zIWApO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xufVxuXG4vKiogQSBnYW1lIG9mIFRpY1RhY1RvZS4gKi9cbkBHYW1lXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaWNUYWNUb2UgZXh0ZW5kcyBCYXNlPEJvYXJkPiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBUaWNUYWNUb2UgZ2FtZS5cbiAgICAgKiBAcGFyYW0gcGxheWVyT25lVHlwZSAtIFRoZSB0eXBlIG9mIHBsYXllciBvbmUgKGh1bWFuIG9yIENQVSkuXG4gICAgICogQHBhcmFtIHBsYXllclR3b1R5cGUgLSBUaGUgdHlwZSBvZiBwbGF5ZXIgdHdvIChodW1hbiBvciBDUFUpLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBnYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGxheWVyT25lVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgcGxheWVyVHdvVHlwZTogUGxheWVyVHlwZSxcbiAgICAgICAgb3B0aW9ucz86IEdhbWVDb25zdHJ1Y3Rvck9wdGlvbnM8Qm9hcmQ+LFxuICAgICkge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIFtwbGF5ZXJPbmVUeXBlLCBwbGF5ZXJUd29UeXBlXSxcbiAgICAgICAgICAgIG5ldyBCb2FyZCgpLFxuICAgICAgICAgICAgb3B0aW9ucz8ucmVuZGVyZXIgPz8gZGVmYXVsdFJlbmRlcixcbiAgICAgICAgICAgIG9wdGlvbnM/Lm9uRW5kLFxuICAgICAgICAgICAgb3B0aW9ucz8ub25JbnZhbGlkSW5wdXQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgQ1BVJ3MgbW92ZS5cbiAgICAgKiBAcGFyYW0gZGlmZmljdWx0eSAtIFRoZSBkaWZmaWN1bHR5IG9mIHRoZSBDUFUuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobSAtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIFRoZSBDUFUncyBtb3ZlLlxuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBBbiBlcnJvciBpZiB0aGUgZGlmZmljdWx0eSBpcyBpbnZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRlcm1pbmVDUFVNb3ZlKGRpZmZpY3VsdHk6IE9taXQ8UGxheWVyVHlwZSwgXCJodW1hblwiPiwgYWxnb3JpdGhtOiBBbGdvcml0aG0gPSBcImFscGhhYmV0YVwiKTogUG9zaXRpb24ge1xuICAgICAgICBjb25zdCB7IGVtcHR5Q2VsbHMgfSA9IHRoaXMuYm9hcmQ7XG4gICAgICAgIGNvbnN0IHJhbmRvbU1vdmUgPSBlbXB0eUNlbGxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGVtcHR5Q2VsbHMubGVuZ3RoKV0hO1xuICAgICAgICBjb25zdCBvcHRpbWFsTW92ZSA9IHRoaXMuZmluZE9wdGltYWxNb3ZlKHsgYWxnb3JpdGhtLCByYW5kb21Nb3ZlIH0pO1xuXG4gICAgICAgIHN3aXRjaCAoZGlmZmljdWx0eSkge1xuICAgICAgICAgICAgY2FzZSBcImltcG9zc2libGVDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW1hbE1vdmU7XG4gICAgICAgICAgICBjYXNlIFwiaGFyZENQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgMC44ID8gb3B0aW1hbE1vdmUgOiByYW5kb21Nb3ZlO1xuICAgICAgICAgICAgY2FzZSBcIm1lZGl1bUNQVVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgMC41ID8gb3B0aW1hbE1vdmUgOiByYW5kb21Nb3ZlO1xuICAgICAgICAgICAgY2FzZSBcImVhc3lDUFVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tTW92ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkaWZmaWN1bHR5LlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBvcHRpbWFsIG1vdmUgZm9yIHRoZSBjdXJyZW50IHBsYXllci5cbiAgICAgKiBAcGFyYW0gYWxnb3JpdGhtIC0gVGhlIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICogQHBhcmFtIGFsZ29yaXRobS5hbGdvcml0aG0gLSBUaGUgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgKiBAcGFyYW0gYWxnb3JpdGhtLnJhbmRvbU1vdmUgLSBUaGUgbW92ZSB0byByZXR1cm4gaWYgdGhlIGJvYXJkIGlzIGVtcHR5LlxuICAgICAqIEByZXR1cm5zIFRoZSBvcHRpbWFsIG1vdmUgZm9yIHRoZSBjdXJyZW50IHBsYXllci5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gQW4gZXJyb3IgaWYgdGhlIGFsZ29yaXRobSBpcyBpbnZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT3B0aW1hbE1vdmUoeyBhbGdvcml0aG0sIHJhbmRvbU1vdmUgfToge1xuICAgICAgICBhbGdvcml0aG06IEFsZ29yaXRobTtcbiAgICAgICAgcmFuZG9tTW92ZTogUG9zaXRpb247XG4gICAgfSA9IHsgYWxnb3JpdGhtOiBcImFscGhhYmV0YVwiLCByYW5kb21Nb3ZlOiB7IHg6IDIsIHk6IDIgfSB9KTogUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5ib2FyZC5pc0VtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIHJhbmRvbU1vdmU7XG5cbiAgICAgICAgY29uc3QgbWluaW1heCA9IHRoaXNbYWxnb3JpdGhtXSgpO1xuXG4gICAgICAgIHJldHVybiBtaW5pbWF4Lm1vdmU7XG4gICAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oathompsonjones/mini-games",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
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"