├── 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 |
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 |
--------------------------------------------------------------------------------