├── stats ├── build │ ├── MatchData.js │ ├── MatchResult.js │ ├── utils.js │ ├── reportTargets │ │ ├── ConsoleReport.js │ │ └── HtmlReport.js │ ├── index.js │ ├── Summary.js │ ├── CsvFileReader.js │ ├── inheritance │ │ ├── CsvFileReader.js │ │ └── MatchReader.js │ ├── analyzers │ │ └── WinsAnalysis.js │ └── MatchReader.js ├── src │ ├── MatchResult.ts │ ├── MatchData.ts │ ├── reportTargets │ │ ├── ConsoleReport.ts │ │ └── HtmlReport.ts │ ├── utils.ts │ ├── index.ts │ ├── CsvFileReader.ts │ ├── inheritance │ │ ├── CsvFileReader.ts │ │ └── MatchReader.ts │ ├── analyzers │ │ └── WinsAnalysis.ts │ ├── Summary.ts │ └── MatchReader.ts ├── report.html ├── package.json ├── tsconfig.json ├── football.csv └── package-lock.json ├── features ├── types.ts ├── decorators.ts ├── generics.ts └── tsconfig.json ├── .gitignore ├── maps ├── package.json ├── src │ ├── index.ts │ ├── User.ts │ ├── Company.ts │ └── CustomMap.ts ├── index.html └── package-lock.json ├── web ├── index.html ├── dist │ └── index.html ├── package.json ├── src │ ├── models │ │ ├── Attributes.ts │ │ ├── ApiSync.ts │ │ ├── Eventing.ts │ │ ├── Collection.ts │ │ ├── User.ts │ │ └── Model.ts │ ├── views │ │ ├── UserList.ts │ │ ├── UserShow.ts │ │ ├── CollectionView.ts │ │ ├── UserEdit.ts │ │ ├── UserForm.ts │ │ └── View.ts │ └── index.ts ├── db.json ├── package-lock.json └── tsconfig.json ├── annotations ├── objects.ts ├── tuples.ts ├── classes.ts ├── interfaces.ts ├── arrays.ts ├── functions.ts └── variables.ts ├── fetchjson ├── package.json ├── index.js ├── index.ts └── package-lock.json ├── README.md └── sort ├── package.json ├── src ├── NumbersCollection.ts ├── CharactersCollection.ts ├── Sorter.ts ├── index.ts └── LinkedList.ts ├── tsconfig.json └── package-lock.json /stats/build/MatchData.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | -------------------------------------------------------------------------------- /stats/src/MatchResult.ts: -------------------------------------------------------------------------------- 1 | //enum => enumeration 2 | export enum MatchResult { 3 | HomeWin = 'H', 4 | AwayWin = 'A', 5 | Draw = 'D' 6 | } 7 | -------------------------------------------------------------------------------- /stats/report.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |

Analysis Output

