From b105ccf875fbb00b98f24c89177bd06a736998a5 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Mon, 3 Aug 2020 22:27:26 -0400 Subject: [PATCH 01/21] first draft of "original," with better interfaces --- .gitignore | 4 + src/original/direction.ts | 1 + src/original/door.ts | 39 +- src/original/interfaces.ts | 19 + src/original/mapsite.ts | 5 - src/original/maze.ts | 12 +- src/original/mazegame.ts | 17 +- src/original/package-lock.json | 1169 ++++++++++++++++++++++++++++++++ src/original/package.json | 21 + src/original/room.ts | 48 +- src/original/tsconfig.json | 16 + src/original/wall.ts | 20 +- 12 files changed, 1311 insertions(+), 60 deletions(-) create mode 100644 src/original/interfaces.ts delete mode 100644 src/original/mapsite.ts create mode 100644 src/original/package-lock.json create mode 100644 src/original/package.json create mode 100644 src/original/tsconfig.json diff --git a/.gitignore b/.gitignore index a4c9f31..a5dc1a5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ out .vscode +.DS_Store +*~ +node_modules/ +dist/ \ No newline at end of file diff --git a/src/original/direction.ts b/src/original/direction.ts index 94cc900..2c815c6 100644 --- a/src/original/direction.ts +++ b/src/original/direction.ts @@ -5,4 +5,5 @@ enum Direction { West = 'West' } +// why "default"? export default Direction \ No newline at end of file diff --git a/src/original/door.ts b/src/original/door.ts index 5f6d4f8..09a5bb5 100644 --- a/src/original/door.ts +++ b/src/original/door.ts @@ -1,23 +1,32 @@ -import Room from "./room"; +//import { Room } from "./room"; +import {Room, MazeElement} from './interfaces' -import MapSite from './mapsite' +class Door implements MazeElement { -class Door extends MapSite { - constructor(r1: Room, r2: Room) { - super(); - this.room1 = r1; - this.room2 = r2; - this.doorNr = Door.doorCnt++; - console.log("creating Door#" + this.doorNr + " between " + r1 + " and " + r2); + private static doorCounter: number = 1; + private doorID: number; + // private room1: Room; // declared in constructor + // private room2: Room; + + // constructor(r1: Room, r2: Room) { + constructor( + private room1: Room, + private room2: Room) { + // super(); + //this.room1 = r1; // automatically inserted + //this.room2 = r2; + this.doorID = Door.doorCounter++; + console.log( + "creating Door#" + this.doorID + " between " + room1 + " and " + room2); } + public toString(): string { - return "Door#" + this.doorNr; + return "Door#" + this.doorID; } - - private static doorCnt: number = 1; - private doorNr: number; - private room1: Room; - private room2: Room; + + public enter () : void {} + + } export default Door \ No newline at end of file diff --git a/src/original/interfaces.ts b/src/original/interfaces.ts new file mode 100644 index 0000000..c2f093a --- /dev/null +++ b/src/original/interfaces.ts @@ -0,0 +1,19 @@ +// interfaces +import Direction from './direction' + +export interface Maze { + addRoom(room: Room): void + } + +export interface MazeElement + { + enter() : void +} + +export interface Room extends MazeElement { + setSide(d: Direction, element: MazeElement) : void + getSide(d: Direction): MazeElement + toString(): string + } + + // export default MazeElement \ No newline at end of file diff --git a/src/original/mapsite.ts b/src/original/mapsite.ts deleted file mode 100644 index 8169056..0000000 --- a/src/original/mapsite.ts +++ /dev/null @@ -1,5 +0,0 @@ -abstract class MapSite { - // enter() method omitted.. -} - -export default MapSite \ No newline at end of file diff --git a/src/original/maze.ts b/src/original/maze.ts index 5125abc..da39293 100644 --- a/src/original/maze.ts +++ b/src/original/maze.ts @@ -1,15 +1,19 @@ -import Room from './room' +import * as interfaces from './interfaces' + +export class Maze implements interfaces.Maze { + + private rooms: Set = new Set(); -class Maze { constructor() { console.log("Creating a maze (original version)..") } - public addRoom(room: Room): void { + + public addRoom(room: interfaces.Room): void { if (!this.rooms.has(room)) { this.rooms.add(room) } } - private rooms: Set = new Set(); + } export default Maze \ No newline at end of file diff --git a/src/original/mazegame.ts b/src/original/mazegame.ts index e0a4c2c..aff274c 100644 --- a/src/original/mazegame.ts +++ b/src/original/mazegame.ts @@ -1,17 +1,18 @@ import Maze from './maze' -import Room from './room' +// import PlainRoom from './room' +import * as Room from './room' import Door from './door' import Direction from './direction'; import Wall from './wall'; class MazeGame { public createMaze(): Maze { - var aMaze = new Maze(); - var r1 = new Room(); - var r2 = new Room(); - var theDoor = new Door(r1, r2); - aMaze.addRoom(r1); - aMaze.addRoom(r2); + let theMaze = new Maze(); + let r1 = new Room.PlainRoom(); + let r2 = new Room.PlainRoom(); + let theDoor = new Door(r1, r2); + theMaze.addRoom(r1); + theMaze.addRoom(r2); r1.setSide(Direction.North, new Wall()); r1.setSide(Direction.East, theDoor); r1.setSide(Direction.South, new Wall()); @@ -20,7 +21,7 @@ class MazeGame { r2.setSide(Direction.East, new Wall()); r2.setSide(Direction.South, new Wall()); r2.setSide(Direction.West, theDoor); - return aMaze; + return theMaze; } } diff --git a/src/original/package-lock.json b/src/original/package-lock.json new file mode 100644 index 0000000..193f618 --- /dev/null +++ b/src/original/package-lock.json @@ -0,0 +1,1169 @@ +{ + "name": "sample_package", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/chai": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", + "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "optional": true + }, + "@types/mocha": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", + "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "requires": { + "is-buffer": "~2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "optional": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "requires": { + "chalk": "^2.4.2" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.0.tgz", + "integrity": "sha512-sI0gaI1I/jPVu3KFpnveWGadfe3JNBAENqgTUPgLZAUppu725zS2mrVztzAgIR8DUscuS4doEBTx9LATC+HSeA==", + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.3.1", + "debug": "3.2.6", + "diff": "4.0.2", + "escape-string-regexp": "1.0.5", + "find-up": "4.1.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "object.assign": "4.1.0", + "promise.allsettled": "1.0.2", + "serialize-javascript": "4.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.0", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "requires": { + "picomatch": "^2.0.7" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "optional": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-mocha": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-7.0.0.tgz", + "integrity": "sha512-7WfkQw1W6JZXG5m4E1w2e945uWzBoZqmnOHvpMu0v+zvyKLdUQeTtRMfcQsVEKsUnYL6nTyH4okRt2PZucmFXQ==", + "requires": { + "ts-node": "7.0.1", + "tsconfig-paths": "^3.5.0" + } + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + } + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "optional": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", + "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "requires": { + "camelcase": "^5.3.1", + "decamelize": "^1.2.0", + "flat": "^4.1.0", + "is-plain-obj": "^1.1.0", + "yargs": "^14.2.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" + } + } +} diff --git a/src/original/package.json b/src/original/package.json new file mode 100644 index 0000000..83b3cd5 --- /dev/null +++ b/src/original/package.json @@ -0,0 +1,21 @@ +{ + "name": "sample_package", + "version": "1.0.0", + "description": "Maze Example (Original)", + "main": "driver.ts", + "scripts": { + "test": "ts-mocha **/*.spec.ts", + "run": "tsc && node dist/driver.js" + }, + "author": "Mitch following Frank", + "license": "ISC", + "dependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "chai": "^4.2.0", + "mocha": "^8.0.1", + "ts-mocha": "^7.0.0", + "typescript": "^3.9.6" + }, + "keywords": [] +} diff --git a/src/original/room.ts b/src/original/room.ts index f012699..28cf678 100644 --- a/src/original/room.ts +++ b/src/original/room.ts @@ -1,34 +1,45 @@ import Direction from "./direction"; -import MapSite from "./mapsite"; +import { MazeElement,Room } from "./interfaces"; + + + +export class PlainRoom implements Room { + + private static roomCounter: number = 1; + private roomID: number; + // these should each be Wall or Door. + // Puzzle: can you redo the types to ensure this property? + private northSide: MazeElement; + private southSide: MazeElement; + private eastSide: MazeElement; + private westSide: MazeElement; -class Room extends MapSite { constructor() { - super(); - this.roomNr = Room.roomCnt++; - console.log("creating Room#" + this.roomNr) + this.roomID = PlainRoom.roomCounter++; + console.log("creating PlainRoom#" + this.roomID) } - public setSide(d: Direction, site: MapSite) { + public setSide(d: Direction, element: MazeElement) { switch (d) { case Direction.North: - this.northSide = site; + this.northSide = element; break; case Direction.South: - this.southSide = site; + this.southSide = element; break; case Direction.East: - this.eastSide = site; + this.eastSide = element; break case Direction.West: - this.westSide = site; + this.westSide = element; } console.log("setting " + d + " side of " + this.toString() + " to " + - site.toString()); + element.toString()); } - public getSide(d: Direction): MapSite { + public getSide(d: Direction): MazeElement { switch (d) { case Direction.North: return this.northSide; @@ -41,15 +52,12 @@ class Room extends MapSite { } } public toString(): string { - return "Room#" + this.roomNr; + return "PlainRoom#" + this.roomID; } - private static roomCnt: number = 1; - private roomNr: number; - private northSide: MapSite; - private southSide: MapSite; - private eastSide: MapSite; - private westSide: MapSite; + public enter () : void {} + + } -export default Room \ No newline at end of file +// export default Room \ No newline at end of file diff --git a/src/original/tsconfig.json b/src/original/tsconfig.json new file mode 100644 index 0000000..94df3b6 --- /dev/null +++ b/src/original/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] +} \ No newline at end of file diff --git a/src/original/wall.ts b/src/original/wall.ts index 44b2285..521c58e 100644 --- a/src/original/wall.ts +++ b/src/original/wall.ts @@ -1,17 +1,21 @@ -import MapSite from "./mapsite"; +import {MazeElement} from "./interfaces"; + +class Wall implements MazeElement { + + private static wallCounter: number = 1; + private wallID: number; -class Wall extends MapSite { constructor() { - super(); - this.wallNr = Wall.wallCnt++; - console.log("creating Wall#" + this.wallNr) + this.wallID = Wall.wallCounter++; + console.log("creating Wall#" + this.wallID) } + public toString(): string { - return "Wall#" + this.wallNr; + return "Wall#" + this.wallID; } - private static wallCnt: number = 1; - private wallNr: number; + public enter () : void {} + } export default Wall \ No newline at end of file From 7ec1b7da6069a24b97dcba7e88588a3bd00aec7a Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 4 Aug 2020 00:57:19 -0400 Subject: [PATCH 02/21] made Maze1() a function instead of a class --- src/original/{mazegame.ts => client.ts} | 8 +++----- src/original/door.ts | 4 ++-- src/original/driver.ts | 4 ---- src/original/index.ts | 4 ++++ src/original/interfaces.ts | 13 ++++--------- src/original/maze.ts | 11 +++++++---- src/original/room.ts | 10 +++++++--- 7 files changed, 27 insertions(+), 27 deletions(-) rename src/original/{mazegame.ts => client.ts} (86%) delete mode 100644 src/original/driver.ts create mode 100644 src/original/index.ts diff --git a/src/original/mazegame.ts b/src/original/client.ts similarity index 86% rename from src/original/mazegame.ts rename to src/original/client.ts index aff274c..8afb234 100644 --- a/src/original/mazegame.ts +++ b/src/original/client.ts @@ -1,12 +1,10 @@ import Maze from './maze' -// import PlainRoom from './room' import * as Room from './room' import Door from './door' import Direction from './direction'; import Wall from './wall'; -class MazeGame { - public createMaze(): Maze { +export function Maze1 () : Maze { let theMaze = new Maze(); let r1 = new Room.PlainRoom(); let r2 = new Room.PlainRoom(); @@ -23,6 +21,6 @@ class MazeGame { r2.setSide(Direction.West, theDoor); return theMaze; } -} -export default MazeGame \ No newline at end of file + +export default Maze1 \ No newline at end of file diff --git a/src/original/door.ts b/src/original/door.ts index 09a5bb5..0650c89 100644 --- a/src/original/door.ts +++ b/src/original/door.ts @@ -1,5 +1,5 @@ -//import { Room } from "./room"; -import {Room, MazeElement} from './interfaces' +import Room from "./room"; +import MazeElement from './interfaces' class Door implements MazeElement { diff --git a/src/original/driver.ts b/src/original/driver.ts deleted file mode 100644 index 686c590..0000000 --- a/src/original/driver.ts +++ /dev/null @@ -1,4 +0,0 @@ -import MazeGame from "./mazegame"; - -var game = new MazeGame(); -game.createMaze(); \ No newline at end of file diff --git a/src/original/index.ts b/src/original/index.ts new file mode 100644 index 0000000..f81fca6 --- /dev/null +++ b/src/original/index.ts @@ -0,0 +1,4 @@ +import Maze1 from "./client"; + +// actually build a maze +Maze1(); diff --git a/src/original/interfaces.ts b/src/original/interfaces.ts index c2f093a..27d0414 100644 --- a/src/original/interfaces.ts +++ b/src/original/interfaces.ts @@ -1,19 +1,14 @@ // interfaces + import Direction from './direction' -export interface Maze { - addRoom(room: Room): void - } + export interface MazeElement { enter() : void } -export interface Room extends MazeElement { - setSide(d: Direction, element: MazeElement) : void - getSide(d: Direction): MazeElement - toString(): string - } + - // export default MazeElement \ No newline at end of file +export default MazeElement \ No newline at end of file diff --git a/src/original/maze.ts b/src/original/maze.ts index da39293..d585122 100644 --- a/src/original/maze.ts +++ b/src/original/maze.ts @@ -1,14 +1,17 @@ -import * as interfaces from './interfaces' +import Room from './room' -export class Maze implements interfaces.Maze { +export interface Maze { + addRoom(room: Room): void +} +export class Maze implements Maze { - private rooms: Set = new Set(); + private rooms: Set = new Set(); constructor() { console.log("Creating a maze (original version)..") } - public addRoom(room: interfaces.Room): void { + public addRoom(room: Room): void { if (!this.rooms.has(room)) { this.rooms.add(room) } diff --git a/src/original/room.ts b/src/original/room.ts index 28cf678..91db421 100644 --- a/src/original/room.ts +++ b/src/original/room.ts @@ -1,7 +1,11 @@ import Direction from "./direction"; -import { MazeElement,Room } from "./interfaces"; - +import MazeElement from "./interfaces"; +export interface Room extends MazeElement { + setSide(d: Direction, element: MazeElement) : void + getSide(d: Direction): MazeElement + toString(): string +} export class PlainRoom implements Room { @@ -60,4 +64,4 @@ export class PlainRoom implements Room { } -// export default Room \ No newline at end of file +export default Room \ No newline at end of file From 042ddd40f39e7462697802e9f9a06db29c111a2a Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 4 Aug 2020 00:59:25 -0400 Subject: [PATCH 03/21] ready to merge --- src/original/interfaces.ts | 26 +++++++++++++------------- src/original/package-lock.json | 0 src/original/package.json | 0 src/original/tsconfig.json | 30 +++++++++++++++--------------- 4 files changed, 28 insertions(+), 28 deletions(-) mode change 100644 => 100755 src/original/interfaces.ts mode change 100644 => 100755 src/original/package-lock.json mode change 100644 => 100755 src/original/package.json mode change 100644 => 100755 src/original/tsconfig.json diff --git a/src/original/interfaces.ts b/src/original/interfaces.ts old mode 100644 new mode 100755 index 27d0414..7bbb0be --- a/src/original/interfaces.ts +++ b/src/original/interfaces.ts @@ -1,14 +1,14 @@ -// interfaces - -import Direction from './direction' - - - -export interface MazeElement - { - enter() : void -} - - - +// interfaces + +import Direction from './direction' + + + +export interface MazeElement + { + enter() : void +} + + + export default MazeElement \ No newline at end of file diff --git a/src/original/package-lock.json b/src/original/package-lock.json old mode 100644 new mode 100755 diff --git a/src/original/package.json b/src/original/package.json old mode 100644 new mode 100755 diff --git a/src/original/tsconfig.json b/src/original/tsconfig.json old mode 100644 new mode 100755 index 94df3b6..479ef88 --- a/src/original/tsconfig.json +++ b/src/original/tsconfig.json @@ -1,16 +1,16 @@ -{ - "compilerOptions": { - "outDir": "./dist/", - "noImplicitAny": true, - "sourceMap": true, - "module": "commonjs", - "target": "es6", - "allowJs": true - }, - "include": [ - "**/*.ts" - ], - "exclude": [ - "node_modules/*" - ] +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] } \ No newline at end of file From b4e3e17a54f7358ad406b1bcb59b79f2052f0f50 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 4 Aug 2020 01:07:29 -0400 Subject: [PATCH 04/21] making git happy again --- .../DoorNeedingSpell.ts | 0 src/abstractfactory.old/direction.ts | 8 + src/abstractfactory.old/door.ts | 23 + .../driver.ts | 0 .../driver2.ts | 0 .../enchantedmazefactory.ts | 0 .../enchantedroom.ts | 0 .../mapsite.ts | 0 src/abstractfactory.old/maze.ts | 15 + .../mazefactory.ts | 0 .../mazegame.ts | 0 src/abstractfactory.old/room.ts | 55 + .../spell.ts | 0 src/abstractfactory.old/wall.ts | 17 + src/abstractfactory/client.ts | 26 + src/abstractfactory/direction.ts | 1 + src/abstractfactory/door.ts | 37 +- src/abstractfactory/index.ts | 4 + src/abstractfactory/interfaces.ts | 14 + src/abstractfactory/maze.ts | 15 +- src/abstractfactory/package-lock.json | 1169 +++++++++++++++++ src/abstractfactory/package.json | 21 + src/abstractfactory/room.ts | 57 +- src/abstractfactory/tsconfig.json | 16 + src/abstractfactory/wall.ts | 22 +- 25 files changed, 1453 insertions(+), 47 deletions(-) rename src/{abstractfactory => abstractfactory.old}/DoorNeedingSpell.ts (100%) create mode 100644 src/abstractfactory.old/direction.ts create mode 100644 src/abstractfactory.old/door.ts rename src/{abstractfactory => abstractfactory.old}/driver.ts (100%) rename src/{abstractfactory => abstractfactory.old}/driver2.ts (100%) rename src/{abstractfactory => abstractfactory.old}/enchantedmazefactory.ts (100%) rename src/{abstractfactory => abstractfactory.old}/enchantedroom.ts (100%) rename src/{abstractfactory => abstractfactory.old}/mapsite.ts (100%) create mode 100644 src/abstractfactory.old/maze.ts rename src/{abstractfactory => abstractfactory.old}/mazefactory.ts (100%) rename src/{abstractfactory => abstractfactory.old}/mazegame.ts (100%) create mode 100644 src/abstractfactory.old/room.ts rename src/{abstractfactory => abstractfactory.old}/spell.ts (100%) create mode 100644 src/abstractfactory.old/wall.ts create mode 100644 src/abstractfactory/client.ts create mode 100644 src/abstractfactory/index.ts create mode 100644 src/abstractfactory/interfaces.ts create mode 100644 src/abstractfactory/package-lock.json create mode 100644 src/abstractfactory/package.json create mode 100644 src/abstractfactory/tsconfig.json diff --git a/src/abstractfactory/DoorNeedingSpell.ts b/src/abstractfactory.old/DoorNeedingSpell.ts similarity index 100% rename from src/abstractfactory/DoorNeedingSpell.ts rename to src/abstractfactory.old/DoorNeedingSpell.ts diff --git a/src/abstractfactory.old/direction.ts b/src/abstractfactory.old/direction.ts new file mode 100644 index 0000000..94cc900 --- /dev/null +++ b/src/abstractfactory.old/direction.ts @@ -0,0 +1,8 @@ +enum Direction { + North = 'North', + South = 'South', + East = 'East', + West = 'West' +} + +export default Direction \ No newline at end of file diff --git a/src/abstractfactory.old/door.ts b/src/abstractfactory.old/door.ts new file mode 100644 index 0000000..5f6d4f8 --- /dev/null +++ b/src/abstractfactory.old/door.ts @@ -0,0 +1,23 @@ +import Room from "./room"; + +import MapSite from './mapsite' + +class Door extends MapSite { + constructor(r1: Room, r2: Room) { + super(); + this.room1 = r1; + this.room2 = r2; + this.doorNr = Door.doorCnt++; + console.log("creating Door#" + this.doorNr + " between " + r1 + " and " + r2); + } + public toString(): string { + return "Door#" + this.doorNr; + } + + private static doorCnt: number = 1; + private doorNr: number; + private room1: Room; + private room2: Room; +} + +export default Door \ No newline at end of file diff --git a/src/abstractfactory/driver.ts b/src/abstractfactory.old/driver.ts similarity index 100% rename from src/abstractfactory/driver.ts rename to src/abstractfactory.old/driver.ts diff --git a/src/abstractfactory/driver2.ts b/src/abstractfactory.old/driver2.ts similarity index 100% rename from src/abstractfactory/driver2.ts rename to src/abstractfactory.old/driver2.ts diff --git a/src/abstractfactory/enchantedmazefactory.ts b/src/abstractfactory.old/enchantedmazefactory.ts similarity index 100% rename from src/abstractfactory/enchantedmazefactory.ts rename to src/abstractfactory.old/enchantedmazefactory.ts diff --git a/src/abstractfactory/enchantedroom.ts b/src/abstractfactory.old/enchantedroom.ts similarity index 100% rename from src/abstractfactory/enchantedroom.ts rename to src/abstractfactory.old/enchantedroom.ts diff --git a/src/abstractfactory/mapsite.ts b/src/abstractfactory.old/mapsite.ts similarity index 100% rename from src/abstractfactory/mapsite.ts rename to src/abstractfactory.old/mapsite.ts diff --git a/src/abstractfactory.old/maze.ts b/src/abstractfactory.old/maze.ts new file mode 100644 index 0000000..8219ebb --- /dev/null +++ b/src/abstractfactory.old/maze.ts @@ -0,0 +1,15 @@ +import Room from './room' + +class Maze { + constructor() { + console.log("Creating a maze (Abstract Factory version)..") + } + public addRoom(room: Room): void { + if (!this.rooms.has(room)) { + this.rooms.add(room) + } + } + private rooms: Set = new Set(); +} + +export default Maze \ No newline at end of file diff --git a/src/abstractfactory/mazefactory.ts b/src/abstractfactory.old/mazefactory.ts similarity index 100% rename from src/abstractfactory/mazefactory.ts rename to src/abstractfactory.old/mazefactory.ts diff --git a/src/abstractfactory/mazegame.ts b/src/abstractfactory.old/mazegame.ts similarity index 100% rename from src/abstractfactory/mazegame.ts rename to src/abstractfactory.old/mazegame.ts diff --git a/src/abstractfactory.old/room.ts b/src/abstractfactory.old/room.ts new file mode 100644 index 0000000..f012699 --- /dev/null +++ b/src/abstractfactory.old/room.ts @@ -0,0 +1,55 @@ +import Direction from "./direction"; +import MapSite from "./mapsite"; + +class Room extends MapSite { + constructor() { + super(); + this.roomNr = Room.roomCnt++; + console.log("creating Room#" + this.roomNr) + } + public setSide(d: Direction, site: MapSite) { + switch (d) { + case Direction.North: + this.northSide = site; + break; + case Direction.South: + this.southSide = site; + break; + case Direction.East: + this.eastSide = site; + break + case Direction.West: + this.westSide = site; + } + console.log("setting " + d + + " side of " + + this.toString() + + " to " + + site.toString()); + } + + public getSide(d: Direction): MapSite { + switch (d) { + case Direction.North: + return this.northSide; + case Direction.South: + return this.southSide; + case Direction.East: + return this.eastSide; + case Direction.West: + return this.westSide; + } + } + public toString(): string { + return "Room#" + this.roomNr; + } + + private static roomCnt: number = 1; + private roomNr: number; + private northSide: MapSite; + private southSide: MapSite; + private eastSide: MapSite; + private westSide: MapSite; +} + +export default Room \ No newline at end of file diff --git a/src/abstractfactory/spell.ts b/src/abstractfactory.old/spell.ts similarity index 100% rename from src/abstractfactory/spell.ts rename to src/abstractfactory.old/spell.ts diff --git a/src/abstractfactory.old/wall.ts b/src/abstractfactory.old/wall.ts new file mode 100644 index 0000000..9694842 --- /dev/null +++ b/src/abstractfactory.old/wall.ts @@ -0,0 +1,17 @@ +import MapSite from "./mapsite"; + +class Wall extends MapSite { + constructor() { + super(); + this.wallNr = Wall.wallCnt++; + console.log("creating Wall#" + this.wallNr) + } + public toString(): string { + return "Wall#" + this.wallNr; + } + + private static wallCnt: number = 1; + private wallNr: number; +} + +export default Wall; \ No newline at end of file diff --git a/src/abstractfactory/client.ts b/src/abstractfactory/client.ts new file mode 100644 index 0000000..8afb234 --- /dev/null +++ b/src/abstractfactory/client.ts @@ -0,0 +1,26 @@ +import Maze from './maze' +import * as Room from './room' +import Door from './door' +import Direction from './direction'; +import Wall from './wall'; + +export function Maze1 () : Maze { + let theMaze = new Maze(); + let r1 = new Room.PlainRoom(); + let r2 = new Room.PlainRoom(); + let theDoor = new Door(r1, r2); + theMaze.addRoom(r1); + theMaze.addRoom(r2); + r1.setSide(Direction.North, new Wall()); + r1.setSide(Direction.East, theDoor); + r1.setSide(Direction.South, new Wall()); + r1.setSide(Direction.West, new Wall()); + r2.setSide(Direction.North, new Wall()); + r2.setSide(Direction.East, new Wall()); + r2.setSide(Direction.South, new Wall()); + r2.setSide(Direction.West, theDoor); + return theMaze; + } + + +export default Maze1 \ No newline at end of file diff --git a/src/abstractfactory/direction.ts b/src/abstractfactory/direction.ts index 94cc900..2c815c6 100644 --- a/src/abstractfactory/direction.ts +++ b/src/abstractfactory/direction.ts @@ -5,4 +5,5 @@ enum Direction { West = 'West' } +// why "default"? export default Direction \ No newline at end of file diff --git a/src/abstractfactory/door.ts b/src/abstractfactory/door.ts index 5f6d4f8..0650c89 100644 --- a/src/abstractfactory/door.ts +++ b/src/abstractfactory/door.ts @@ -1,23 +1,32 @@ import Room from "./room"; +import MazeElement from './interfaces' -import MapSite from './mapsite' +class Door implements MazeElement { -class Door extends MapSite { - constructor(r1: Room, r2: Room) { - super(); - this.room1 = r1; - this.room2 = r2; - this.doorNr = Door.doorCnt++; - console.log("creating Door#" + this.doorNr + " between " + r1 + " and " + r2); + private static doorCounter: number = 1; + private doorID: number; + // private room1: Room; // declared in constructor + // private room2: Room; + + // constructor(r1: Room, r2: Room) { + constructor( + private room1: Room, + private room2: Room) { + // super(); + //this.room1 = r1; // automatically inserted + //this.room2 = r2; + this.doorID = Door.doorCounter++; + console.log( + "creating Door#" + this.doorID + " between " + room1 + " and " + room2); } + public toString(): string { - return "Door#" + this.doorNr; + return "Door#" + this.doorID; } - - private static doorCnt: number = 1; - private doorNr: number; - private room1: Room; - private room2: Room; + + public enter () : void {} + + } export default Door \ No newline at end of file diff --git a/src/abstractfactory/index.ts b/src/abstractfactory/index.ts new file mode 100644 index 0000000..f81fca6 --- /dev/null +++ b/src/abstractfactory/index.ts @@ -0,0 +1,4 @@ +import Maze1 from "./client"; + +// actually build a maze +Maze1(); diff --git a/src/abstractfactory/interfaces.ts b/src/abstractfactory/interfaces.ts new file mode 100644 index 0000000..27d0414 --- /dev/null +++ b/src/abstractfactory/interfaces.ts @@ -0,0 +1,14 @@ +// interfaces + +import Direction from './direction' + + + +export interface MazeElement + { + enter() : void +} + + + +export default MazeElement \ No newline at end of file diff --git a/src/abstractfactory/maze.ts b/src/abstractfactory/maze.ts index 8219ebb..d585122 100644 --- a/src/abstractfactory/maze.ts +++ b/src/abstractfactory/maze.ts @@ -1,15 +1,22 @@ -import Room from './room' +import Room from './room' + +export interface Maze { + addRoom(room: Room): void +} +export class Maze implements Maze { + + private rooms: Set = new Set(); -class Maze { constructor() { - console.log("Creating a maze (Abstract Factory version)..") + console.log("Creating a maze (original version)..") } + public addRoom(room: Room): void { if (!this.rooms.has(room)) { this.rooms.add(room) } } - private rooms: Set = new Set(); + } export default Maze \ No newline at end of file diff --git a/src/abstractfactory/package-lock.json b/src/abstractfactory/package-lock.json new file mode 100644 index 0000000..193f618 --- /dev/null +++ b/src/abstractfactory/package-lock.json @@ -0,0 +1,1169 @@ +{ + "name": "sample_package", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/chai": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", + "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "optional": true + }, + "@types/mocha": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", + "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "requires": { + "is-buffer": "~2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "optional": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "requires": { + "chalk": "^2.4.2" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.0.tgz", + "integrity": "sha512-sI0gaI1I/jPVu3KFpnveWGadfe3JNBAENqgTUPgLZAUppu725zS2mrVztzAgIR8DUscuS4doEBTx9LATC+HSeA==", + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.3.1", + "debug": "3.2.6", + "diff": "4.0.2", + "escape-string-regexp": "1.0.5", + "find-up": "4.1.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "object.assign": "4.1.0", + "promise.allsettled": "1.0.2", + "serialize-javascript": "4.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.0", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "requires": { + "picomatch": "^2.0.7" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "optional": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-mocha": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-7.0.0.tgz", + "integrity": "sha512-7WfkQw1W6JZXG5m4E1w2e945uWzBoZqmnOHvpMu0v+zvyKLdUQeTtRMfcQsVEKsUnYL6nTyH4okRt2PZucmFXQ==", + "requires": { + "ts-node": "7.0.1", + "tsconfig-paths": "^3.5.0" + } + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + } + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "optional": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", + "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "requires": { + "camelcase": "^5.3.1", + "decamelize": "^1.2.0", + "flat": "^4.1.0", + "is-plain-obj": "^1.1.0", + "yargs": "^14.2.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" + } + } +} diff --git a/src/abstractfactory/package.json b/src/abstractfactory/package.json new file mode 100644 index 0000000..83b3cd5 --- /dev/null +++ b/src/abstractfactory/package.json @@ -0,0 +1,21 @@ +{ + "name": "sample_package", + "version": "1.0.0", + "description": "Maze Example (Original)", + "main": "driver.ts", + "scripts": { + "test": "ts-mocha **/*.spec.ts", + "run": "tsc && node dist/driver.js" + }, + "author": "Mitch following Frank", + "license": "ISC", + "dependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "chai": "^4.2.0", + "mocha": "^8.0.1", + "ts-mocha": "^7.0.0", + "typescript": "^3.9.6" + }, + "keywords": [] +} diff --git a/src/abstractfactory/room.ts b/src/abstractfactory/room.ts index f012699..f58981b 100644 --- a/src/abstractfactory/room.ts +++ b/src/abstractfactory/room.ts @@ -1,34 +1,49 @@ import Direction from "./direction"; -import MapSite from "./mapsite"; +import MazeElement from "./interfaces"; + +export interface Room extends MazeElement { + setSide(d: Direction, element: MazeElement) : void + getSide(d: Direction): MazeElement + toString(): string +} + +export class PlainRoom implements Room { + + private static roomCounter: number = 1; + private roomID: number; + // these should each be Wall or Door. + // Puzzle: can you redo the types to ensure this property? + private northSide: MazeElement; + private southSide: MazeElement; + private eastSide: MazeElement; + private westSide: MazeElement; -class Room extends MapSite { constructor() { - super(); - this.roomNr = Room.roomCnt++; - console.log("creating Room#" + this.roomNr) + this.roomID = PlainRoom.roomCounter++; + console.log("creating PlainRoom#" + this.roomID) } - public setSide(d: Direction, site: MapSite) { + public setSide(d: Direction, element: MazeElement) { switch (d) { case Direction.North: - this.northSide = site; + this.northSide = element; break; case Direction.South: - this.southSide = site; + this.southSide = element; break; case Direction.East: - this.eastSide = site; + this.eastSide = element; break case Direction.West: - this.westSide = site; + this.westSide = element; } console.log("setting " + d + " side of " + this.toString() + " to " + - site.toString()); + element.toString()); } - public getSide(d: Direction): MapSite { + public getSide(d: Direction): MazeElement { switch (d) { case Direction.North: return this.northSide; @@ -41,15 +56,17 @@ class Room extends MapSite { } } public toString(): string { - return "Room#" + this.roomNr; + return "PlainRoom#" + this.roomID; } - private static roomCnt: number = 1; - private roomNr: number; - private northSide: MapSite; - private southSide: MapSite; - private eastSide: MapSite; - private westSide: MapSite; + public enter () : void {} + + +} + +// exp +export class ExplodingRoom extends Room { + public explode () : void {} } -export default Room \ No newline at end of file +// export default Room \ No newline at end of file diff --git a/src/abstractfactory/tsconfig.json b/src/abstractfactory/tsconfig.json new file mode 100644 index 0000000..94df3b6 --- /dev/null +++ b/src/abstractfactory/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] +} \ No newline at end of file diff --git a/src/abstractfactory/wall.ts b/src/abstractfactory/wall.ts index 9694842..521c58e 100644 --- a/src/abstractfactory/wall.ts +++ b/src/abstractfactory/wall.ts @@ -1,17 +1,21 @@ -import MapSite from "./mapsite"; +import {MazeElement} from "./interfaces"; + +class Wall implements MazeElement { + + private static wallCounter: number = 1; + private wallID: number; -class Wall extends MapSite { constructor() { - super(); - this.wallNr = Wall.wallCnt++; - console.log("creating Wall#" + this.wallNr) + this.wallID = Wall.wallCounter++; + console.log("creating Wall#" + this.wallID) } + public toString(): string { - return "Wall#" + this.wallNr; + return "Wall#" + this.wallID; } - private static wallCnt: number = 1; - private wallNr: number; + public enter () : void {} + } -export default Wall; \ No newline at end of file +export default Wall \ No newline at end of file From b405c951b98f3454e2bf2cd6b59301f63fa8790e Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 4 Aug 2020 01:55:00 -0400 Subject: [PATCH 05/21] First draft of abstractfactory --- src/abstractfactory/client.ts | 24 ++++++++++++------------ src/abstractfactory/door.ts | 4 ++-- src/abstractfactory/factory.ts | 27 +++++++++++++++++++++++++++ src/abstractfactory/index.ts | 2 +- src/abstractfactory/maze.ts | 2 +- src/abstractfactory/room.ts | 12 +++++++----- src/original/client.ts | 1 + 7 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 src/abstractfactory/factory.ts diff --git a/src/abstractfactory/client.ts b/src/abstractfactory/client.ts index 8afb234..946e7e8 100644 --- a/src/abstractfactory/client.ts +++ b/src/abstractfactory/client.ts @@ -3,24 +3,24 @@ import * as Room from './room' import Door from './door' import Direction from './direction'; import Wall from './wall'; +import { PlainMazeFactory } from './factory'; export function Maze1 () : Maze { - let theMaze = new Maze(); - let r1 = new Room.PlainRoom(); - let r2 = new Room.PlainRoom(); - let theDoor = new Door(r1, r2); + let theMaze = new Maze (); + let theFactory = new PlainMazeFactory(); + let r1 = theFactory.makeRoom() + let r2 = theFactory.makeRoom() + let theDoor = theFactory.makeDoor(r1, r2); theMaze.addRoom(r1); theMaze.addRoom(r2); - r1.setSide(Direction.North, new Wall()); + r1.setSide(Direction.North, theFactory.makeWall()); r1.setSide(Direction.East, theDoor); - r1.setSide(Direction.South, new Wall()); - r1.setSide(Direction.West, new Wall()); - r2.setSide(Direction.North, new Wall()); - r2.setSide(Direction.East, new Wall()); - r2.setSide(Direction.South, new Wall()); + r1.setSide(Direction.South, theFactory.makeWall()); + r1.setSide(Direction.West, theFactory.makeWall()); + r2.setSide(Direction.North, theFactory.makeWall()); + r2.setSide(Direction.East, theFactory.makeWall()); + r2.setSide(Direction.South, theFactory.makeWall()); r2.setSide(Direction.West, theDoor); return theMaze; } - -export default Maze1 \ No newline at end of file diff --git a/src/abstractfactory/door.ts b/src/abstractfactory/door.ts index 0650c89..2647b1f 100644 --- a/src/abstractfactory/door.ts +++ b/src/abstractfactory/door.ts @@ -1,7 +1,7 @@ -import Room from "./room"; +import {Room} from "./room"; import MazeElement from './interfaces' -class Door implements MazeElement { +export class Door implements MazeElement { private static doorCounter: number = 1; private doorID: number; diff --git a/src/abstractfactory/factory.ts b/src/abstractfactory/factory.ts new file mode 100644 index 0000000..497be45 --- /dev/null +++ b/src/abstractfactory/factory.ts @@ -0,0 +1,27 @@ +// factory.ts +// defines PlainMazeFactory and ExplodingMazeFactory + +import { Room, PlainRoom, ExplodingRoom } from "./room" +import Wall from "./wall" +import Door from './door' + +export interface MazeFactory { + makeRoom(): Room + makeWall(): Wall + makeDoor(room1: Room, room2: Room): Door +} + +/// this should be Maze_*Element*_Factory +export class PlainMazeFactory { + public makeRoom(): Room { return new PlainRoom() } + public makeWall(): Wall { return new Wall() } + public makeDoor(room1: Room, room2: Room): Door { return new Door(room1, room2) } +} + +export class ExplodingMazeFactory extends PlainMazeFactory { + private roomCounter: number = 0 + public makeRoom(): Room { + this.roomCounter++; + return (this.roomCounter % 3 == 0) ? new PlainRoom() : new ExplodingRoom() + } +} diff --git a/src/abstractfactory/index.ts b/src/abstractfactory/index.ts index f81fca6..2ae6b6c 100644 --- a/src/abstractfactory/index.ts +++ b/src/abstractfactory/index.ts @@ -1,4 +1,4 @@ -import Maze1 from "./client"; +import {Maze1} from "./client"; // actually build a maze Maze1(); diff --git a/src/abstractfactory/maze.ts b/src/abstractfactory/maze.ts index d585122..9c9743a 100644 --- a/src/abstractfactory/maze.ts +++ b/src/abstractfactory/maze.ts @@ -1,4 +1,4 @@ -import Room from './room' +import {Room} from './room' export interface Maze { addRoom(room: Room): void diff --git a/src/abstractfactory/room.ts b/src/abstractfactory/room.ts index f58981b..2e61fb2 100644 --- a/src/abstractfactory/room.ts +++ b/src/abstractfactory/room.ts @@ -10,7 +10,7 @@ export interface Room extends MazeElement { export class PlainRoom implements Room { private static roomCounter: number = 1; - private roomID: number; + protected roomID: number; // these should each be Wall or Door. // Puzzle: can you redo the types to ensure this property? private northSide: MazeElement; @@ -64,9 +64,11 @@ export class PlainRoom implements Room { } -// exp -export class ExplodingRoom extends Room { - public explode () : void {} +// exploding room, also implements interface Room +export class ExplodingRoom extends PlainRoom { + public explode(): void { } + public toString(): string { + return "ExplodingRoom#" + this.roomID; + } } -// export default Room \ No newline at end of file diff --git a/src/original/client.ts b/src/original/client.ts index 8afb234..cfdb8d8 100644 --- a/src/original/client.ts +++ b/src/original/client.ts @@ -3,6 +3,7 @@ import * as Room from './room' import Door from './door' import Direction from './direction'; import Wall from './wall'; +import { PlainMazeFactory} from 'factory' export function Maze1 () : Maze { let theMaze = new Maze(); From dde8226b861bec6226df1f3f18c0b076c8c898e7 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 4 Aug 2020 08:55:23 -0400 Subject: [PATCH 06/21] Release Candidate #1 --- src/abstractfactory/client.ts | 60 ++++++++++++++++++++------------ src/abstractfactory/factory.ts | 18 +++++----- src/abstractfactory/index.ts | 22 ++++++++++-- src/abstractfactory/maze.ts | 11 ++---- src/abstractfactory/package.json | 8 ++--- src/abstractfactory/room.ts | 2 ++ 6 files changed, 75 insertions(+), 46 deletions(-) diff --git a/src/abstractfactory/client.ts b/src/abstractfactory/client.ts index 946e7e8..483ff86 100644 --- a/src/abstractfactory/client.ts +++ b/src/abstractfactory/client.ts @@ -1,26 +1,40 @@ -import Maze from './maze' -import * as Room from './room' -import Door from './door' +import {Maze} from './maze' import Direction from './direction'; -import Wall from './wall'; -import { PlainMazeFactory } from './factory'; +import { PlainMazeElementFactory, MazeElementFactory } from './factory'; -export function Maze1 () : Maze { - let theMaze = new Maze (); - let theFactory = new PlainMazeFactory(); - let r1 = theFactory.makeRoom() - let r2 = theFactory.makeRoom() - let theDoor = theFactory.makeDoor(r1, r2); - theMaze.addRoom(r1); - theMaze.addRoom(r2); - r1.setSide(Direction.North, theFactory.makeWall()); - r1.setSide(Direction.East, theDoor); - r1.setSide(Direction.South, theFactory.makeWall()); - r1.setSide(Direction.West, theFactory.makeWall()); - r2.setSide(Direction.North, theFactory.makeWall()); - r2.setSide(Direction.East, theFactory.makeWall()); - r2.setSide(Direction.South, theFactory.makeWall()); - r2.setSide(Direction.West, theDoor); - return theMaze; - } +// export function Maze1 () : Maze { +// let theMaze = new Maze (); +// let theFactory = new PlainMazeElementFactory(); +// let r1 = theFactory.makeRoom() +// let r2 = theFactory.makeRoom() +// let theDoor = theFactory.makeDoor(r1, r2); +// theMaze.addRoom(r1); +// theMaze.addRoom(r2); +// r1.setSide(Direction.North, theFactory.makeWall()); +// r1.setSide(Direction.East, theDoor); +// r1.setSide(Direction.South, theFactory.makeWall()); +// r1.setSide(Direction.West, theFactory.makeWall()); +// r2.setSide(Direction.North, theFactory.makeWall()); +// r2.setSide(Direction.East, theFactory.makeWall()); +// r2.setSide(Direction.South, theFactory.makeWall()); +// r2.setSide(Direction.West, theDoor); +// return theMaze; +// } +export function makeMaze(theFactory: MazeElementFactory): Maze { + let theMaze = new Maze(); + let r1 = theFactory.makeRoom() + let r2 = theFactory.makeRoom() + let theDoor = theFactory.makeDoor(r1, r2); + theMaze.addRoom(r1); + theMaze.addRoom(r2); + r1.setSide(Direction.North, theFactory.makeWall()); + r1.setSide(Direction.East, theDoor); + r1.setSide(Direction.South, theFactory.makeWall()); + r1.setSide(Direction.West, theFactory.makeWall()); + r2.setSide(Direction.North, theFactory.makeWall()); + r2.setSide(Direction.East, theFactory.makeWall()); + r2.setSide(Direction.South, theFactory.makeWall()); + r2.setSide(Direction.West, theDoor); + return theMaze; +} \ No newline at end of file diff --git a/src/abstractfactory/factory.ts b/src/abstractfactory/factory.ts index 497be45..78c223c 100644 --- a/src/abstractfactory/factory.ts +++ b/src/abstractfactory/factory.ts @@ -5,23 +5,23 @@ import { Room, PlainRoom, ExplodingRoom } from "./room" import Wall from "./wall" import Door from './door' -export interface MazeFactory { +export interface MazeElementFactory { makeRoom(): Room makeWall(): Wall makeDoor(room1: Room, room2: Room): Door } -/// this should be Maze_*Element*_Factory -export class PlainMazeFactory { +export class PlainMazeElementFactory implements MazeElementFactory { public makeRoom(): Room { return new PlainRoom() } public makeWall(): Wall { return new Wall() } public makeDoor(room1: Room, room2: Room): Door { return new Door(room1, room2) } } -export class ExplodingMazeFactory extends PlainMazeFactory { - private roomCounter: number = 0 - public makeRoom(): Room { - this.roomCounter++; - return (this.roomCounter % 3 == 0) ? new PlainRoom() : new ExplodingRoom() - } +// make all rooms exploding +export class ExplodingMazeElementFactory extends PlainMazeElementFactory { + public makeRoom(): ExplodingRoom { return new ExplodingRoom() } } + +// try out the factory +new ExplodingMazeElementFactory().makeRoom().explode //this works... + diff --git a/src/abstractfactory/index.ts b/src/abstractfactory/index.ts index 2ae6b6c..2f3ccd7 100644 --- a/src/abstractfactory/index.ts +++ b/src/abstractfactory/index.ts @@ -1,4 +1,22 @@ -import {Maze1} from "./client"; +import {makeMaze} from "./client"; +import * as factories from './factory' // actually build a maze -Maze1(); +console.log('======'); +console.log('building a plain maze'); +makeMaze(new factories.PlainMazeElementFactory()); +console.log('finished building plain maze') +console.log('======'); +console.log('') + +console.log('=======') +console.log('building exploding maze') +makeMaze(new factories.ExplodingMazeElementFactory()); +console.log('finished building exploding maze') +console.log('=======') + +// can we make an exploding room explode? Yes +// new factories.ExplodingMazeElementFactory().makeRoom().explode + +// can we make a plan room explode? NO: this is flagged as a type error. +// new factories.PlainMazeElementFactory().makeRoom().explode \ No newline at end of file diff --git a/src/abstractfactory/maze.ts b/src/abstractfactory/maze.ts index 9c9743a..d40bbdb 100644 --- a/src/abstractfactory/maze.ts +++ b/src/abstractfactory/maze.ts @@ -1,22 +1,17 @@ -import {Room} from './room' +import { Room } from './room' -export interface Maze { +export interface Maze { addRoom(room: Room): void } export class Maze implements Maze { private rooms: Set = new Set(); - constructor() { - console.log("Creating a maze (original version)..") - } - public addRoom(room: Room): void { if (!this.rooms.has(room)) { this.rooms.add(room) } } - + } -export default Maze \ No newline at end of file diff --git a/src/abstractfactory/package.json b/src/abstractfactory/package.json index 83b3cd5..13aafee 100644 --- a/src/abstractfactory/package.json +++ b/src/abstractfactory/package.json @@ -1,11 +1,11 @@ { - "name": "sample_package", + "name": "maze-example", "version": "1.0.0", - "description": "Maze Example (Original)", - "main": "driver.ts", + "description": "Maze Example (abstract factory)", + "main": "index.ts", "scripts": { "test": "ts-mocha **/*.spec.ts", - "run": "tsc && node dist/driver.js" + "run": "tsc && node ./dist/index.js" }, "author": "Mitch following Frank", "license": "ISC", diff --git a/src/abstractfactory/room.ts b/src/abstractfactory/room.ts index 2e61fb2..9373ff5 100644 --- a/src/abstractfactory/room.ts +++ b/src/abstractfactory/room.ts @@ -72,3 +72,5 @@ export class ExplodingRoom extends PlainRoom { } } +new ExplodingRoom ().explode + From c7a69f246f36f98453cd3274f5c9e1d9cb6b69ca Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 4 Aug 2020 13:48:04 -0400 Subject: [PATCH 07/21] refactored to put all exploding room stuff in one place --- src/abstractfactory/door.ts | 10 +++--- src/abstractfactory/exploding-rooms.ts | 27 +++++++++++++++++ src/abstractfactory/factory.ts | 10 ++---- src/abstractfactory/index.ts | 9 +++--- src/abstractfactory/room.ts | 42 +++++++++++--------------- 5 files changed, 56 insertions(+), 42 deletions(-) create mode 100644 src/abstractfactory/exploding-rooms.ts diff --git a/src/abstractfactory/door.ts b/src/abstractfactory/door.ts index 2647b1f..40f797c 100644 --- a/src/abstractfactory/door.ts +++ b/src/abstractfactory/door.ts @@ -1,4 +1,4 @@ -import {Room} from "./room"; +import { Room } from "./room"; import MazeElement from './interfaces' export class Door implements MazeElement { @@ -8,23 +8,21 @@ export class Door implements MazeElement { // private room1: Room; // declared in constructor // private room2: Room; - // constructor(r1: Room, r2: Room) { constructor( private room1: Room, private room2: Room) { - // super(); //this.room1 = r1; // automatically inserted //this.room2 = r2; this.doorID = Door.doorCounter++; console.log( - "creating Door#" + this.doorID + " between " + room1 + " and " + room2); + "creating Door #" + this.doorID + " between Rooms " + room1.getID() + " and " + room2.getID()); } public toString(): string { - return "Door#" + this.doorID; + return "Door #" + this.doorID; } - public enter () : void {} + public enter(): void { } } diff --git a/src/abstractfactory/exploding-rooms.ts b/src/abstractfactory/exploding-rooms.ts new file mode 100644 index 0000000..d188205 --- /dev/null +++ b/src/abstractfactory/exploding-rooms.ts @@ -0,0 +1,27 @@ +// exploding rooms, all in one place +import { PlainRoom } from './room' +import { PlainMazeElementFactory} from './factory' + +// exploding room, also implements interface Room +export class ExplodingRoom extends PlainRoom { + constructor (public hasBomb : boolean) { + super(); + } + public explode(): void { } + public toString(): string { + return 'ExplodingRoom #' + this.roomID + ' (hasBomb = ' + this.hasBomb + ')' + } + } + +// factory for exploding rooms +export class ExplodingMazeElementFactory extends PlainMazeElementFactory { + private roomCounter : number = 0 + public makeRoom(): ExplodingRoom { + this.roomCounter++; + // put a bomb in every other room + return new ExplodingRoom((this.roomCounter % 2) == 0) } +} + +// try out the factory +// new ExplodingMazeElementFactory().makeRoom().explode //this works... + \ No newline at end of file diff --git a/src/abstractfactory/factory.ts b/src/abstractfactory/factory.ts index 78c223c..5bdd057 100644 --- a/src/abstractfactory/factory.ts +++ b/src/abstractfactory/factory.ts @@ -1,7 +1,7 @@ // factory.ts -// defines PlainMazeFactory and ExplodingMazeFactory +// defines PlainMazeFactory -import { Room, PlainRoom, ExplodingRoom } from "./room" +import { Room, PlainRoom } from "./room" import Wall from "./wall" import Door from './door' @@ -17,11 +17,5 @@ export class PlainMazeElementFactory implements MazeElementFactory { public makeDoor(room1: Room, room2: Room): Door { return new Door(room1, room2) } } -// make all rooms exploding -export class ExplodingMazeElementFactory extends PlainMazeElementFactory { - public makeRoom(): ExplodingRoom { return new ExplodingRoom() } -} -// try out the factory -new ExplodingMazeElementFactory().makeRoom().explode //this works... diff --git a/src/abstractfactory/index.ts b/src/abstractfactory/index.ts index 2f3ccd7..191b36e 100644 --- a/src/abstractfactory/index.ts +++ b/src/abstractfactory/index.ts @@ -1,17 +1,18 @@ import {makeMaze} from "./client"; -import * as factories from './factory' +import {PlainMazeElementFactory} from './factory' +import {ExplodingMazeElementFactory} from './exploding-rooms' -// actually build a maze +// actually build some mazes console.log('======'); console.log('building a plain maze'); -makeMaze(new factories.PlainMazeElementFactory()); +makeMaze(new PlainMazeElementFactory()); console.log('finished building plain maze') console.log('======'); console.log('') console.log('=======') console.log('building exploding maze') -makeMaze(new factories.ExplodingMazeElementFactory()); +makeMaze(new ExplodingMazeElementFactory()); console.log('finished building exploding maze') console.log('=======') diff --git a/src/abstractfactory/room.ts b/src/abstractfactory/room.ts index 9373ff5..a660fcc 100644 --- a/src/abstractfactory/room.ts +++ b/src/abstractfactory/room.ts @@ -2,7 +2,8 @@ import Direction from "./direction"; import MazeElement from "./interfaces"; export interface Room extends MazeElement { - setSide(d: Direction, element: MazeElement) : void + getID () : number + setSide(d: Direction, element: MazeElement): void getSide(d: Direction): MazeElement toString(): string } @@ -10,18 +11,21 @@ export interface Room extends MazeElement { export class PlainRoom implements Room { private static roomCounter: number = 1; - protected roomID: number; + public roomID: number; + // these should each be Wall or Door. // Puzzle: can you redo the types to ensure this property? - private northSide: MazeElement; + private northSide: MazeElement; private southSide: MazeElement; - private eastSide: MazeElement; - private westSide: MazeElement; + private eastSide: MazeElement; + private westSide: MazeElement; constructor() { - this.roomID = PlainRoom.roomCounter++; - console.log("creating PlainRoom#" + this.roomID) + this.roomID = PlainRoom.roomCounter++; + console.log("creating PlainRoom #" + this.roomID) } + + public getID () : number {return this.roomID} public setSide(d: Direction, element: MazeElement) { switch (d) { case Direction.North: @@ -36,11 +40,11 @@ export class PlainRoom implements Room { case Direction.West: this.westSide = element; } - console.log("setting " + d + - " side of " + - this.toString() + - " to " + - element.toString()); + console.log("setting " + d + + " side of " + + this.toString() + + " to " + + element.toString()); } public getSide(d: Direction): MazeElement { @@ -56,21 +60,11 @@ export class PlainRoom implements Room { } } public toString(): string { - return "PlainRoom#" + this.roomID; + return "PlainRoom #" + this.roomID; } - public enter () : void {} + public enter(): void { } } -// exploding room, also implements interface Room -export class ExplodingRoom extends PlainRoom { - public explode(): void { } - public toString(): string { - return "ExplodingRoom#" + this.roomID; - } -} - -new ExplodingRoom ().explode - From 13625f20e52769c9e334ea55b1889c20d01add6f Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Wed, 5 Aug 2020 22:11:58 -0400 Subject: [PATCH 08/21] Changed interfaces to begin with I --- src/abstractfactory/door.ts | 6 +++--- src/abstractfactory/factory.ts | 14 +++++++------- src/abstractfactory/maze.ts | 8 ++++---- src/abstractfactory/room.ts | 22 +++++++++++----------- src/original/client.ts | 12 ++++++------ src/original/door.ts | 20 +++++++++----------- src/original/interfaces.ts | 14 -------------- src/original/maze.ts | 14 +++++++------- src/original/mazeelement.ts | 5 +++++ src/original/package.json | 4 ++-- src/original/room.ts | 29 +++++++++++++++-------------- src/original/wall.ts | 8 ++++---- 12 files changed, 73 insertions(+), 83 deletions(-) delete mode 100755 src/original/interfaces.ts create mode 100644 src/original/mazeelement.ts diff --git a/src/abstractfactory/door.ts b/src/abstractfactory/door.ts index 40f797c..99b3318 100644 --- a/src/abstractfactory/door.ts +++ b/src/abstractfactory/door.ts @@ -1,4 +1,4 @@ -import { Room } from "./room"; +import { IRoom } from "./room"; import MazeElement from './interfaces' export class Door implements MazeElement { @@ -9,8 +9,8 @@ export class Door implements MazeElement { // private room2: Room; constructor( - private room1: Room, - private room2: Room) { + private room1: IRoom, + private room2: IRoom) { //this.room1 = r1; // automatically inserted //this.room2 = r2; this.doorID = Door.doorCounter++; diff --git a/src/abstractfactory/factory.ts b/src/abstractfactory/factory.ts index 5bdd057..c058312 100644 --- a/src/abstractfactory/factory.ts +++ b/src/abstractfactory/factory.ts @@ -1,20 +1,20 @@ // factory.ts // defines PlainMazeFactory -import { Room, PlainRoom } from "./room" +import { IRoom, PlainRoom } from "./room" import Wall from "./wall" import Door from './door' -export interface MazeElementFactory { - makeRoom(): Room +export interface IMazeElementFactory { + makeRoom(): IRoom makeWall(): Wall - makeDoor(room1: Room, room2: Room): Door + makeDoor(room1: IRoom, room2: IRoom): Door } -export class PlainMazeElementFactory implements MazeElementFactory { - public makeRoom(): Room { return new PlainRoom() } +export class PlainMazeElementFactory implements IMazeElementFactory { + public makeRoom(): IRoom { return new PlainRoom() } public makeWall(): Wall { return new Wall() } - public makeDoor(room1: Room, room2: Room): Door { return new Door(room1, room2) } + public makeDoor(room1: IRoom, room2: IRoom): Door { return new Door(room1, room2) } } diff --git a/src/abstractfactory/maze.ts b/src/abstractfactory/maze.ts index d40bbdb..9288b8f 100644 --- a/src/abstractfactory/maze.ts +++ b/src/abstractfactory/maze.ts @@ -1,13 +1,13 @@ -import { Room } from './room' +import { IRoom } from './room' export interface Maze { - addRoom(room: Room): void + addRoom(room: IRoom): void } export class Maze implements Maze { - private rooms: Set = new Set(); + private rooms: Set = new Set(); - public addRoom(room: Room): void { + public addRoom(room: IRoom): void { if (!this.rooms.has(room)) { this.rooms.add(room) } diff --git a/src/abstractfactory/room.ts b/src/abstractfactory/room.ts index a660fcc..840a0b2 100644 --- a/src/abstractfactory/room.ts +++ b/src/abstractfactory/room.ts @@ -1,24 +1,24 @@ import Direction from "./direction"; -import MazeElement from "./interfaces"; +import IMazeElement from "./interfaces"; -export interface Room extends MazeElement { +export interface IRoom extends IMazeElement { getID () : number - setSide(d: Direction, element: MazeElement): void - getSide(d: Direction): MazeElement + setSide(d: Direction, element: IMazeElement): void + getSide(d: Direction): IMazeElement toString(): string } -export class PlainRoom implements Room { +export class PlainRoom implements IRoom { private static roomCounter: number = 1; public roomID: number; // these should each be Wall or Door. // Puzzle: can you redo the types to ensure this property? - private northSide: MazeElement; - private southSide: MazeElement; - private eastSide: MazeElement; - private westSide: MazeElement; + private northSide: IMazeElement; + private southSide: IMazeElement; + private eastSide: IMazeElement; + private westSide: IMazeElement; constructor() { this.roomID = PlainRoom.roomCounter++; @@ -26,7 +26,7 @@ export class PlainRoom implements Room { } public getID () : number {return this.roomID} - public setSide(d: Direction, element: MazeElement) { + public setSide(d: Direction, element: IMazeElement) { switch (d) { case Direction.North: this.northSide = element; @@ -47,7 +47,7 @@ export class PlainRoom implements Room { element.toString()); } - public getSide(d: Direction): MazeElement { + public getSide(d: Direction): IMazeElement { switch (d) { case Direction.North: return this.northSide; diff --git a/src/original/client.ts b/src/original/client.ts index cfdb8d8..01eb511 100644 --- a/src/original/client.ts +++ b/src/original/client.ts @@ -1,14 +1,14 @@ -import Maze from './maze' -import * as Room from './room' +import {Maze,IMaze} from './maze' +import PlainRoom from './room' import Door from './door' import Direction from './direction'; import Wall from './wall'; -import { PlainMazeFactory} from 'factory' -export function Maze1 () : Maze { + +export function Maze1 () : IMaze { let theMaze = new Maze(); - let r1 = new Room.PlainRoom(); - let r2 = new Room.PlainRoom(); + let r1 = new PlainRoom(); + let r2 = new PlainRoom(); let theDoor = new Door(r1, r2); theMaze.addRoom(r1); theMaze.addRoom(r2); diff --git a/src/original/door.ts b/src/original/door.ts index 0650c89..ffc2e21 100644 --- a/src/original/door.ts +++ b/src/original/door.ts @@ -1,7 +1,7 @@ -import Room from "./room"; -import MazeElement from './interfaces' +import IRoom from "./room"; +import IMazeElement from './mazeelement' -class Door implements MazeElement { +class Door implements IMazeElement { private static doorCounter: number = 1; private doorID: number; @@ -10,22 +10,20 @@ class Door implements MazeElement { // constructor(r1: Room, r2: Room) { constructor( - private room1: Room, - private room2: Room) { - // super(); - //this.room1 = r1; // automatically inserted + private room1: IRoom, + private room2: IRoom) { + //this.room1 = r1; // automatically inserted by TS //this.room2 = r2; this.doorID = Door.doorCounter++; console.log( - "creating Door#" + this.doorID + " between " + room1 + " and " + room2); + "creating Door #" + this.doorID + " between " + room1 + " and " + room2); } public toString(): string { - return "Door#" + this.doorID; + return "Door #" + this.doorID; } - public enter () : void {} - + public enter(): void { } } diff --git a/src/original/interfaces.ts b/src/original/interfaces.ts deleted file mode 100755 index 7bbb0be..0000000 --- a/src/original/interfaces.ts +++ /dev/null @@ -1,14 +0,0 @@ -// interfaces - -import Direction from './direction' - - - -export interface MazeElement - { - enter() : void -} - - - -export default MazeElement \ No newline at end of file diff --git a/src/original/maze.ts b/src/original/maze.ts index d585122..099e3ea 100644 --- a/src/original/maze.ts +++ b/src/original/maze.ts @@ -1,17 +1,17 @@ -import Room from './room' +import IRoom from './room' -export interface Maze { - addRoom(room: Room): void +export interface IMaze { + addRoom(room: IRoom): void } -export class Maze implements Maze { +export class Maze implements IMaze { - private rooms: Set = new Set(); + private rooms: Set = new Set(); constructor() { console.log("Creating a maze (original version)..") } - public addRoom(room: Room): void { + public addRoom(room: IRoom): void { if (!this.rooms.has(room)) { this.rooms.add(room) } @@ -19,4 +19,4 @@ export class Maze implements Maze { } -export default Maze \ No newline at end of file +// we use both Maze and IMaze, so can't use export default here. \ No newline at end of file diff --git a/src/original/mazeelement.ts b/src/original/mazeelement.ts new file mode 100644 index 0000000..40f8e22 --- /dev/null +++ b/src/original/mazeelement.ts @@ -0,0 +1,5 @@ +export interface IMazeElement { + enter(): void +} + +export default IMazeElement \ No newline at end of file diff --git a/src/original/package.json b/src/original/package.json index 83b3cd5..9c02557 100755 --- a/src/original/package.json +++ b/src/original/package.json @@ -2,10 +2,10 @@ "name": "sample_package", "version": "1.0.0", "description": "Maze Example (Original)", - "main": "driver.ts", + "main": "index.ts", "scripts": { "test": "ts-mocha **/*.spec.ts", - "run": "tsc && node dist/driver.js" + "run": "tsc && node dist/index.js" }, "author": "Mitch following Frank", "license": "ISC", diff --git a/src/original/room.ts b/src/original/room.ts index 91db421..bdbfc8b 100644 --- a/src/original/room.ts +++ b/src/original/room.ts @@ -1,28 +1,29 @@ import Direction from "./direction"; -import MazeElement from "./interfaces"; +import IMazeElement from "./mazeelement"; -export interface Room extends MazeElement { - setSide(d: Direction, element: MazeElement) : void - getSide(d: Direction): MazeElement +export interface IRoom extends IMazeElement { + setSide(d: Direction, element: IMazeElement) : void + getSide(d: Direction): IMazeElement toString(): string } -export class PlainRoom implements Room { +export class PlainRoom implements IRoom { private static roomCounter: number = 1; private roomID: number; // these should each be Wall or Door. // Puzzle: can you redo the types to ensure this property? - private northSide: MazeElement; - private southSide: MazeElement; - private eastSide: MazeElement; - private westSide: MazeElement; + private northSide: IMazeElement; + private southSide: IMazeElement; + private eastSide: IMazeElement; + private westSide: IMazeElement; constructor() { this.roomID = PlainRoom.roomCounter++; - console.log("creating PlainRoom#" + this.roomID) + console.log("creating PlainRoom #" + this.roomID) } - public setSide(d: Direction, element: MazeElement) { + + public setSide(d: Direction, element: IMazeElement) { switch (d) { case Direction.North: this.northSide = element; @@ -43,7 +44,7 @@ export class PlainRoom implements Room { element.toString()); } - public getSide(d: Direction): MazeElement { + public getSide(d: Direction): IMazeElement { switch (d) { case Direction.North: return this.northSide; @@ -56,7 +57,7 @@ export class PlainRoom implements Room { } } public toString(): string { - return "PlainRoom#" + this.roomID; + return "PlainRoom #" + this.roomID; } public enter () : void {} @@ -64,4 +65,4 @@ export class PlainRoom implements Room { } -export default Room \ No newline at end of file +export default PlainRoom \ No newline at end of file diff --git a/src/original/wall.ts b/src/original/wall.ts index 521c58e..deb6f45 100644 --- a/src/original/wall.ts +++ b/src/original/wall.ts @@ -1,17 +1,17 @@ -import {MazeElement} from "./interfaces"; +import {IMazeElement} from "./mazeelement"; -class Wall implements MazeElement { +class Wall implements IMazeElement { private static wallCounter: number = 1; private wallID: number; constructor() { this.wallID = Wall.wallCounter++; - console.log("creating Wall#" + this.wallID) + console.log("creating Wall #" + this.wallID) } public toString(): string { - return "Wall#" + this.wallID; + return "Wall #" + this.wallID; } public enter () : void {} From 4e408f5016684e44f753ce16716ddd0a751c870f Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Thu, 6 Aug 2020 14:05:29 -0400 Subject: [PATCH 09/21] Abstract Factory RC1 --- src/abstractfactory/client.ts | 26 ++---------- src/abstractfactory/door.ts | 13 ++---- src/abstractfactory/exploding-rooms.ts | 59 +++++++++++++++++++------- src/abstractfactory/factory.ts | 6 +-- src/abstractfactory/index.ts | 36 ++++++++++++---- src/abstractfactory/interfaces.ts | 14 ------ src/abstractfactory/maze.ts | 10 +++-- src/abstractfactory/mazeelement.ts | 8 ++++ src/abstractfactory/package.json | 2 +- src/abstractfactory/room.ts | 14 +++--- src/abstractfactory/wall.ts | 10 ++--- src/original/client.ts | 4 +- src/original/door.ts | 9 ++-- src/original/maze.ts | 4 +- src/original/mazeelement.ts | 11 +++-- src/original/package.json | 4 +- src/original/room.ts | 8 ++-- src/original/wall.ts | 3 +- 18 files changed, 133 insertions(+), 108 deletions(-) delete mode 100644 src/abstractfactory/interfaces.ts create mode 100644 src/abstractfactory/mazeelement.ts diff --git a/src/abstractfactory/client.ts b/src/abstractfactory/client.ts index 483ff86..e2af470 100644 --- a/src/abstractfactory/client.ts +++ b/src/abstractfactory/client.ts @@ -1,27 +1,9 @@ -import {Maze} from './maze' +import {Maze,IMaze} from './maze' +import {IMazeElementFactory} from './factory' import Direction from './direction'; -import { PlainMazeElementFactory, MazeElementFactory } from './factory'; -// export function Maze1 () : Maze { -// let theMaze = new Maze (); -// let theFactory = new PlainMazeElementFactory(); -// let r1 = theFactory.makeRoom() -// let r2 = theFactory.makeRoom() -// let theDoor = theFactory.makeDoor(r1, r2); -// theMaze.addRoom(r1); -// theMaze.addRoom(r2); -// r1.setSide(Direction.North, theFactory.makeWall()); -// r1.setSide(Direction.East, theDoor); -// r1.setSide(Direction.South, theFactory.makeWall()); -// r1.setSide(Direction.West, theFactory.makeWall()); -// r2.setSide(Direction.North, theFactory.makeWall()); -// r2.setSide(Direction.East, theFactory.makeWall()); -// r2.setSide(Direction.South, theFactory.makeWall()); -// r2.setSide(Direction.West, theDoor); -// return theMaze; -// } -export function makeMaze(theFactory: MazeElementFactory): Maze { +export function makeMaze(theFactory: IMazeElementFactory): IMaze { let theMaze = new Maze(); let r1 = theFactory.makeRoom() let r2 = theFactory.makeRoom() @@ -37,4 +19,4 @@ export function makeMaze(theFactory: MazeElementFactory): Maze { r2.setSide(Direction.South, theFactory.makeWall()); r2.setSide(Direction.West, theDoor); return theMaze; -} \ No newline at end of file +} diff --git a/src/abstractfactory/door.ts b/src/abstractfactory/door.ts index 99b3318..35fc90b 100644 --- a/src/abstractfactory/door.ts +++ b/src/abstractfactory/door.ts @@ -1,18 +1,14 @@ -import { IRoom } from "./room"; -import MazeElement from './interfaces' +import {IRoom} from "./room"; +import {IMazeElement} from './mazeelement' -export class Door implements MazeElement { +export class Door implements IMazeElement { private static doorCounter: number = 1; private doorID: number; - // private room1: Room; // declared in constructor - // private room2: Room; constructor( private room1: IRoom, private room2: IRoom) { - //this.room1 = r1; // automatically inserted - //this.room2 = r2; this.doorID = Door.doorCounter++; console.log( "creating Door #" + this.doorID + " between Rooms " + room1.getID() + " and " + room2.getID()); @@ -24,7 +20,4 @@ export class Door implements MazeElement { public enter(): void { } - } - -export default Door \ No newline at end of file diff --git a/src/abstractfactory/exploding-rooms.ts b/src/abstractfactory/exploding-rooms.ts index d188205..54022e8 100644 --- a/src/abstractfactory/exploding-rooms.ts +++ b/src/abstractfactory/exploding-rooms.ts @@ -1,27 +1,56 @@ // exploding rooms, all in one place import { PlainRoom } from './room' -import { PlainMazeElementFactory} from './factory' +import { PlainMazeElementFactory } from './factory' +import { IMazeElementFactory } from './factory' +import { Wall } from './wall' +import { IRoom } from './room' +import { Door } from './door' // exploding room, also implements interface Room export class ExplodingRoom extends PlainRoom { - constructor (public hasBomb : boolean) { + constructor(public hasBomb: boolean) { super(); } - public explode(): void { } - public toString(): string { - return 'ExplodingRoom #' + this.roomID + ' (hasBomb = ' + this.hasBomb + ')' - } + public explode(): void { } + public toString(): string { + return 'ExplodingRoom #' + this.roomID + ' (hasBomb = ' + this.hasBomb + ')' } - -// factory for exploding rooms -export class ExplodingMazeElementFactory extends PlainMazeElementFactory { - private roomCounter : number = 0 - public makeRoom(): ExplodingRoom { +} + +// factory for exploding rooms. This factory puts a bomb in every other room, +// but some other factory might do it differently-- the decision about which +// rooms get bombs is a property of the factory, not of the rooms. + +// version 1: build it from scratch +export class ExplodingRoomFactory1 implements IMazeElementFactory { + // put a bomb in every other room + private roomCounter: number = 0 + public makeRoom(): ExplodingRoom { + this.roomCounter++; + return new ExplodingRoom((this.roomCounter % 2) == 0) + } + public makeWall(): Wall { return new Wall() } + public makeDoor(room1: IRoom, room2: IRoom): Door { return new Door(room1, room2) } +} + +// But this shares a lot of behavior with the first factory (PlainMazeElementFactory), +// so we can use inheritance to avoid reimplementing the other methods. + +// It doesn't make much difference here, but if there were a lot of other methods +// it would be a big help. + +// The use of inheritance here is not an essential part of the Abstract Factory pattern. +// However, it will often be the case that one factory is only a minor variant of an earlier one, +// so inheritance will often turn out to be useful in conjunction with the Abstract Factory +// pattern + +export class ExplodingRoomFactory2 extends PlainMazeElementFactory { + private roomCounter: number = 0 + public makeRoom(): ExplodingRoom { this.roomCounter++; // put a bomb in every other room - return new ExplodingRoom((this.roomCounter % 2) == 0) } + return new ExplodingRoom((this.roomCounter % 2) == 0) + } } -// try out the factory -// new ExplodingMazeElementFactory().makeRoom().explode //this works... - \ No newline at end of file + diff --git a/src/abstractfactory/factory.ts b/src/abstractfactory/factory.ts index c058312..7c971f7 100644 --- a/src/abstractfactory/factory.ts +++ b/src/abstractfactory/factory.ts @@ -1,9 +1,9 @@ // factory.ts // defines PlainMazeFactory -import { IRoom, PlainRoom } from "./room" -import Wall from "./wall" -import Door from './door' +import {IRoom, PlainRoom} from "./room" +import {Wall} from "./wall" +import {Door} from './door' export interface IMazeElementFactory { makeRoom(): IRoom diff --git a/src/abstractfactory/index.ts b/src/abstractfactory/index.ts index 191b36e..3293012 100644 --- a/src/abstractfactory/index.ts +++ b/src/abstractfactory/index.ts @@ -1,6 +1,21 @@ import {makeMaze} from "./client"; import {PlainMazeElementFactory} from './factory' -import {ExplodingMazeElementFactory} from './exploding-rooms' +import {ExplodingRoomFactory1,ExplodingRoomFactory2} from './exploding-rooms' + +// What if we wanted to build some _different_ mazes? +// if we want to alter the number of rooms, how they are connected, etc., +// then we don't have any choice except to alter makeMaze. + +// what if we wanted to build a maze from some different kind of room? +// In this example, we will use the Abstract Factory pattern to organize +// our code so that we can create a new kind of room without making changes +// that are scattered throughout the code. + +// In this example, the new kind of room is an Exploding Room, that may +// or may not contain a bomb. As you read the code, observe that *all* +// of the code pertaining to Exploding Rooms is localized in one place: +// explodingroom.ts + // actually build some mazes console.log('======'); @@ -11,13 +26,18 @@ console.log('======'); console.log('') console.log('=======') -console.log('building exploding maze') -makeMaze(new ExplodingMazeElementFactory()); -console.log('finished building exploding maze') +console.log('building maze with ExplodingRoomFactory1') +makeMaze(new ExplodingRoomFactory1()); +console.log('finished building exploding maze with Factory1') console.log('=======') +console.log('') -// can we make an exploding room explode? Yes -// new factories.ExplodingMazeElementFactory().makeRoom().explode +console.log('=======') +console.log('building maze with ExplodingRoomFactory2') +makeMaze(new ExplodingRoomFactory2()); +console.log('finished building exploding maze with Factory2') +console.log('=======') +console.log('') -// can we make a plan room explode? NO: this is flagged as a type error. -// new factories.PlainMazeElementFactory().makeRoom().explode \ No newline at end of file +// exercise: write a function that avoids the duplicated code +// in this file \ No newline at end of file diff --git a/src/abstractfactory/interfaces.ts b/src/abstractfactory/interfaces.ts deleted file mode 100644 index 27d0414..0000000 --- a/src/abstractfactory/interfaces.ts +++ /dev/null @@ -1,14 +0,0 @@ -// interfaces - -import Direction from './direction' - - - -export interface MazeElement - { - enter() : void -} - - - -export default MazeElement \ No newline at end of file diff --git a/src/abstractfactory/maze.ts b/src/abstractfactory/maze.ts index 9288b8f..a46077b 100644 --- a/src/abstractfactory/maze.ts +++ b/src/abstractfactory/maze.ts @@ -1,12 +1,16 @@ -import { IRoom } from './room' +import {IRoom} from './room' -export interface Maze { +export interface IMaze { addRoom(room: IRoom): void } -export class Maze implements Maze { +export class Maze implements IMaze { private rooms: Set = new Set(); + constructor() { + console.log("Creating a maze (abstract factory version)..") + } + public addRoom(room: IRoom): void { if (!this.rooms.has(room)) { this.rooms.add(room) diff --git a/src/abstractfactory/mazeelement.ts b/src/abstractfactory/mazeelement.ts new file mode 100644 index 0000000..af484a6 --- /dev/null +++ b/src/abstractfactory/mazeelement.ts @@ -0,0 +1,8 @@ +// a maze element is something you can enter +// currently, a room, a door, or a wall +// don't try to enter a wall! + +export interface IMazeElement + { + enter() : void +} \ No newline at end of file diff --git a/src/abstractfactory/package.json b/src/abstractfactory/package.json index 13aafee..56f2e4a 100644 --- a/src/abstractfactory/package.json +++ b/src/abstractfactory/package.json @@ -1,7 +1,7 @@ { "name": "maze-example", "version": "1.0.0", - "description": "Maze Example (abstract factory)", + "description": "Maze Example (Abstract Factory)", "main": "index.ts", "scripts": { "test": "ts-mocha **/*.spec.ts", diff --git a/src/abstractfactory/room.ts b/src/abstractfactory/room.ts index 840a0b2..f46a80c 100644 --- a/src/abstractfactory/room.ts +++ b/src/abstractfactory/room.ts @@ -1,5 +1,5 @@ import Direction from "./direction"; -import IMazeElement from "./interfaces"; +import {IMazeElement} from "./mazeelement"; export interface IRoom extends IMazeElement { getID () : number @@ -11,14 +11,13 @@ export interface IRoom extends IMazeElement { export class PlainRoom implements IRoom { private static roomCounter: number = 1; - public roomID: number; - + protected roomID: number; // these should each be Wall or Door. // Puzzle: can you redo the types to ensure this property? - private northSide: IMazeElement; + private northSide: IMazeElement; private southSide: IMazeElement; - private eastSide: IMazeElement; - private westSide: IMazeElement; + private eastSide: IMazeElement; + private westSide: IMazeElement; constructor() { this.roomID = PlainRoom.roomCounter++; @@ -63,8 +62,9 @@ export class PlainRoom implements IRoom { return "PlainRoom #" + this.roomID; } - public enter(): void { } + public enter () : void {} } + diff --git a/src/abstractfactory/wall.ts b/src/abstractfactory/wall.ts index 521c58e..9d80905 100644 --- a/src/abstractfactory/wall.ts +++ b/src/abstractfactory/wall.ts @@ -1,21 +1,21 @@ -import {MazeElement} from "./interfaces"; +import {IMazeElement} from "./mazeelement"; -class Wall implements MazeElement { +export class Wall implements IMazeElement { private static wallCounter: number = 1; private wallID: number; constructor() { this.wallID = Wall.wallCounter++; - console.log("creating Wall#" + this.wallID) + console.log("creating Wall #" + this.wallID) } public toString(): string { - return "Wall#" + this.wallID; + return "Wall #" + this.wallID; } public enter () : void {} } -export default Wall \ No newline at end of file + diff --git a/src/original/client.ts b/src/original/client.ts index 01eb511..eabb10e 100644 --- a/src/original/client.ts +++ b/src/original/client.ts @@ -1,8 +1,8 @@ import {Maze,IMaze} from './maze' -import PlainRoom from './room' +import {PlainRoom} from './room' import Door from './door' import Direction from './direction'; -import Wall from './wall'; +import {Wall} from './wall'; export function Maze1 () : IMaze { diff --git a/src/original/door.ts b/src/original/door.ts index ffc2e21..0f431da 100644 --- a/src/original/door.ts +++ b/src/original/door.ts @@ -1,5 +1,5 @@ -import IRoom from "./room"; -import IMazeElement from './mazeelement' +import {IRoom} from "./room"; +import {IMazeElement} from './mazeelement' class Door implements IMazeElement { @@ -8,7 +8,6 @@ class Door implements IMazeElement { // private room1: Room; // declared in constructor // private room2: Room; - // constructor(r1: Room, r2: Room) { constructor( private room1: IRoom, private room2: IRoom) { @@ -16,7 +15,7 @@ class Door implements IMazeElement { //this.room2 = r2; this.doorID = Door.doorCounter++; console.log( - "creating Door #" + this.doorID + " between " + room1 + " and " + room2); + "creating Door #" + this.doorID + " between Rooms " + room1.getID() + " and " + room2.getID()); } public toString(): string { @@ -27,4 +26,4 @@ class Door implements IMazeElement { } -export default Door \ No newline at end of file +export default Door diff --git a/src/original/maze.ts b/src/original/maze.ts index 099e3ea..af5a0a9 100644 --- a/src/original/maze.ts +++ b/src/original/maze.ts @@ -1,4 +1,4 @@ -import IRoom from './room' +import {IRoom} from './room' export interface IMaze { addRoom(room: IRoom): void @@ -19,4 +19,4 @@ export class Maze implements IMaze { } -// we use both Maze and IMaze, so can't use export default here. \ No newline at end of file +// we use both Maze and IMaze, so can't use export default here. diff --git a/src/original/mazeelement.ts b/src/original/mazeelement.ts index 40f8e22..e04e107 100644 --- a/src/original/mazeelement.ts +++ b/src/original/mazeelement.ts @@ -1,5 +1,8 @@ -export interface IMazeElement { - enter(): void -} +// a maze element is something you can enter +// currently, a room, a door, or a wall +// don't try to enter a wall! -export default IMazeElement \ No newline at end of file +export interface IMazeElement + { + enter() : void +} diff --git a/src/original/package.json b/src/original/package.json index 9c02557..0e5588d 100755 --- a/src/original/package.json +++ b/src/original/package.json @@ -1,11 +1,11 @@ { - "name": "sample_package", + "name": "maze-example", "version": "1.0.0", "description": "Maze Example (Original)", "main": "index.ts", "scripts": { "test": "ts-mocha **/*.spec.ts", - "run": "tsc && node dist/index.js" + "run": "tsc && node ./dist/index.js" }, "author": "Mitch following Frank", "license": "ISC", diff --git a/src/original/room.ts b/src/original/room.ts index bdbfc8b..82b5e1d 100644 --- a/src/original/room.ts +++ b/src/original/room.ts @@ -1,8 +1,9 @@ import Direction from "./direction"; -import IMazeElement from "./mazeelement"; +import {IMazeElement} from "./mazeelement"; export interface IRoom extends IMazeElement { - setSide(d: Direction, element: IMazeElement) : void + getID () : number + setSide(d: Direction, element: IMazeElement): void getSide(d: Direction): IMazeElement toString(): string } @@ -23,6 +24,7 @@ export class PlainRoom implements IRoom { console.log("creating PlainRoom #" + this.roomID) } + public getID () : number {return this.roomID} public setSide(d: Direction, element: IMazeElement) { switch (d) { case Direction.North: @@ -65,4 +67,4 @@ export class PlainRoom implements IRoom { } -export default PlainRoom \ No newline at end of file + diff --git a/src/original/wall.ts b/src/original/wall.ts index deb6f45..0caf106 100644 --- a/src/original/wall.ts +++ b/src/original/wall.ts @@ -1,6 +1,6 @@ import {IMazeElement} from "./mazeelement"; -class Wall implements IMazeElement { +export class Wall implements IMazeElement { private static wallCounter: number = 1; private wallID: number; @@ -18,4 +18,3 @@ class Wall implements IMazeElement { } -export default Wall \ No newline at end of file From 91d6b2f60868a6041bbfc4ca64a9f467ddff26d3 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Sat, 8 Aug 2020 17:23:19 -0400 Subject: [PATCH 10/21] deleted abstractfactory.old --- src/abstractfactory.old/DoorNeedingSpell.ts | 15 ----- src/abstractfactory.old/direction.ts | 8 --- src/abstractfactory.old/door.ts | 23 -------- src/abstractfactory.old/driver.ts | 6 -- src/abstractfactory.old/driver2.ts | 7 --- .../enchantedmazefactory.ts | 20 ------- src/abstractfactory.old/enchantedroom.ts | 15 ----- src/abstractfactory.old/mapsite.ts | 5 -- src/abstractfactory.old/maze.ts | 15 ----- src/abstractfactory.old/mazefactory.ts | 21 ------- src/abstractfactory.old/mazegame.ts | 28 ---------- src/abstractfactory.old/room.ts | 55 ------------------- src/abstractfactory.old/spell.ts | 5 -- src/abstractfactory.old/wall.ts | 17 ------ 14 files changed, 240 deletions(-) delete mode 100644 src/abstractfactory.old/DoorNeedingSpell.ts delete mode 100644 src/abstractfactory.old/direction.ts delete mode 100644 src/abstractfactory.old/door.ts delete mode 100644 src/abstractfactory.old/driver.ts delete mode 100644 src/abstractfactory.old/driver2.ts delete mode 100644 src/abstractfactory.old/enchantedmazefactory.ts delete mode 100644 src/abstractfactory.old/enchantedroom.ts delete mode 100644 src/abstractfactory.old/mapsite.ts delete mode 100644 src/abstractfactory.old/maze.ts delete mode 100644 src/abstractfactory.old/mazefactory.ts delete mode 100644 src/abstractfactory.old/mazegame.ts delete mode 100644 src/abstractfactory.old/room.ts delete mode 100644 src/abstractfactory.old/spell.ts delete mode 100644 src/abstractfactory.old/wall.ts diff --git a/src/abstractfactory.old/DoorNeedingSpell.ts b/src/abstractfactory.old/DoorNeedingSpell.ts deleted file mode 100644 index 65e1173..0000000 --- a/src/abstractfactory.old/DoorNeedingSpell.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Room from "./room"; -import Door from "./door"; - -class DoorNeedingSpell extends Door { - constructor(r1: Room, r2: Room){ - super(r1, r2); - /* ... */ - } - - public toString() : string { - return super.toString() + " (needing spell)"; - } -} - -export default DoorNeedingSpell; \ No newline at end of file diff --git a/src/abstractfactory.old/direction.ts b/src/abstractfactory.old/direction.ts deleted file mode 100644 index 94cc900..0000000 --- a/src/abstractfactory.old/direction.ts +++ /dev/null @@ -1,8 +0,0 @@ -enum Direction { - North = 'North', - South = 'South', - East = 'East', - West = 'West' -} - -export default Direction \ No newline at end of file diff --git a/src/abstractfactory.old/door.ts b/src/abstractfactory.old/door.ts deleted file mode 100644 index 5f6d4f8..0000000 --- a/src/abstractfactory.old/door.ts +++ /dev/null @@ -1,23 +0,0 @@ -import Room from "./room"; - -import MapSite from './mapsite' - -class Door extends MapSite { - constructor(r1: Room, r2: Room) { - super(); - this.room1 = r1; - this.room2 = r2; - this.doorNr = Door.doorCnt++; - console.log("creating Door#" + this.doorNr + " between " + r1 + " and " + r2); - } - public toString(): string { - return "Door#" + this.doorNr; - } - - private static doorCnt: number = 1; - private doorNr: number; - private room1: Room; - private room2: Room; -} - -export default Door \ No newline at end of file diff --git a/src/abstractfactory.old/driver.ts b/src/abstractfactory.old/driver.ts deleted file mode 100644 index 310ed85..0000000 --- a/src/abstractfactory.old/driver.ts +++ /dev/null @@ -1,6 +0,0 @@ -import MazeGame from "./mazegame"; -import MazeFactory from "./mazefactory" - -var factory = new MazeFactory(); -var game = new MazeGame(); -game.createMaze(factory); \ No newline at end of file diff --git a/src/abstractfactory.old/driver2.ts b/src/abstractfactory.old/driver2.ts deleted file mode 100644 index ebecfee..0000000 --- a/src/abstractfactory.old/driver2.ts +++ /dev/null @@ -1,7 +0,0 @@ -import MazeGame from "./mazegame"; -import MazeFactory from "./mazefactory" -import EnchantedMazeFactory from "./enchantedmazefactory"; - -var factory = new EnchantedMazeFactory(); -var game = new MazeGame(); -game.createMaze(factory); \ No newline at end of file diff --git a/src/abstractfactory.old/enchantedmazefactory.ts b/src/abstractfactory.old/enchantedmazefactory.ts deleted file mode 100644 index 637dd3d..0000000 --- a/src/abstractfactory.old/enchantedmazefactory.ts +++ /dev/null @@ -1,20 +0,0 @@ -import MazeFactory from "./mazefactory"; -import EnchantedRoom from "./enchantedroom"; -import Spell from "./spell"; -import Room from "./room"; -import Door from "./door"; -import DoorNeedingSpell from "./DoorNeedingSpell"; - -class EnchantedMazeFactory extends MazeFactory { - public makeRoom() : Room { - return new EnchantedRoom(this.castSpell()); - } - public makeDoor(r1: Room, r2: Room) : Door { - return new DoorNeedingSpell(r1, r2); - } - private castSpell() : Spell { - return new Spell(); - } -} - -export default EnchantedMazeFactory; \ No newline at end of file diff --git a/src/abstractfactory.old/enchantedroom.ts b/src/abstractfactory.old/enchantedroom.ts deleted file mode 100644 index e8fd60d..0000000 --- a/src/abstractfactory.old/enchantedroom.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Room from "./room"; -import Spell from "./spell"; - -class EnchantedRoom extends Room { - constructor(s : Spell){ - super(); - /* ... */ - } - - toString() : string { - return "enchanted " + super.toString(); - } -} - -export default EnchantedRoom; \ No newline at end of file diff --git a/src/abstractfactory.old/mapsite.ts b/src/abstractfactory.old/mapsite.ts deleted file mode 100644 index 8169056..0000000 --- a/src/abstractfactory.old/mapsite.ts +++ /dev/null @@ -1,5 +0,0 @@ -abstract class MapSite { - // enter() method omitted.. -} - -export default MapSite \ No newline at end of file diff --git a/src/abstractfactory.old/maze.ts b/src/abstractfactory.old/maze.ts deleted file mode 100644 index 8219ebb..0000000 --- a/src/abstractfactory.old/maze.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Room from './room' - -class Maze { - constructor() { - console.log("Creating a maze (Abstract Factory version)..") - } - public addRoom(room: Room): void { - if (!this.rooms.has(room)) { - this.rooms.add(room) - } - } - private rooms: Set = new Set(); -} - -export default Maze \ No newline at end of file diff --git a/src/abstractfactory.old/mazefactory.ts b/src/abstractfactory.old/mazefactory.ts deleted file mode 100644 index 3d66c64..0000000 --- a/src/abstractfactory.old/mazefactory.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Maze from "../abstractfactory/maze" -import Wall from "../abstractfactory/wall"; -import Room from "../abstractfactory/room"; -import Door from "../abstractfactory/door"; - -class MazeFactory { - public makeMaze() : Maze { - return new Maze(); - } - public makeWall() : Wall { - return new Wall(); - } - public makeRoom() : Room { - return new Room(); - } - public makeDoor(r1: Room, r2: Room) : Door { - return new Door(r1, r2); - } -} - -export default MazeFactory \ No newline at end of file diff --git a/src/abstractfactory.old/mazegame.ts b/src/abstractfactory.old/mazegame.ts deleted file mode 100644 index e1e1684..0000000 --- a/src/abstractfactory.old/mazegame.ts +++ /dev/null @@ -1,28 +0,0 @@ -import Maze from './maze' -import Room from './room' -import Door from './door' -import Direction from './direction'; -import Wall from './wall'; -import MazeFactory from './mazefactory'; - -class MazeGame { - public createMaze(factory: MazeFactory): Maze { - var aMaze = new Maze(); - var r1 = factory.makeRoom(); - var r2 = factory.makeRoom(); - var theDoor = factory.makeDoor(r1, r2); - aMaze.addRoom(r1); - aMaze.addRoom(r2); - r1.setSide(Direction.North, factory.makeWall()); - r1.setSide(Direction.East, theDoor); - r1.setSide(Direction.South, factory.makeWall()); - r1.setSide(Direction.West, factory.makeWall()); - r2.setSide(Direction.North, factory.makeWall()); - r2.setSide(Direction.East, factory.makeWall()); - r2.setSide(Direction.South, factory.makeWall()); - r2.setSide(Direction.West, theDoor); - return aMaze; - } -} - -export default MazeGame \ No newline at end of file diff --git a/src/abstractfactory.old/room.ts b/src/abstractfactory.old/room.ts deleted file mode 100644 index f012699..0000000 --- a/src/abstractfactory.old/room.ts +++ /dev/null @@ -1,55 +0,0 @@ -import Direction from "./direction"; -import MapSite from "./mapsite"; - -class Room extends MapSite { - constructor() { - super(); - this.roomNr = Room.roomCnt++; - console.log("creating Room#" + this.roomNr) - } - public setSide(d: Direction, site: MapSite) { - switch (d) { - case Direction.North: - this.northSide = site; - break; - case Direction.South: - this.southSide = site; - break; - case Direction.East: - this.eastSide = site; - break - case Direction.West: - this.westSide = site; - } - console.log("setting " + d + - " side of " + - this.toString() + - " to " + - site.toString()); - } - - public getSide(d: Direction): MapSite { - switch (d) { - case Direction.North: - return this.northSide; - case Direction.South: - return this.southSide; - case Direction.East: - return this.eastSide; - case Direction.West: - return this.westSide; - } - } - public toString(): string { - return "Room#" + this.roomNr; - } - - private static roomCnt: number = 1; - private roomNr: number; - private northSide: MapSite; - private southSide: MapSite; - private eastSide: MapSite; - private westSide: MapSite; -} - -export default Room \ No newline at end of file diff --git a/src/abstractfactory.old/spell.ts b/src/abstractfactory.old/spell.ts deleted file mode 100644 index f3196ca..0000000 --- a/src/abstractfactory.old/spell.ts +++ /dev/null @@ -1,5 +0,0 @@ -class Spell { - /* ... */ -} - -export default Spell; \ No newline at end of file diff --git a/src/abstractfactory.old/wall.ts b/src/abstractfactory.old/wall.ts deleted file mode 100644 index 9694842..0000000 --- a/src/abstractfactory.old/wall.ts +++ /dev/null @@ -1,17 +0,0 @@ -import MapSite from "./mapsite"; - -class Wall extends MapSite { - constructor() { - super(); - this.wallNr = Wall.wallCnt++; - console.log("creating Wall#" + this.wallNr) - } - public toString(): string { - return "Wall#" + this.wallNr; - } - - private static wallCnt: number = 1; - private wallNr: number; -} - -export default Wall; \ No newline at end of file From ae5de8c5de7b46eb547c1985cb8012e903b80a3c Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Sat, 8 Aug 2020 18:00:15 -0400 Subject: [PATCH 11/21] copied files from master to mitch-master --- src/abstractfactory/direction.ts | 1 - src/abstractfactory/door.ts | 4 +--- src/abstractfactory/index.ts | 2 +- src/abstractfactory/maze.ts | 19 ++++++------------- src/abstractfactory/room.ts | 20 ++++++++++---------- src/abstractfactory/wall.ts | 2 +- src/original/direction.ts | 1 - src/original/door.ts | 2 +- src/original/index.ts | 2 +- src/original/maze.ts | 18 +++++------------- src/original/room.ts | 12 ++++++------ src/original/wall.ts | 1 + 12 files changed, 33 insertions(+), 51 deletions(-) diff --git a/src/abstractfactory/direction.ts b/src/abstractfactory/direction.ts index 2c815c6..94cc900 100644 --- a/src/abstractfactory/direction.ts +++ b/src/abstractfactory/direction.ts @@ -5,5 +5,4 @@ enum Direction { West = 'West' } -// why "default"? export default Direction \ No newline at end of file diff --git a/src/abstractfactory/door.ts b/src/abstractfactory/door.ts index b6bd45a..9ab55c5 100644 --- a/src/abstractfactory/door.ts +++ b/src/abstractfactory/door.ts @@ -15,6 +15,4 @@ class Door implements IMazeElement { } } - public enter(): void { } - -} +export default Door \ No newline at end of file diff --git a/src/abstractfactory/index.ts b/src/abstractfactory/index.ts index 278143c..08c371e 100644 --- a/src/abstractfactory/index.ts +++ b/src/abstractfactory/index.ts @@ -2,4 +2,4 @@ import createMaze from "./createmaze"; import PlainMazeFactory from "./plainmazefactory"; let factory = new PlainMazeFactory() -createMaze(factory); +createMaze(factory); \ No newline at end of file diff --git a/src/abstractfactory/maze.ts b/src/abstractfactory/maze.ts index 554aa7d..e90ff39 100644 --- a/src/abstractfactory/maze.ts +++ b/src/abstractfactory/maze.ts @@ -1,22 +1,15 @@ -import {IRoom} from './room' +import Room from './room' -export interface IMaze { - addRoom(room: IRoom): void -} -export class Maze implements IMaze { - - private rooms: Set = new Set(); - -// class Maze { -// private rooms: Set = new Set(); +class Maze { + private rooms: Set = new Set(); constructor() { - console.log("Creating a maze (abstract factory version)..") + console.log("Creating a maze (Abstract Factory version)..") } - - public addRoom(room: IRoom): void { + public addRoom(room: Room): void { if (!this.rooms.has(room)) { this.rooms.add(room) } } } +export default Maze \ No newline at end of file diff --git a/src/abstractfactory/room.ts b/src/abstractfactory/room.ts index 79ed6ea..6d577ff 100644 --- a/src/abstractfactory/room.ts +++ b/src/abstractfactory/room.ts @@ -17,22 +17,22 @@ class Room implements IMazeElement { public setSide(d: Direction, site: IMazeElement) { switch (d) { case Direction.North: - this.northSide = element; + this.northSide = site; break; case Direction.South: - this.southSide = element; + this.southSide = site; break; case Direction.East: - this.eastSide = element; + this.eastSide = site; break case Direction.West: - this.westSide = element; + this.westSide = site; } - console.log("setting " + d + - " side of " + - this.toString() + - " to " + - element.toString()); + console.log("setting " + d + + " side of " + + this.toString() + + " to " + + site.toString()); } public getSide(d: Direction): IMazeElement { @@ -52,4 +52,4 @@ class Room implements IMazeElement { } } - +export default Room \ No newline at end of file diff --git a/src/abstractfactory/wall.ts b/src/abstractfactory/wall.ts index deea3b4..7926bcf 100644 --- a/src/abstractfactory/wall.ts +++ b/src/abstractfactory/wall.ts @@ -13,4 +13,4 @@ class Wall implements IMazeElement { } } -export default Wall +export default Wall \ No newline at end of file diff --git a/src/original/direction.ts b/src/original/direction.ts index 2c815c6..94cc900 100644 --- a/src/original/direction.ts +++ b/src/original/direction.ts @@ -5,5 +5,4 @@ enum Direction { West = 'West' } -// why "default"? export default Direction \ No newline at end of file diff --git a/src/original/door.ts b/src/original/door.ts index bdb1928..9ab55c5 100644 --- a/src/original/door.ts +++ b/src/original/door.ts @@ -15,4 +15,4 @@ class Door implements IMazeElement { } } -export default Door +export default Door \ No newline at end of file diff --git a/src/original/index.ts b/src/original/index.ts index e3dc6d0..48da4c3 100644 --- a/src/original/index.ts +++ b/src/original/index.ts @@ -1,3 +1,3 @@ import createMaze from "./createmaze"; -createMaze(); +createMaze(); \ No newline at end of file diff --git a/src/original/maze.ts b/src/original/maze.ts index 5bb6ef6..93f0d03 100644 --- a/src/original/maze.ts +++ b/src/original/maze.ts @@ -1,23 +1,15 @@ -import {IRoom} from './room' +import Room from './room' -export interface IMaze { - addRoom(room: IRoom): void -} -export class Maze implements IMaze { - - private rooms: Set = new Set(); - -// class Maze { -// private rooms: Set = new Set(); +class Maze { + private rooms: Set = new Set(); constructor() { console.log("Creating a maze (original version)..") } - - public addRoom(room: IRoom): void { + public addRoom(room: Room): void { if (!this.rooms.has(room)) { this.rooms.add(room) } } } -// we use both Maze and IMaze, so can't use export default here. +export default Maze \ No newline at end of file diff --git a/src/original/room.ts b/src/original/room.ts index c332b6b..96f2c29 100644 --- a/src/original/room.ts +++ b/src/original/room.ts @@ -17,22 +17,22 @@ class Room implements IMazeElement { public setSide(d: Direction, site: IMazeElement) { switch (d) { case Direction.North: - this.northSide = element; + this.northSide = site; break; case Direction.South: - this.southSide = element; + this.southSide = site; break; case Direction.East: - this.eastSide = element; + this.eastSide = site; break case Direction.West: - this.westSide = element; + this.westSide = site; } console.log("setting " + d + " side of " + this.toString() + " to " + - element.toString()); + site.toString()); } public getSide(d: Direction): IMazeElement { @@ -52,4 +52,4 @@ class Room implements IMazeElement { } } - +export default Room \ No newline at end of file diff --git a/src/original/wall.ts b/src/original/wall.ts index d0f9952..7926bcf 100644 --- a/src/original/wall.ts +++ b/src/original/wall.ts @@ -13,3 +13,4 @@ class Wall implements IMazeElement { } } +export default Wall \ No newline at end of file From d8e13be005b956c96e72d6553526163f5f692e66 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Sat, 8 Aug 2020 18:11:59 -0400 Subject: [PATCH 12/21] added "implements IMazeFactory" --- src/abstractfactory/exploding.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/abstractfactory/exploding.ts b/src/abstractfactory/exploding.ts index 69b2902..91c6b64 100644 --- a/src/abstractfactory/exploding.ts +++ b/src/abstractfactory/exploding.ts @@ -1,5 +1,6 @@ import Room from "./room"; import PlainMazeFactory from "./plainmazefactory"; +import IMazeFactory from './imazefactory' class ExplodingRoom extends Room { constructor(public hasBomb: boolean) { @@ -11,7 +12,9 @@ class ExplodingRoom extends Room { } } -class ExplodingRoomFactory extends PlainMazeFactory { +class ExplodingRoomFactory extends PlainMazeFactory + implements IMazeFactory // implements the abstract factory +{ private roomCounter: number = 0 public makeRoom(): ExplodingRoom { this.roomCounter++; From 615a9c16ef6c72d226156c16ea8593fd861e3bc9 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Sun, 9 Aug 2020 12:35:49 -0400 Subject: [PATCH 13/21] added alternative coding in composite/directory.ts --- src/composite/directory.ts | 52 ++++++++++++++++++++++++++++---------- src/composite/index.ts | 9 +++++++ 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/composite/directory.ts b/src/composite/directory.ts index 0f5ea2a..22892a9 100644 --- a/src/composite/directory.ts +++ b/src/composite/directory.ts @@ -1,27 +1,51 @@ import Node from './node' class Directory extends Node { - constructor(n: string, p?: Directory){ - super(n,p); - this.children = []; + + private children: Array; + + constructor(n: string, p?: Directory) { + super(n, p); + this.children = []; } - public getAbsoluteName() : string { + + public getAbsoluteName(): string { return super.getAbsoluteName() + "/"; - } - public add(n: Node) : void { - this.children.push(n); } - public find(s: string) : Array { + public add(n: Node): void { + this.children.push(n); + } + public find(s: string): Array { let result = new Array(); - if (this.name.indexOf(s) != -1){ + if (this.name.indexOf(s) != -1) { result.push(this.getAbsoluteName()); } - for (let child of this.children){ - result.push(...child.find(s)); // TODO: Mitch to rewrite this more functionally? - } - return result; + + // original + // for (let child of this.children) { + // result.push(...child.find(s)); // TODO: Mitch to rewrite this more functionally? + // } + // return result + + // this one works + // foo.push(...) side-effects foo (but only returns the length of the result) + // this.children.forEach(function(child){result.push(...child.find(s))}) + // return result; + + // and this one works + // but foo.concat(...) is functional + // this.children.forEach(function (child) { + // result = result.concat(child.find(s)) + // }) + // return result; + + return this.children.reduce(function (sofar, child) { + return sofar.concat(child.find(s)) + }, + result) } - private children: Array; } + + export default Directory \ No newline at end of file diff --git a/src/composite/index.ts b/src/composite/index.ts index 8066114..528af3c 100644 --- a/src/composite/index.ts +++ b/src/composite/index.ts @@ -11,3 +11,12 @@ new File("xbar2", usr); new Directory("yybarzz3", usr); console.log(root.find("bar")); +// let x = [11,22,33] +// let y = [44,55] +// console.log(x) +// console.log(y) +// console.log(x.push(...y)) +// console.log(x) +// x = [11,22,33] +// console.log(x.concat(y)) +// console.log(x) \ No newline at end of file From fc560e12184481f7af96f3fc2d23994469040b2a Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Sun, 9 Aug 2020 13:40:41 -0400 Subject: [PATCH 14/21] tidied up comments --- src/composite/directory.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/composite/directory.ts b/src/composite/directory.ts index 22892a9..d64ea9d 100644 --- a/src/composite/directory.ts +++ b/src/composite/directory.ts @@ -29,16 +29,21 @@ class Directory extends Node { // this one works // foo.push(...) side-effects foo (but only returns the length of the result) + // // this.children.forEach(function(child){result.push(...child.find(s))}) // return result; - // and this one works - // but foo.concat(...) is functional + // this one also works + // foo.concat(...) is functional, so you need to assign the result + // // this.children.forEach(function (child) { // result = result.concat(child.find(s)) // }) // return result; + // as does this one + // here the assignment is carried out in the plumbing of 'reduce' + // return this.children.reduce(function (sofar, child) { return sofar.concat(child.find(s)) }, From 4ec15d36af239f9ea59d0768d0e874737b08dfe8 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Mon, 10 Aug 2020 15:55:29 -0400 Subject: [PATCH 15/21] added variations on directory.ts --- src/composite/directory.ts | 8 ++++++++ src/composite/package.json | 21 +++++++++++++++++++++ src/composite/tsconfig.json | 16 ++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/composite/package.json create mode 100644 src/composite/tsconfig.json diff --git a/src/composite/directory.ts b/src/composite/directory.ts index d64ea9d..13c8af8 100644 --- a/src/composite/directory.ts +++ b/src/composite/directory.ts @@ -49,6 +49,14 @@ class Directory extends Node { }, result) } + + // yet another version: + public find2(s: string): Array { + let roots = [this.getAbsoluteName()].filter((e) => e.indexOf(s) != -1) + return this.children.reduce( + (sofar, child) => sofar.concat(child.find(s)), + roots) + } } diff --git a/src/composite/package.json b/src/composite/package.json new file mode 100644 index 0000000..56f2e4a --- /dev/null +++ b/src/composite/package.json @@ -0,0 +1,21 @@ +{ + "name": "maze-example", + "version": "1.0.0", + "description": "Maze Example (Abstract Factory)", + "main": "index.ts", + "scripts": { + "test": "ts-mocha **/*.spec.ts", + "run": "tsc && node ./dist/index.js" + }, + "author": "Mitch following Frank", + "license": "ISC", + "dependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "chai": "^4.2.0", + "mocha": "^8.0.1", + "ts-mocha": "^7.0.0", + "typescript": "^3.9.6" + }, + "keywords": [] +} diff --git a/src/composite/tsconfig.json b/src/composite/tsconfig.json new file mode 100644 index 0000000..94df3b6 --- /dev/null +++ b/src/composite/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] +} \ No newline at end of file From a0b9a7d2023436743d2a4559dc153963eedb89b6 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Mon, 10 Aug 2020 16:21:23 -0400 Subject: [PATCH 16/21] added local tsconfig.json, package.json --- src/adapter-class/package.json | 21 +++++++++++++++++++++ src/adapter-class/tsconfig.json | 16 ++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/adapter-class/package.json create mode 100644 src/adapter-class/tsconfig.json diff --git a/src/adapter-class/package.json b/src/adapter-class/package.json new file mode 100644 index 0000000..aa2d0f8 --- /dev/null +++ b/src/adapter-class/package.json @@ -0,0 +1,21 @@ +{ + "name": "adapter-class", + "version": "1.0.0", + "description": "adapter-class", + "main": "index.ts", + "scripts": { + "test": "ts-mocha **/*.spec.ts", + "run": "tsc && node ./dist/index.js" + }, + "author": "Frank Tip", + "license": "ISC", + "dependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "chai": "^4.2.0", + "mocha": "^8.0.1", + "ts-mocha": "^7.0.0", + "typescript": "^3.9.6" + }, + "keywords": [] +} diff --git a/src/adapter-class/tsconfig.json b/src/adapter-class/tsconfig.json new file mode 100644 index 0000000..94df3b6 --- /dev/null +++ b/src/adapter-class/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] +} \ No newline at end of file From 9c499c8d9d33311fb82d8d0341d293f16692eaa0 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 11 Aug 2020 16:17:22 -0400 Subject: [PATCH 17/21] Propagated changes from fs-composite to fs-proxy --- src/filesystem-composite/directory.ts | 19 ++++--- src/filesystem-composite/file.ts | 14 ++--- src/filesystem-composite/index.ts | 11 +--- src/filesystem-composite/node.ts | 19 ++++--- src/filesystem-proxy/directory.ts | 74 +++++++++++++++++++++------ src/filesystem-proxy/file.ts | 14 ++--- src/filesystem-proxy/node.ts | 19 ++++--- 7 files changed, 101 insertions(+), 69 deletions(-) diff --git a/src/filesystem-composite/directory.ts b/src/filesystem-composite/directory.ts index 13c8af8..655f357 100644 --- a/src/filesystem-composite/directory.ts +++ b/src/filesystem-composite/directory.ts @@ -16,10 +16,16 @@ class Directory extends Node { this.children.push(n); } public find(s: string): Array { - let result = new Array(); - if (this.name.indexOf(s) != -1) { - result.push(this.getAbsoluteName()); - } + // agreed best version :) + let result = (this.name.indexOf(s) != -1) ? [this.getAbsoluteName()] : [] + return this.children.reduce(function (sofar, child) { + return sofar.concat(child.find(s)) + }, + result) + // let result = new Array(); + // if (this.name.indexOf(s) != -1) { + // result.push(this.getAbsoluteName()); + // } // original // for (let child of this.children) { @@ -44,10 +50,7 @@ class Directory extends Node { // as does this one // here the assignment is carried out in the plumbing of 'reduce' // - return this.children.reduce(function (sofar, child) { - return sofar.concat(child.find(s)) - }, - result) + } // yet another version: diff --git a/src/filesystem-composite/file.ts b/src/filesystem-composite/file.ts index c910776..b99a7b1 100644 --- a/src/filesystem-composite/file.ts +++ b/src/filesystem-composite/file.ts @@ -1,16 +1,12 @@ import Directory from './directory' import Node from './node' -class File extends Node { - constructor(n: string, p: Directory){ - super(n,p); +class File extends Node { + constructor(n: string, p: Directory) { + super(n, p); } - public find(s: string ) : Array{ - let result : Array = []; - if (this.name.indexOf(s) != -1){ - result.push(this.getAbsoluteName()); - } - return result; + public find(s: string): Array { + return (this.name.indexOf(s) != -1) ? [this.getAbsoluteName()] : [] } } diff --git a/src/filesystem-composite/index.ts b/src/filesystem-composite/index.ts index 528af3c..0b90baf 100644 --- a/src/filesystem-composite/index.ts +++ b/src/filesystem-composite/index.ts @@ -10,13 +10,4 @@ new File("bar1", usr); new File("xbar2", usr); new Directory("yybarzz3", usr); console.log(root.find("bar")); - -// let x = [11,22,33] -// let y = [44,55] -// console.log(x) -// console.log(y) -// console.log(x.push(...y)) -// console.log(x) -// x = [11,22,33] -// console.log(x.concat(y)) -// console.log(x) \ No newline at end of file + \ No newline at end of file diff --git a/src/filesystem-composite/node.ts b/src/filesystem-composite/node.ts index e69383a..537b9c8 100644 --- a/src/filesystem-composite/node.ts +++ b/src/filesystem-composite/node.ts @@ -1,21 +1,24 @@ import Directory from './directory' abstract class Node { - protected name: string; - protected parent: Directory; - - constructor(name: string, parent: Directory) { - this.name = name; this.parent = parent; + constructor( + protected name: string, + protected parent: Directory + ) { if (this.parent != null) { this.parent.add(this); } } - public getAbsoluteName() : string { + + public getAbsoluteName(): string { if (this.parent != null) { return this.parent.getAbsoluteName() + this.name; } return this.name; } - public toString() : string { return this.getAbsoluteName(); } - public abstract find(s: string) : Array; + + public toString(): string { return this.getAbsoluteName(); } + + public abstract find(s: string): Array; + } export default Node \ No newline at end of file diff --git a/src/filesystem-proxy/directory.ts b/src/filesystem-proxy/directory.ts index 0f5ea2a..655f357 100644 --- a/src/filesystem-proxy/directory.ts +++ b/src/filesystem-proxy/directory.ts @@ -1,27 +1,67 @@ import Node from './node' class Directory extends Node { - constructor(n: string, p?: Directory){ - super(n,p); - this.children = []; + + private children: Array; + + constructor(n: string, p?: Directory) { + super(n, p); + this.children = []; } - public getAbsoluteName() : string { + + public getAbsoluteName(): string { return super.getAbsoluteName() + "/"; - } - public add(n: Node) : void { - this.children.push(n); } - public find(s: string) : Array { - let result = new Array(); - if (this.name.indexOf(s) != -1){ - result.push(this.getAbsoluteName()); - } - for (let child of this.children){ - result.push(...child.find(s)); // TODO: Mitch to rewrite this more functionally? - } - return result; + public add(n: Node): void { + this.children.push(n); + } + public find(s: string): Array { + // agreed best version :) + let result = (this.name.indexOf(s) != -1) ? [this.getAbsoluteName()] : [] + return this.children.reduce(function (sofar, child) { + return sofar.concat(child.find(s)) + }, + result) + // let result = new Array(); + // if (this.name.indexOf(s) != -1) { + // result.push(this.getAbsoluteName()); + // } + + // original + // for (let child of this.children) { + // result.push(...child.find(s)); // TODO: Mitch to rewrite this more functionally? + // } + // return result + + // this one works + // foo.push(...) side-effects foo (but only returns the length of the result) + // + // this.children.forEach(function(child){result.push(...child.find(s))}) + // return result; + + // this one also works + // foo.concat(...) is functional, so you need to assign the result + // + // this.children.forEach(function (child) { + // result = result.concat(child.find(s)) + // }) + // return result; + + // as does this one + // here the assignment is carried out in the plumbing of 'reduce' + // + + } + + // yet another version: + public find2(s: string): Array { + let roots = [this.getAbsoluteName()].filter((e) => e.indexOf(s) != -1) + return this.children.reduce( + (sofar, child) => sofar.concat(child.find(s)), + roots) } - private children: Array; } + + export default Directory \ No newline at end of file diff --git a/src/filesystem-proxy/file.ts b/src/filesystem-proxy/file.ts index c910776..b99a7b1 100644 --- a/src/filesystem-proxy/file.ts +++ b/src/filesystem-proxy/file.ts @@ -1,16 +1,12 @@ import Directory from './directory' import Node from './node' -class File extends Node { - constructor(n: string, p: Directory){ - super(n,p); +class File extends Node { + constructor(n: string, p: Directory) { + super(n, p); } - public find(s: string ) : Array{ - let result : Array = []; - if (this.name.indexOf(s) != -1){ - result.push(this.getAbsoluteName()); - } - return result; + public find(s: string): Array { + return (this.name.indexOf(s) != -1) ? [this.getAbsoluteName()] : [] } } diff --git a/src/filesystem-proxy/node.ts b/src/filesystem-proxy/node.ts index e69383a..537b9c8 100644 --- a/src/filesystem-proxy/node.ts +++ b/src/filesystem-proxy/node.ts @@ -1,21 +1,24 @@ import Directory from './directory' abstract class Node { - protected name: string; - protected parent: Directory; - - constructor(name: string, parent: Directory) { - this.name = name; this.parent = parent; + constructor( + protected name: string, + protected parent: Directory + ) { if (this.parent != null) { this.parent.add(this); } } - public getAbsoluteName() : string { + + public getAbsoluteName(): string { if (this.parent != null) { return this.parent.getAbsoluteName() + this.name; } return this.name; } - public toString() : string { return this.getAbsoluteName(); } - public abstract find(s: string) : Array; + + public toString(): string { return this.getAbsoluteName(); } + + public abstract find(s: string): Array; + } export default Node \ No newline at end of file From 79540af9ecd566fe916e4342b3545a351b14c0d1 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Tue, 11 Aug 2020 16:18:59 -0400 Subject: [PATCH 18/21] tweaked code in filesystem-proxy --- src/filesystem-proxy/index.ts | 2 +- src/filesystem-proxy/link.ts | 12 ++++++------ src/filesystem-proxy/package.json | 21 +++++++++++++++++++++ src/filesystem-proxy/tsconfig.json | 16 ++++++++++++++++ 4 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 src/filesystem-proxy/package.json create mode 100644 src/filesystem-proxy/tsconfig.json diff --git a/src/filesystem-proxy/index.ts b/src/filesystem-proxy/index.ts index a664fc1..fbbc9b5 100644 --- a/src/filesystem-proxy/index.ts +++ b/src/filesystem-proxy/index.ts @@ -10,7 +10,7 @@ let foo = new Directory("foo", usr); new File("bar1", foo); new File("xbar2", foo); new File("yybarzz3", foo); -let link = new Link("link", usr, root); +let link = new Link("link1", usr, root); new Link("link2", link, root); console.log(root.find("bar")); diff --git a/src/filesystem-proxy/link.ts b/src/filesystem-proxy/link.ts index 56c0c1a..489a14c 100644 --- a/src/filesystem-proxy/link.ts +++ b/src/filesystem-proxy/link.ts @@ -4,22 +4,22 @@ import Node from "./node" class Link extends Node { private realNode: Node; - constructor(n: string, w: Node, p: Directory){ - super(n,p); + constructor(name: string, w: Node, p: Directory){ + super(name,p); this.realNode = w; } public getAbsoluteName() : string{ + console.log(`calling getAbsoluteName on link ${this.name}`) return super.getAbsoluteName() + "@"; } public find(s: string) : Array { - let result = new Array(); - if (this.name.indexOf(s) != -1){ - result.push(this.getAbsoluteName()); - } + let result = (this.name.indexOf(s) != -1) ? [this.getAbsoluteName()] : [] let resultsViaLink = this.realNode.find(s); let n = this.realNode.getAbsoluteName().length; for (let r of resultsViaLink){ + let name = super.getAbsoluteName() + "/" + r.substring(n); + console.log(`r = ${r}, r.substring(n) = ${r.substring(n)}, name = ${name}`) result.push(name); } return result; diff --git a/src/filesystem-proxy/package.json b/src/filesystem-proxy/package.json new file mode 100644 index 0000000..56f2e4a --- /dev/null +++ b/src/filesystem-proxy/package.json @@ -0,0 +1,21 @@ +{ + "name": "maze-example", + "version": "1.0.0", + "description": "Maze Example (Abstract Factory)", + "main": "index.ts", + "scripts": { + "test": "ts-mocha **/*.spec.ts", + "run": "tsc && node ./dist/index.js" + }, + "author": "Mitch following Frank", + "license": "ISC", + "dependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "chai": "^4.2.0", + "mocha": "^8.0.1", + "ts-mocha": "^7.0.0", + "typescript": "^3.9.6" + }, + "keywords": [] +} diff --git a/src/filesystem-proxy/tsconfig.json b/src/filesystem-proxy/tsconfig.json new file mode 100644 index 0000000..94df3b6 --- /dev/null +++ b/src/filesystem-proxy/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] +} \ No newline at end of file From bd7f9534e1e2eb7740aa10f5b7a8264039a8a5e6 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Wed, 12 Aug 2020 21:02:49 -0400 Subject: [PATCH 19/21] cleaned up console log messages in link.ts --- src/filesystem-proxy/link.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/filesystem-proxy/link.ts b/src/filesystem-proxy/link.ts index 489a14c..2907096 100644 --- a/src/filesystem-proxy/link.ts +++ b/src/filesystem-proxy/link.ts @@ -9,7 +9,6 @@ class Link extends Node { this.realNode = w; } public getAbsoluteName() : string{ - console.log(`calling getAbsoluteName on link ${this.name}`) return super.getAbsoluteName() + "@"; } public find(s: string) : Array { @@ -17,9 +16,7 @@ class Link extends Node { let resultsViaLink = this.realNode.find(s); let n = this.realNode.getAbsoluteName().length; for (let r of resultsViaLink){ - let name = super.getAbsoluteName() + "/" + r.substring(n); - console.log(`r = ${r}, r.substring(n) = ${r.substring(n)}, name = ${name}`) result.push(name); } return result; From d8edc6e469f62667ffd30d7cf4b05d2e8080674c Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Wed, 12 Aug 2020 21:04:21 -0400 Subject: [PATCH 20/21] added vending-machine-state-v2 --- src/vendingmachine-state-v2/credit0.ts | 23 ++++++++++++ src/vendingmachine-state-v2/credit10.ts | 28 ++++++++++++++ src/vendingmachine-state-v2/credit15.ts | 29 +++++++++++++++ src/vendingmachine-state-v2/credit20.ts | 29 +++++++++++++++ src/vendingmachine-state-v2/credit5.ts | 24 ++++++++++++ src/vendingmachine-state-v2/index.ts | 7 ++++ .../ivendingmachinestate.ts | 12 ++++++ src/vendingmachine-state-v2/package.json | 21 +++++++++++ src/vendingmachine-state-v2/tsconfig.json | 16 ++++++++ src/vendingmachine-state-v2/vendingmachine.ts | 37 +++++++++++++++++++ src/vendingmachine-state/package.json | 21 +++++++++++ src/vendingmachine-state/tsconfig.json | 16 ++++++++ 12 files changed, 263 insertions(+) create mode 100644 src/vendingmachine-state-v2/credit0.ts create mode 100644 src/vendingmachine-state-v2/credit10.ts create mode 100644 src/vendingmachine-state-v2/credit15.ts create mode 100644 src/vendingmachine-state-v2/credit20.ts create mode 100644 src/vendingmachine-state-v2/credit5.ts create mode 100644 src/vendingmachine-state-v2/index.ts create mode 100644 src/vendingmachine-state-v2/ivendingmachinestate.ts create mode 100644 src/vendingmachine-state-v2/package.json create mode 100644 src/vendingmachine-state-v2/tsconfig.json create mode 100644 src/vendingmachine-state-v2/vendingmachine.ts create mode 100644 src/vendingmachine-state/package.json create mode 100644 src/vendingmachine-state/tsconfig.json diff --git a/src/vendingmachine-state-v2/credit0.ts b/src/vendingmachine-state-v2/credit0.ts new file mode 100644 index 0000000..0033ec8 --- /dev/null +++ b/src/vendingmachine-state-v2/credit0.ts @@ -0,0 +1,23 @@ +import IVendingMachineState from "./ivendingmachinestate"; +import VendingMachine from "./vendingmachine"; +import Credit5 from "./credit5"; +import Credit10 from "./credit10"; + +class credit0Class implements IVendingMachineState { + + public addNickel(vm:VendingMachine): IVendingMachineState { + return Credit5 + } + public addDime(vm:VendingMachine): IVendingMachineState { + return Credit10 + } + public addQuarter(vm: VendingMachine) :IVendingMachineState { + vm.dispenseProduct(); + vm.welcome(); + return Credit0 + } + public getBalance() : number { return 0 } +} + +const Credit0 = new credit0Class() +export default Credit0 \ No newline at end of file diff --git a/src/vendingmachine-state-v2/credit10.ts b/src/vendingmachine-state-v2/credit10.ts new file mode 100644 index 0000000..c1426a8 --- /dev/null +++ b/src/vendingmachine-state-v2/credit10.ts @@ -0,0 +1,28 @@ +import IVendingMachineState from "./ivendingmachinestate"; +import VendingMachine from "./vendingmachine"; + +import Credit0 from "./credit0"; +import Credit15 from "./credit15"; +import Credit20 from "./credit20"; + +class Credit10Class implements IVendingMachineState { + public addNickel(vm: VendingMachine): IVendingMachineState { + return Credit15 + } + public addDime(v: VendingMachine): IVendingMachineState { + return Credit20 + } + public addQuarter(vm: VendingMachine): IVendingMachineState { + vm.dispenseProduct(); + vm.refund(10); + vm.welcome(); + return Credit0 + } + public getBalance(): number { + return 10; + } +} + +const Credit10 = new Credit10Class() + +export default Credit10 \ No newline at end of file diff --git a/src/vendingmachine-state-v2/credit15.ts b/src/vendingmachine-state-v2/credit15.ts new file mode 100644 index 0000000..2d590cf --- /dev/null +++ b/src/vendingmachine-state-v2/credit15.ts @@ -0,0 +1,29 @@ +import IVendingMachineState from "./ivendingmachinestate"; +import VendingMachine from "./vendingmachine"; + +import Credit0 from "./credit0"; +import Credit20 from "./credit20"; + +class Credit15Class implements IVendingMachineState { + + public addNickel(vm: VendingMachine) : IVendingMachineState { + return Credit20 + } + public addDime(vm: VendingMachine): IVendingMachineState { + vm.dispenseProduct(); + vm.welcome(); + return Credit0 + } + public addQuarter(vm: VendingMachine) : IVendingMachineState { + vm.dispenseProduct(); + vm.refund(15); + vm.welcome() + return Credit0 + } + public getBalance() : number { + return 15; + } +} + +const Credit15 = new Credit15Class() +export default Credit15 \ No newline at end of file diff --git a/src/vendingmachine-state-v2/credit20.ts b/src/vendingmachine-state-v2/credit20.ts new file mode 100644 index 0000000..8927d45 --- /dev/null +++ b/src/vendingmachine-state-v2/credit20.ts @@ -0,0 +1,29 @@ +import IVendingMachineState from "./ivendingmachinestate"; +import Credit0 from "./credit0"; +import VendingMachine from "./vendingmachine"; + +class Credit20Class implements IVendingMachineState { + + public addNickel(vm: VendingMachine) : IVendingMachineState { + vm.dispenseProduct(); + vm.welcome(); + return Credit0 + } + public addDime(vm: VendingMachine) : IVendingMachineState { + vm.dispenseProduct(); + vm.refund(5); + vm.welcome() + return Credit0 + } + public addQuarter(vm: VendingMachine) : IVendingMachineState { + vm.dispenseProduct(); + vm.refund(20); + vm.welcome(); + return Credit0 + } + public getBalance() : number { return 20 } +} + +const Credit20 = new Credit20Class() + +export default Credit20 \ No newline at end of file diff --git a/src/vendingmachine-state-v2/credit5.ts b/src/vendingmachine-state-v2/credit5.ts new file mode 100644 index 0000000..a06d918 --- /dev/null +++ b/src/vendingmachine-state-v2/credit5.ts @@ -0,0 +1,24 @@ +import IVendingMachineState from "./ivendingmachinestate"; +import VendingMachine from "./vendingmachine"; +import Credit10 from "./credit10"; +import Credit15 from "./credit15"; +import Credit0 from "./credit0"; + +class Credit5Class implements IVendingMachineState { + public addNickel(vm: VendingMachine): IVendingMachineState { + return Credit10 + } + public addDime(vm: VendingMachine): IVendingMachineState { + return Credit15 + } + public addQuarter(vm: VendingMachine): IVendingMachineState { + vm.dispenseProduct(); + vm.refund(5); + vm.welcome(); + return Credit0 + } + public getBalance(): number { return 5 } +} + +let Credit5 = new Credit5Class() +export default Credit5 \ No newline at end of file diff --git a/src/vendingmachine-state-v2/index.ts b/src/vendingmachine-state-v2/index.ts new file mode 100644 index 0000000..97c506a --- /dev/null +++ b/src/vendingmachine-state-v2/index.ts @@ -0,0 +1,7 @@ +import VendingMachine from "./vendingmachine"; + +let v = new VendingMachine(); +v.addNickel(); +v.addDime(); +v.addNickel(); +v.addQuarter(); \ No newline at end of file diff --git a/src/vendingmachine-state-v2/ivendingmachinestate.ts b/src/vendingmachine-state-v2/ivendingmachinestate.ts new file mode 100644 index 0000000..868bd95 --- /dev/null +++ b/src/vendingmachine-state-v2/ivendingmachinestate.ts @@ -0,0 +1,12 @@ +import VendingMachine from "./vendingmachine"; + +// each of these methods should return the next state. +// the VendingMachine argument is used to send commands back to the vending machine +interface IVendingMachineState { + addNickel(vm:VendingMachine) : IVendingMachineState + addDime(vm:VendingMachine) : IVendingMachineState + addQuarter(vm:VendingMachine) : IVendingMachineState + getBalance () : number +} + +export default IVendingMachineState \ No newline at end of file diff --git a/src/vendingmachine-state-v2/package.json b/src/vendingmachine-state-v2/package.json new file mode 100644 index 0000000..1aa919d --- /dev/null +++ b/src/vendingmachine-state-v2/package.json @@ -0,0 +1,21 @@ +{ + "name": "vending-machine", + "version": "1.0.0", + "description": "Vending Machine with simpler state objects", + "main": "index.ts", + "scripts": { + "test": "ts-mocha **/*.spec.ts", + "run": "tsc && node ./dist/index.js" + }, + "author": "Mitch following Frank", + "license": "ISC", + "dependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "chai": "^4.2.0", + "mocha": "^8.0.1", + "ts-mocha": "^7.0.0", + "typescript": "^3.9.6" + }, + "keywords": [] +} diff --git a/src/vendingmachine-state-v2/tsconfig.json b/src/vendingmachine-state-v2/tsconfig.json new file mode 100644 index 0000000..94df3b6 --- /dev/null +++ b/src/vendingmachine-state-v2/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] +} \ No newline at end of file diff --git a/src/vendingmachine-state-v2/vendingmachine.ts b/src/vendingmachine-state-v2/vendingmachine.ts new file mode 100644 index 0000000..f7ee2eb --- /dev/null +++ b/src/vendingmachine-state-v2/vendingmachine.ts @@ -0,0 +1,37 @@ +import IVendingMachineState from "./ivendingmachinestate"; +import Credit0 from "./credit0"; + +class VendingMachine { + private state: IVendingMachineState; + + public constructor() { + this.state = Credit0 + this.welcome() + } + // methods welcome(), displayBalance() etc. as before + + public welcome() : void { + console.log("Welcome. Please enter $0.25 to buy product."); + } + public dispenseProduct() : void { + console.log("dispensing product..."); + // a dispense is always followed by a welcome + } + public displayBalance() : void { + console.log("balance is now: " + this.state.getBalance()); + } + public refund(i: number) : void { + console.log("refunding: " + i); + } + + public changeState(state: IVendingMachineState) : void { + this.state = state; + this.displayBalance(); + } + + public addNickel() : void { this.changeState(this.state.addNickel(this)) } + public addDime() : void { this.changeState(this.state.addDime(this)) } + public addQuarter() : void { this.changeState(this.state.addQuarter(this)) } +} + +export default VendingMachine \ No newline at end of file diff --git a/src/vendingmachine-state/package.json b/src/vendingmachine-state/package.json new file mode 100644 index 0000000..1aa919d --- /dev/null +++ b/src/vendingmachine-state/package.json @@ -0,0 +1,21 @@ +{ + "name": "vending-machine", + "version": "1.0.0", + "description": "Vending Machine with simpler state objects", + "main": "index.ts", + "scripts": { + "test": "ts-mocha **/*.spec.ts", + "run": "tsc && node ./dist/index.js" + }, + "author": "Mitch following Frank", + "license": "ISC", + "dependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "chai": "^4.2.0", + "mocha": "^8.0.1", + "ts-mocha": "^7.0.0", + "typescript": "^3.9.6" + }, + "keywords": [] +} diff --git a/src/vendingmachine-state/tsconfig.json b/src/vendingmachine-state/tsconfig.json new file mode 100644 index 0000000..94df3b6 --- /dev/null +++ b/src/vendingmachine-state/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "commonjs", + "target": "es6", + "allowJs": true + }, + "include": [ + "**/*.ts" + ], + "exclude": [ + "node_modules/*" + ] +} \ No newline at end of file From a09005a54694212f3e897c8ef5a0d2a2033dcf47 Mon Sep 17 00:00:00 2001 From: Mitchell Wand Date: Fri, 14 Aug 2020 10:13:33 -0400 Subject: [PATCH 21/21] added purpose statement to IVendingMachineState --- src/vendingmachine-state-v2/ivendingmachinestate.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/vendingmachine-state-v2/ivendingmachinestate.ts b/src/vendingmachine-state-v2/ivendingmachinestate.ts index 868bd95..6262fac 100644 --- a/src/vendingmachine-state-v2/ivendingmachinestate.ts +++ b/src/vendingmachine-state-v2/ivendingmachinestate.ts @@ -1,7 +1,10 @@ import VendingMachine from "./vendingmachine"; -// each of these methods should return the next state. -// the VendingMachine argument is used to send commands back to the vending machine +// PURPOSE: +// each method +// EFFECT: sends appropriate commands back to the given vending machine +// RETURNS: the next state after the specified input + interface IVendingMachineState { addNickel(vm:VendingMachine) : IVendingMachineState addDime(vm:VendingMachine) : IVendingMachineState