4 |
Team Crystal Palace won 11 games
5 |
6 | -------------------------------------------------------------------------------- /features/types.ts: -------------------------------------------------------------------------------- 1 | const today = new Date(); 2 | today.getTime(); 3 | 4 | const person = { 5 | age: 20 6 | } 7 | 8 | class Color {} 9 | 10 | const red = new Color(); -------------------------------------------------------------------------------- /stats/src/MatchData.ts: -------------------------------------------------------------------------------- 1 | import {MatchResult} from './MatchResult'; 2 | 3 | export type MatchData = [ 4 | Date, string, string, number, number, MatchResult, string 5 | ]; 6 | -------------------------------------------------------------------------------- /stats/src/reportTargets/ConsoleReport.ts: -------------------------------------------------------------------------------- 1 | import {OutputTarget} from '../Summary'; 2 | 3 | export class ConsoleReport implements OutputTarget { 4 | print(report: string): void { 5 | console.log(report); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ./idea 2 | 3 | */node_modules 4 | */node-modules 5 | 6 | /node-modules 7 | /node_modules 8 | 9 | /fetchjson/node_modules/ 10 | /.idea/ 11 | 12 | /maps/.cache/ 13 | /maps/dist/ 14 | /sort/build/ 15 | /web/.cache/ 16 | -------------------------------------------------------------------------------- /maps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "typescript": "^3.7.4" 4 | }, 5 | "dependencies": { 6 | "@types/faker": "^4.1.8", 7 | "@types/googlemaps": "^3.39.0", 8 | "faker": "^4.1.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /web/dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /stats/src/utils.ts: -------------------------------------------------------------------------------- 1 | export const dateStringToDate = (dateString: string): Date => { 2 | const dateParts = dateString 3 | .split('/') 4 | .map((value: string): number => { 5 | return parseInt(value); 6 | }); 7 | 8 | return new Date(dateParts[2], dateParts[1]-1, dateParts[0]) 9 | }; 10 | -------------------------------------------------------------------------------- /maps/src/index.ts: -------------------------------------------------------------------------------- 1 | import {User} from './User'; 2 | import {Company} from './Company'; 3 | import {CustomMap} from './CustomMap'; 4 | 5 | const user = new User(); 6 | const company = new Company(); 7 | const customMap = new CustomMap('map'); 8 | 9 | customMap.addMarker(user); 10 | customMap.addMarker(company); 11 | -------------------------------------------------------------------------------- /stats/src/index.ts: -------------------------------------------------------------------------------- 1 | import {MatchReader} from './MatchReader'; 2 | import {Summary} from './Summary'; 3 | 4 | const matchReader = MatchReader.fromCsv('football.csv'); 5 | const summary = Summary.winsAnalysisWithHtmlReport('Crystal Palace'); 6 | 7 | matchReader.load(); 8 | summary.buildAndPrintReport(matchReader.matches); 9 | -------------------------------------------------------------------------------- /web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "start:parcel": "parcel index.html", 4 | "start:db": "json-server -w db.json" 5 | }, 6 | "devDependencies": { 7 | "typescript": "^3.7.5", 8 | "webextension-polyfill": "^0.6.0" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.19.1" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /annotations/objects.ts: -------------------------------------------------------------------------------- 1 | const profile = { 2 | name: 'alex', 3 | age: 20, 4 | coords: { 5 | lat: 0, 6 | lng: 15 7 | }, 8 | setAge(age: number): void { 9 | this.age = age; 10 | } 11 | }; 12 | 13 | const {age}: { age: number } = profile; 14 | const {coords: {lat, lng}}: { coords: { lat: number, lng: number } } = profile; 15 | -------------------------------------------------------------------------------- /fetchjson/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fetchjson", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "axios": "^0.19.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /web/src/models/Attributes.ts: -------------------------------------------------------------------------------- 1 | export class Attributes { 2 | constructor(private data: T) { 3 | } 4 | 5 | get = (key: K): T[K] => { 6 | return this.data[key]; 7 | }; 8 | 9 | set(update: T): void { 10 | (Object).assign(this.data, update); 11 | }; 12 | 13 | getAll(): T { 14 | return this.data; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /web/src/views/UserList.ts: -------------------------------------------------------------------------------- 1 | import {CollectionView} from "./CollectionView"; 2 | import {User, UserProps} from "../models/User"; 3 | import {UserShow} from "./UserShow"; 4 | 5 | export class UserList extends CollectionView { 6 | renderItem(model: User, itemParent: Element): void { 7 | new UserShow(itemParent, model).render(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /stats/build/MatchResult.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | //enum => enumeration 4 | var MatchResult; 5 | (function (MatchResult) { 6 | MatchResult["HomeWin"] = "H"; 7 | MatchResult["AwayWin"] = "A"; 8 | MatchResult["Draw"] = "D"; 9 | })(MatchResult = exports.MatchResult || (exports.MatchResult = {})); 10 | -------------------------------------------------------------------------------- /stats/build/utils.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.dateStringToDate = function (dateString) { 4 | var dateParts = dateString 5 | .split('/') 6 | .map(function (value) { 7 | return parseInt(value); 8 | }); 9 | return new Date(dateParts[2], dateParts[1] - 1, dateParts[0]); 10 | }; 11 | -------------------------------------------------------------------------------- /fetchjson/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | exports.__esModule = true; 3 | var axios_1 = require("axios"); 4 | var url = 'https://jsonplaceholder.typicode.com/todos/1'; 5 | axios_1["default"].get(url).then(function (response) { 6 | console.log('===================================='); 7 | console.log(response.data); 8 | console.log('===================================='); 9 | }); 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # u-ts_complete-developer-guide 2 | Typescript: The Complete Developer's Guide [2020] ||| https://www.udemy.com/course/typescript-the-complete-developers-guide/ 3 | 4 | 5 | npm install -g typescript ts-node 6 | 7 | 8 | 9 | --- 10 | 11 | ### Section 9: Design Patterns with Typescript 12 | tool to help us run ts in the browser 13 | 14 | npm install -g parcel-bundler 15 | 16 | npm i faker 17 | -------------------------------------------------------------------------------- /stats/build/reportTargets/ConsoleReport.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var ConsoleReport = /** @class */ (function () { 4 | function ConsoleReport() { 5 | } 6 | ConsoleReport.prototype.print = function (report) { 7 | console.log(report); 8 | }; 9 | return ConsoleReport; 10 | }()); 11 | exports.ConsoleReport = ConsoleReport; 12 | -------------------------------------------------------------------------------- /stats/src/reportTargets/HtmlReport.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import {OutputTarget} from '../Summary'; 3 | 4 | export class HtmlReport implements OutputTarget { 5 | print(report: string): void { 6 | const html = ` 7 |
8 |

Analysis Output

9 |
${report}
10 |
11 | `; 12 | 13 | fs.writeFileSync('report.html', html); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /stats/build/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var MatchReader_1 = require("./MatchReader"); 4 | var Summary_1 = require("./Summary"); 5 | var matchReader = MatchReader_1.MatchReader.fromCsv('football.csv'); 6 | var summary = Summary_1.Summary.winsAnalysisWithHtmlReport('Crystal Palace'); 7 | matchReader.load(); 8 | summary.buildAndPrintReport(matchReader.matches); 9 | -------------------------------------------------------------------------------- /web/src/views/UserShow.ts: -------------------------------------------------------------------------------- 1 | import {View} from "./View"; 2 | import {User, UserProps} from "../models/User"; 3 | 4 | export class UserShow extends View { 5 | template(): string { 6 | return ` 7 |
8 |

User Details:

9 |
User Name: ${this.model.get('name')}
10 |
User Age: ${this.model.get('age')}
11 |
12 | `; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /sort/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sort", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start:build": "tsc -w", 8 | "start:run": "nodemon build/index.js", 9 | "start": "concurrently npm:start:*" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "concurrently": "^5.0.2", 16 | "nodemon": "^2.0.2" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /stats/src/CsvFileReader.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | 3 | export class CsvFileReader { 4 | data: string[][] = []; 5 | 6 | constructor(public filename: string) {} 7 | 8 | read():void { 9 | this.data = fs.readFileSync( 10 | this.filename, 11 | { 12 | encoding: 'utf-8' 13 | }) 14 | .split('\n') 15 | .map((row: string): string[] => { 16 | return row.split(','); 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /annotations/tuples.ts: -------------------------------------------------------------------------------- 1 | const drink = { 2 | color: 'brown', 3 | carbonate: true, 4 | sugar: 40 5 | }; 6 | 7 | // Type alias 8 | type Drink = [string, boolean, number]; 9 | 10 | const pepsi: Drink = ['brown', true, 40]; 11 | const sprite: Drink = ['clear', true, 40]; 12 | const tea: Drink = ['brown', false, 0]; 13 | 14 | const carSpecs: [number, number] = [400, 3354]; 15 | 16 | const carStats = { 17 | horsepower: 400, 18 | weight: 3354 19 | }; 20 | -------------------------------------------------------------------------------- /stats/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stats", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start:build": "tsc -w", 8 | "start:run": "nodemon build/index.js", 9 | "start": "concurrently npm:start:*" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "@types/node": "^13.1.5", 16 | "concurrently": "^5.0.2", 17 | "nodemon": "^2.0.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /maps/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Maps 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/src/index.ts: -------------------------------------------------------------------------------- 1 | import {Collection} from "./models/Collection"; 2 | import {User, UserProps} from "./models/User"; 3 | import {UserList} from "./views/UserList"; 4 | 5 | const users = new Collection( 6 | 'http://localhost:3000/users', 7 | (json: UserProps) => { 8 | return User.buildUser(json); 9 | } 10 | ); 11 | 12 | users.on('change', () => { 13 | const root = document.getElementById('root'); 14 | 15 | if (root) { 16 | new UserList(root, users).render(); 17 | } 18 | }); 19 | 20 | users.fetch(); 21 | -------------------------------------------------------------------------------- /stats/src/inheritance/CsvFileReader.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | 3 | export abstract class CsvFileReader { 4 | data: T[] = []; 5 | 6 | constructor(public filename: string) {} 7 | 8 | abstract mapRow(row: string[]): T ; 9 | 10 | read():void { 11 | this.data = fs.readFileSync( 12 | this.filename, 13 | { 14 | encoding: 'utf-8' 15 | }) 16 | .split('\n') 17 | .map((row: string): string[] => { 18 | return row.split(','); 19 | }) 20 | .map(this.mapRow); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /web/src/models/ApiSync.ts: -------------------------------------------------------------------------------- 1 | import axios, {AxiosPromise} from "axios"; 2 | 3 | interface HasId { 4 | id?: number 5 | } 6 | 7 | export class ApiSync { 8 | constructor(public rootUrl: string) { 9 | } 10 | 11 | fetch(id: number): AxiosPromise { 12 | return axios.get(`${this.rootUrl}/${id}`); 13 | } 14 | 15 | save(data: T): AxiosPromise { 16 | let {id} = data; 17 | if (id) { 18 | return axios.put(`${this.rootUrl}/${id}`, data); 19 | } else { 20 | return axios.post(this.rootUrl, data); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /maps/src/User.ts: -------------------------------------------------------------------------------- 1 | import faker from '../node_modules/faker'; 2 | import {Mappable} from './CustomMap'; 3 | 4 | export class User implements Mappable { 5 | name: string; 6 | location: { 7 | lat: number; 8 | lng: number; 9 | }; 10 | 11 | color: string = 'red'; 12 | 13 | constructor() { 14 | this.name = faker.name.firstName(); 15 | this.location = { 16 | lat: parseFloat(faker.address.latitude()), 17 | lng: parseFloat(faker.address.longitude()) 18 | }; 19 | } 20 | 21 | markerContent(): string { 22 | return `User Name: ${this.name} 23 | `; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /sort/src/NumbersCollection.ts: -------------------------------------------------------------------------------- 1 | import {Sorter} from './Sorter'; 2 | 3 | export class NumbersCollection extends Sorter { 4 | constructor(public data: number[]) { 5 | super(); 6 | } 7 | 8 | get length(): number { 9 | return this.data.length; 10 | } 11 | 12 | compare(leftIndex: number, rightIndex: number): boolean { 13 | return this.data[leftIndex] > this.data[rightIndex]; 14 | } 15 | 16 | swap(leftIndex: number, rightIndex: number): void { 17 | const leftHand = this.data[leftIndex]; 18 | this.data[leftIndex] = this.data[rightIndex]; 19 | this.data[rightIndex] = leftHand; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /stats/src/inheritance/MatchReader.ts: -------------------------------------------------------------------------------- 1 | import { CsvFileReader } from './CsvFileReader'; 2 | import {dateStringToDate} from '../utils'; 3 | import {MatchResult} from '../MatchResult'; 4 | 5 | type MatchData = [Date, string, string, number, number, MatchResult, string]; 6 | 7 | export class MatchReader extends CsvFileReader { 8 | mapRow(row: string[]): MatchData { 9 | return [ 10 | dateStringToDate(row[0]), 11 | row[1], 12 | row[2], 13 | parseInt(row[3]), 14 | parseInt(row[4]), 15 | row[5] as MatchResult, // 'H', 'A', 'D' 16 | row[6] 17 | ]; 18 | } 19 | } 20 | 21 | 22 | -------------------------------------------------------------------------------- /web/src/models/Eventing.ts: -------------------------------------------------------------------------------- 1 | type Callback = () => void; 2 | 3 | export class Eventing { 4 | events: { [key: string]: Callback[] } = {}; 5 | 6 | on = (eventName: string, callback: Callback): void => { 7 | const handlers = this.events[eventName] || []; 8 | handlers.push(callback); 9 | this.events[eventName] = handlers; 10 | }; 11 | 12 | trigger = (eventName: string): void => { 13 | const handlers = this.events[eventName]; 14 | 15 | if (!handlers || handlers.length === 0) { 16 | return; 17 | } 18 | 19 | handlers.forEach(callback => { 20 | callback(); 21 | }); 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /fetchjson/index.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const url = 'https://jsonplaceholder.typicode.com/todos/1'; 4 | 5 | interface Todo { 6 | id: number; 7 | title: string; 8 | completed: boolean; 9 | } 10 | 11 | axios.get(url).then(response => { 12 | const todo = response.data as Todo; 13 | 14 | const id = todo.id; 15 | const title = todo.title; 16 | const completed = todo.completed; 17 | 18 | logTodo(id, title, completed); 19 | }); 20 | 21 | const logTodo = (id: number, title: string, completed: boolean) => { 22 | console.log(` 23 | The Todo with id: ${id} 24 | Has a title of: ${title} 25 | Is it finished? ${completed} 26 | `); 27 | }; 28 | -------------------------------------------------------------------------------- /annotations/classes.ts: -------------------------------------------------------------------------------- 1 | class Vehicle { 2 | constructor(public color: string) { 3 | } 4 | 5 | protected honk(): void { 6 | console.log('*** beep '); 7 | } 8 | } 9 | 10 | const vehicle = new Vehicle('orange'); 11 | console.log('*** vehicle.color ', vehicle.color); 12 | 13 | class Car extends Vehicle { 14 | constructor(public wheels: number, color: string) { 15 | super(color); 16 | 17 | } 18 | 19 | 20 | startDrivingProcess(): void { 21 | this.drive(); 22 | this.honk(); 23 | } 24 | 25 | private drive(): void { 26 | console.log('*** vroom '); 27 | } 28 | } 29 | 30 | const car = new Car(4,'red'); 31 | car.startDrivingProcess(); 32 | -------------------------------------------------------------------------------- /annotations/interfaces.ts: -------------------------------------------------------------------------------- 1 | interface IReportable { 2 | summary(): string; 3 | } 4 | 5 | const oldCivic = { 6 | name: 'civic', 7 | year: new Date(), 8 | broken: true, 9 | summary(): string { 10 | return `Name: ${this.name}`; 11 | } 12 | }; 13 | 14 | const drink = { 15 | color: 'brown', 16 | carbonated: true, 17 | sugar: 400, 18 | summary(): string { 19 | return `My drink has ${this.sugar} grams of sugar`; 20 | } 21 | }; 22 | 23 | const printSummary = (item: IReportable): void => { 24 | console.log('--------------------------------'); 25 | console.log('*** summary => ', item.summary()); 26 | }; 27 | 28 | printSummary(oldCivic); 29 | printSummary(drink); 30 | -------------------------------------------------------------------------------- /web/db.json: -------------------------------------------------------------------------------- 1 | { 2 | "users": [ 3 | { 4 | "id": 1, 5 | "name": "new name 2", 6 | "age": 2 7 | }, 8 | { 9 | "name": "myname", 10 | "age": 20, 11 | "id": 2 12 | }, 13 | { 14 | "name": "new record", 15 | "age": 0, 16 | "id": 3 17 | }, 18 | { 19 | "name": "john wick", 20 | "age": 35, 21 | "id": 4 22 | }, 23 | { 24 | "name": "bububu blah", 25 | "age": 35, 26 | "id": 5 27 | }, 28 | { 29 | "name": "new name", 30 | "age": 35, 31 | "id": 6 32 | }, 33 | { 34 | "name": "new name", 35 | "age": 35, 36 | "id": 7 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /stats/src/analyzers/WinsAnalysis.ts: -------------------------------------------------------------------------------- 1 | import {Analyzer} from '../Summary'; 2 | import {MatchData} from '../MatchData'; 3 | import {MatchResult} from '../MatchResult'; 4 | 5 | export class WinsAnalysis implements Analyzer { 6 | constructor(public team: string) { 7 | } 8 | 9 | run(matches: MatchData[]): string { 10 | let wins = 0; 11 | 12 | for (let match of matches) { 13 | if (match[1] === this.team && match[5] === MatchResult.HomeWin) { 14 | wins++; 15 | } else if (match[2] === this.team && match[5] === MatchResult.AwayWin) { 16 | wins++; 17 | } 18 | } 19 | 20 | return `Team ${this.team} won ${wins} games`; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /annotations/arrays.ts: -------------------------------------------------------------------------------- 1 | const carMakers: string[] = ['ford', 'toyota', 'chevy']; 2 | const dates = [new Date(), new Date()]; 3 | 4 | const carsByMake: string[][] = [ 5 | ['f150'], 6 | ['corolla'], 7 | ['camaro'] 8 | ]; 9 | 10 | // Help with inference when extracting values 11 | const car = carMakers[0]; 12 | const myCar = carMakers.pop(); 13 | 14 | // Prevent incompatible values 15 | // carMakers.push(100); 16 | 17 | // Help with 'map' 18 | carMakers.map((car: string): string => { 19 | return car.toUpperCase(); 20 | }); 21 | 22 | // Flexible types 23 | const importantDates = [new Date(), '2030-10-10']; 24 | 25 | importantDates.push('2030-10-11'); 26 | importantDates.push(new Date()); 27 | // importantDates.push(100); 28 | -------------------------------------------------------------------------------- /stats/build/reportTargets/HtmlReport.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | var fs_1 = __importDefault(require("fs")); 7 | var HtmlReport = /** @class */ (function () { 8 | function HtmlReport() { 9 | } 10 | HtmlReport.prototype.print = function (report) { 11 | var html = "\n
\n

Analysis Output

\n
" + report + "
\n
\n "; 12 | fs_1.default.writeFileSync('report.html', html); 13 | }; 14 | return HtmlReport; 15 | }()); 16 | exports.HtmlReport = HtmlReport; 17 | -------------------------------------------------------------------------------- /web/src/views/CollectionView.ts: -------------------------------------------------------------------------------- 1 | import {Collection} from "../models/Collection"; 2 | 3 | export abstract class CollectionView { 4 | constructor( 5 | public parent: Element, 6 | public collection: Collection, 7 | ) { 8 | } 9 | 10 | abstract renderItem(model: T, itemParent: Element): void ; 11 | 12 | render(): void { 13 | this.parent.innerHTML = ''; 14 | 15 | const templateElement = document.createElement('template'); 16 | 17 | for (let model of this.collection.models) { 18 | const itemParent = document.createElement('div'); 19 | this.renderItem(model, itemParent); 20 | templateElement.content.append(itemParent); 21 | } 22 | 23 | this.parent.append(templateElement.content); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /web/src/views/UserEdit.ts: -------------------------------------------------------------------------------- 1 | import {View} from "./View"; 2 | import {User, UserProps} from "../models/User"; 3 | import {UserShow} from "./UserShow"; 4 | import {UserForm} from "./UserForm"; 5 | 6 | export class UserEdit extends View{ 7 | regionsMap(): { [key: string]: string } { 8 | return { 9 | userShow: '.user-show', 10 | userForm: '.user-form', 11 | }; 12 | } 13 | 14 | onRender(): void { 15 | new UserShow(this.regions.userShow, this.model).render(); 16 | new UserForm(this.regions.userForm, this.model).render(); 17 | } 18 | 19 | template(): string { 20 | return ` 21 |
22 |
23 |
24 |
25 | `; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /sort/src/CharactersCollection.ts: -------------------------------------------------------------------------------- 1 | import {Sorter} from './Sorter'; 2 | 3 | export class CharactersCollection extends Sorter { 4 | constructor(public data: string) { 5 | super(); 6 | } 7 | 8 | get length(): number { 9 | return this.data.length; 10 | } 11 | 12 | compare(leftIndex: number, rightIndex: number): boolean { 13 | return this.data[leftIndex].toLocaleLowerCase() > this.data[rightIndex].toLocaleLowerCase(); 14 | } 15 | 16 | swap(leftIndex: number, rightIndex: number): void { 17 | const characters = this.data.split(''); 18 | const leftHand = characters[leftIndex]; 19 | characters[leftIndex] = characters[rightIndex]; 20 | characters[rightIndex] = leftHand; 21 | 22 | this.data = characters.join(''); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /web/src/models/Collection.ts: -------------------------------------------------------------------------------- 1 | import axios, {AxiosResponse} from 'axios'; 2 | import {Eventing} from "./Eventing"; 3 | 4 | export class Collection { 5 | models: T[] = []; 6 | events: Eventing = new Eventing(); 7 | 8 | constructor( 9 | public rootUrl: string, 10 | public deserialize: (json: K) => T 11 | ) { 12 | } 13 | 14 | 15 | get on() { 16 | return this.events.on; 17 | } 18 | 19 | get trigger() { 20 | return this.events.trigger; 21 | } 22 | 23 | fetch(): void { 24 | axios.get(this.rootUrl) 25 | .then((response: AxiosResponse) => { 26 | response.data.forEach( 27 | (value: K) => { 28 | this.models.push(this.deserialize(value)); 29 | }); 30 | this.trigger('change'); 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /maps/src/Company.ts: -------------------------------------------------------------------------------- 1 | import faker from '../node_modules/faker'; 2 | import {Mappable} from './CustomMap'; 3 | 4 | export class Company implements Mappable { 5 | companyName: string; 6 | catchPhrase: string; 7 | location: { 8 | lat: number; 9 | lng: number; 10 | }; 11 | 12 | color: string = 'red'; 13 | 14 | constructor() { 15 | this.companyName = faker.company.companyName(); 16 | this.catchPhrase = faker.company.catchPhrase(); 17 | this.location = { 18 | lat: parseFloat(faker.address.latitude()), 19 | lng: parseFloat(faker.address.longitude()) 20 | }; 21 | } 22 | 23 | markerContent(): string { 24 | return `
25 |

Company Name: ${this.companyName}

26 |

Catchphrase: ${this.catchPhrase}

27 |
`; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /sort/src/Sorter.ts: -------------------------------------------------------------------------------- 1 | /*interface Sortable { 2 | length: number; 3 | 4 | compare(leftIndex: number, rightIndex: number): boolean; 5 | 6 | swap(leftIndex: number, rightIndex: number): void; 7 | }*/ 8 | 9 | export abstract class Sorter { 10 | abstract length: number; 11 | 12 | abstract compare(leftIndex: number, rightIndex: number): boolean; 13 | 14 | abstract swap(leftIndex: number, rightIndex: number): void; 15 | 16 | sort(): void { 17 | const {length} = this; 18 | 19 | for (let i = 0; i < length; i++) { 20 | for (let j = 0; j < length - i - 1; j++) { 21 | if (this.compare(j, j + 1)) { 22 | this.swap(j, j + 1); 23 | } 24 | } 25 | } 26 | } 27 | } 28 | 29 | /* 30 | * promotes loose coupling 31 | * strongly couples classes together 32 | * 33 | * */ 34 | -------------------------------------------------------------------------------- /stats/build/Summary.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var WinsAnalysis_1 = require("./analyzers/WinsAnalysis"); 4 | var HtmlReport_1 = require("./reportTargets/HtmlReport"); 5 | var Summary = /** @class */ (function () { 6 | function Summary(analyzer, outputTarget) { 7 | this.analyzer = analyzer; 8 | this.outputTarget = outputTarget; 9 | } 10 | Summary.winsAnalysisWithHtmlReport = function (team) { 11 | return new Summary(new WinsAnalysis_1.WinsAnalysis(team), new HtmlReport_1.HtmlReport()); 12 | }; 13 | Summary.prototype.buildAndPrintReport = function (matches) { 14 | var output = this.analyzer.run(matches); 15 | this.outputTarget.print(output); 16 | }; 17 | return Summary; 18 | }()); 19 | exports.Summary = Summary; 20 | -------------------------------------------------------------------------------- /stats/src/Summary.ts: -------------------------------------------------------------------------------- 1 | import {MatchData} from './MatchData'; 2 | import {WinsAnalysis} from './analyzers/WinsAnalysis'; 3 | import {HtmlReport} from './reportTargets/HtmlReport'; 4 | 5 | export interface Analyzer { 6 | run(matches: MatchData[]): string; 7 | } 8 | 9 | export interface OutputTarget { 10 | print(report: string): void; 11 | } 12 | 13 | export class Summary { 14 | static winsAnalysisWithHtmlReport(team: string): Summary { 15 | return new Summary( 16 | new WinsAnalysis(team), 17 | new HtmlReport() 18 | ); 19 | } 20 | 21 | constructor( 22 | public analyzer: Analyzer, 23 | public outputTarget: OutputTarget 24 | ) { } 25 | 26 | buildAndPrintReport(matches: MatchData[]): void { 27 | const output = this.analyzer.run(matches); 28 | 29 | this.outputTarget.print(output); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /stats/build/CsvFileReader.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | var fs_1 = __importDefault(require("fs")); 7 | var CsvFileReader = /** @class */ (function () { 8 | function CsvFileReader(filename) { 9 | this.filename = filename; 10 | this.data = []; 11 | } 12 | CsvFileReader.prototype.read = function () { 13 | this.data = fs_1.default.readFileSync(this.filename, { 14 | encoding: 'utf-8' 15 | }) 16 | .split('\n') 17 | .map(function (row) { 18 | return row.split(','); 19 | }); 20 | }; 21 | return CsvFileReader; 22 | }()); 23 | exports.CsvFileReader = CsvFileReader; 24 | -------------------------------------------------------------------------------- /stats/build/inheritance/CsvFileReader.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | var fs_1 = __importDefault(require("fs")); 7 | var CsvFileReader = /** @class */ (function () { 8 | function CsvFileReader(filename) { 9 | this.filename = filename; 10 | this.data = []; 11 | } 12 | CsvFileReader.prototype.read = function () { 13 | this.data = fs_1.default.readFileSync(this.filename, { 14 | encoding: 'utf-8' 15 | }) 16 | .split('\n') 17 | .map(function (row) { 18 | return row.split(','); 19 | }) 20 | .map(this.mapRow); 21 | }; 22 | return CsvFileReader; 23 | }()); 24 | exports.CsvFileReader = CsvFileReader; 25 | -------------------------------------------------------------------------------- /sort/src/index.ts: -------------------------------------------------------------------------------- 1 | import {Sorter} from './Sorter'; 2 | import {NumbersCollection} from './NumbersCollection'; 3 | import {CharactersCollection} from './CharactersCollection'; 4 | import {LinkedList} from './LinkedList'; 5 | 6 | /*const numbersCollection1 = new NumbersCollection([10, -2, 5, 45, 1, 0, 5, 1, -4]); 7 | const numbersCollection2 = new NumbersCollection([30, 10, 0, -5]); 8 | numbersCollection1.sort(); 9 | numbersCollection2.sort(); 10 | 11 | console.log(numbersCollection1.data); 12 | console.log(numbersCollection2.data);*/ 13 | 14 | /*const charactersCollection = new CharactersCollection('XaaZyob'); 15 | charactersCollection.sort(); 16 | console.log(charactersCollection.data);*/ 17 | 18 | const linkedList = new LinkedList(); 19 | 20 | linkedList.add(500); 21 | linkedList.add(30); 22 | linkedList.add(-50); 23 | linkedList.add(-5); 24 | linkedList.add(3); 25 | 26 | linkedList.sort(); 27 | linkedList.print(); 28 | -------------------------------------------------------------------------------- /stats/build/analyzers/WinsAnalysis.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var MatchResult_1 = require("../MatchResult"); 4 | var WinsAnalysis = /** @class */ (function () { 5 | function WinsAnalysis(team) { 6 | this.team = team; 7 | } 8 | WinsAnalysis.prototype.run = function (matches) { 9 | var wins = 0; 10 | for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) { 11 | var match = matches_1[_i]; 12 | if (match[1] === this.team && match[5] === MatchResult_1.MatchResult.HomeWin) { 13 | wins++; 14 | } 15 | else if (match[2] === this.team && match[5] === MatchResult_1.MatchResult.AwayWin) { 16 | wins++; 17 | } 18 | } 19 | return "Team " + this.team + " won " + wins + " games"; 20 | }; 21 | return WinsAnalysis; 22 | }()); 23 | exports.WinsAnalysis = WinsAnalysis; 24 | -------------------------------------------------------------------------------- /web/src/models/User.ts: -------------------------------------------------------------------------------- 1 | import {Model} from "./Model"; 2 | import {Attributes} from "./Attributes"; 3 | import {Eventing} from "./Eventing"; 4 | import {ApiSync} from "./ApiSync"; 5 | import {Collection} from "./Collection"; 6 | 7 | export interface UserProps { 8 | id?: number; 9 | name?: string; 10 | age?: number; 11 | } 12 | 13 | const rootUrl = 'http://localhost:3000/users'; 14 | 15 | export class User extends Model { 16 | static buildUser(attrs: UserProps): User { 17 | return new User( 18 | new Attributes(attrs), 19 | new Eventing(), 20 | new ApiSync(rootUrl) 21 | ); 22 | } 23 | 24 | static buildUserCollection(): Collection { 25 | return new Collection( 26 | rootUrl, 27 | (json: UserProps) => User.buildUser(json) 28 | ); 29 | } 30 | 31 | setRandomAge(): void { 32 | const age = Math.round(Math.random() * 100); 33 | this.set({age}); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /annotations/functions.ts: -------------------------------------------------------------------------------- 1 | const add = (a: number, b: number): number => { 2 | return a + b; 3 | }; 4 | 5 | const subtract = (a: number, b: number): number => { 6 | return a - b; 7 | }; 8 | 9 | function divide(a: number, b: number): number { 10 | return a / b; 11 | } 12 | 13 | const multiply = function (a: number, b: number): number { 14 | return a * b; 15 | }; 16 | 17 | const logger = (message: string): void => { 18 | console.log('-- log', message); 19 | }; 20 | 21 | /*const throwError = (message: string): never => { 22 | throw new Error(message); 23 | };*/ 24 | 25 | const throwError = (message: string): void => { 26 | if (!message) { 27 | throw new Error(message); 28 | } 29 | }; 30 | 31 | const forecast = { 32 | date: new Date(), 33 | weather: 'sunny' 34 | }; 35 | 36 | const logWeather = ({date, weather}: { date: Date, weather: string }): void => { 37 | console.log('-- date', date); 38 | console.log('-- weather', weather); 39 | }; 40 | 41 | logWeather(forecast); 42 | -------------------------------------------------------------------------------- /stats/src/MatchReader.ts: -------------------------------------------------------------------------------- 1 | import {dateStringToDate} from './utils'; 2 | import {MatchResult} from './MatchResult'; 3 | import {MatchData} from './MatchData'; 4 | import {CsvFileReader} from './CsvFileReader'; 5 | 6 | interface DataReader { 7 | data: string[][]; 8 | 9 | read(): void; 10 | } 11 | 12 | export class MatchReader { 13 | matches: MatchData[] = []; 14 | 15 | static fromCsv(filename: string): MatchReader { 16 | return new MatchReader(new CsvFileReader(filename)); 17 | } 18 | 19 | constructor(public reader: DataReader) { 20 | } 21 | 22 | load(): void { 23 | this.reader.read(); 24 | this.matches = this.reader.data 25 | .map((row: string[]): MatchData => { 26 | return [ 27 | dateStringToDate(row[0]), 28 | row[1], 29 | row[2], 30 | parseInt(row[3]), 31 | parseInt(row[4]), 32 | row[5] as MatchResult, // 'H', 'A', 'D' 33 | row[6] 34 | ]; 35 | } 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /stats/build/MatchReader.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var utils_1 = require("./utils"); 4 | var CsvFileReader_1 = require("./CsvFileReader"); 5 | var MatchReader = /** @class */ (function () { 6 | function MatchReader(reader) { 7 | this.reader = reader; 8 | this.matches = []; 9 | } 10 | MatchReader.fromCsv = function (filename) { 11 | return new MatchReader(new CsvFileReader_1.CsvFileReader(filename)); 12 | }; 13 | MatchReader.prototype.load = function () { 14 | this.reader.read(); 15 | this.matches = this.reader.data 16 | .map(function (row) { 17 | return [ 18 | utils_1.dateStringToDate(row[0]), 19 | row[1], 20 | row[2], 21 | parseInt(row[3]), 22 | parseInt(row[4]), 23 | row[5], 24 | row[6] 25 | ]; 26 | }); 27 | }; 28 | return MatchReader; 29 | }()); 30 | exports.MatchReader = MatchReader; 31 | -------------------------------------------------------------------------------- /maps/src/CustomMap.ts: -------------------------------------------------------------------------------- 1 | /*Instructions to every other class 2 | * on how they can be an argument to 'addMarker'*/ 3 | export interface Mappable { 4 | location: { 5 | lat: number; 6 | lng: number; 7 | }; 8 | color: string; 9 | 10 | markerContent(): string; 11 | } 12 | 13 | export class CustomMap { 14 | private googleMap: google.maps.Map; 15 | 16 | constructor(divId: string) { 17 | this.googleMap = new google.maps.Map( 18 | document.getElementById(divId), 19 | { 20 | center: { 21 | lat: 0, 22 | lng: 0 23 | }, 24 | zoom: 1 25 | }); 26 | } 27 | 28 | addMarker(mappable: Mappable): void { 29 | const marker = new google.maps.Marker({ 30 | map: this.googleMap, 31 | position: { 32 | lat: mappable.location.lat, 33 | lng: mappable.location.lng, 34 | } 35 | }); 36 | 37 | marker.addListener('click', () => { 38 | const infoWindow = new google.maps.InfoWindow({ 39 | content: mappable.markerContent() 40 | }); 41 | 42 | infoWindow.open(this.googleMap, marker); 43 | }); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /web/src/views/UserForm.ts: -------------------------------------------------------------------------------- 1 | import {User, UserProps} from "../models/User"; 2 | import {View} from "./View"; 3 | 4 | export class UserForm extends View { 5 | eventsMap(): { [key: string]: () => void } { 6 | return { 7 | 'click:.set-age': this.onSetAgeClick, 8 | 'click:.set-name': this.onSetNameClick, 9 | 'click:.save-model': this.onSaveClick, 10 | }; 11 | } 12 | 13 | onSaveClick = ():void => { 14 | this.model.save(); 15 | }; 16 | 17 | onSetAgeClick = (): void => { 18 | this.model.setRandomAge(); 19 | }; 20 | 21 | onSetNameClick = (): void => { 22 | const input = this.parent.querySelector('input'); 23 | 24 | if (input) { 25 | const name = input.value; 26 | this.model.set({name}); 27 | } 28 | }; 29 | 30 | template(): string { 31 | return ` 32 |
33 | 34 | 35 | 36 | 37 |
38 | `; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /maps/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "@types/faker": { 6 | "version": "4.1.8", 7 | "resolved": "https://registry.npmjs.org/@types/faker/-/faker-4.1.8.tgz", 8 | "integrity": "sha512-9ARxZRyXXCMMf8KjYhnD+GHE789HGwIqa1dolCRl/C6ExwvBIUmnIktLeY71TPmFOQiU3DQwrbQEX0pkyqX1tQ==" 9 | }, 10 | "@types/googlemaps": { 11 | "version": "3.39.0", 12 | "resolved": "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.39.0.tgz", 13 | "integrity": "sha512-SiD5JrB5wkA2JvkP7Tn3D+L4F50QXtnQI+J6Y/HnDhfyp0vlB6tNz14BuOOXV1rwP2vnTwE1uqNjfaKXCmuHDg==" 14 | }, 15 | "faker": { 16 | "version": "4.1.0", 17 | "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", 18 | "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" 19 | }, 20 | "typescript": { 21 | "version": "3.7.4", 22 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", 23 | "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", 24 | "dev": true 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /features/decorators.ts: -------------------------------------------------------------------------------- 1 | @classDecorator 2 | class Boat { 3 | @testDecorator 4 | color = 'blue'; 5 | 6 | @testDecorator 7 | get formattedColor(): string { 8 | return `This boats color is ${this.color}`; 9 | } 10 | 11 | @logError('Ooops, boat was...') 12 | pilot( 13 | @parametrDecorator speed: string, 14 | @parametrDecorator generateWake:boolean 15 | ):void { 16 | if (speed === 'fast') { 17 | console.log('swim'); 18 | } else { 19 | console.log('nothing'); 20 | } 21 | } 22 | } 23 | 24 | function classDecorator(constructor: Function) { 25 | console.log('constructor: = ', constructor); 26 | 27 | } 28 | 29 | function parametrDecorator(target: any, key: string, index: number) { 30 | console.log(key, index); 31 | } 32 | 33 | function testDecorator(target: any, key: string) { 34 | console.log('key: = ', key); 35 | } 36 | 37 | function logError(errorMessage: string) { 38 | return function (target: any, key: string, desc: PropertyDescriptor): void { 39 | const method = desc.value; 40 | 41 | desc.value = function () { 42 | try { 43 | method(); 44 | } catch (e) { 45 | console.log(errorMessage); 46 | } 47 | } 48 | } 49 | } 50 | 51 | // new Boat().pilot(); 52 | -------------------------------------------------------------------------------- /stats/build/inheritance/MatchReader.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __extends = (this && this.__extends) || (function () { 3 | var extendStatics = function (d, b) { 4 | extendStatics = Object.setPrototypeOf || 5 | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 6 | function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; 7 | return extendStatics(d, b); 8 | }; 9 | return function (d, b) { 10 | extendStatics(d, b); 11 | function __() { this.constructor = d; } 12 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 13 | }; 14 | })(); 15 | Object.defineProperty(exports, "__esModule", { value: true }); 16 | var CsvFileReader_1 = require("./CsvFileReader"); 17 | var utils_1 = require("../utils"); 18 | var MatchReader = /** @class */ (function (_super) { 19 | __extends(MatchReader, _super); 20 | function MatchReader() { 21 | return _super !== null && _super.apply(this, arguments) || this; 22 | } 23 | MatchReader.prototype.mapRow = function (row) { 24 | return [ 25 | utils_1.dateStringToDate(row[0]), 26 | row[1], 27 | row[2], 28 | parseInt(row[3]), 29 | parseInt(row[4]), 30 | row[5], 31 | row[6] 32 | ]; 33 | }; 34 | return MatchReader; 35 | }(CsvFileReader_1.CsvFileReader)); 36 | exports.MatchReader = MatchReader; 37 | -------------------------------------------------------------------------------- /web/src/models/Model.ts: -------------------------------------------------------------------------------- 1 | import {AxiosPromise, AxiosResponse} from "axios"; 2 | 3 | interface ModelAttributes { 4 | set(value: T): void; 5 | 6 | getAll(): T; 7 | 8 | get(key: K): T[K]; 9 | } 10 | 11 | interface Sync { 12 | fetch(id: number): AxiosPromise; 13 | 14 | save(data: T): AxiosPromise; 15 | } 16 | 17 | interface Events { 18 | on(eventName: string, callback: () => void): void; 19 | 20 | trigger(eventName: string): void; 21 | } 22 | 23 | interface HasId { 24 | id?: number; 25 | } 26 | 27 | export class Model { 28 | constructor( 29 | private attributes: ModelAttributes, 30 | private events: Events, 31 | private sync: Sync 32 | ) { 33 | } 34 | 35 | on = this.events.on; 36 | trigger = this.events.trigger; 37 | get = this.attributes.get; 38 | 39 | set(update: T): void { 40 | this.attributes.set(update); 41 | this.events.trigger('change'); 42 | } 43 | 44 | fetch(): void { 45 | const id = this.attributes.get('id'); 46 | 47 | if (typeof id !== 'number') { 48 | throw new Error('Cannot fetch without an id'); 49 | } 50 | 51 | this.sync 52 | .fetch(id) 53 | .then((response: AxiosResponse): void => { 54 | this.set(response.data); 55 | }); 56 | }; 57 | 58 | save(): void { 59 | this.sync 60 | .save(this.attributes.getAll()) 61 | .then((response: AxiosResponse): void => { 62 | this.trigger('save'); 63 | }) 64 | .catch((): void => { 65 | this.trigger('error'); 66 | }); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /annotations/variables.ts: -------------------------------------------------------------------------------- 1 | let apples: number = 5; 2 | let speed: string = 'fast'; 3 | 4 | let hasName: boolean = true; 5 | 6 | let nothingMuch: null = null; 7 | let nothing: undefined = undefined; 8 | 9 | //build in objects 10 | let now: Date = new Date(); 11 | 12 | //Array 13 | let colors: string[] = ['red', 'gray', 'black']; 14 | let myNumbers: number[] = [1, 2, 3, 4, 5]; 15 | let truths: boolean[] = [true, true, false]; 16 | 17 | //Classes 18 | class Car { 19 | } 20 | 21 | let car: Car = new Car(); 22 | 23 | //Object literal 24 | let point: { x: number; y: number } = { 25 | x: 10, 26 | y: 20 27 | }; 28 | 29 | //Function 30 | const logNumber: (i: number) => void = (i: number) => { 31 | console.log('-- i', i); 32 | }; 33 | 34 | //When to use annotations 35 | //1) function that return the 'any' type 36 | const json = '{"x":10,"y":20}'; 37 | const coordinates: { x: number; y: number } = JSON.parse(json); 38 | console.log('-- coordinates', coordinates); 39 | //2) When we declare a variable on one line 40 | // and initialize it later 41 | let words = ['red', 'green', 'blue']; 42 | let foundWord: boolean; 43 | 44 | for (let i = 0, len = words.length; i < len; i++) { 45 | let w = words[i]; 46 | if (w === 'green') { 47 | foundWord = true; 48 | } 49 | } 50 | 51 | //3) Variable whose type cannot be inferred correctly 52 | let numbers = [-10, -1, 12]; 53 | let numberAboveZero: boolean | number = false; 54 | 55 | for (let i = 0, len = numbers.length; i 0) { 58 | numberAboveZero = n; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /fetchjson/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fetchjson", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "axios": { 8 | "version": "0.19.0", 9 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", 10 | "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", 11 | "requires": { 12 | "follow-redirects": "1.5.10", 13 | "is-buffer": "^2.0.2" 14 | } 15 | }, 16 | "debug": { 17 | "version": "3.1.0", 18 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 19 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 20 | "requires": { 21 | "ms": "2.0.0" 22 | } 23 | }, 24 | "follow-redirects": { 25 | "version": "1.5.10", 26 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", 27 | "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", 28 | "requires": { 29 | "debug": "=3.1.0" 30 | } 31 | }, 32 | "is-buffer": { 33 | "version": "2.0.4", 34 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 35 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" 36 | }, 37 | "ms": { 38 | "version": "2.0.0", 39 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 40 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /web/src/views/View.ts: -------------------------------------------------------------------------------- 1 | import {Model} from "../models/Model"; 2 | 3 | export abstract class View, K> { 4 | regions: {[key: string]: Element} = {}; 5 | 6 | constructor( 7 | public parent: Element, 8 | public model: T 9 | ) { 10 | this.bindModel(); 11 | } 12 | 13 | abstract template(): string; 14 | 15 | regionsMap(): { [key: string]: string } { 16 | return {}; 17 | } 18 | 19 | eventsMap(): { [key: string]: () => void } { 20 | return {}; 21 | } 22 | 23 | bindModel() { 24 | this.model.on('change', () => { 25 | this.render(); 26 | }); 27 | } 28 | 29 | 30 | bindEvents(fragment: DocumentFragment): void { 31 | const eventsMap = this.eventsMap(); 32 | 33 | for (let eventKey in eventsMap) { 34 | const [eventName, selector] = eventKey.split(':'); 35 | 36 | fragment.querySelectorAll(selector).forEach(element => { 37 | element.addEventListener(eventName, eventsMap[eventKey]); 38 | }); 39 | } 40 | } 41 | 42 | mapRegions(fragment: DocumentFragment): void { 43 | const regionsMap = this.regionsMap(); 44 | 45 | for (let key in regionsMap) { 46 | const selector = regionsMap[key]; 47 | const element = fragment.querySelector(selector); 48 | 49 | if (element) { 50 | this.regions[key] = element; 51 | } 52 | } 53 | } 54 | 55 | onRender(): void { 56 | 57 | } 58 | 59 | render(): void { 60 | this.parent.innerHTML = ''; 61 | 62 | const templateElement = document.createElement('template'); 63 | templateElement.innerHTML = this.template(); 64 | 65 | this.bindEvents(templateElement.content); 66 | this.mapRegions(templateElement.content); 67 | 68 | this.onRender(); 69 | 70 | this.parent.append(templateElement.content); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /features/generics.ts: -------------------------------------------------------------------------------- 1 | class ArrayOfNumbers { 2 | constructor(public collection: number[]) { 3 | } 4 | 5 | get (index: number): number { 6 | return this.collection[index]; 7 | } 8 | } 9 | 10 | class ArrayOfStrings { 11 | constructor(public collection: string[]) { 12 | } 13 | 14 | get (index: number): string { 15 | return this.collection[index]; 16 | } 17 | } 18 | 19 | class ArrayOfAnything { 20 | constructor(public collection: T[]) { 21 | } 22 | 23 | get (index: number): T { 24 | return this.collection[index]; 25 | } 26 | } 27 | 28 | const arr = new ArrayOfAnything(['a', 'b', 'c']); 29 | 30 | // Examples of generics with functions 31 | 32 | function printStrings(arr: string[]) { 33 | for (let i = 0, len = arr.length; i < len; i++) { 34 | let arguments = arr[i]; 35 | console.log('*** string = ', arguments); 36 | } 37 | } 38 | 39 | function printNumbers(arr: number[]) { 40 | for (let i = 0, len = arr.length; i < len; i++) { 41 | let arguments = arr[i]; 42 | console.log('*** string = ', arguments); 43 | } 44 | } 45 | function printAnything(arr: T[]) { 46 | for (let i = 0, len = arr.length; i < len; i++) { 47 | console.log(arr[i]); 48 | } 49 | } 50 | 51 | printAnything(['a', 'b', 'c']); 52 | 53 | // Generic Constraints 54 | 55 | class Car { 56 | print () { 57 | console.log('i am a car'); 58 | } 59 | } 60 | 61 | class House { 62 | print () { 63 | console.log('i am a house'); 64 | } 65 | } 66 | 67 | interface Printable { 68 | print(): void; 69 | } 70 | 71 | function printHousesOrCars(arr: T[]) { 72 | for (let i = 0, len = arr.length; i < len; i++) { 73 | arr[i].print(); 74 | } 75 | } 76 | 77 | // printHousesOrCars([1, 2, 4]); 78 | printHousesOrCars([new House(), new House()]); 79 | printHousesOrCars([new Car(), new Car()]); 80 | -------------------------------------------------------------------------------- /web/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "axios": { 6 | "version": "0.19.1", 7 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.1.tgz", 8 | "integrity": "sha512-Yl+7nfreYKaLRvAvjNPkvfjnQHJM1yLBY3zhqAwcJSwR/6ETkanUgylgtIvkvz0xJ+p/vZuNw8X7Hnb7Whsbpw==", 9 | "requires": { 10 | "follow-redirects": "1.5.10" 11 | } 12 | }, 13 | "debug": { 14 | "version": "3.1.0", 15 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 16 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 17 | "requires": { 18 | "ms": "2.0.0" 19 | } 20 | }, 21 | "follow-redirects": { 22 | "version": "1.5.10", 23 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", 24 | "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", 25 | "requires": { 26 | "debug": "=3.1.0" 27 | } 28 | }, 29 | "ms": { 30 | "version": "2.0.0", 31 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 32 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 33 | }, 34 | "typescript": { 35 | "version": "3.7.5", 36 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", 37 | "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", 38 | "dev": true 39 | }, 40 | "webextension-polyfill": { 41 | "version": "0.6.0", 42 | "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.6.0.tgz", 43 | "integrity": "sha512-PlYwiX8e4bNZrEeBFxbFFsLtm0SMPxJliLTGdNCA0Bq2XkWrAn2ejUd+89vZm+8BnfFB1BclJyCz3iKsm2atNg==", 44 | "dev": true 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /sort/src/LinkedList.ts: -------------------------------------------------------------------------------- 1 | import {Sorter} from './Sorter'; 2 | 3 | class Node { 4 | next: Node | null = null; 5 | 6 | constructor(public data: number) { 7 | } 8 | } 9 | 10 | export class LinkedList extends Sorter { 11 | head: Node | null = null; 12 | 13 | get length(): number { 14 | if (!this.head) { 15 | return 0; 16 | } 17 | 18 | let length = 1; 19 | let node = this.head; 20 | while (node.next) { 21 | length++; 22 | node = node.next; 23 | } 24 | 25 | return length; 26 | } 27 | 28 | add(data: number): void { 29 | const node = new Node(data); 30 | 31 | if (!this.head) { 32 | this.head = node; 33 | return; 34 | } 35 | 36 | let tail = this.head; 37 | while (tail.next) { 38 | tail = tail.next; 39 | } 40 | 41 | tail.next = node; 42 | } 43 | 44 | at(index: number): Node { 45 | if (!this.head) { 46 | throw new Error('Index out of bounds'); 47 | } 48 | 49 | let counter = 0; 50 | let node: Node | null = this.head; 51 | while (node) { 52 | if (counter === index) { 53 | return node; 54 | } 55 | 56 | counter++; 57 | node = node.next; 58 | } 59 | 60 | throw new Error('Index out of bounds'); 61 | } 62 | 63 | compare(leftIndex: number, rightIndex: number): boolean { 64 | if (!this.head) { 65 | throw new Error('List is empty'); 66 | } 67 | 68 | return this.at(leftIndex).data > this.at(rightIndex).data; 69 | } 70 | 71 | swap(leftIndex: number, rightIndex: number): void { 72 | const leftNode = this.at(leftIndex); 73 | const rightNode = this.at(rightIndex); 74 | 75 | const leftHand = leftNode.data; 76 | leftNode.data = rightNode.data; 77 | rightNode.data = leftHand; 78 | } 79 | 80 | print(): void { 81 | if (!this.head) { 82 | return; 83 | } 84 | 85 | let node: Node | null = this.head; 86 | while (node) { 87 | console.log('*** listItem ', node.data); 88 | node = node.next; 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 5 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 6 | // "lib": [], /* Specify library files to be included in the compilation. */ 7 | // "allowJs": true, /* Allow javascript files to be compiled. */ 8 | // "checkJs": true, /* Report errors in .js files. */ 9 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 10 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 11 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 12 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 13 | // "outFile": "./", /* Concatenate and emit output to single file. */ 14 | // "outDir": "./", /* Redirect output structure to the directory. */ 15 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 16 | // "composite": true, /* Enable project compilation */ 17 | // "removeComments": true, /* Do not emit comments to output. */ 18 | // "noEmit": true, /* Do not emit outputs. */ 19 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 21 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 22 | 23 | /* Strict Type-Checking Options */ 24 | "strict": true, /* Enable all strict type-checking options. */ 25 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 26 | // "strictNullChecks": true, /* Enable strict null checks. */ 27 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 28 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 29 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 30 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 31 | 32 | /* Additional Checks */ 33 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 34 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 35 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 36 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 37 | 38 | /* Module Resolution Options */ 39 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 40 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 41 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 42 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 43 | // "typeRoots": [], /* List of folders to include type definitions from. */ 44 | // "types": [], /* Type declaration files to be included in compilation. */ 45 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 46 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 47 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 48 | 49 | /* Source Map Options */ 50 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 51 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 52 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 53 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 54 | 55 | /* Experimental Options */ 56 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 57 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 58 | } 59 | } -------------------------------------------------------------------------------- /features/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 5 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 6 | // "lib": [], /* Specify library files to be included in the compilation. */ 7 | // "allowJs": true, /* Allow javascript files to be compiled. */ 8 | // "checkJs": true, /* Report errors in .js files. */ 9 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 10 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 11 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 12 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 13 | // "outFile": "./", /* Concatenate and emit output to single file. */ 14 | // "outDir": "./", /* Redirect output structure to the directory. */ 15 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 16 | // "composite": true, /* Enable project compilation */ 17 | // "removeComments": true, /* Do not emit comments to output. */ 18 | // "noEmit": true, /* Do not emit outputs. */ 19 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 21 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 22 | 23 | /* Strict Type-Checking Options */ 24 | "strict": true, /* Enable all strict type-checking options. */ 25 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 26 | // "strictNullChecks": true, /* Enable strict null checks. */ 27 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 28 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 29 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 30 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 31 | 32 | /* Additional Checks */ 33 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 34 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 35 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 36 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 37 | 38 | /* Module Resolution Options */ 39 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 40 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 41 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 42 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 43 | // "typeRoots": [], /* List of folders to include type definitions from. */ 44 | // "types": [], /* Type declaration files to be included in compilation. */ 45 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 46 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 47 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 48 | 49 | /* Source Map Options */ 50 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 51 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 52 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 53 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 54 | 55 | /* Experimental Options */ 56 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 57 | "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */ 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /sort/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | // "incremental": true, /* Enable incremental compilation */ 5 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ 6 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 7 | // "lib": [], /* Specify library files to be included in the compilation. */ 8 | // "allowJs": true, /* Allow javascript files to be compiled. */ 9 | // "checkJs": true, /* Report errors in .js files. */ 10 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 11 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 12 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 13 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 14 | // "outFile": "./", /* Concatenate and emit output to single file. */ 15 | "outDir": "./build", /* Redirect output structure to the directory. */ 16 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 17 | // "composite": true, /* Enable project compilation */ 18 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 19 | // "removeComments": true, /* Do not emit comments to output. */ 20 | // "noEmit": true, /* Do not emit outputs. */ 21 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 22 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 23 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 24 | 25 | /* Strict Type-Checking Options */ 26 | "strict": true, /* Enable all strict type-checking options. */ 27 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 28 | // "strictNullChecks": true, /* Enable strict null checks. */ 29 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 30 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 31 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 32 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 33 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 34 | 35 | /* Additional Checks */ 36 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 37 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 38 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 39 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 40 | 41 | /* Module Resolution Options */ 42 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 43 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 44 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 45 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 46 | // "typeRoots": [], /* List of folders to include type definitions from. */ 47 | // "types": [], /* Type declaration files to be included in compilation. */ 48 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 49 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 50 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 51 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 52 | 53 | /* Source Map Options */ 54 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 55 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 56 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 57 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 58 | 59 | /* Experimental Options */ 60 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 61 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 62 | 63 | /* Advanced Options */ 64 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /stats/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | // "incremental": true, /* Enable incremental compilation */ 5 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ 6 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 7 | // "lib": [], /* Specify library files to be included in the compilation. */ 8 | // "allowJs": true, /* Allow javascript files to be compiled. */ 9 | // "checkJs": true, /* Report errors in .js files. */ 10 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 11 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 12 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 13 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 14 | // "outFile": "./", /* Concatenate and emit output to single file. */ 15 | "outDir": "./build", /* Redirect output structure to the directory. */ 16 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 17 | // "composite": true, /* Enable project compilation */ 18 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 19 | // "removeComments": true, /* Do not emit comments to output. */ 20 | // "noEmit": true, /* Do not emit outputs. */ 21 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 22 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 23 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 24 | 25 | /* Strict Type-Checking Options */ 26 | "strict": true, /* Enable all strict type-checking options. */ 27 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 28 | // "strictNullChecks": true, /* Enable strict null checks. */ 29 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 30 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 31 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 32 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 33 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 34 | 35 | /* Additional Checks */ 36 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 37 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 38 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 39 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 40 | 41 | /* Module Resolution Options */ 42 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 43 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 44 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 45 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 46 | // "typeRoots": [], /* List of folders to include type definitions from. */ 47 | // "types": [], /* Type declaration files to be included in compilation. */ 48 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 49 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 50 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 51 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 52 | 53 | /* Source Map Options */ 54 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 55 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 56 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 57 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 58 | 59 | /* Experimental Options */ 60 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 61 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 62 | 63 | /* Advanced Options */ 64 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /stats/football.csv: -------------------------------------------------------------------------------- 1 | 10/08/2018,Man United,Leicester,2,1,H,A Marriner 2 | 11/08/2018,Bournemouth,Cardiff,2,0,H,K Friend 3 | 11/08/2018,Fulham,Crystal Palace,0,2,A,M Dean 4 | 11/08/2018,Huddersfield,Chelsea,0,3,A,C Kavanagh 5 | 11/08/2018,Newcastle,Tottenham,1,2,A,M Atkinson 6 | 11/08/2018,Watford,Brighton,2,0,H,J Moss 7 | 11/08/2018,Wolves,Everton,2,2,D,C Pawson 8 | 12/08/2018,Arsenal,Man City,0,2,A,M Oliver 9 | 12/08/2018,Liverpool,West Ham,4,0,H,A Taylor 10 | 12/08/2018,Southampton,Burnley,0,0,D,G Scott 11 | 18/08/2018,Cardiff,Newcastle,0,0,D,C Pawson 12 | 18/08/2018,Chelsea,Arsenal,3,2,H,M Atkinson 13 | 18/08/2018,Everton,Southampton,2,1,H,L Mason 14 | 18/08/2018,Leicester,Wolves,2,0,H,M Dean 15 | 18/08/2018,Tottenham,Fulham,3,1,H,A Taylor 16 | 18/08/2018,West Ham,Bournemouth,1,2,A,S Attwell 17 | 19/08/2018,Brighton,Man United,3,2,H,K Friend 18 | 19/08/2018,Burnley,Watford,1,3,A,P Tierney 19 | 19/08/2018,Man City,Huddersfield,6,1,H,A Marriner 20 | 20/08/2018,Crystal Palace,Liverpool,0,2,A,M Oliver 21 | 25/08/2018,Arsenal,West Ham,3,1,H,G Scott 22 | 25/08/2018,Bournemouth,Everton,2,2,D,L Probert 23 | 25/08/2018,Huddersfield,Cardiff,0,0,D,M Oliver 24 | 25/08/2018,Liverpool,Brighton,1,0,H,C Kavanagh 25 | 25/08/2018,Southampton,Leicester,1,2,A,J Moss 26 | 25/08/2018,Wolves,Man City,1,1,D,M Atkinson 27 | 26/08/2018,Fulham,Burnley,4,2,H,D Coote 28 | 26/08/2018,Newcastle,Chelsea,1,2,A,P Tierney 29 | 26/08/2018,Watford,Crystal Palace,2,1,H,A Taylor 30 | 27/08/2018,Man United,Tottenham,0,3,A,C Pawson 31 | 01/09/2018,Brighton,Fulham,2,2,D,L Probert 32 | 01/09/2018,Chelsea,Bournemouth,2,0,H,L Mason 33 | 01/09/2018,Crystal Palace,Southampton,0,2,A,M Atkinson 34 | 01/09/2018,Everton,Huddersfield,1,1,D,S Attwell 35 | 01/09/2018,Leicester,Liverpool,1,2,A,P Tierney 36 | 01/09/2018,Man City,Newcastle,2,1,H,K Friend 37 | 01/09/2018,West Ham,Wolves,0,1,A,C Kavanagh 38 | 02/09/2018,Burnley,Man United,0,2,A,J Moss 39 | 02/09/2018,Cardiff,Arsenal,2,3,A,A Taylor 40 | 02/09/2018,Watford,Tottenham,2,1,H,A Marriner 41 | 15/09/2018,Bournemouth,Leicester,4,2,H,C Pawson 42 | 15/09/2018,Chelsea,Cardiff,4,1,H,J Moss 43 | 15/09/2018,Huddersfield,Crystal Palace,0,1,A,L Mason 44 | 15/09/2018,Man City,Fulham,3,0,H,S Attwell 45 | 15/09/2018,Newcastle,Arsenal,1,2,A,L Probert 46 | 15/09/2018,Tottenham,Liverpool,1,2,A,M Oliver 47 | 15/09/2018,Watford,Man United,1,2,A,M Dean 48 | 16/09/2018,Everton,West Ham,1,3,A,M Atkinson 49 | 16/09/2018,Wolves,Burnley,1,0,H,A Marriner 50 | 17/09/2018,Southampton,Brighton,2,2,D,A Taylor 51 | 22/09/2018,Brighton,Tottenham,1,2,A,C Kavanagh 52 | 22/09/2018,Burnley,Bournemouth,4,0,H,A Taylor 53 | 22/09/2018,Cardiff,Man City,0,5,A,M Oliver 54 | 22/09/2018,Crystal Palace,Newcastle,0,0,D,A Marriner 55 | 22/09/2018,Fulham,Watford,1,1,D,M Atkinson 56 | 22/09/2018,Leicester,Huddersfield,3,1,H,D Coote 57 | 22/09/2018,Liverpool,Southampton,3,0,H,P Tierney 58 | 22/09/2018,Man United,Wolves,1,1,D,K Friend 59 | 23/09/2018,Arsenal,Everton,2,0,H,J Moss 60 | 23/09/2018,West Ham,Chelsea,0,0,D,M Dean 61 | 29/09/2018,Arsenal,Watford,2,0,H,A Taylor 62 | 29/09/2018,Chelsea,Liverpool,1,1,D,A Marriner 63 | 29/09/2018,Everton,Fulham,3,0,H,R East 64 | 29/09/2018,Huddersfield,Tottenham,0,2,A,C Pawson 65 | 29/09/2018,Man City,Brighton,2,0,H,L Mason 66 | 29/09/2018,Newcastle,Leicester,0,2,A,S Hooper 67 | 29/09/2018,West Ham,Man United,3,1,H,M Oliver 68 | 29/09/2018,Wolves,Southampton,2,0,H,S Attwell 69 | 30/09/2018,Cardiff,Burnley,1,2,A,M Atkinson 70 | 01/10/2018,Bournemouth,Crystal Palace,2,1,H,M Dean 71 | 05/10/2018,Brighton,West Ham,1,0,H,K Friend 72 | 06/10/2018,Burnley,Huddersfield,1,1,D,C Kavanagh 73 | 06/10/2018,Crystal Palace,Wolves,0,1,A,M Oliver 74 | 06/10/2018,Leicester,Everton,1,2,A,A Marriner 75 | 06/10/2018,Man United,Newcastle,3,2,H,A Taylor 76 | 06/10/2018,Tottenham,Cardiff,1,0,H,M Dean 77 | 06/10/2018,Watford,Bournemouth,0,4,A,J Moss 78 | 07/10/2018,Fulham,Arsenal,1,5,A,P Tierney 79 | 07/10/2018,Liverpool,Man City,0,0,D,M Atkinson 80 | 07/10/2018,Southampton,Chelsea,0,3,A,C Pawson 81 | 20/10/2018,Bournemouth,Southampton,0,0,D,L Probert 82 | 20/10/2018,Cardiff,Fulham,4,2,H,K Friend 83 | 20/10/2018,Chelsea,Man United,2,2,D,M Dean 84 | 20/10/2018,Huddersfield,Liverpool,0,1,A,M Oliver 85 | 20/10/2018,Man City,Burnley,5,0,H,J Moss 86 | 20/10/2018,Newcastle,Brighton,0,1,A,A Marriner 87 | 20/10/2018,West Ham,Tottenham,0,1,A,M Atkinson 88 | 20/10/2018,Wolves,Watford,0,2,A,L Mason 89 | 21/10/2018,Everton,Crystal Palace,2,0,H,A Taylor 90 | 22/10/2018,Arsenal,Leicester,3,1,H,C Kavanagh 91 | 27/10/2018,Brighton,Wolves,1,0,H,A Taylor 92 | 27/10/2018,Fulham,Bournemouth,0,3,A,A Marriner 93 | 27/10/2018,Leicester,West Ham,1,1,D,M Oliver 94 | 27/10/2018,Liverpool,Cardiff,4,1,H,S Attwell 95 | 27/10/2018,Southampton,Newcastle,0,0,D,C Kavanagh 96 | 27/10/2018,Watford,Huddersfield,3,0,H,M Dean 97 | 28/10/2018,Burnley,Chelsea,0,4,A,C Pawson 98 | 28/10/2018,Crystal Palace,Arsenal,2,2,D,M Atkinson 99 | 28/10/2018,Man United,Everton,2,1,H,J Moss 100 | 29/10/2018,Tottenham,Man City,0,1,A,K Friend 101 | 03/11/2018,Arsenal,Liverpool,1,1,D,A Marriner 102 | 03/11/2018,Bournemouth,Man United,1,2,A,P Tierney 103 | 03/11/2018,Cardiff,Leicester,0,1,A,L Probert 104 | 03/11/2018,Everton,Brighton,3,1,H,D Coote 105 | 03/11/2018,Newcastle,Watford,1,0,H,C Pawson 106 | 03/11/2018,West Ham,Burnley,4,2,H,R East 107 | 03/11/2018,Wolves,Tottenham,2,3,A,M Dean 108 | 04/11/2018,Chelsea,Crystal Palace,3,1,H,M Oliver 109 | 04/11/2018,Man City,Southampton,6,1,H,L Mason 110 | 05/11/2018,Huddersfield,Fulham,1,0,H,A Taylor 111 | 10/11/2018,Cardiff,Brighton,2,1,H,M Atkinson 112 | 10/11/2018,Crystal Palace,Tottenham,0,1,A,J Moss 113 | 10/11/2018,Huddersfield,West Ham,1,1,D,C Kavanagh 114 | 10/11/2018,Leicester,Burnley,0,0,D,M Dean 115 | 10/11/2018,Newcastle,Bournemouth,2,1,H,L Probert 116 | 10/11/2018,Southampton,Watford,1,1,D,S Hooper 117 | 11/11/2018,Arsenal,Wolves,1,1,D,S Attwell 118 | 11/11/2018,Chelsea,Everton,0,0,D,K Friend 119 | 11/11/2018,Liverpool,Fulham,2,0,H,P Tierney 120 | 11/11/2018,Man City,Man United,3,1,H,A Taylor 121 | 24/11/2018,Brighton,Leicester,1,1,D,C Kavanagh 122 | 24/11/2018,Everton,Cardiff,1,0,H,P Tierney 123 | 24/11/2018,Fulham,Southampton,3,2,H,M Oliver 124 | 24/11/2018,Man United,Crystal Palace,0,0,D,L Mason 125 | 24/11/2018,Tottenham,Chelsea,3,1,H,M Atkinson 126 | 24/11/2018,Watford,Liverpool,0,3,A,J Moss 127 | 24/11/2018,West Ham,Man City,0,4,A,A Marriner 128 | 25/11/2018,Bournemouth,Arsenal,1,2,A,C Pawson 129 | 25/11/2018,Wolves,Huddersfield,0,2,A,K Friend 130 | 26/11/2018,Burnley,Newcastle,1,2,A,A Taylor 131 | 30/11/2018,Cardiff,Wolves,2,1,H,A Marriner 132 | 01/12/2018,Crystal Palace,Burnley,2,0,H,L Probert 133 | 01/12/2018,Huddersfield,Brighton,1,2,A,M Oliver 134 | 01/12/2018,Leicester,Watford,2,0,H,G Scott 135 | 01/12/2018,Man City,Bournemouth,3,1,H,S Attwell 136 | 01/12/2018,Newcastle,West Ham,0,3,A,P Tierney 137 | 01/12/2018,Southampton,Man United,2,2,D,K Friend 138 | 02/12/2018,Arsenal,Tottenham,4,2,H,M Dean 139 | 02/12/2018,Chelsea,Fulham,2,0,H,C Pawson 140 | 02/12/2018,Liverpool,Everton,1,0,H,C Kavanagh 141 | 04/12/2018,Bournemouth,Huddersfield,2,1,H,R East 142 | 04/12/2018,Brighton,Crystal Palace,3,1,H,K Friend 143 | 04/12/2018,Watford,Man City,1,2,A,P Tierney 144 | 04/12/2018,West Ham,Cardiff,3,1,H,G Scott 145 | 05/12/2018,Burnley,Liverpool,1,3,A,S Attwell 146 | 05/12/2018,Everton,Newcastle,1,1,D,L Mason 147 | 05/12/2018,Fulham,Leicester,1,1,D,D Coote 148 | 05/12/2018,Man United,Arsenal,2,2,D,A Marriner 149 | 05/12/2018,Tottenham,Southampton,3,1,H,A Taylor 150 | 05/12/2018,Wolves,Chelsea,2,1,H,J Moss 151 | 08/12/2018,Arsenal,Huddersfield,1,0,H,P Tierney 152 | 08/12/2018,Bournemouth,Liverpool,0,4,A,L Mason 153 | 08/12/2018,Burnley,Brighton,1,0,H,M Atkinson 154 | 08/12/2018,Cardiff,Southampton,1,0,H,J Moss 155 | 08/12/2018,Chelsea,Man City,2,0,H,M Oliver 156 | 08/12/2018,Leicester,Tottenham,0,2,A,C Pawson 157 | 08/12/2018,Man United,Fulham,4,1,H,L Probert 158 | 08/12/2018,West Ham,Crystal Palace,3,2,H,A Taylor 159 | 09/12/2018,Newcastle,Wolves,1,2,A,M Dean 160 | 10/12/2018,Everton,Watford,2,2,D,K Friend 161 | 15/12/2018,Crystal Palace,Leicester,1,0,H,M Oliver 162 | 15/12/2018,Fulham,West Ham,0,2,A,M Dean 163 | 15/12/2018,Huddersfield,Newcastle,0,1,A,A Taylor 164 | 15/12/2018,Man City,Everton,3,1,H,C Pawson 165 | 15/12/2018,Tottenham,Burnley,1,0,H,G Scott 166 | 15/12/2018,Watford,Cardiff,3,2,H,A Madley 167 | 15/12/2018,Wolves,Bournemouth,2,0,H,S Hooper 168 | 16/12/2018,Brighton,Chelsea,1,2,A,S Attwell 169 | 16/12/2018,Liverpool,Man United,3,1,H,M Atkinson 170 | 16/12/2018,Southampton,Arsenal,3,2,H,C Kavanagh 171 | 21/12/2018,Wolves,Liverpool,0,2,A,C Pawson 172 | 22/12/2018,Arsenal,Burnley,3,1,H,K Friend 173 | 22/12/2018,Bournemouth,Brighton,2,0,H,M Dean 174 | 22/12/2018,Cardiff,Man United,1,5,A,M Oliver 175 | 22/12/2018,Chelsea,Leicester,0,1,A,L Probert 176 | 22/12/2018,Huddersfield,Southampton,1,3,A,S Attwell 177 | 22/12/2018,Man City,Crystal Palace,2,3,A,A Marriner 178 | 22/12/2018,Newcastle,Fulham,0,0,D,M Atkinson 179 | 22/12/2018,West Ham,Watford,0,2,A,L Mason 180 | 23/12/2018,Everton,Tottenham,2,6,A,P Tierney 181 | 26/12/2018,Brighton,Arsenal,1,1,D,A Taylor 182 | 26/12/2018,Burnley,Everton,1,5,A,M Oliver 183 | 26/12/2018,Crystal Palace,Cardiff,0,0,D,L Probert 184 | 26/12/2018,Fulham,Wolves,1,1,D,A Marriner 185 | 26/12/2018,Leicester,Man City,2,1,H,M Dean 186 | 26/12/2018,Liverpool,Newcastle,4,0,H,G Scott 187 | 26/12/2018,Man United,Huddersfield,3,1,H,J Moss 188 | 26/12/2018,Tottenham,Bournemouth,5,0,H,C Kavanagh 189 | 26/12/2018,Watford,Chelsea,1,2,A,M Atkinson 190 | 27/12/2018,Southampton,West Ham,1,2,A,C Pawson 191 | 29/12/2018,Brighton,Everton,1,0,H,A Madley 192 | 29/12/2018,Fulham,Huddersfield,1,0,H,K Friend 193 | 29/12/2018,Leicester,Cardiff,0,1,A,S Hooper 194 | 29/12/2018,Liverpool,Arsenal,5,1,H,M Oliver 195 | 29/12/2018,Tottenham,Wolves,1,3,A,S Attwell 196 | 29/12/2018,Watford,Newcastle,1,1,D,R East 197 | 30/12/2018,Burnley,West Ham,2,0,H,D Coote 198 | 30/12/2018,Crystal Palace,Chelsea,0,1,A,C Pawson 199 | 30/12/2018,Man United,Bournemouth,4,1,H,L Mason 200 | 30/12/2018,Southampton,Man City,1,3,A,P Tierney 201 | 01/01/2019,Arsenal,Fulham,4,1,H,G Scott 202 | 01/01/2019,Cardiff,Tottenham,0,3,A,K Friend 203 | 01/01/2019,Everton,Leicester,0,1,A,M Atkinson 204 | 02/01/2019,Bournemouth,Watford,3,3,D,D Coote 205 | 02/01/2019,Chelsea,Southampton,0,0,D,J Moss 206 | 02/01/2019,Huddersfield,Burnley,1,2,A,M Dean 207 | 02/01/2019,Newcastle,Man United,0,2,A,A Marriner 208 | 02/01/2019,West Ham,Brighton,2,2,D,C Kavanagh 209 | 02/01/2019,Wolves,Crystal Palace,0,2,A,R East 210 | 03/01/2019,Man City,Liverpool,2,1,H,A Taylor 211 | 12/01/2019,Brighton,Liverpool,0,1,A,K Friend 212 | 12/01/2019,Burnley,Fulham,2,1,H,M Atkinson 213 | 12/01/2019,Cardiff,Huddersfield,0,0,D,L Mason 214 | 12/01/2019,Chelsea,Newcastle,2,1,H,C Kavanagh 215 | 12/01/2019,Crystal Palace,Watford,1,2,A,P Tierney 216 | 12/01/2019,Leicester,Southampton,1,2,A,M Oliver 217 | 12/01/2019,West Ham,Arsenal,1,0,H,J Moss 218 | 13/01/2019,Everton,Bournemouth,2,0,H,A Taylor 219 | 13/01/2019,Tottenham,Man United,0,1,A,M Dean 220 | 14/01/2019,Man City,Wolves,3,0,H,C Pawson 221 | 19/01/2019,Arsenal,Chelsea,2,0,H,A Taylor 222 | 19/01/2019,Bournemouth,West Ham,2,0,H,S Hooper 223 | 19/01/2019,Liverpool,Crystal Palace,4,3,H,J Moss 224 | 19/01/2019,Man United,Brighton,2,1,H,P Tierney 225 | 19/01/2019,Newcastle,Cardiff,3,0,H,S Attwell 226 | 19/01/2019,Southampton,Everton,2,1,H,G Scott 227 | 19/01/2019,Watford,Burnley,0,0,D,M Oliver 228 | 19/01/2019,Wolves,Leicester,4,3,H,C Kavanagh 229 | 20/01/2019,Fulham,Tottenham,1,2,A,C Pawson 230 | 20/01/2019,Huddersfield,Man City,0,3,A,A Marriner 231 | 29/01/2019,Arsenal,Cardiff,2,1,H,M Dean 232 | 29/01/2019,Fulham,Brighton,4,2,H,L Probert 233 | 29/01/2019,Huddersfield,Everton,0,1,A,S Attwell 234 | 29/01/2019,Man United,Burnley,2,2,D,J Moss 235 | 29/01/2019,Newcastle,Man City,2,1,H,P Tierney 236 | 29/01/2019,Wolves,West Ham,3,0,H,D Coote 237 | 30/01/2019,Bournemouth,Chelsea,4,0,H,R East 238 | 30/01/2019,Liverpool,Leicester,1,1,D,M Atkinson 239 | 30/01/2019,Southampton,Crystal Palace,1,1,D,A Marriner 240 | 30/01/2019,Tottenham,Watford,2,1,H,G Scott 241 | 02/02/2019,Brighton,Watford,0,0,D,S Hooper 242 | 02/02/2019,Burnley,Southampton,1,1,D,A Taylor 243 | 02/02/2019,Cardiff,Bournemouth,2,0,H,J Moss 244 | 02/02/2019,Chelsea,Huddersfield,5,0,H,P Tierney 245 | 02/02/2019,Crystal Palace,Fulham,2,0,H,M Oliver 246 | 02/02/2019,Everton,Wolves,1,3,A,L Mason 247 | 02/02/2019,Tottenham,Newcastle,1,0,H,A Marriner 248 | 03/02/2019,Leicester,Man United,0,1,A,M Dean 249 | 03/02/2019,Man City,Arsenal,3,1,H,M Atkinson 250 | 04/02/2019,West Ham,Liverpool,1,1,D,K Friend 251 | 06/02/2019,Everton,Man City,0,2,A,C Pawson 252 | 09/02/2019,Brighton,Burnley,1,3,A,S Attwell 253 | 09/02/2019,Crystal Palace,West Ham,1,1,D,C Pawson 254 | 09/02/2019,Fulham,Man United,0,3,A,P Tierney 255 | 09/02/2019,Huddersfield,Arsenal,1,2,A,J Moss 256 | 09/02/2019,Liverpool,Bournemouth,3,0,H,A Taylor 257 | 09/02/2019,Southampton,Cardiff,1,2,A,M Atkinson 258 | 09/02/2019,Watford,Everton,1,0,H,L Probert 259 | 10/02/2019,Man City,Chelsea,6,0,H,M Dean 260 | 10/02/2019,Tottenham,Leicester,3,1,H,M Oliver 261 | 11/02/2019,Wolves,Newcastle,1,1,D,G Scott 262 | 22/02/2019,Cardiff,Watford,1,5,A,S Hooper 263 | 22/02/2019,West Ham,Fulham,3,1,H,L Mason 264 | 23/02/2019,Bournemouth,Wolves,1,1,D,R East 265 | 23/02/2019,Burnley,Tottenham,2,1,H,M Dean 266 | 23/02/2019,Leicester,Crystal Palace,1,4,A,A Taylor 267 | 23/02/2019,Newcastle,Huddersfield,2,0,H,K Friend 268 | 24/02/2019,Arsenal,Southampton,2,0,H,G Scott 269 | 24/02/2019,Man United,Liverpool,0,0,D,M Oliver 270 | 26/02/2019,Cardiff,Everton,0,3,A,K Friend 271 | 26/02/2019,Huddersfield,Wolves,1,0,H,D Coote 272 | 26/02/2019,Leicester,Brighton,2,1,H,L Probert 273 | 26/02/2019,Newcastle,Burnley,2,0,H,C Pawson 274 | 27/02/2019,Arsenal,Bournemouth,5,1,H,C Kavanagh 275 | 27/02/2019,Chelsea,Tottenham,2,0,H,A Marriner 276 | 27/02/2019,Crystal Palace,Man United,1,3,A,M Atkinson 277 | 27/02/2019,Liverpool,Watford,5,0,H,G Scott 278 | 27/02/2019,Man City,West Ham,1,0,H,S Attwell 279 | 27/02/2019,Southampton,Fulham,2,0,H,A Taylor 280 | 02/03/2019,Bournemouth,Man City,0,1,A,K Friend 281 | 02/03/2019,Brighton,Huddersfield,1,0,H,M Dean 282 | 02/03/2019,Burnley,Crystal Palace,1,3,A,L Probert 283 | 02/03/2019,Man United,Southampton,3,2,H,S Attwell 284 | 02/03/2019,Tottenham,Arsenal,1,1,D,A Taylor 285 | 02/03/2019,West Ham,Newcastle,2,0,H,C Kavanagh 286 | 02/03/2019,Wolves,Cardiff,2,0,H,A Marriner 287 | 03/03/2019,Everton,Liverpool,0,0,D,M Atkinson 288 | 03/03/2019,Fulham,Chelsea,1,2,A,G Scott 289 | 03/03/2019,Watford,Leicester,2,1,H,J Moss 290 | 09/03/2019,Cardiff,West Ham,2,0,H,G Scott 291 | 09/03/2019,Crystal Palace,Brighton,1,2,A,C Pawson 292 | 09/03/2019,Huddersfield,Bournemouth,0,2,A,A Taylor 293 | 09/03/2019,Leicester,Fulham,3,1,H,D Coote 294 | 09/03/2019,Man City,Watford,3,1,H,P Tierney 295 | 09/03/2019,Newcastle,Everton,3,2,H,L Mason 296 | 09/03/2019,Southampton,Tottenham,2,1,H,K Friend 297 | 10/03/2019,Arsenal,Man United,2,0,H,J Moss 298 | 10/03/2019,Chelsea,Wolves,1,1,D,M Oliver 299 | 10/03/2019,Liverpool,Burnley,4,2,H,A Marriner 300 | 16/03/2019,Bournemouth,Newcastle,2,2,D,M Dean 301 | 16/03/2019,Burnley,Leicester,1,2,A,M Oliver 302 | 16/03/2019,West Ham,Huddersfield,4,3,H,J Moss 303 | 17/03/2019,Everton,Chelsea,2,0,H,A Taylor 304 | 17/03/2019,Fulham,Liverpool,1,2,A,C Pawson 305 | 30/03/2019,Brighton,Southampton,0,1,A,M Oliver 306 | 30/03/2019,Burnley,Wolves,2,0,H,C Kavanagh 307 | 30/03/2019,Crystal Palace,Huddersfield,2,0,H,L Probert 308 | 30/03/2019,Fulham,Man City,0,2,A,K Friend 309 | 30/03/2019,Leicester,Bournemouth,2,0,H,L Mason 310 | 30/03/2019,Man United,Watford,2,1,H,S Attwell 311 | 30/03/2019,West Ham,Everton,0,2,A,P Tierney 312 | 31/03/2019,Cardiff,Chelsea,1,2,A,C Pawson 313 | 31/03/2019,Liverpool,Tottenham,2,1,H,M Atkinson 314 | 01/04/2019,Arsenal,Newcastle,2,0,H,A Taylor 315 | 02/04/2019,Watford,Fulham,4,1,H,R East 316 | 02/04/2019,Wolves,Man United,2,1,H,M Dean 317 | 03/04/2019,Chelsea,Brighton,3,0,H,G Scott 318 | 03/04/2019,Man City,Cardiff,2,0,H,J Moss 319 | 03/04/2019,Tottenham,Crystal Palace,2,0,H,A Marriner 320 | 05/04/2019,Southampton,Liverpool,1,3,A,P Tierney 321 | 06/04/2019,Bournemouth,Burnley,1,3,A,M Atkinson 322 | 06/04/2019,Huddersfield,Leicester,1,4,A,D Coote 323 | 06/04/2019,Newcastle,Crystal Palace,0,1,A,S Attwell 324 | 07/04/2019,Everton,Arsenal,1,0,H,K Friend 325 | -------------------------------------------------------------------------------- /sort/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sort", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 11 | }, 12 | "ansi-align": { 13 | "version": "2.0.0", 14 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", 15 | "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", 16 | "requires": { 17 | "string-width": "^2.0.0" 18 | }, 19 | "dependencies": { 20 | "ansi-regex": { 21 | "version": "3.0.0", 22 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 23 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 24 | }, 25 | "string-width": { 26 | "version": "2.1.1", 27 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 28 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 29 | "requires": { 30 | "is-fullwidth-code-point": "^2.0.0", 31 | "strip-ansi": "^4.0.0" 32 | } 33 | }, 34 | "strip-ansi": { 35 | "version": "4.0.0", 36 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 37 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 38 | "requires": { 39 | "ansi-regex": "^3.0.0" 40 | } 41 | } 42 | } 43 | }, 44 | "ansi-regex": { 45 | "version": "4.1.0", 46 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 47 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 48 | }, 49 | "ansi-styles": { 50 | "version": "3.2.1", 51 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 52 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 53 | "requires": { 54 | "color-convert": "^1.9.0" 55 | } 56 | }, 57 | "anymatch": { 58 | "version": "3.1.1", 59 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 60 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 61 | "requires": { 62 | "normalize-path": "^3.0.0", 63 | "picomatch": "^2.0.4" 64 | } 65 | }, 66 | "balanced-match": { 67 | "version": "1.0.0", 68 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 69 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 70 | }, 71 | "binary-extensions": { 72 | "version": "2.0.0", 73 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 74 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" 75 | }, 76 | "boxen": { 77 | "version": "1.3.0", 78 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", 79 | "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", 80 | "requires": { 81 | "ansi-align": "^2.0.0", 82 | "camelcase": "^4.0.0", 83 | "chalk": "^2.0.1", 84 | "cli-boxes": "^1.0.0", 85 | "string-width": "^2.0.0", 86 | "term-size": "^1.2.0", 87 | "widest-line": "^2.0.0" 88 | }, 89 | "dependencies": { 90 | "ansi-regex": { 91 | "version": "3.0.0", 92 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 93 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 94 | }, 95 | "camelcase": { 96 | "version": "4.1.0", 97 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 98 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" 99 | }, 100 | "string-width": { 101 | "version": "2.1.1", 102 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 103 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 104 | "requires": { 105 | "is-fullwidth-code-point": "^2.0.0", 106 | "strip-ansi": "^4.0.0" 107 | } 108 | }, 109 | "strip-ansi": { 110 | "version": "4.0.0", 111 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 112 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 113 | "requires": { 114 | "ansi-regex": "^3.0.0" 115 | } 116 | } 117 | } 118 | }, 119 | "brace-expansion": { 120 | "version": "1.1.11", 121 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 122 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 123 | "requires": { 124 | "balanced-match": "^1.0.0", 125 | "concat-map": "0.0.1" 126 | } 127 | }, 128 | "braces": { 129 | "version": "3.0.2", 130 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 131 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 132 | "requires": { 133 | "fill-range": "^7.0.1" 134 | } 135 | }, 136 | "camelcase": { 137 | "version": "5.3.1", 138 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 139 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 140 | }, 141 | "capture-stack-trace": { 142 | "version": "1.0.1", 143 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 144 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" 145 | }, 146 | "chalk": { 147 | "version": "2.4.2", 148 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 149 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 150 | "requires": { 151 | "ansi-styles": "^3.2.1", 152 | "escape-string-regexp": "^1.0.5", 153 | "supports-color": "^5.3.0" 154 | }, 155 | "dependencies": { 156 | "supports-color": { 157 | "version": "5.5.0", 158 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 159 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 160 | "requires": { 161 | "has-flag": "^3.0.0" 162 | } 163 | } 164 | } 165 | }, 166 | "chokidar": { 167 | "version": "3.3.1", 168 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", 169 | "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", 170 | "requires": { 171 | "anymatch": "~3.1.1", 172 | "braces": "~3.0.2", 173 | "fsevents": "~2.1.2", 174 | "glob-parent": "~5.1.0", 175 | "is-binary-path": "~2.1.0", 176 | "is-glob": "~4.0.1", 177 | "normalize-path": "~3.0.0", 178 | "readdirp": "~3.3.0" 179 | } 180 | }, 181 | "ci-info": { 182 | "version": "1.6.0", 183 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", 184 | "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" 185 | }, 186 | "cli-boxes": { 187 | "version": "1.0.0", 188 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", 189 | "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" 190 | }, 191 | "cliui": { 192 | "version": "5.0.0", 193 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 194 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 195 | "requires": { 196 | "string-width": "^3.1.0", 197 | "strip-ansi": "^5.2.0", 198 | "wrap-ansi": "^5.1.0" 199 | } 200 | }, 201 | "color-convert": { 202 | "version": "1.9.3", 203 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 204 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 205 | "requires": { 206 | "color-name": "1.1.3" 207 | } 208 | }, 209 | "color-name": { 210 | "version": "1.1.3", 211 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 212 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 213 | }, 214 | "concat-map": { 215 | "version": "0.0.1", 216 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 217 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 218 | }, 219 | "concurrently": { 220 | "version": "5.0.2", 221 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.0.2.tgz", 222 | "integrity": "sha512-iUNVI6PzKO0RVXV9pHWM0khvEbELxf3XLIoChaV6hHyoIaJuxQWZiOwlNysnJX5khsfvIK66+OJqRdbYrdsR1g==", 223 | "requires": { 224 | "chalk": "^2.4.2", 225 | "date-fns": "^2.0.1", 226 | "lodash": "^4.17.15", 227 | "read-pkg": "^4.0.1", 228 | "rxjs": "^6.5.2", 229 | "spawn-command": "^0.0.2-1", 230 | "supports-color": "^6.1.0", 231 | "tree-kill": "^1.2.2", 232 | "yargs": "^13.3.0" 233 | } 234 | }, 235 | "configstore": { 236 | "version": "3.1.2", 237 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", 238 | "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", 239 | "requires": { 240 | "dot-prop": "^4.1.0", 241 | "graceful-fs": "^4.1.2", 242 | "make-dir": "^1.0.0", 243 | "unique-string": "^1.0.0", 244 | "write-file-atomic": "^2.0.0", 245 | "xdg-basedir": "^3.0.0" 246 | } 247 | }, 248 | "create-error-class": { 249 | "version": "3.0.2", 250 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 251 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 252 | "requires": { 253 | "capture-stack-trace": "^1.0.0" 254 | } 255 | }, 256 | "cross-spawn": { 257 | "version": "5.1.0", 258 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 259 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 260 | "requires": { 261 | "lru-cache": "^4.0.1", 262 | "shebang-command": "^1.2.0", 263 | "which": "^1.2.9" 264 | } 265 | }, 266 | "crypto-random-string": { 267 | "version": "1.0.0", 268 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", 269 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" 270 | }, 271 | "date-fns": { 272 | "version": "2.8.1", 273 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.8.1.tgz", 274 | "integrity": "sha512-EL/C8IHvYRwAHYgFRse4MGAPSqlJVlOrhVYZ75iQBKrnv+ZedmYsgwH3t+BCDuZDXpoo07+q9j4qgSSOa7irJg==" 275 | }, 276 | "debug": { 277 | "version": "3.2.6", 278 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 279 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 280 | "requires": { 281 | "ms": "^2.1.1" 282 | } 283 | }, 284 | "decamelize": { 285 | "version": "1.2.0", 286 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 287 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 288 | }, 289 | "deep-extend": { 290 | "version": "0.6.0", 291 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 292 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 293 | }, 294 | "dot-prop": { 295 | "version": "4.2.0", 296 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 297 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", 298 | "requires": { 299 | "is-obj": "^1.0.0" 300 | } 301 | }, 302 | "duplexer3": { 303 | "version": "0.1.4", 304 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 305 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" 306 | }, 307 | "emoji-regex": { 308 | "version": "7.0.3", 309 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 310 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 311 | }, 312 | "error-ex": { 313 | "version": "1.3.2", 314 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 315 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 316 | "requires": { 317 | "is-arrayish": "^0.2.1" 318 | } 319 | }, 320 | "escape-string-regexp": { 321 | "version": "1.0.5", 322 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 323 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 324 | }, 325 | "execa": { 326 | "version": "0.7.0", 327 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 328 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 329 | "requires": { 330 | "cross-spawn": "^5.0.1", 331 | "get-stream": "^3.0.0", 332 | "is-stream": "^1.1.0", 333 | "npm-run-path": "^2.0.0", 334 | "p-finally": "^1.0.0", 335 | "signal-exit": "^3.0.0", 336 | "strip-eof": "^1.0.0" 337 | } 338 | }, 339 | "fill-range": { 340 | "version": "7.0.1", 341 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 342 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 343 | "requires": { 344 | "to-regex-range": "^5.0.1" 345 | } 346 | }, 347 | "find-up": { 348 | "version": "3.0.0", 349 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 350 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 351 | "requires": { 352 | "locate-path": "^3.0.0" 353 | } 354 | }, 355 | "fsevents": { 356 | "version": "2.1.2", 357 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 358 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 359 | "optional": true 360 | }, 361 | "get-caller-file": { 362 | "version": "2.0.5", 363 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 364 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 365 | }, 366 | "get-stream": { 367 | "version": "3.0.0", 368 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 369 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 370 | }, 371 | "glob-parent": { 372 | "version": "5.1.0", 373 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", 374 | "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", 375 | "requires": { 376 | "is-glob": "^4.0.1" 377 | } 378 | }, 379 | "global-dirs": { 380 | "version": "0.1.1", 381 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", 382 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", 383 | "requires": { 384 | "ini": "^1.3.4" 385 | } 386 | }, 387 | "got": { 388 | "version": "6.7.1", 389 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", 390 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", 391 | "requires": { 392 | "create-error-class": "^3.0.0", 393 | "duplexer3": "^0.1.4", 394 | "get-stream": "^3.0.0", 395 | "is-redirect": "^1.0.0", 396 | "is-retry-allowed": "^1.0.0", 397 | "is-stream": "^1.0.0", 398 | "lowercase-keys": "^1.0.0", 399 | "safe-buffer": "^5.0.1", 400 | "timed-out": "^4.0.0", 401 | "unzip-response": "^2.0.1", 402 | "url-parse-lax": "^1.0.0" 403 | } 404 | }, 405 | "graceful-fs": { 406 | "version": "4.2.3", 407 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 408 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" 409 | }, 410 | "has-flag": { 411 | "version": "3.0.0", 412 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 413 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 414 | }, 415 | "hosted-git-info": { 416 | "version": "2.8.5", 417 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", 418 | "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" 419 | }, 420 | "ignore-by-default": { 421 | "version": "1.0.1", 422 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 423 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" 424 | }, 425 | "import-lazy": { 426 | "version": "2.1.0", 427 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 428 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" 429 | }, 430 | "imurmurhash": { 431 | "version": "0.1.4", 432 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 433 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 434 | }, 435 | "ini": { 436 | "version": "1.3.5", 437 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 438 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 439 | }, 440 | "is-arrayish": { 441 | "version": "0.2.1", 442 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 443 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 444 | }, 445 | "is-binary-path": { 446 | "version": "2.1.0", 447 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 448 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 449 | "requires": { 450 | "binary-extensions": "^2.0.0" 451 | } 452 | }, 453 | "is-ci": { 454 | "version": "1.2.1", 455 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", 456 | "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", 457 | "requires": { 458 | "ci-info": "^1.5.0" 459 | } 460 | }, 461 | "is-extglob": { 462 | "version": "2.1.1", 463 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 464 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 465 | }, 466 | "is-fullwidth-code-point": { 467 | "version": "2.0.0", 468 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 469 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 470 | }, 471 | "is-glob": { 472 | "version": "4.0.1", 473 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 474 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 475 | "requires": { 476 | "is-extglob": "^2.1.1" 477 | } 478 | }, 479 | "is-installed-globally": { 480 | "version": "0.1.0", 481 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", 482 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", 483 | "requires": { 484 | "global-dirs": "^0.1.0", 485 | "is-path-inside": "^1.0.0" 486 | } 487 | }, 488 | "is-npm": { 489 | "version": "1.0.0", 490 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", 491 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" 492 | }, 493 | "is-number": { 494 | "version": "7.0.0", 495 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 496 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 497 | }, 498 | "is-obj": { 499 | "version": "1.0.1", 500 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 501 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" 502 | }, 503 | "is-path-inside": { 504 | "version": "1.0.1", 505 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 506 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 507 | "requires": { 508 | "path-is-inside": "^1.0.1" 509 | } 510 | }, 511 | "is-redirect": { 512 | "version": "1.0.0", 513 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 514 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" 515 | }, 516 | "is-retry-allowed": { 517 | "version": "1.2.0", 518 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 519 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" 520 | }, 521 | "is-stream": { 522 | "version": "1.1.0", 523 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 524 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 525 | }, 526 | "isexe": { 527 | "version": "2.0.0", 528 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 529 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 530 | }, 531 | "json-parse-better-errors": { 532 | "version": "1.0.2", 533 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 534 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" 535 | }, 536 | "latest-version": { 537 | "version": "3.1.0", 538 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", 539 | "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", 540 | "requires": { 541 | "package-json": "^4.0.0" 542 | } 543 | }, 544 | "locate-path": { 545 | "version": "3.0.0", 546 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 547 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 548 | "requires": { 549 | "p-locate": "^3.0.0", 550 | "path-exists": "^3.0.0" 551 | } 552 | }, 553 | "lodash": { 554 | "version": "4.17.15", 555 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 556 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" 557 | }, 558 | "lowercase-keys": { 559 | "version": "1.0.1", 560 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 561 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" 562 | }, 563 | "lru-cache": { 564 | "version": "4.1.5", 565 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 566 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 567 | "requires": { 568 | "pseudomap": "^1.0.2", 569 | "yallist": "^2.1.2" 570 | } 571 | }, 572 | "make-dir": { 573 | "version": "1.3.0", 574 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 575 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 576 | "requires": { 577 | "pify": "^3.0.0" 578 | } 579 | }, 580 | "minimatch": { 581 | "version": "3.0.4", 582 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 583 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 584 | "requires": { 585 | "brace-expansion": "^1.1.7" 586 | } 587 | }, 588 | "minimist": { 589 | "version": "1.2.0", 590 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 591 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 592 | }, 593 | "ms": { 594 | "version": "2.1.2", 595 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 596 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 597 | }, 598 | "nodemon": { 599 | "version": "2.0.2", 600 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz", 601 | "integrity": "sha512-GWhYPMfde2+M0FsHnggIHXTqPDHXia32HRhh6H0d75Mt9FKUoCBvumNHr7LdrpPBTKxsWmIEOjoN+P4IU6Hcaw==", 602 | "requires": { 603 | "chokidar": "^3.2.2", 604 | "debug": "^3.2.6", 605 | "ignore-by-default": "^1.0.1", 606 | "minimatch": "^3.0.4", 607 | "pstree.remy": "^1.1.7", 608 | "semver": "^5.7.1", 609 | "supports-color": "^5.5.0", 610 | "touch": "^3.1.0", 611 | "undefsafe": "^2.0.2", 612 | "update-notifier": "^2.5.0" 613 | }, 614 | "dependencies": { 615 | "supports-color": { 616 | "version": "5.5.0", 617 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 618 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 619 | "requires": { 620 | "has-flag": "^3.0.0" 621 | } 622 | } 623 | } 624 | }, 625 | "nopt": { 626 | "version": "1.0.10", 627 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 628 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 629 | "requires": { 630 | "abbrev": "1" 631 | } 632 | }, 633 | "normalize-package-data": { 634 | "version": "2.5.0", 635 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 636 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 637 | "requires": { 638 | "hosted-git-info": "^2.1.4", 639 | "resolve": "^1.10.0", 640 | "semver": "2 || 3 || 4 || 5", 641 | "validate-npm-package-license": "^3.0.1" 642 | } 643 | }, 644 | "normalize-path": { 645 | "version": "3.0.0", 646 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 647 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 648 | }, 649 | "npm-run-path": { 650 | "version": "2.0.2", 651 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 652 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 653 | "requires": { 654 | "path-key": "^2.0.0" 655 | } 656 | }, 657 | "p-finally": { 658 | "version": "1.0.0", 659 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 660 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 661 | }, 662 | "p-limit": { 663 | "version": "2.2.1", 664 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", 665 | "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", 666 | "requires": { 667 | "p-try": "^2.0.0" 668 | } 669 | }, 670 | "p-locate": { 671 | "version": "3.0.0", 672 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 673 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 674 | "requires": { 675 | "p-limit": "^2.0.0" 676 | } 677 | }, 678 | "p-try": { 679 | "version": "2.2.0", 680 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 681 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 682 | }, 683 | "package-json": { 684 | "version": "4.0.1", 685 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", 686 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", 687 | "requires": { 688 | "got": "^6.7.1", 689 | "registry-auth-token": "^3.0.1", 690 | "registry-url": "^3.0.3", 691 | "semver": "^5.1.0" 692 | } 693 | }, 694 | "parse-json": { 695 | "version": "4.0.0", 696 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 697 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 698 | "requires": { 699 | "error-ex": "^1.3.1", 700 | "json-parse-better-errors": "^1.0.1" 701 | } 702 | }, 703 | "path-exists": { 704 | "version": "3.0.0", 705 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 706 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 707 | }, 708 | "path-is-inside": { 709 | "version": "1.0.2", 710 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 711 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" 712 | }, 713 | "path-key": { 714 | "version": "2.0.1", 715 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 716 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 717 | }, 718 | "path-parse": { 719 | "version": "1.0.6", 720 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 721 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 722 | }, 723 | "picomatch": { 724 | "version": "2.1.1", 725 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", 726 | "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" 727 | }, 728 | "pify": { 729 | "version": "3.0.0", 730 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 731 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 732 | }, 733 | "prepend-http": { 734 | "version": "1.0.4", 735 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 736 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" 737 | }, 738 | "pseudomap": { 739 | "version": "1.0.2", 740 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 741 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 742 | }, 743 | "pstree.remy": { 744 | "version": "1.1.7", 745 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", 746 | "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" 747 | }, 748 | "rc": { 749 | "version": "1.2.8", 750 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 751 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 752 | "requires": { 753 | "deep-extend": "^0.6.0", 754 | "ini": "~1.3.0", 755 | "minimist": "^1.2.0", 756 | "strip-json-comments": "~2.0.1" 757 | } 758 | }, 759 | "read-pkg": { 760 | "version": "4.0.1", 761 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", 762 | "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", 763 | "requires": { 764 | "normalize-package-data": "^2.3.2", 765 | "parse-json": "^4.0.0", 766 | "pify": "^3.0.0" 767 | } 768 | }, 769 | "readdirp": { 770 | "version": "3.3.0", 771 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", 772 | "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", 773 | "requires": { 774 | "picomatch": "^2.0.7" 775 | } 776 | }, 777 | "registry-auth-token": { 778 | "version": "3.4.0", 779 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", 780 | "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", 781 | "requires": { 782 | "rc": "^1.1.6", 783 | "safe-buffer": "^5.0.1" 784 | } 785 | }, 786 | "registry-url": { 787 | "version": "3.1.0", 788 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 789 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", 790 | "requires": { 791 | "rc": "^1.0.1" 792 | } 793 | }, 794 | "require-directory": { 795 | "version": "2.1.1", 796 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 797 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 798 | }, 799 | "require-main-filename": { 800 | "version": "2.0.0", 801 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 802 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 803 | }, 804 | "resolve": { 805 | "version": "1.14.1", 806 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", 807 | "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", 808 | "requires": { 809 | "path-parse": "^1.0.6" 810 | } 811 | }, 812 | "rxjs": { 813 | "version": "6.5.3", 814 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", 815 | "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", 816 | "requires": { 817 | "tslib": "^1.9.0" 818 | } 819 | }, 820 | "safe-buffer": { 821 | "version": "5.2.0", 822 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 823 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 824 | }, 825 | "semver": { 826 | "version": "5.7.1", 827 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 828 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 829 | }, 830 | "semver-diff": { 831 | "version": "2.1.0", 832 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", 833 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", 834 | "requires": { 835 | "semver": "^5.0.3" 836 | } 837 | }, 838 | "set-blocking": { 839 | "version": "2.0.0", 840 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 841 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 842 | }, 843 | "shebang-command": { 844 | "version": "1.2.0", 845 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 846 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 847 | "requires": { 848 | "shebang-regex": "^1.0.0" 849 | } 850 | }, 851 | "shebang-regex": { 852 | "version": "1.0.0", 853 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 854 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 855 | }, 856 | "signal-exit": { 857 | "version": "3.0.2", 858 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 859 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 860 | }, 861 | "spawn-command": { 862 | "version": "0.0.2-1", 863 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", 864 | "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=" 865 | }, 866 | "spdx-correct": { 867 | "version": "3.1.0", 868 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 869 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 870 | "requires": { 871 | "spdx-expression-parse": "^3.0.0", 872 | "spdx-license-ids": "^3.0.0" 873 | } 874 | }, 875 | "spdx-exceptions": { 876 | "version": "2.2.0", 877 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 878 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" 879 | }, 880 | "spdx-expression-parse": { 881 | "version": "3.0.0", 882 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 883 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 884 | "requires": { 885 | "spdx-exceptions": "^2.1.0", 886 | "spdx-license-ids": "^3.0.0" 887 | } 888 | }, 889 | "spdx-license-ids": { 890 | "version": "3.0.5", 891 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 892 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" 893 | }, 894 | "string-width": { 895 | "version": "3.1.0", 896 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 897 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 898 | "requires": { 899 | "emoji-regex": "^7.0.1", 900 | "is-fullwidth-code-point": "^2.0.0", 901 | "strip-ansi": "^5.1.0" 902 | } 903 | }, 904 | "strip-ansi": { 905 | "version": "5.2.0", 906 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 907 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 908 | "requires": { 909 | "ansi-regex": "^4.1.0" 910 | } 911 | }, 912 | "strip-eof": { 913 | "version": "1.0.0", 914 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 915 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 916 | }, 917 | "strip-json-comments": { 918 | "version": "2.0.1", 919 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 920 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 921 | }, 922 | "supports-color": { 923 | "version": "6.1.0", 924 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 925 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 926 | "requires": { 927 | "has-flag": "^3.0.0" 928 | } 929 | }, 930 | "term-size": { 931 | "version": "1.2.0", 932 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", 933 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", 934 | "requires": { 935 | "execa": "^0.7.0" 936 | } 937 | }, 938 | "timed-out": { 939 | "version": "4.0.1", 940 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 941 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" 942 | }, 943 | "to-regex-range": { 944 | "version": "5.0.1", 945 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 946 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 947 | "requires": { 948 | "is-number": "^7.0.0" 949 | } 950 | }, 951 | "touch": { 952 | "version": "3.1.0", 953 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 954 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 955 | "requires": { 956 | "nopt": "~1.0.10" 957 | } 958 | }, 959 | "tree-kill": { 960 | "version": "1.2.2", 961 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 962 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" 963 | }, 964 | "tslib": { 965 | "version": "1.10.0", 966 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 967 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" 968 | }, 969 | "undefsafe": { 970 | "version": "2.0.2", 971 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", 972 | "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", 973 | "requires": { 974 | "debug": "^2.2.0" 975 | }, 976 | "dependencies": { 977 | "debug": { 978 | "version": "2.6.9", 979 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 980 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 981 | "requires": { 982 | "ms": "2.0.0" 983 | } 984 | }, 985 | "ms": { 986 | "version": "2.0.0", 987 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 988 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 989 | } 990 | } 991 | }, 992 | "unique-string": { 993 | "version": "1.0.0", 994 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", 995 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", 996 | "requires": { 997 | "crypto-random-string": "^1.0.0" 998 | } 999 | }, 1000 | "unzip-response": { 1001 | "version": "2.0.1", 1002 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", 1003 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" 1004 | }, 1005 | "update-notifier": { 1006 | "version": "2.5.0", 1007 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", 1008 | "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", 1009 | "requires": { 1010 | "boxen": "^1.2.1", 1011 | "chalk": "^2.0.1", 1012 | "configstore": "^3.0.0", 1013 | "import-lazy": "^2.1.0", 1014 | "is-ci": "^1.0.10", 1015 | "is-installed-globally": "^0.1.0", 1016 | "is-npm": "^1.0.0", 1017 | "latest-version": "^3.0.0", 1018 | "semver-diff": "^2.0.0", 1019 | "xdg-basedir": "^3.0.0" 1020 | } 1021 | }, 1022 | "url-parse-lax": { 1023 | "version": "1.0.0", 1024 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 1025 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 1026 | "requires": { 1027 | "prepend-http": "^1.0.1" 1028 | } 1029 | }, 1030 | "validate-npm-package-license": { 1031 | "version": "3.0.4", 1032 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1033 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1034 | "requires": { 1035 | "spdx-correct": "^3.0.0", 1036 | "spdx-expression-parse": "^3.0.0" 1037 | } 1038 | }, 1039 | "which": { 1040 | "version": "1.3.1", 1041 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1042 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1043 | "requires": { 1044 | "isexe": "^2.0.0" 1045 | } 1046 | }, 1047 | "which-module": { 1048 | "version": "2.0.0", 1049 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1050 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 1051 | }, 1052 | "widest-line": { 1053 | "version": "2.0.1", 1054 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", 1055 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", 1056 | "requires": { 1057 | "string-width": "^2.1.1" 1058 | }, 1059 | "dependencies": { 1060 | "ansi-regex": { 1061 | "version": "3.0.0", 1062 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1063 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 1064 | }, 1065 | "string-width": { 1066 | "version": "2.1.1", 1067 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1068 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1069 | "requires": { 1070 | "is-fullwidth-code-point": "^2.0.0", 1071 | "strip-ansi": "^4.0.0" 1072 | } 1073 | }, 1074 | "strip-ansi": { 1075 | "version": "4.0.0", 1076 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1077 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1078 | "requires": { 1079 | "ansi-regex": "^3.0.0" 1080 | } 1081 | } 1082 | } 1083 | }, 1084 | "wrap-ansi": { 1085 | "version": "5.1.0", 1086 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 1087 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 1088 | "requires": { 1089 | "ansi-styles": "^3.2.0", 1090 | "string-width": "^3.0.0", 1091 | "strip-ansi": "^5.0.0" 1092 | } 1093 | }, 1094 | "write-file-atomic": { 1095 | "version": "2.4.3", 1096 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", 1097 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", 1098 | "requires": { 1099 | "graceful-fs": "^4.1.11", 1100 | "imurmurhash": "^0.1.4", 1101 | "signal-exit": "^3.0.2" 1102 | } 1103 | }, 1104 | "xdg-basedir": { 1105 | "version": "3.0.0", 1106 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 1107 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" 1108 | }, 1109 | "y18n": { 1110 | "version": "4.0.0", 1111 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 1112 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" 1113 | }, 1114 | "yallist": { 1115 | "version": "2.1.2", 1116 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1117 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 1118 | }, 1119 | "yargs": { 1120 | "version": "13.3.0", 1121 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", 1122 | "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", 1123 | "requires": { 1124 | "cliui": "^5.0.0", 1125 | "find-up": "^3.0.0", 1126 | "get-caller-file": "^2.0.1", 1127 | "require-directory": "^2.1.1", 1128 | "require-main-filename": "^2.0.0", 1129 | "set-blocking": "^2.0.0", 1130 | "string-width": "^3.0.0", 1131 | "which-module": "^2.0.0", 1132 | "y18n": "^4.0.0", 1133 | "yargs-parser": "^13.1.1" 1134 | } 1135 | }, 1136 | "yargs-parser": { 1137 | "version": "13.1.1", 1138 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", 1139 | "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", 1140 | "requires": { 1141 | "camelcase": "^5.0.0", 1142 | "decamelize": "^1.2.0" 1143 | } 1144 | } 1145 | } 1146 | } 1147 | -------------------------------------------------------------------------------- /stats/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stats", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/node": { 8 | "version": "13.1.5", 9 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.5.tgz", 10 | "integrity": "sha512-wupvfmtbqRJzjCm1H2diy7wo31Gn1OzvqoxCfQuKM9eSecogzP0WTlrjdq7cf7jgSO2ZX6hxwgRPR8Wt7FA22g==" 11 | }, 12 | "abbrev": { 13 | "version": "1.1.1", 14 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 15 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 16 | }, 17 | "ansi-align": { 18 | "version": "2.0.0", 19 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", 20 | "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", 21 | "requires": { 22 | "string-width": "^2.0.0" 23 | }, 24 | "dependencies": { 25 | "ansi-regex": { 26 | "version": "3.0.0", 27 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 28 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 29 | }, 30 | "string-width": { 31 | "version": "2.1.1", 32 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 33 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 34 | "requires": { 35 | "is-fullwidth-code-point": "^2.0.0", 36 | "strip-ansi": "^4.0.0" 37 | } 38 | }, 39 | "strip-ansi": { 40 | "version": "4.0.0", 41 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 42 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 43 | "requires": { 44 | "ansi-regex": "^3.0.0" 45 | } 46 | } 47 | } 48 | }, 49 | "ansi-regex": { 50 | "version": "4.1.0", 51 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 52 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 53 | }, 54 | "ansi-styles": { 55 | "version": "3.2.1", 56 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 57 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 58 | "requires": { 59 | "color-convert": "^1.9.0" 60 | } 61 | }, 62 | "anymatch": { 63 | "version": "3.1.1", 64 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 65 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 66 | "requires": { 67 | "normalize-path": "^3.0.0", 68 | "picomatch": "^2.0.4" 69 | } 70 | }, 71 | "balanced-match": { 72 | "version": "1.0.0", 73 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 74 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 75 | }, 76 | "binary-extensions": { 77 | "version": "2.0.0", 78 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 79 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" 80 | }, 81 | "boxen": { 82 | "version": "1.3.0", 83 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", 84 | "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", 85 | "requires": { 86 | "ansi-align": "^2.0.0", 87 | "camelcase": "^4.0.0", 88 | "chalk": "^2.0.1", 89 | "cli-boxes": "^1.0.0", 90 | "string-width": "^2.0.0", 91 | "term-size": "^1.2.0", 92 | "widest-line": "^2.0.0" 93 | }, 94 | "dependencies": { 95 | "ansi-regex": { 96 | "version": "3.0.0", 97 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 98 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 99 | }, 100 | "camelcase": { 101 | "version": "4.1.0", 102 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 103 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" 104 | }, 105 | "string-width": { 106 | "version": "2.1.1", 107 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 108 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 109 | "requires": { 110 | "is-fullwidth-code-point": "^2.0.0", 111 | "strip-ansi": "^4.0.0" 112 | } 113 | }, 114 | "strip-ansi": { 115 | "version": "4.0.0", 116 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 117 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 118 | "requires": { 119 | "ansi-regex": "^3.0.0" 120 | } 121 | } 122 | } 123 | }, 124 | "brace-expansion": { 125 | "version": "1.1.11", 126 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 127 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 128 | "requires": { 129 | "balanced-match": "^1.0.0", 130 | "concat-map": "0.0.1" 131 | } 132 | }, 133 | "braces": { 134 | "version": "3.0.2", 135 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 136 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 137 | "requires": { 138 | "fill-range": "^7.0.1" 139 | } 140 | }, 141 | "camelcase": { 142 | "version": "5.3.1", 143 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 144 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 145 | }, 146 | "capture-stack-trace": { 147 | "version": "1.0.1", 148 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 149 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" 150 | }, 151 | "chalk": { 152 | "version": "2.4.2", 153 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 154 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 155 | "requires": { 156 | "ansi-styles": "^3.2.1", 157 | "escape-string-regexp": "^1.0.5", 158 | "supports-color": "^5.3.0" 159 | }, 160 | "dependencies": { 161 | "supports-color": { 162 | "version": "5.5.0", 163 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 164 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 165 | "requires": { 166 | "has-flag": "^3.0.0" 167 | } 168 | } 169 | } 170 | }, 171 | "chokidar": { 172 | "version": "3.3.1", 173 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", 174 | "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", 175 | "requires": { 176 | "anymatch": "~3.1.1", 177 | "braces": "~3.0.2", 178 | "fsevents": "~2.1.2", 179 | "glob-parent": "~5.1.0", 180 | "is-binary-path": "~2.1.0", 181 | "is-glob": "~4.0.1", 182 | "normalize-path": "~3.0.0", 183 | "readdirp": "~3.3.0" 184 | } 185 | }, 186 | "ci-info": { 187 | "version": "1.6.0", 188 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", 189 | "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" 190 | }, 191 | "cli-boxes": { 192 | "version": "1.0.0", 193 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", 194 | "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" 195 | }, 196 | "cliui": { 197 | "version": "5.0.0", 198 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 199 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 200 | "requires": { 201 | "string-width": "^3.1.0", 202 | "strip-ansi": "^5.2.0", 203 | "wrap-ansi": "^5.1.0" 204 | } 205 | }, 206 | "color-convert": { 207 | "version": "1.9.3", 208 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 209 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 210 | "requires": { 211 | "color-name": "1.1.3" 212 | } 213 | }, 214 | "color-name": { 215 | "version": "1.1.3", 216 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 217 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 218 | }, 219 | "concat-map": { 220 | "version": "0.0.1", 221 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 222 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 223 | }, 224 | "concurrently": { 225 | "version": "5.0.2", 226 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.0.2.tgz", 227 | "integrity": "sha512-iUNVI6PzKO0RVXV9pHWM0khvEbELxf3XLIoChaV6hHyoIaJuxQWZiOwlNysnJX5khsfvIK66+OJqRdbYrdsR1g==", 228 | "requires": { 229 | "chalk": "^2.4.2", 230 | "date-fns": "^2.0.1", 231 | "lodash": "^4.17.15", 232 | "read-pkg": "^4.0.1", 233 | "rxjs": "^6.5.2", 234 | "spawn-command": "^0.0.2-1", 235 | "supports-color": "^6.1.0", 236 | "tree-kill": "^1.2.2", 237 | "yargs": "^13.3.0" 238 | } 239 | }, 240 | "configstore": { 241 | "version": "3.1.2", 242 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", 243 | "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", 244 | "requires": { 245 | "dot-prop": "^4.1.0", 246 | "graceful-fs": "^4.1.2", 247 | "make-dir": "^1.0.0", 248 | "unique-string": "^1.0.0", 249 | "write-file-atomic": "^2.0.0", 250 | "xdg-basedir": "^3.0.0" 251 | } 252 | }, 253 | "create-error-class": { 254 | "version": "3.0.2", 255 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 256 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 257 | "requires": { 258 | "capture-stack-trace": "^1.0.0" 259 | } 260 | }, 261 | "cross-spawn": { 262 | "version": "5.1.0", 263 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 264 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 265 | "requires": { 266 | "lru-cache": "^4.0.1", 267 | "shebang-command": "^1.2.0", 268 | "which": "^1.2.9" 269 | } 270 | }, 271 | "crypto-random-string": { 272 | "version": "1.0.0", 273 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", 274 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" 275 | }, 276 | "date-fns": { 277 | "version": "2.9.0", 278 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.9.0.tgz", 279 | "integrity": "sha512-khbFLu/MlzLjEzy9Gh8oY1hNt/Dvxw3J6Rbc28cVoYWQaC1S3YI4xwkF9ZWcjDLscbZlY9hISMr66RFzZagLsA==" 280 | }, 281 | "debug": { 282 | "version": "3.2.6", 283 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 284 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 285 | "requires": { 286 | "ms": "^2.1.1" 287 | } 288 | }, 289 | "decamelize": { 290 | "version": "1.2.0", 291 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 292 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 293 | }, 294 | "deep-extend": { 295 | "version": "0.6.0", 296 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 297 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 298 | }, 299 | "dot-prop": { 300 | "version": "4.2.0", 301 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 302 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", 303 | "requires": { 304 | "is-obj": "^1.0.0" 305 | } 306 | }, 307 | "duplexer3": { 308 | "version": "0.1.4", 309 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 310 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" 311 | }, 312 | "emoji-regex": { 313 | "version": "7.0.3", 314 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 315 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 316 | }, 317 | "error-ex": { 318 | "version": "1.3.2", 319 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 320 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 321 | "requires": { 322 | "is-arrayish": "^0.2.1" 323 | } 324 | }, 325 | "escape-string-regexp": { 326 | "version": "1.0.5", 327 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 328 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 329 | }, 330 | "execa": { 331 | "version": "0.7.0", 332 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 333 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 334 | "requires": { 335 | "cross-spawn": "^5.0.1", 336 | "get-stream": "^3.0.0", 337 | "is-stream": "^1.1.0", 338 | "npm-run-path": "^2.0.0", 339 | "p-finally": "^1.0.0", 340 | "signal-exit": "^3.0.0", 341 | "strip-eof": "^1.0.0" 342 | } 343 | }, 344 | "fill-range": { 345 | "version": "7.0.1", 346 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 347 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 348 | "requires": { 349 | "to-regex-range": "^5.0.1" 350 | } 351 | }, 352 | "find-up": { 353 | "version": "3.0.0", 354 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 355 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 356 | "requires": { 357 | "locate-path": "^3.0.0" 358 | } 359 | }, 360 | "fsevents": { 361 | "version": "2.1.2", 362 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 363 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 364 | "optional": true 365 | }, 366 | "get-caller-file": { 367 | "version": "2.0.5", 368 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 369 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 370 | }, 371 | "get-stream": { 372 | "version": "3.0.0", 373 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 374 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 375 | }, 376 | "glob-parent": { 377 | "version": "5.1.0", 378 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", 379 | "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", 380 | "requires": { 381 | "is-glob": "^4.0.1" 382 | } 383 | }, 384 | "global-dirs": { 385 | "version": "0.1.1", 386 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", 387 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", 388 | "requires": { 389 | "ini": "^1.3.4" 390 | } 391 | }, 392 | "got": { 393 | "version": "6.7.1", 394 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", 395 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", 396 | "requires": { 397 | "create-error-class": "^3.0.0", 398 | "duplexer3": "^0.1.4", 399 | "get-stream": "^3.0.0", 400 | "is-redirect": "^1.0.0", 401 | "is-retry-allowed": "^1.0.0", 402 | "is-stream": "^1.0.0", 403 | "lowercase-keys": "^1.0.0", 404 | "safe-buffer": "^5.0.1", 405 | "timed-out": "^4.0.0", 406 | "unzip-response": "^2.0.1", 407 | "url-parse-lax": "^1.0.0" 408 | } 409 | }, 410 | "graceful-fs": { 411 | "version": "4.2.3", 412 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 413 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" 414 | }, 415 | "has-flag": { 416 | "version": "3.0.0", 417 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 418 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 419 | }, 420 | "hosted-git-info": { 421 | "version": "2.8.5", 422 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", 423 | "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" 424 | }, 425 | "ignore-by-default": { 426 | "version": "1.0.1", 427 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 428 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" 429 | }, 430 | "import-lazy": { 431 | "version": "2.1.0", 432 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 433 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" 434 | }, 435 | "imurmurhash": { 436 | "version": "0.1.4", 437 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 438 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 439 | }, 440 | "ini": { 441 | "version": "1.3.5", 442 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 443 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 444 | }, 445 | "is-arrayish": { 446 | "version": "0.2.1", 447 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 448 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 449 | }, 450 | "is-binary-path": { 451 | "version": "2.1.0", 452 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 453 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 454 | "requires": { 455 | "binary-extensions": "^2.0.0" 456 | } 457 | }, 458 | "is-ci": { 459 | "version": "1.2.1", 460 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", 461 | "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", 462 | "requires": { 463 | "ci-info": "^1.5.0" 464 | } 465 | }, 466 | "is-extglob": { 467 | "version": "2.1.1", 468 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 469 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 470 | }, 471 | "is-fullwidth-code-point": { 472 | "version": "2.0.0", 473 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 474 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 475 | }, 476 | "is-glob": { 477 | "version": "4.0.1", 478 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 479 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 480 | "requires": { 481 | "is-extglob": "^2.1.1" 482 | } 483 | }, 484 | "is-installed-globally": { 485 | "version": "0.1.0", 486 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", 487 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", 488 | "requires": { 489 | "global-dirs": "^0.1.0", 490 | "is-path-inside": "^1.0.0" 491 | } 492 | }, 493 | "is-npm": { 494 | "version": "1.0.0", 495 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", 496 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" 497 | }, 498 | "is-number": { 499 | "version": "7.0.0", 500 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 501 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 502 | }, 503 | "is-obj": { 504 | "version": "1.0.1", 505 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 506 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" 507 | }, 508 | "is-path-inside": { 509 | "version": "1.0.1", 510 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 511 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 512 | "requires": { 513 | "path-is-inside": "^1.0.1" 514 | } 515 | }, 516 | "is-redirect": { 517 | "version": "1.0.0", 518 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 519 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" 520 | }, 521 | "is-retry-allowed": { 522 | "version": "1.2.0", 523 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 524 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" 525 | }, 526 | "is-stream": { 527 | "version": "1.1.0", 528 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 529 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 530 | }, 531 | "isexe": { 532 | "version": "2.0.0", 533 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 534 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 535 | }, 536 | "json-parse-better-errors": { 537 | "version": "1.0.2", 538 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 539 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" 540 | }, 541 | "latest-version": { 542 | "version": "3.1.0", 543 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", 544 | "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", 545 | "requires": { 546 | "package-json": "^4.0.0" 547 | } 548 | }, 549 | "locate-path": { 550 | "version": "3.0.0", 551 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 552 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 553 | "requires": { 554 | "p-locate": "^3.0.0", 555 | "path-exists": "^3.0.0" 556 | } 557 | }, 558 | "lodash": { 559 | "version": "4.17.15", 560 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 561 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" 562 | }, 563 | "lowercase-keys": { 564 | "version": "1.0.1", 565 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 566 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" 567 | }, 568 | "lru-cache": { 569 | "version": "4.1.5", 570 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 571 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 572 | "requires": { 573 | "pseudomap": "^1.0.2", 574 | "yallist": "^2.1.2" 575 | } 576 | }, 577 | "make-dir": { 578 | "version": "1.3.0", 579 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 580 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 581 | "requires": { 582 | "pify": "^3.0.0" 583 | } 584 | }, 585 | "minimatch": { 586 | "version": "3.0.4", 587 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 588 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 589 | "requires": { 590 | "brace-expansion": "^1.1.7" 591 | } 592 | }, 593 | "minimist": { 594 | "version": "1.2.0", 595 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 596 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 597 | }, 598 | "ms": { 599 | "version": "2.1.2", 600 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 601 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 602 | }, 603 | "nodemon": { 604 | "version": "2.0.2", 605 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz", 606 | "integrity": "sha512-GWhYPMfde2+M0FsHnggIHXTqPDHXia32HRhh6H0d75Mt9FKUoCBvumNHr7LdrpPBTKxsWmIEOjoN+P4IU6Hcaw==", 607 | "requires": { 608 | "chokidar": "^3.2.2", 609 | "debug": "^3.2.6", 610 | "ignore-by-default": "^1.0.1", 611 | "minimatch": "^3.0.4", 612 | "pstree.remy": "^1.1.7", 613 | "semver": "^5.7.1", 614 | "supports-color": "^5.5.0", 615 | "touch": "^3.1.0", 616 | "undefsafe": "^2.0.2", 617 | "update-notifier": "^2.5.0" 618 | }, 619 | "dependencies": { 620 | "supports-color": { 621 | "version": "5.5.0", 622 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 623 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 624 | "requires": { 625 | "has-flag": "^3.0.0" 626 | } 627 | } 628 | } 629 | }, 630 | "nopt": { 631 | "version": "1.0.10", 632 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 633 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 634 | "requires": { 635 | "abbrev": "1" 636 | } 637 | }, 638 | "normalize-package-data": { 639 | "version": "2.5.0", 640 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 641 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 642 | "requires": { 643 | "hosted-git-info": "^2.1.4", 644 | "resolve": "^1.10.0", 645 | "semver": "2 || 3 || 4 || 5", 646 | "validate-npm-package-license": "^3.0.1" 647 | } 648 | }, 649 | "normalize-path": { 650 | "version": "3.0.0", 651 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 652 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 653 | }, 654 | "npm-run-path": { 655 | "version": "2.0.2", 656 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 657 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 658 | "requires": { 659 | "path-key": "^2.0.0" 660 | } 661 | }, 662 | "p-finally": { 663 | "version": "1.0.0", 664 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 665 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 666 | }, 667 | "p-limit": { 668 | "version": "2.2.2", 669 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", 670 | "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", 671 | "requires": { 672 | "p-try": "^2.0.0" 673 | } 674 | }, 675 | "p-locate": { 676 | "version": "3.0.0", 677 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 678 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 679 | "requires": { 680 | "p-limit": "^2.0.0" 681 | } 682 | }, 683 | "p-try": { 684 | "version": "2.2.0", 685 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 686 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 687 | }, 688 | "package-json": { 689 | "version": "4.0.1", 690 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", 691 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", 692 | "requires": { 693 | "got": "^6.7.1", 694 | "registry-auth-token": "^3.0.1", 695 | "registry-url": "^3.0.3", 696 | "semver": "^5.1.0" 697 | } 698 | }, 699 | "parse-json": { 700 | "version": "4.0.0", 701 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 702 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 703 | "requires": { 704 | "error-ex": "^1.3.1", 705 | "json-parse-better-errors": "^1.0.1" 706 | } 707 | }, 708 | "path-exists": { 709 | "version": "3.0.0", 710 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 711 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 712 | }, 713 | "path-is-inside": { 714 | "version": "1.0.2", 715 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 716 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" 717 | }, 718 | "path-key": { 719 | "version": "2.0.1", 720 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 721 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 722 | }, 723 | "path-parse": { 724 | "version": "1.0.6", 725 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 726 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 727 | }, 728 | "picomatch": { 729 | "version": "2.2.1", 730 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", 731 | "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" 732 | }, 733 | "pify": { 734 | "version": "3.0.0", 735 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 736 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 737 | }, 738 | "prepend-http": { 739 | "version": "1.0.4", 740 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 741 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" 742 | }, 743 | "pseudomap": { 744 | "version": "1.0.2", 745 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 746 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 747 | }, 748 | "pstree.remy": { 749 | "version": "1.1.7", 750 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", 751 | "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" 752 | }, 753 | "rc": { 754 | "version": "1.2.8", 755 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 756 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 757 | "requires": { 758 | "deep-extend": "^0.6.0", 759 | "ini": "~1.3.0", 760 | "minimist": "^1.2.0", 761 | "strip-json-comments": "~2.0.1" 762 | } 763 | }, 764 | "read-pkg": { 765 | "version": "4.0.1", 766 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", 767 | "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", 768 | "requires": { 769 | "normalize-package-data": "^2.3.2", 770 | "parse-json": "^4.0.0", 771 | "pify": "^3.0.0" 772 | } 773 | }, 774 | "readdirp": { 775 | "version": "3.3.0", 776 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", 777 | "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", 778 | "requires": { 779 | "picomatch": "^2.0.7" 780 | } 781 | }, 782 | "registry-auth-token": { 783 | "version": "3.4.0", 784 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", 785 | "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", 786 | "requires": { 787 | "rc": "^1.1.6", 788 | "safe-buffer": "^5.0.1" 789 | } 790 | }, 791 | "registry-url": { 792 | "version": "3.1.0", 793 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 794 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", 795 | "requires": { 796 | "rc": "^1.0.1" 797 | } 798 | }, 799 | "require-directory": { 800 | "version": "2.1.1", 801 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 802 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 803 | }, 804 | "require-main-filename": { 805 | "version": "2.0.0", 806 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 807 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 808 | }, 809 | "resolve": { 810 | "version": "1.14.2", 811 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", 812 | "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", 813 | "requires": { 814 | "path-parse": "^1.0.6" 815 | } 816 | }, 817 | "rxjs": { 818 | "version": "6.5.4", 819 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", 820 | "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", 821 | "requires": { 822 | "tslib": "^1.9.0" 823 | } 824 | }, 825 | "safe-buffer": { 826 | "version": "5.2.0", 827 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 828 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 829 | }, 830 | "semver": { 831 | "version": "5.7.1", 832 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 833 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 834 | }, 835 | "semver-diff": { 836 | "version": "2.1.0", 837 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", 838 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", 839 | "requires": { 840 | "semver": "^5.0.3" 841 | } 842 | }, 843 | "set-blocking": { 844 | "version": "2.0.0", 845 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 846 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 847 | }, 848 | "shebang-command": { 849 | "version": "1.2.0", 850 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 851 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 852 | "requires": { 853 | "shebang-regex": "^1.0.0" 854 | } 855 | }, 856 | "shebang-regex": { 857 | "version": "1.0.0", 858 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 859 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 860 | }, 861 | "signal-exit": { 862 | "version": "3.0.2", 863 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 864 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 865 | }, 866 | "spawn-command": { 867 | "version": "0.0.2-1", 868 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", 869 | "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=" 870 | }, 871 | "spdx-correct": { 872 | "version": "3.1.0", 873 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 874 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 875 | "requires": { 876 | "spdx-expression-parse": "^3.0.0", 877 | "spdx-license-ids": "^3.0.0" 878 | } 879 | }, 880 | "spdx-exceptions": { 881 | "version": "2.2.0", 882 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 883 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" 884 | }, 885 | "spdx-expression-parse": { 886 | "version": "3.0.0", 887 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 888 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 889 | "requires": { 890 | "spdx-exceptions": "^2.1.0", 891 | "spdx-license-ids": "^3.0.0" 892 | } 893 | }, 894 | "spdx-license-ids": { 895 | "version": "3.0.5", 896 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 897 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" 898 | }, 899 | "string-width": { 900 | "version": "3.1.0", 901 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 902 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 903 | "requires": { 904 | "emoji-regex": "^7.0.1", 905 | "is-fullwidth-code-point": "^2.0.0", 906 | "strip-ansi": "^5.1.0" 907 | } 908 | }, 909 | "strip-ansi": { 910 | "version": "5.2.0", 911 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 912 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 913 | "requires": { 914 | "ansi-regex": "^4.1.0" 915 | } 916 | }, 917 | "strip-eof": { 918 | "version": "1.0.0", 919 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 920 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 921 | }, 922 | "strip-json-comments": { 923 | "version": "2.0.1", 924 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 925 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 926 | }, 927 | "supports-color": { 928 | "version": "6.1.0", 929 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 930 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 931 | "requires": { 932 | "has-flag": "^3.0.0" 933 | } 934 | }, 935 | "term-size": { 936 | "version": "1.2.0", 937 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", 938 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", 939 | "requires": { 940 | "execa": "^0.7.0" 941 | } 942 | }, 943 | "timed-out": { 944 | "version": "4.0.1", 945 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 946 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" 947 | }, 948 | "to-regex-range": { 949 | "version": "5.0.1", 950 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 951 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 952 | "requires": { 953 | "is-number": "^7.0.0" 954 | } 955 | }, 956 | "touch": { 957 | "version": "3.1.0", 958 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 959 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 960 | "requires": { 961 | "nopt": "~1.0.10" 962 | } 963 | }, 964 | "tree-kill": { 965 | "version": "1.2.2", 966 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 967 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" 968 | }, 969 | "tslib": { 970 | "version": "1.10.0", 971 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 972 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" 973 | }, 974 | "undefsafe": { 975 | "version": "2.0.2", 976 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", 977 | "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", 978 | "requires": { 979 | "debug": "^2.2.0" 980 | }, 981 | "dependencies": { 982 | "debug": { 983 | "version": "2.6.9", 984 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 985 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 986 | "requires": { 987 | "ms": "2.0.0" 988 | } 989 | }, 990 | "ms": { 991 | "version": "2.0.0", 992 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 993 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 994 | } 995 | } 996 | }, 997 | "unique-string": { 998 | "version": "1.0.0", 999 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", 1000 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", 1001 | "requires": { 1002 | "crypto-random-string": "^1.0.0" 1003 | } 1004 | }, 1005 | "unzip-response": { 1006 | "version": "2.0.1", 1007 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", 1008 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" 1009 | }, 1010 | "update-notifier": { 1011 | "version": "2.5.0", 1012 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", 1013 | "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", 1014 | "requires": { 1015 | "boxen": "^1.2.1", 1016 | "chalk": "^2.0.1", 1017 | "configstore": "^3.0.0", 1018 | "import-lazy": "^2.1.0", 1019 | "is-ci": "^1.0.10", 1020 | "is-installed-globally": "^0.1.0", 1021 | "is-npm": "^1.0.0", 1022 | "latest-version": "^3.0.0", 1023 | "semver-diff": "^2.0.0", 1024 | "xdg-basedir": "^3.0.0" 1025 | } 1026 | }, 1027 | "url-parse-lax": { 1028 | "version": "1.0.0", 1029 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 1030 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 1031 | "requires": { 1032 | "prepend-http": "^1.0.1" 1033 | } 1034 | }, 1035 | "validate-npm-package-license": { 1036 | "version": "3.0.4", 1037 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1038 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1039 | "requires": { 1040 | "spdx-correct": "^3.0.0", 1041 | "spdx-expression-parse": "^3.0.0" 1042 | } 1043 | }, 1044 | "which": { 1045 | "version": "1.3.1", 1046 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1047 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1048 | "requires": { 1049 | "isexe": "^2.0.0" 1050 | } 1051 | }, 1052 | "which-module": { 1053 | "version": "2.0.0", 1054 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1055 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 1056 | }, 1057 | "widest-line": { 1058 | "version": "2.0.1", 1059 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", 1060 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", 1061 | "requires": { 1062 | "string-width": "^2.1.1" 1063 | }, 1064 | "dependencies": { 1065 | "ansi-regex": { 1066 | "version": "3.0.0", 1067 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1068 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 1069 | }, 1070 | "string-width": { 1071 | "version": "2.1.1", 1072 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1073 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1074 | "requires": { 1075 | "is-fullwidth-code-point": "^2.0.0", 1076 | "strip-ansi": "^4.0.0" 1077 | } 1078 | }, 1079 | "strip-ansi": { 1080 | "version": "4.0.0", 1081 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1082 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1083 | "requires": { 1084 | "ansi-regex": "^3.0.0" 1085 | } 1086 | } 1087 | } 1088 | }, 1089 | "wrap-ansi": { 1090 | "version": "5.1.0", 1091 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 1092 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 1093 | "requires": { 1094 | "ansi-styles": "^3.2.0", 1095 | "string-width": "^3.0.0", 1096 | "strip-ansi": "^5.0.0" 1097 | } 1098 | }, 1099 | "write-file-atomic": { 1100 | "version": "2.4.3", 1101 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", 1102 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", 1103 | "requires": { 1104 | "graceful-fs": "^4.1.11", 1105 | "imurmurhash": "^0.1.4", 1106 | "signal-exit": "^3.0.2" 1107 | } 1108 | }, 1109 | "xdg-basedir": { 1110 | "version": "3.0.0", 1111 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 1112 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" 1113 | }, 1114 | "y18n": { 1115 | "version": "4.0.0", 1116 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 1117 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" 1118 | }, 1119 | "yallist": { 1120 | "version": "2.1.2", 1121 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1122 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 1123 | }, 1124 | "yargs": { 1125 | "version": "13.3.0", 1126 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", 1127 | "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", 1128 | "requires": { 1129 | "cliui": "^5.0.0", 1130 | "find-up": "^3.0.0", 1131 | "get-caller-file": "^2.0.1", 1132 | "require-directory": "^2.1.1", 1133 | "require-main-filename": "^2.0.0", 1134 | "set-blocking": "^2.0.0", 1135 | "string-width": "^3.0.0", 1136 | "which-module": "^2.0.0", 1137 | "y18n": "^4.0.0", 1138 | "yargs-parser": "^13.1.1" 1139 | } 1140 | }, 1141 | "yargs-parser": { 1142 | "version": "13.1.1", 1143 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", 1144 | "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", 1145 | "requires": { 1146 | "camelcase": "^5.0.0", 1147 | "decamelize": "^1.2.0" 1148 | } 1149 | } 1150 | } 1151 | } 1152 | --------------------------------------------------------------------------------