├── .gitignore ├── .travis.yml ├── LICENSE ├── Makefile ├── README.md ├── css └── reset.css ├── default.nix ├── html └── index.html ├── json └── schedule.json ├── package-lock.json ├── package.json ├── scss └── main.scss ├── ts ├── CancelledEvent.ts ├── ComponentsArray.ts ├── ComponentsList.ts ├── Countdown.ts ├── CurrentEvent.ts ├── DayOff.ts ├── Event.ts ├── EventsForCurrentPeriod.ts ├── EventsForDay.ts ├── FailedScheduleLoad.ts ├── FutureEvent.ts ├── PastEvent.ts ├── StateFromUrl.ts ├── TwitchPlayer.ts ├── UiComponent.ts ├── Weekday.ts ├── app.ts ├── dto │ ├── Event.ts │ ├── EventPatch.ts │ ├── ExtraEvent.ts │ ├── PatchedEvent.ts │ ├── Project.ts │ ├── State.ts │ └── index.ts ├── html │ ├── Div.ts │ ├── Empty.ts │ ├── H1.ts │ ├── Href.ts │ ├── InnerHtml.ts │ ├── Markdown.ts │ ├── Tag.ts │ ├── Text.ts │ └── index.ts └── list │ ├── ConcatLists.ts │ ├── FilteredList.ts │ ├── List.ts │ ├── ListOfNumbersRange.ts │ ├── MappedList.ts │ ├── SlicedList.ts │ └── index.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | ts/**/*.js -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 8.9.4 4 | script: 5 | - make 6 | deploy: 7 | provider: pages 8 | skip-cleanup: true 9 | github-token: "$GITHUB_TOKEN" 10 | keep-history: true 11 | on: 12 | branch: master 13 | local-dir: dist/ 14 | env: 15 | matrix: 16 | secure: qz2CP46lnEIUvl0yQWZvWt3YmzbgON03QJqP6QgwhMf1zptp1kfY1vjjGYrppMDN0uBkNMm6KoX5MtLG6Aa+1+rbYW6NzqUSg9I0q9LL0cr6RelfF5GqS+4MYzVB5d8aG2cYQdXcTfw6+ZOqfQqhkpYJtMUQSbqMKh/HX8b1r0pt5uL+YUO73OzynPj4BoJI6RZj7Fasj7oTdW/lERYzf23T+fe2466mr7EH7R5TU+ML1XfZMJmYs46yGBs4cnNOBoKK7jLn9Ni06uWZSZKUR067gSr1J9o1/liYtbGcCdrM60qBYWXetO6MhLGjjzyZdwJbjrUXWD0V13SNRrz5t52VcgwnlY3qVaC/OsUmYlZ1QjPi2k/RDAHRi9ZDi7LQvtCeizZaXXXBEyLFA+7jGrmxtinshe4FnmtQeP90OoPXpU+w0OZ3YxAIy83S8E+r0ETxj+l5FUtyOS4U8BvARJfeOULWupqmPMA1HoLTdFl9KzLoJ8MJuMhguOATTw6lonoxUozaAHpAL6s2xc1sFkEm8n8USF5aopBhsfmnLzv21LfsV/gN6HKhBzSXlby9Yu8sJGaOB/WF5opsG71+Ohlbk4MX1DaZJG980HPKDOVzr4VgtTJvrEmU6q0sIISB6WlbFUA73AtnZi+pb8V27yNqOx86pQE6gKmi0VgHEGQ= 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 © Alexey Kutepov 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | TSS=$(shell find ./ts/ -type f -name '*.ts') 2 | BROWSERIFY=./node_modules/.bin/browserify 3 | WATCHIFY=./node_modules/.bin/watchify 4 | SASS=./node_modules/.bin/sass 5 | SASS_FLAGS=--load-path=node_modules/@fortawesome/fontawesome-free/scss 6 | SASS_BUILD_FLAGS=$(SASS_FLAGS) --no-source-map 7 | SASS_WATCH_FLAGS=$(SASS_FLAGS) --watch 8 | STATIC=html/index.html css/reset.css json/schedule.json 9 | 10 | # PRODUCTION ############################## 11 | 12 | .PHONY: all 13 | all: dist/app.js dist/index.html dist/reset.css dist/main.css dist/schedule.json 14 | 15 | dist/app.js: dist $(TSS) 16 | $(BROWSERIFY) ./ts/app.ts -p tsify -g uglifyify --outfile dist/app.js 17 | 18 | dist/index.html: dist html/index.html 19 | cp html/index.html dist/ 20 | 21 | dist/reset.css: dist css/reset.css 22 | cp css/reset.css dist/ 23 | 24 | dist/main.css: dist scss/main.scss 25 | mkdir -p dist/webfonts 26 | cp node_modules/@fortawesome/fontawesome-free/webfonts/* dist/webfonts/ 27 | $(SASS) $(SASS_BUILD_FLAGS) scss/main.scss dist/main.css 28 | 29 | dist/schedule.json: dist json/schedule.json 30 | jq -c . json/schedule.json > dist/schedule.json 31 | 32 | dist: 33 | mkdir -p dist 34 | 35 | # DEVELOPMENT ############################## 36 | 37 | .PHONY: watch 38 | watch: watch-ts watch-scss watch-static http-server 39 | 40 | .PHONY: watch-ts 41 | watch-ts: dist $(TSS) 42 | $(WATCHIFY) ./ts/app.ts -v -p tsify --outfile dist/app.js --debug 43 | 44 | .PHONY: watch-scss 45 | watch-scss: dist scss/main.scss 46 | mkdir -p dist/webfonts 47 | cp node_modules/@fortawesome/fontawesome-free/webfonts/* dist/webfonts/ 48 | $(SASS) $(SASS_WATCH_FLAGS) scss/main.scss dist/main.css 49 | 50 | .PHONY: watch-static 51 | watch-static: dist $(STATIC) 52 | cp $(STATIC) dist/ 53 | while inotifywait -q -e modify,move_self $(STATIC); do \ 54 | cp $(STATIC) dist/; \ 55 | done 56 | 57 | .PHONY: http-server 58 | http-server: dist 59 | python -m SimpleHTTPServer 8080 60 | 61 | .PHONY: clean 62 | clean: 63 | rm -rfv dist/ 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Tsoding](https://img.shields.io/badge/twitch.tv-tsoding-purple?logo=twitch&style=for-the-badge)](https://www.twitch.tv/tsoding) 2 | [![Build Status](https://travis-ci.org/tsoding/schedule.svg?branch=master)](https://travis-ci.org/tsoding/schedule) 3 | 4 | # Schedule for Tsoding Streams 5 | 6 | Schedule for Tsoding Streams. Front-End only Single Page Application without any Back-End. Makes all of the schedule building work yours computer problem. Saves me money on hosting. 7 | 8 | Deployed in https://tsoding.github.io/schedule/ 9 | 10 | ## Prerequisites 11 | 12 | - [node.js] (v8.9.4+) 13 | - [make] 14 | - [bash] 15 | - [coreutils] 16 | - [inotifywatch] 17 | - [python] 18 | - [jq] 19 | 20 | ## Quick Start 21 | 22 | ```console 23 | $ npm install 24 | $ make 25 | $ cd dist/ 26 | $ make -j4 watch # for watch mode 27 | # -j4 is required to run file watchers and http server 28 | # in parallel 29 | $ http://localhost:8080/dist/ 30 | ``` 31 | 32 | [inotifywait]: https://github.com/rvoicilas/inotify-tools 33 | [node.js]: https://nodejs.org/en/ 34 | [make]: https://www.gnu.org/software/make/ 35 | [bash]: https://www.gnu.org/software/bash/ 36 | [coreutils]: https://www.gnu.org/software/coreutils/coreutils.html 37 | [inotifywatch]: https://github.com/rvoicilas/inotify-tools 38 | [python]: https://www.python.org/ 39 | [jq]: https://stedolan.github.io/jq/ 40 | -------------------------------------------------------------------------------- /css/reset.css: -------------------------------------------------------------------------------- 1 | /* http://meyerweb.com/eric/tools/css/reset/ 2 | v2.0 | 20110126 3 | License: none (public domain) 4 | */ 5 | 6 | html, body, div, span, applet, object, iframe, 7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 8 | a, abbr, acronym, address, big, cite, code, 9 | del, dfn, em, img, ins, kbd, q, s, samp, 10 | small, strike, strong, sub, sup, tt, var, 11 | b, u, i, center, 12 | dl, dt, dd, ol, ul, li, 13 | fieldset, form, label, legend, 14 | table, caption, tbody, tfoot, thead, tr, th, td, 15 | article, aside, canvas, details, embed, 16 | figure, figcaption, footer, header, hgroup, 17 | menu, nav, output, ruby, section, summary, 18 | time, mark, audio, video { 19 | margin: 0; 20 | padding: 0; 21 | border: 0; 22 | font-size: 100%; 23 | font: inherit; 24 | vertical-align: baseline; 25 | } 26 | /* HTML5 display-role reset for older browsers */ 27 | article, aside, details, figcaption, figure, 28 | footer, header, hgroup, menu, nav, section { 29 | display: block; 30 | } 31 | body { 32 | line-height: 1; 33 | } 34 | ol, ul { 35 | list-style: none; 36 | } 37 | blockquote, q { 38 | quotes: none; 39 | } 40 | blockquote:before, blockquote:after, 41 | q:before, q:after { 42 | content: ''; 43 | content: none; 44 | } 45 | table { 46 | border-collapse: collapse; 47 | border-spacing: 0; 48 | } 49 | -------------------------------------------------------------------------------- /default.nix: -------------------------------------------------------------------------------- 1 | with import {}; { 2 | schedule-devenv = stdenv.mkDerivation { 3 | name = "schedule-devenv"; 4 | buildInputs = [ nodejs gnumake python inotify-tools jq ]; 5 | }; 6 | } 7 | -------------------------------------------------------------------------------- /html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Schedule — Tsoding 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |

Schedule

12 |
for twitch.tv/tsoding streams
13 |
14 | 15 |
16 | 17 | 18 |
19 | © 2021 Tsoding 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /json/schedule.json: -------------------------------------------------------------------------------- 1 | { 2 | "projects": [ 3 | { 4 | "name": "Nothing (Game in Pure C)", 5 | "description": "A simple platformer about nothing. No Engines, no OpenGL, no Box2D. Only C and SDL2", 6 | "url": "https://github.com/tsoding/nothing", 7 | "days": [6, 7], 8 | "time": "23:00", 9 | "channel": "tsoding", 10 | "ends": "2020-02-08" 11 | }, 12 | { 13 | "name": "HyperNerd (Bot in Haskell)", 14 | "description": "Enhancing my Total Surveillance Automatic Ban Machine. Join to help to test it!", 15 | "url": "https://github.com/tsoding/HyperNerd", 16 | "days": [4], 17 | "time": "17:00", 18 | "ends": "2020-10-21", 19 | "channel": "tsoding" 20 | }, 21 | { 22 | "name": "YouTube content or whatever", 23 | "description": "This day is reserved for recording YouTube videos if I have anything to record at the moment. Otherwise doing whatever. Most probably trying new languages, technologies, project ideas.", 24 | "url": "https://youtube.com/tsoding", 25 | "days": [2], 26 | "time": "23:00", 27 | "ends": "2018-07-23", 28 | "comment": "Moved to Wednesday in favor of Ray Tracer in C++", 29 | "channel": "tsoding" 30 | }, 31 | { 32 | "name": "YouTube content or whatever", 33 | "description": "This day is reserved for recording YouTube videos if I have anything to record at the moment. Otherwise doing whatever. Most probably trying new languages, technologies, project ideas.", 34 | "url": "https://youtube.com/tsoding", 35 | "days": [3], 36 | "time": "23:00", 37 | "starts": "2018-07-23", 38 | "ends": "2019-01-12", 39 | "channel": "tsoding" 40 | }, 41 | { 42 | "name": "Multik (OCaml, C)", 43 | "description": "Animation Framework for making animation for Tsoding YouTube channel", 44 | "url": "https://github.com/tsoding/multik", 45 | "days": [3], 46 | "time": "23:00", 47 | "starts": "2019-01-12", 48 | "ends": "2019-06-13", 49 | "channel": "tsoding" 50 | }, 51 | { 52 | "name": "Ray Tracer in C++", 53 | "description": "My ongoing effort to learn how to make Ray Tracers.", 54 | "url": "https://github.com/tsoding/ray-tracer", 55 | "days": [2], 56 | "time": "23:00", 57 | "ends": "2018-11-10", 58 | "channel": "tsoding" 59 | }, 60 | { 61 | "name": "Snitch (GoLang)", 62 | "url": "https://github.com/tsoding/snitch", 63 | "description": "A simple tool that collects TODOs in the source code and reports them as GitHub issues", 64 | "days": [2], 65 | "time": "22:00", 66 | "starts": "2018-11-11", 67 | "ends": "2019-01-28", 68 | "channel": "tsoding" 69 | }, 70 | { 71 | "name": "Teeworlds Gamepad Support (Real Open Source Contribution)", 72 | "url": "https://github.com/teeworlds/teeworlds", 73 | "description": "On the Real Open Source Contribution series we are trying to take an Open Source project that I personally use on a daily basis and improve it. The goal is to implement a feature and actually make it into the upstream source code of the project. The current project is Teeworlds --- a retro multiplayer game. The feature we are trying to ship is Gamepad support.", 74 | "days": [2], 75 | "time": "23:00", 76 | "starts": "2019-01-29", 77 | "ends": "2019-03-11", 78 | "channel": "tsoding" 79 | }, 80 | { 81 | "name": "MyPaint Selection Tool (Real Open Source Contribution)", 82 | "url": "http://mypaint.org/", 83 | "description": "

On the Real Open Source Contribution series we are trying to take an Open Source project that I personally use on a daily basis and improve it. The goal is to implement a feature and actually make it into the upstream source code of the project.

Current Project: MyPaint

Feature: Selection Tool.

", 84 | "days": [2], 85 | "time": "23:00", 86 | "starts": "2019-01-29", 87 | "ends": "2019-05-15", 88 | "channel": "tsoding" 89 | }, 90 | { 91 | "name": "Art Stream", 92 | "url": "https://twitch.tv/r3x1m", 93 | "description": "Tsoding-related Art Streams on my personal channel. Most likely drawing brand assets.", 94 | "days": [5], 95 | "time": "23:00", 96 | "starts": "2019-02-17", 97 | "ends": "2019-03-27", 98 | "channel": "https://twitch.tv/r3x1m" 99 | }, 100 | { 101 | "name": "Smart Stream", 102 | "url": "https://www.twitch.tv/tsoding", 103 | "description": "

On Smart Stream we watch educational videos trying to get smart.

Use command !friday to suggest a video in Twitch or Discord chats.

", 104 | "days": [5], 105 | "time": "23:00", 106 | "starts": "2019-03-28", 107 | "ends": "2020-04-14", 108 | "channel": "tsoding" 109 | }, 110 | { 111 | "name": "Chatterino 2 (Real Open Source Contribution)", 112 | "url": "https://github.com/fourtf/chatterino2", 113 | "description": "On the Real Open Source Contribution series we are trying to take an Open Source project that I personally use on a daily basis and improve it. The goal is to implement a feature and actually make it into the upstream source code of the project.\n\n**Current Project:** [Chatterino 2](https://github.com/fourtf/chatterino2)\n\n**Feature:** [#976](https://github.com/fourtf/chatterino2/issues/976).", 114 | "days": [2], 115 | "time": "23:00", 116 | "starts": "2019-05-15", 117 | "ends": "2019-06-17", 118 | "channel": "tsoding" 119 | }, 120 | { 121 | "name": "GRUB 2 (Real Open Source Contribution)", 122 | "url": "https://www.gnu.org/software/grub/grub-download.html", 123 | "description": "On the Real Open Source Contribution series we are trying to take an Open Source project that I personally use on a daily basis and improve it. The goal is to implement a feature and actually make it into the upstream source code of the project.\n\n**Current Project:** [GRUB 2](https://www.gnu.org/software/grub/grub-download.html)\n\n**Feature:** [Gamepad Support](https://steamcommunity.com/groups/steamuniverse/discussions/0/558751660797029626/)", 124 | "days": [2], 125 | "time": "23:00", 126 | "starts": "2019-06-18", 127 | "ends": "2019-10-07", 128 | "channel": "tsoding" 129 | }, 130 | { 131 | "name": "PinPog (Game in Assembly)", 132 | "url": "https://github.com/tsoding/pinpog", 133 | "description": "Ping Pong in Assembly that works without OS. Our goal is to write a game that fits into 512 bytes bootloader and works in 16 bit real mode on any IBM PC compatible machine without any Operating System.", 134 | "days": [3], 135 | "time": "23:00", 136 | "starts": "2019-06-13", 137 | "ends": "2019-08-01", 138 | "channel": "tsoding" 139 | }, 140 | { 141 | "name": "Linux Magnifier App in Nim", 142 | "url": "https://github.com/tsoding/boomer", 143 | "description": "Magnifier (Zoomer) Application for Boomers. Works similarly to the builtin zoomer in XFCE Window Manager", 144 | "days": [3], 145 | "time": "23:00", 146 | "starts": "2019-08-07", 147 | "ends": "2020-01-30", 148 | "channel": "tsoding" 149 | }, 150 | { 151 | "name": "Vodus (VOD chat renderer in C++)", 152 | "url": "https://github.com/tsoding/vodus", 153 | "description": "VOD chat renderer", 154 | "days": [3], 155 | "time": "17:00", 156 | "starts": "2020-02-05", 157 | "ends": "2021-01-05", 158 | "channel": "tsoding" 159 | }, 160 | { 161 | "name": "Minetest (Real Open Source Contribution)", 162 | "url": "https://github.com/minetest/minetest", 163 | "description": "Minetest, an open source infinite-world block sandbox game engine with support for survival and crafting. We are trying to fix bug [#3075](https://github.com/minetest/minetest/issues/3075).", 164 | "days": [2], 165 | "time": "23:00", 166 | "starts": "2019-10-07", 167 | "ends": "2019-11-13", 168 | "channel": "tsoding" 169 | }, 170 | { 171 | "name": "Syncthing (Real Open Source Contribution)", 172 | "url": "https://syncthing.net/", 173 | "description": "Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers and replaces proprietary sync and cloud services with something open, trustworthy and decentralized.\n\nSee https://github.com/tsoding/trophy#syncthing for more information.", 174 | "days": [2], 175 | "time": "23:00", 176 | "starts": "2019-11-19", 177 | "ends": "2019-12-03", 178 | "channel": "tsoding" 179 | }, 180 | { 181 | "name": "Web Application in C", 182 | "url": "https://github.com/tsoding/skedudle", 183 | "description": "Simple Event Schedule Web Application in C. This project has two goals:\n1. Implement backgend for https://github.com/tsoding/schedule\n2. Implement enough Web related code to later extract it as an epic Web Framework in C", 184 | "days": [2], 185 | "time": "23:00", 186 | "starts": "2019-12-09", 187 | "ends": "2020-04-27", 188 | "channel": "tsoding" 189 | }, 190 | { 191 | "name": "Something (Game in C++)", 192 | "description": "[Nothing is put on hiatus for now](https://gist.github.com/rexim/9a66d86860681b1b34f414572fddf4ff)\n\nThis is the next gamedev project with the goal to actually ship something. It's gonna be a platformer as well. You can pew pew pew and place destroyable blocks for protection from AI-driven enemies.", 193 | "url": "https://github.com/tsoding/something", 194 | "days": [6, 7], 195 | "time": "17:00", 196 | "channel": "tsoding", 197 | "starts": "2020-02-09" 198 | }, 199 | { 200 | "name": "Random One-Off Stream", 201 | "description": "Just a random one-off stream on a random topic. The topic is a secret!", 202 | "url": "https://twitch.tv/tsoding", 203 | "days": [5], 204 | "time": "17:00", 205 | "starts": "2020-04-14", 206 | "channel": "tsoding" 207 | }, 208 | { 209 | "name": "cm (TUI App in Rust)", 210 | "url": "https://github.com/tsoding/cm", 211 | "description": "The goal of this application is to recreate the [compilation-mode](https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html) of Emacs as a standalone TUI application.", 212 | "days": [2], 213 | "time": "17:00", 214 | "starts": "2020-04-28", 215 | "ends": "2021-01-04", 216 | "channel": "tsoding" 217 | }, 218 | { 219 | "name": "Code Review", 220 | "url": "https://github.com/tsoding", 221 | "description": "On this day we are going through Issues and Pull Requests submitted to the Tsoding organization on GitHub", 222 | "days": [1], 223 | "time": "17:00", 224 | "starts": "2020-10-12", 225 | "ends": "2020-12-11", 226 | "channel": "tsoding" 227 | }, 228 | { 229 | "name": "Virtual Machine in C", 230 | "url": "https://github.com/tsoding/bm", 231 | "description": "Simple Virtual Machine with its own Bytecode and Assembly language.", 232 | "days": [1,2,3], 233 | "time": "17:00", 234 | "starts": "2020-12-12", 235 | "channel": "tsoding" 236 | }, 237 | { 238 | "name": "Advent of Code 2019 in Haskell", 239 | "url": "https://adventofcode.com/2019", 240 | "description": "Solving the entirety of Advent of Code 2019 in Haskell. No other language is allowed no matter how much stateful code the problem requires", 241 | "days": [4], 242 | "time": "17:00", 243 | "starts": "2020-12-31", 244 | "channel": "tsoding" 245 | } 246 | ], 247 | "extraEvents": [ 248 | { 249 | "date": "2018-07-11", 250 | "time": "23:00", 251 | "title": "Schedule Web App in TypeScript", 252 | "description": "

Schedule for Tsoding Streams. Front-End only Single Page Application without any Back-End. Makes all of the schedule building work yours computer problem. Saves me money on hosting.

This is an extra stream to get some work done for the upcoming release.

", 253 | "url": "https://github.com/tsoding/schedule-beta", 254 | "channel": "tsoding" 255 | }, 256 | { 257 | "date": "2018-08-03", 258 | "time": "23:00", 259 | "title": "HyperNerd (Bot in Haskell)", 260 | "description": "Enhancing my Total Surveillance Automatic Ban Machine. Join to help to test it! Moved from Thu, Aug 2, 2018.", 261 | "url": "https://github.com/tsoding/HyperNerd", 262 | "channel": "tsoding" 263 | }, 264 | { 265 | "date": "2018-12-21", 266 | "time": "23:00", 267 | "title": "Hacking Teeworlds (Game in C++)", 268 | "url": "https://github.com/teeworlds/teeworlds", 269 | "description": "I got a pretty interesting idea for a gamepad support for this game. Wanna try to implement it on the stream.", 270 | "channel": "tsoding" 271 | }, 272 | { 273 | "date": "2019-01-11", 274 | "time": "23:00", 275 | "title": "Multik (OCaml, C)", 276 | "url": "https://github.com/tsoding/multik", 277 | "description": "Animation Framework for making animation for Tsoding YouTube channel", 278 | "channel": "tsoding" 279 | }, 280 | { 281 | "date": "2019-05-06", 282 | "time": "23:00", 283 | "title": "Extra Haskell Stream", 284 | "url": "https://www.youtube.com/tsoding", 285 | "description": "First half — recording a video for the YouTube Channel. Second half — HyperNerd development.", 286 | "channel": "tsoding" 287 | }, 288 | { 289 | "date": "2019-06-03", 290 | "time": "23:00", 291 | "title": "Extra Haskell Stream (HyperNerd)", 292 | "url": "https://github.com/tsoding/HyperNerd", 293 | "description": "Since the last Haskell stream was cancelled due to my Internet being down, let's make another one instead of day off.", 294 | "channel": "tsoding" 295 | }, 296 | { 297 | "date": "2019-06-24", 298 | "time": "23:00", 299 | "title": "Recording YouTube video (Haskell)", 300 | "url": "https://youtub.com/tsoding", 301 | "description": "Recording next YouTube video.", 302 | "channel": "tsoding" 303 | }, 304 | { 305 | "date": "2019-09-23", 306 | "time": "23:00", 307 | "title": "Nothing (Game in Pure C)", 308 | "url": "https://github.com/tsoding/nothing", 309 | "description": "A simple platformer about nothing. No Engines, no OpenGL, no Box2D. Only C and SDL2", 310 | "channel": "tsoding" 311 | }, 312 | { 313 | "date": "2019-10-07", 314 | "time": "23:00", 315 | "title": "Last GRUB 2 stream", 316 | "url": "https://www.gnu.org/software/grub/grub-download.html", 317 | "description": "It was a fun project, but it's time to wrap it up...", 318 | "channel": "tsoding" 319 | }, 320 | { 321 | "date": "2019-11-04", 322 | "time": "23:00", 323 | "title": "JSON Parser in 100 Lines from scratch in Haskell", 324 | "url": "https://tsoding.org/schedule", 325 | "description": "", 326 | "channel": "tsoding" 327 | }, 328 | { 329 | "date": "2019-12-23", 330 | "time": "23:00", 331 | "title": "Stream from Debianus", 332 | "url": "https://twitch.tv/tsoding", 333 | "description": "I finally set up Debian on my second laptop to the point where I think it might be streamable. Testing it out. Gonna do some random Farting Around™.", 334 | "channel": "tsoding" 335 | }, 336 | { 337 | "title": "Web Application in C", 338 | "url": "https://github.com/tsoding/skedudle", 339 | "description": "Simple Event Schedule Web Application in C. This project has two goals:\n1. Implement backgend for https://github.com/tsoding/schedule\n2. Implement enough Web related code to later extract it as an epic Web Framework in C", 340 | "time": "23:00", 341 | "date": "2019-12-30", 342 | "channel": "tsoding" 343 | }, 344 | { 345 | "title": "Some Quick YouTube stuff recording", 346 | "url": "https://twitch.tv/tsoding", 347 | "description": "Nothing much to say. We gonna record some stuff for YouTube.", 348 | "time": "23:00", 349 | "date": "2020-01-20", 350 | "channel": "tsoding" 351 | }, 352 | { 353 | "title": "Vodus — Twitch Chat Renderer", 354 | "url": "https://github.com/tsoding/vodus", 355 | "description": "I got bored and decided to stream whatever.", 356 | "time": "23:00", 357 | "date": "2020-01-27", 358 | "channel": "tsoding" 359 | }, 360 | { 361 | "title": "Lazy Evalution using TypeScript", 362 | "url": "https://twitch.tv/tsoding", 363 | "description": "In today's lecture we gonna take a look into [Lazy Evalution](https://en.wikipedia.org/wiki/Lazy_evaluation) using [TypeScript](https://www.typescriptlang.org/) for all of the examples.", 364 | "time": "23:00", 365 | "date": "2020-02-03", 366 | "channel": "tsoding" 367 | }, 368 | { 369 | "title": "Extra Something Stream", 370 | "url": "https://github.com/tsoding/something", 371 | "description": "I kinda wanna keep developing that [thing](https://github.com/tsoding/something) while I have motivation to do so. Let's do another GameDev stream today, okay?\n\nP.S. I'm super duper sorry if I ruined your today's plans with this stream!", 372 | "time": "23:00", 373 | "date": "2020-02-24", 374 | "channel": "tsoding" 375 | }, 376 | { 377 | "title": "Random One-Off Stream", 378 | "url": "https://twitch.tv/tsoding", 379 | "description": "Just a random one-off stream on a random topic.", 380 | "time": "23:00", 381 | "date": "2020-03-30", 382 | "channel": "tsoding" 383 | } 384 | ], 385 | "cancelledEvents": [1532534400, 1533225600, 1536163200, 1540396800, 1541260800, 1544025600, 1545235200, 1547568000, 1548774000, 1559232000, 1569081600, 1574784000, 1577808000, 1579017600, 1579104000, 1579190400, 1579276800, 1586361600, 1587139200, 1590854400, 1590940800, 1591891200, 1592582400, 1594483200, 1594569600, 1597140000, 1597485600, 1597572000, 1597744800, 1597831200, 1597917600, 1599904800, 1600509600, 1602669600, 1602756000, 1606557600, 1610013600], 386 | "timezone": "Asia/Novosibirsk", 387 | "eventPatches": { 388 | "1536163200": { 389 | "title": "Probabilistic Functional Programming", 390 | "url": "https://wiki.haskell.org/Probabilistic_Functional_Programming", 391 | "description": "Probabilistic functional programming is a library for discrete random variables in terms of their distribution. A distribution represent the outcome of a probabilistic event as a collection of all possible values, tagged with their likelihood. It turns out that random variables establish a monad, namely a list monad where all items are equipped with a probability. A nice aspect of this system is that simulations can be specified independently from their method of execution. That is, we can either fully simulate or randomize any simulation without altering the code which defines it. Examples include dice games, the Monty Hall paradoxon and others." 392 | }, 393 | "1536768000": { 394 | "title": "Lisp in Haskell", 395 | "url": "https://tsoding.github.io/schedule/", 396 | "description": "Some time ago I started to develop my own Lisp language for scripting Nothing levels. The language is implemented in C, but I wanna try to implement it in Haskell just to see how easier/difficult it would be. I also wanna see if this makes a good YouTube video." 397 | }, 398 | "1537286400": { 399 | "title": "Snitch (GoLang)", 400 | "url": "https://github.com/tsoding/snitch", 401 | "description": "A simple tool that collects TODOs in the source code and reports them as GitHub issues" 402 | }, 403 | "1539100800": { 404 | "title": "Contribution Tracker (Haskell, Servant)", 405 | "url": "https://github.com/tsoding/tsugar", 406 | "description": "Simple service that monitors the activity on GitHub and give points for contributions" 407 | }, 408 | "1540915200": { 409 | "title": "Snitch (GoLang)", 410 | "url": "https://github.com/tsoding/snitch", 411 | "description": "A simple tool that collects TODOs in the source code and reports them as GitHub issues" 412 | }, 413 | "1541520000": { 414 | "title": "Snitch (GoLang)", 415 | "url": "https://github.com/tsoding/snitch", 416 | "description": "A simple tool that collects TODOs in the source code and reports them as GitHub issues" 417 | }, 418 | "1542211200": { 419 | "title": "Contribution Tracker (Haskell, Servant)", 420 | "url": "https://github.com/tsoding/tsugar", 421 | "description": "Simple service that monitors the activity on GitHub and give points for contributions" 422 | }, 423 | "1543420800": { 424 | "title": "Auto Testing for HyperNerd (ChatBot in Haskell)", 425 | "url": "https://github.com/tsoding/HyperNerd", 426 | "description": "Writing tests for our ChatBot is kinda difficult at the moment and because of that I've been avoiding implementing tests for quite awhile already. Which is not good. Today I wanna try to implement some abstraction layer to make testing of the bot easier. We also probably need to setup some code coverage threshold to motivate all of the contributors to write tests." 427 | }, 428 | "1545235200": { 429 | "title": "Hacking Teeworlds (Game in C++)", 430 | "url": "https://github.com/teeworlds/teeworlds", 431 | "description": "Yesterday I got a pretty interesting idea for a gamepad support for this game. Wanna try to implement it on the stream." 432 | }, 433 | "1546358400": { 434 | "title": "Learning Programming with Scratch", 435 | "url": "https://beta.scratch.mit.edu/", 436 | "description": "Let's start the year with Scratch programming! Pog" 437 | }, 438 | "1546444800": { 439 | "title": "Contribution Tracker (Haskell, Servant)", 440 | "url": "https://github.com/tsoding/tsugar", 441 | "description": "Simple service that monitors the activity on GitHub and give points for contributions" 442 | }, 443 | "1551024000": { 444 | "description": "

UPD. First ~1 hour of the stream is going to be recording the next episode of HaskellRank

A simple platformer about nothing. No Engines, no OpenGL, no Box2D. Only C and SDL2

" 445 | }, 446 | "1551283200": { 447 | "description": "

UPD. First ~1 hour of the stream is going to be recording the next episode of HaskellRank

Animation Framework for making animation for Tsoding YouTube channel.

" 448 | }, 449 | "1552060800": { 450 | "title": "YouTube Content", 451 | "url": "https://www.youtube.com/tsoding", 452 | "description": "Recording some videos for my YouTube Channel:
  • April Fools Video
  • Next HaskellRank episode with CodeWars
", 453 | "channel": "tsoding" 454 | }, 455 | "1553270400": { 456 | "title": "Smart Stream", 457 | "url": "https://www.twitch.tv/tsoding", 458 | "description": "

On Smart Stream we watch educational videos trying to get smart.

", 459 | "channel": "tsoding" 460 | }, 461 | "1555430400": { 462 | "title": "Teeworlds Gamepad + MyPaint Selection Tool (Real Open Source Contribution)", 463 | "description": "

UPD. First half of the stream will be fixing the gamepad support that we implemented for Teeworlds. Issue #2085

On the Real Open Source Contribution series we are trying to take an Open Source project that I personally use on a daily basis and improve it. The goal is to implement a feature and actually make it into the upstream source code of the project.

Current Project: MyPaint

Feature: Selection Tool.

" 464 | }, 465 | "1555516800": { 466 | "title": "Trying out Nim", 467 | "description": "On this stream we are just trying out Nim Programming Language. Nothing special.", 468 | "url": "https://nim-lang.org/" 469 | }, 470 | "1556640000": { 471 | "title": "Nim II", 472 | "description": "On the previous Nim stream the compilation killed my Laptop and we didn't have an opportunity to properly check out the language. Let's try to do it again!", 473 | "url": "https://nim-lang.org/" 474 | }, 475 | "1557244800": { 476 | "title": "Nim III", 477 | "description": "HDD on my main streaming machine died. On my backup laptop I have only Nim. Let's do another Nim stream lol.", 478 | "url": "https://github.com/tsoding/vitanim" 479 | }, 480 | "1557849600": { 481 | "title": "Chatterino 2 (Real Open Source Contribution)", 482 | "description": "

On the Real Open Source Contribution series we are trying to take an Open Source project that I personally use on a daily basis and improve it. The goal is to implement a feature and actually make it into the upstream source code of the project.

Current Project: Chatterino 2

Feature: Probably #976

", 483 | "url": "https://github.com/fourtf/chatterino2" 484 | }, 485 | "1560355200": { 486 | "title": "New Project (Pilot Stream)", 487 | "description": "[REDACTED]", 488 | "url": "https://tsoding.github.io/schedule/#_1560355200" 489 | }, 490 | "1568736000": { 491 | "title": "TempleOS", 492 | "description": "The GRUB gamepad patch was submitted to grub-devel mailing list, but nobody responded yet. So in the meantime while we are waiting for the feedback let's do a filler stream and play with Operating System created by The Smartest Programmer That Ever Lived", 493 | "url": "https://templeos.org/" 494 | }, 495 | "1569340800": { 496 | "title": "HTTP Server in C", 497 | "description": "Still no response from GRUB devs. Let's do something random.", 498 | "url": "https://twitch.tv/tsoding" 499 | }, 500 | "1569945600": { 501 | "title": "HTTP Server in C again", 502 | "description": "The GRUB devs acknowledged the existence of the patch, but we still have not recieve any actual feedback that we can work on. Let's continue playing with WebDev in Pure C", 503 | "url": "https://github.com/tsoding/node.c" 504 | }, 505 | "1575388800": { 506 | "title": "Web Application in C", 507 | "description": "I looked into Syncthing project for the past two weeks and just could not find anything interesting to work on. So we probably gonna do a different project next week, but today let's do Web Dev in C again lol", 508 | "url": "https://github.com/tsoding/node.c" 509 | }, 510 | "1579363200": { 511 | "title": "Tzozin Comeback", 512 | "description": "![](https://cdn.frankerfacez.com/935f9c418438c578b52659961ccc233a.png)", 513 | "url": "https://twitch.tv/tsoding" 514 | }, 515 | "1587225600": { 516 | "title": "Random One-Off Stream", 517 | "url": "https://twitch.tv/tsoding", 518 | "description": "Just a random one-off stream on a random topic." 519 | }, 520 | "1592668800": { 521 | "title": "Random One-Off Stream", 522 | "url": "https://twitch.tv/tsoding", 523 | "description": "Just a random one-off stream on a random topic." 524 | }, 525 | "1592755200": { 526 | "title": "WebAssembly Programming", 527 | "url": "https://github.com/tsoding/wasm-gasm", 528 | "description": "Finishing off what's been started yesterday." 529 | }, 530 | "1597334400": { 531 | "title": "cm (TUI App in Rust)", 532 | "url": "https://github.com/tsoding/cm", 533 | "description": "The goal of this application is to recreate the [compilation-mode](https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html) of Emacs as a standalone TUI application.", 534 | "time": "17:00" 535 | }, 536 | "1597831200": { 537 | "title": "Tzozin Comeback!", 538 | "url": "https://twitch.tv/tsoding", 539 | "description": "I recently moved to a different place without stable Internet so I had to go on a hiatus until the local ISP finally comes to my apartment and connects me to the Global Network. It was a rough time. I had a pretty severe stream withdrawal but finally I'm back! Let's celebrate and drink some tea!" 540 | }, 541 | "1597917600": { 542 | "title": "Tzozin Comeback!", 543 | "url": "https://twitch.tv/tsoding", 544 | "description": "I recently moved to a different place without stable Internet so I had to go on a hiatus until the local ISP finally comes to my apartment and connects me to the Global Network. It was a rough time. I had a pretty severe stream withdrawal but finally I'm back! Let's celebrate and drink some tea!" 545 | }, 546 | "1598004000": { 547 | "title": "Tzozin Comeback!", 548 | "url": "https://twitch.tv/tsoding", 549 | "description": "I recently moved to a different place without stable Internet so I had to go on a hiatus until the local ISP finally comes to my apartment and connects me to the Global Network. It was a rough time. I had a pretty severe stream withdrawal but finally I'm back! Let's celebrate and drink some tea!" 550 | }, 551 | "1601719200": { 552 | "title": "WCC (Low level language that compiles directly to WebAssembly)", 553 | "url": "https://github.com/tsoding/wcc", 554 | "description": "Low level language that compiles directly to WebAssembly. The goal of the project is to be as close to WebAssembly as possible yet providing nice abstraction mechanisms to speed up the development process. The target audience of the language is people who do [raw WebAssembly](https://surma.dev/things/raw-wasm/) development for recreational purposes." 555 | }, 556 | "1604743200": { 557 | "title": "Genetic Programming — Part 2", 558 | "url": "https://github.com/tsoding/gp", 559 | "description": "Continuation of the topic we started on the yesterday's one-off stream." 560 | }, 561 | "1604916000": { 562 | "title": "Genetic Programming — Part 3", 563 | "description": "Continuation of the topic we started on the last week one-off stream.", 564 | "url": "https://github.com/tsoding/gp" 565 | }, 566 | "1605261600": { 567 | "title": "Genetic Programming — Part 4", 568 | "description": "Continuation of the topic we started on the last week one-off stream.", 569 | "url": "https://github.com/tsoding/gp" 570 | }, 571 | "1606730400": { 572 | "title": "Something (Game in C++)", 573 | "description": "[Nothing is put on hiatus for now](https://gist.github.com/rexim/9a66d86860681b1b34f414572fddf4ff)\n\nThis is the next gamedev project with the goal to actually ship something. It's gonna be a platformer as well. You can pew pew pew and place destroyable blocks for protection from AI-driven enemies.", 574 | "url": "https://github.com/tsoding/something" 575 | }, 576 | "1609236000": { 577 | "title": "Lisp Interpreter in C", 578 | "description": "Embedded Lisp as a static library that could be used as a scripting language for applications.", 579 | "url": "https://github.com/tsoding/ebisp" 580 | }, 581 | "1609322400": { 582 | "title": "Lisp Interpreter in C", 583 | "description": "Embedded Lisp as a static library that could be used as a scripting language for applications.", 584 | "url": "https://github.com/tsoding/ebisp" 585 | }, 586 | "1609581600": { 587 | "title": "Bézier Curves in OpenGL Fragment Shaders", 588 | "description": "Continuing yesterday's topic of Bézier Curves. This time trying to render them using only OpenGL Fragment Shaders.\n\n(GameDev in C++ afterwards if we have enough time)", 589 | "url": "https://github.com/tsoding/bezier" 590 | }, 591 | "1610100000": { 592 | "title": "Advent of Code 2019 in Haskell", 593 | "description": "Solving the entirety of Advent of Code 2019 in Haskell. No other language is allowed no matter how much stateful code the problem requires", 594 | "url": "https://adventofcode.com/2019" 595 | }, 596 | "1610186400": { 597 | "title": "Webdev in Ada", 598 | "description": "Today we gonna take a look at [Ada Web Server](https://github.com/AdaCore/aws) framework and see what it's capable of.", 599 | "url": "https://twitch.tv/tsoding" 600 | }, 601 | "1610272800": { 602 | "title": "Programming in Ada", 603 | "description": "Continue to learn more about [Ada Programming Language](https://en.wikipedia.org/wiki/Ada_(programming_language)).\n\nThe plan for today:\n- setup [ada-mode](https://elpa.gnu.org/packages/ada-mode.html) for Emacs\n- learn how to use TLS sockets in Ada.\n- see how to add TLS connection support to [ada-irc](https://github.com/erik/ada-irc) or maybe even start developing a custom IRC library", 604 | "url": "https://github.com/tsoding/ada-probe" 605 | } 606 | } 607 | } 608 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "schedule", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@fortawesome/fontawesome-free": { 8 | "version": "5.9.0", 9 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.9.0.tgz", 10 | "integrity": "sha512-g795BBEzM/Hq2SYNPm/NQTIp3IWd4eXSH0ds87Na2jnrAUFX3wkyZAI4Gwj9DOaWMuz2/01i8oWI7P7T/XLkhg==" 11 | }, 12 | "@types/linkify-it": { 13 | "version": "2.1.0", 14 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-2.1.0.tgz", 15 | "integrity": "sha512-Q7DYAOi9O/+cLLhdaSvKdaumWyHbm7HAk/bFwwyTuU0arR5yyCeW5GOoqt4tJTpDRxhpx9Q8kQL6vMpuw9hDSw==" 16 | }, 17 | "@types/markdown-it": { 18 | "version": "0.0.7", 19 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.7.tgz", 20 | "integrity": "sha512-WyL6pa76ollQFQNEaLVa41ZUUvDvPY+qAUmlsphnrpL6I9p1m868b26FyeoOmo7X3/Ta/S9WKXcEYXUSHnxoVQ==", 21 | "requires": { 22 | "@types/linkify-it": "*" 23 | } 24 | }, 25 | "@types/moment": { 26 | "version": "2.13.0", 27 | "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz", 28 | "integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=", 29 | "requires": { 30 | "moment": "*" 31 | } 32 | }, 33 | "@types/moment-timezone": { 34 | "version": "0.5.9", 35 | "resolved": "https://registry.npmjs.org/@types/moment-timezone/-/moment-timezone-0.5.9.tgz", 36 | "integrity": "sha512-tBf1QR8xAayQfI1xD+SMSNDMxi+aCYKEhjgVXTZt3sgxS2XusNX3jM6jJbFoY/ar1CK/PaYJoPkWs/mwcwgOqw==", 37 | "requires": { 38 | "moment": ">=2.14.0" 39 | } 40 | }, 41 | "JSONStream": { 42 | "version": "1.3.5", 43 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 44 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 45 | "requires": { 46 | "jsonparse": "^1.2.0", 47 | "through": ">=2.2.7 <3" 48 | } 49 | }, 50 | "acorn": { 51 | "version": "6.0.4", 52 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", 53 | "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==" 54 | }, 55 | "acorn-dynamic-import": { 56 | "version": "4.0.0", 57 | "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", 58 | "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" 59 | }, 60 | "acorn-node": { 61 | "version": "1.6.2", 62 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", 63 | "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", 64 | "requires": { 65 | "acorn": "^6.0.2", 66 | "acorn-dynamic-import": "^4.0.0", 67 | "acorn-walk": "^6.1.0", 68 | "xtend": "^4.0.1" 69 | } 70 | }, 71 | "acorn-walk": { 72 | "version": "6.1.1", 73 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", 74 | "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==" 75 | }, 76 | "any-promise": { 77 | "version": "1.3.0", 78 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 79 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" 80 | }, 81 | "anymatch": { 82 | "version": "2.0.0", 83 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", 84 | "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", 85 | "requires": { 86 | "micromatch": "^3.1.4", 87 | "normalize-path": "^2.1.1" 88 | } 89 | }, 90 | "argparse": { 91 | "version": "1.0.10", 92 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 93 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 94 | "requires": { 95 | "sprintf-js": "~1.0.2" 96 | } 97 | }, 98 | "arr-diff": { 99 | "version": "4.0.0", 100 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 101 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" 102 | }, 103 | "arr-flatten": { 104 | "version": "1.1.0", 105 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 106 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" 107 | }, 108 | "arr-union": { 109 | "version": "3.1.0", 110 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 111 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" 112 | }, 113 | "array-filter": { 114 | "version": "0.0.1", 115 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", 116 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" 117 | }, 118 | "array-map": { 119 | "version": "0.0.0", 120 | "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", 121 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" 122 | }, 123 | "array-reduce": { 124 | "version": "0.0.0", 125 | "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", 126 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" 127 | }, 128 | "array-unique": { 129 | "version": "0.3.2", 130 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 131 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" 132 | }, 133 | "asn1.js": { 134 | "version": "4.10.1", 135 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 136 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 137 | "requires": { 138 | "bn.js": "^4.0.0", 139 | "inherits": "^2.0.1", 140 | "minimalistic-assert": "^1.0.0" 141 | } 142 | }, 143 | "assert": { 144 | "version": "1.4.1", 145 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", 146 | "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", 147 | "requires": { 148 | "util": "0.10.3" 149 | }, 150 | "dependencies": { 151 | "inherits": { 152 | "version": "2.0.1", 153 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 154 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" 155 | }, 156 | "util": { 157 | "version": "0.10.3", 158 | "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", 159 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 160 | "requires": { 161 | "inherits": "2.0.1" 162 | } 163 | } 164 | } 165 | }, 166 | "assign-symbols": { 167 | "version": "1.0.0", 168 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 169 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" 170 | }, 171 | "async-each": { 172 | "version": "1.0.1", 173 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 174 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" 175 | }, 176 | "atob": { 177 | "version": "2.1.2", 178 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 179 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" 180 | }, 181 | "balanced-match": { 182 | "version": "1.0.0", 183 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 184 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 185 | }, 186 | "base": { 187 | "version": "0.11.2", 188 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 189 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 190 | "requires": { 191 | "cache-base": "^1.0.1", 192 | "class-utils": "^0.3.5", 193 | "component-emitter": "^1.2.1", 194 | "define-property": "^1.0.0", 195 | "isobject": "^3.0.1", 196 | "mixin-deep": "^1.2.0", 197 | "pascalcase": "^0.1.1" 198 | }, 199 | "dependencies": { 200 | "define-property": { 201 | "version": "1.0.0", 202 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 203 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 204 | "requires": { 205 | "is-descriptor": "^1.0.0" 206 | } 207 | }, 208 | "is-accessor-descriptor": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 211 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 212 | "requires": { 213 | "kind-of": "^6.0.0" 214 | } 215 | }, 216 | "is-data-descriptor": { 217 | "version": "1.0.0", 218 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 219 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 220 | "requires": { 221 | "kind-of": "^6.0.0" 222 | } 223 | }, 224 | "is-descriptor": { 225 | "version": "1.0.2", 226 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 227 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 228 | "requires": { 229 | "is-accessor-descriptor": "^1.0.0", 230 | "is-data-descriptor": "^1.0.0", 231 | "kind-of": "^6.0.2" 232 | } 233 | } 234 | } 235 | }, 236 | "base64-js": { 237 | "version": "1.3.0", 238 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", 239 | "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" 240 | }, 241 | "binary-extensions": { 242 | "version": "1.12.0", 243 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", 244 | "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==" 245 | }, 246 | "bn.js": { 247 | "version": "4.11.8", 248 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 249 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" 250 | }, 251 | "brace-expansion": { 252 | "version": "1.1.11", 253 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 254 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 255 | "requires": { 256 | "balanced-match": "^1.0.0", 257 | "concat-map": "0.0.1" 258 | } 259 | }, 260 | "braces": { 261 | "version": "2.3.2", 262 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 263 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 264 | "requires": { 265 | "arr-flatten": "^1.1.0", 266 | "array-unique": "^0.3.2", 267 | "extend-shallow": "^2.0.1", 268 | "fill-range": "^4.0.0", 269 | "isobject": "^3.0.1", 270 | "repeat-element": "^1.1.2", 271 | "snapdragon": "^0.8.1", 272 | "snapdragon-node": "^2.0.1", 273 | "split-string": "^3.0.2", 274 | "to-regex": "^3.0.1" 275 | }, 276 | "dependencies": { 277 | "extend-shallow": { 278 | "version": "2.0.1", 279 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 280 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 281 | "requires": { 282 | "is-extendable": "^0.1.0" 283 | } 284 | } 285 | } 286 | }, 287 | "brorand": { 288 | "version": "1.1.0", 289 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 290 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 291 | }, 292 | "browser-pack": { 293 | "version": "6.1.0", 294 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", 295 | "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", 296 | "requires": { 297 | "JSONStream": "^1.0.3", 298 | "combine-source-map": "~0.8.0", 299 | "defined": "^1.0.0", 300 | "safe-buffer": "^5.1.1", 301 | "through2": "^2.0.0", 302 | "umd": "^3.0.0" 303 | } 304 | }, 305 | "browser-resolve": { 306 | "version": "1.11.3", 307 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", 308 | "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", 309 | "requires": { 310 | "resolve": "1.1.7" 311 | }, 312 | "dependencies": { 313 | "resolve": { 314 | "version": "1.1.7", 315 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 316 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" 317 | } 318 | } 319 | }, 320 | "browserify": { 321 | "version": "16.2.3", 322 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", 323 | "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", 324 | "requires": { 325 | "JSONStream": "^1.0.3", 326 | "assert": "^1.4.0", 327 | "browser-pack": "^6.0.1", 328 | "browser-resolve": "^1.11.0", 329 | "browserify-zlib": "~0.2.0", 330 | "buffer": "^5.0.2", 331 | "cached-path-relative": "^1.0.0", 332 | "concat-stream": "^1.6.0", 333 | "console-browserify": "^1.1.0", 334 | "constants-browserify": "~1.0.0", 335 | "crypto-browserify": "^3.0.0", 336 | "defined": "^1.0.0", 337 | "deps-sort": "^2.0.0", 338 | "domain-browser": "^1.2.0", 339 | "duplexer2": "~0.1.2", 340 | "events": "^2.0.0", 341 | "glob": "^7.1.0", 342 | "has": "^1.0.0", 343 | "htmlescape": "^1.1.0", 344 | "https-browserify": "^1.0.0", 345 | "inherits": "~2.0.1", 346 | "insert-module-globals": "^7.0.0", 347 | "labeled-stream-splicer": "^2.0.0", 348 | "mkdirp": "^0.5.0", 349 | "module-deps": "^6.0.0", 350 | "os-browserify": "~0.3.0", 351 | "parents": "^1.0.1", 352 | "path-browserify": "~0.0.0", 353 | "process": "~0.11.0", 354 | "punycode": "^1.3.2", 355 | "querystring-es3": "~0.2.0", 356 | "read-only-stream": "^2.0.0", 357 | "readable-stream": "^2.0.2", 358 | "resolve": "^1.1.4", 359 | "shasum": "^1.0.0", 360 | "shell-quote": "^1.6.1", 361 | "stream-browserify": "^2.0.0", 362 | "stream-http": "^2.0.0", 363 | "string_decoder": "^1.1.1", 364 | "subarg": "^1.0.0", 365 | "syntax-error": "^1.1.1", 366 | "through2": "^2.0.0", 367 | "timers-browserify": "^1.0.1", 368 | "tty-browserify": "0.0.1", 369 | "url": "~0.11.0", 370 | "util": "~0.10.1", 371 | "vm-browserify": "^1.0.0", 372 | "xtend": "^4.0.0" 373 | } 374 | }, 375 | "browserify-aes": { 376 | "version": "1.2.0", 377 | "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 378 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 379 | "requires": { 380 | "buffer-xor": "^1.0.3", 381 | "cipher-base": "^1.0.0", 382 | "create-hash": "^1.1.0", 383 | "evp_bytestokey": "^1.0.3", 384 | "inherits": "^2.0.1", 385 | "safe-buffer": "^5.0.1" 386 | } 387 | }, 388 | "browserify-cipher": { 389 | "version": "1.0.1", 390 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 391 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 392 | "requires": { 393 | "browserify-aes": "^1.0.4", 394 | "browserify-des": "^1.0.0", 395 | "evp_bytestokey": "^1.0.0" 396 | } 397 | }, 398 | "browserify-des": { 399 | "version": "1.0.2", 400 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 401 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 402 | "requires": { 403 | "cipher-base": "^1.0.1", 404 | "des.js": "^1.0.0", 405 | "inherits": "^2.0.1", 406 | "safe-buffer": "^5.1.2" 407 | } 408 | }, 409 | "browserify-rsa": { 410 | "version": "4.0.1", 411 | "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 412 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 413 | "requires": { 414 | "bn.js": "^4.1.0", 415 | "randombytes": "^2.0.1" 416 | } 417 | }, 418 | "browserify-sign": { 419 | "version": "4.0.4", 420 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 421 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 422 | "requires": { 423 | "bn.js": "^4.1.1", 424 | "browserify-rsa": "^4.0.0", 425 | "create-hash": "^1.1.0", 426 | "create-hmac": "^1.1.2", 427 | "elliptic": "^6.0.0", 428 | "inherits": "^2.0.1", 429 | "parse-asn1": "^5.0.0" 430 | } 431 | }, 432 | "browserify-zlib": { 433 | "version": "0.2.0", 434 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 435 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 436 | "requires": { 437 | "pako": "~1.0.5" 438 | } 439 | }, 440 | "buffer": { 441 | "version": "5.2.1", 442 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", 443 | "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", 444 | "requires": { 445 | "base64-js": "^1.0.2", 446 | "ieee754": "^1.1.4" 447 | } 448 | }, 449 | "buffer-from": { 450 | "version": "1.1.1", 451 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 452 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 453 | }, 454 | "buffer-xor": { 455 | "version": "1.0.3", 456 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 457 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" 458 | }, 459 | "builtin-status-codes": { 460 | "version": "3.0.0", 461 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 462 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" 463 | }, 464 | "cache-base": { 465 | "version": "1.0.1", 466 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 467 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 468 | "requires": { 469 | "collection-visit": "^1.0.0", 470 | "component-emitter": "^1.2.1", 471 | "get-value": "^2.0.6", 472 | "has-value": "^1.0.0", 473 | "isobject": "^3.0.1", 474 | "set-value": "^2.0.0", 475 | "to-object-path": "^0.3.0", 476 | "union-value": "^1.0.0", 477 | "unset-value": "^1.0.0" 478 | } 479 | }, 480 | "cached-path-relative": { 481 | "version": "1.0.2", 482 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", 483 | "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==" 484 | }, 485 | "chokidar": { 486 | "version": "2.0.4", 487 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", 488 | "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", 489 | "requires": { 490 | "anymatch": "^2.0.0", 491 | "async-each": "^1.0.0", 492 | "braces": "^2.3.0", 493 | "fsevents": "^1.2.2", 494 | "glob-parent": "^3.1.0", 495 | "inherits": "^2.0.1", 496 | "is-binary-path": "^1.0.0", 497 | "is-glob": "^4.0.0", 498 | "lodash.debounce": "^4.0.8", 499 | "normalize-path": "^2.1.1", 500 | "path-is-absolute": "^1.0.0", 501 | "readdirp": "^2.0.0", 502 | "upath": "^1.0.5" 503 | } 504 | }, 505 | "cipher-base": { 506 | "version": "1.0.4", 507 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 508 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 509 | "requires": { 510 | "inherits": "^2.0.1", 511 | "safe-buffer": "^5.0.1" 512 | } 513 | }, 514 | "class-utils": { 515 | "version": "0.3.6", 516 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 517 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 518 | "requires": { 519 | "arr-union": "^3.1.0", 520 | "define-property": "^0.2.5", 521 | "isobject": "^3.0.0", 522 | "static-extend": "^0.1.1" 523 | }, 524 | "dependencies": { 525 | "define-property": { 526 | "version": "0.2.5", 527 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 528 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 529 | "requires": { 530 | "is-descriptor": "^0.1.0" 531 | } 532 | } 533 | } 534 | }, 535 | "collection-visit": { 536 | "version": "1.0.0", 537 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 538 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 539 | "requires": { 540 | "map-visit": "^1.0.0", 541 | "object-visit": "^1.0.0" 542 | } 543 | }, 544 | "combine-source-map": { 545 | "version": "0.8.0", 546 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", 547 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", 548 | "requires": { 549 | "convert-source-map": "~1.1.0", 550 | "inline-source-map": "~0.6.0", 551 | "lodash.memoize": "~3.0.3", 552 | "source-map": "~0.5.3" 553 | } 554 | }, 555 | "commander": { 556 | "version": "2.17.1", 557 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", 558 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" 559 | }, 560 | "component-emitter": { 561 | "version": "1.2.1", 562 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 563 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 564 | }, 565 | "concat-map": { 566 | "version": "0.0.1", 567 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 568 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 569 | }, 570 | "concat-stream": { 571 | "version": "1.6.2", 572 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 573 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 574 | "requires": { 575 | "buffer-from": "^1.0.0", 576 | "inherits": "^2.0.3", 577 | "readable-stream": "^2.2.2", 578 | "typedarray": "^0.0.6" 579 | } 580 | }, 581 | "console-browserify": { 582 | "version": "1.1.0", 583 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 584 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 585 | "requires": { 586 | "date-now": "^0.1.4" 587 | } 588 | }, 589 | "constants-browserify": { 590 | "version": "1.0.0", 591 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 592 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" 593 | }, 594 | "convert-source-map": { 595 | "version": "1.1.3", 596 | "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", 597 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" 598 | }, 599 | "copy-descriptor": { 600 | "version": "0.1.1", 601 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 602 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" 603 | }, 604 | "core-util-is": { 605 | "version": "1.0.2", 606 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 607 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 608 | }, 609 | "create-ecdh": { 610 | "version": "4.0.3", 611 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 612 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 613 | "requires": { 614 | "bn.js": "^4.1.0", 615 | "elliptic": "^6.0.0" 616 | } 617 | }, 618 | "create-hash": { 619 | "version": "1.2.0", 620 | "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 621 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 622 | "requires": { 623 | "cipher-base": "^1.0.1", 624 | "inherits": "^2.0.1", 625 | "md5.js": "^1.3.4", 626 | "ripemd160": "^2.0.1", 627 | "sha.js": "^2.4.0" 628 | } 629 | }, 630 | "create-hmac": { 631 | "version": "1.1.7", 632 | "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 633 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 634 | "requires": { 635 | "cipher-base": "^1.0.3", 636 | "create-hash": "^1.1.0", 637 | "inherits": "^2.0.1", 638 | "ripemd160": "^2.0.0", 639 | "safe-buffer": "^5.0.1", 640 | "sha.js": "^2.4.8" 641 | } 642 | }, 643 | "crypto-browserify": { 644 | "version": "3.12.0", 645 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 646 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 647 | "requires": { 648 | "browserify-cipher": "^1.0.0", 649 | "browserify-sign": "^4.0.0", 650 | "create-ecdh": "^4.0.0", 651 | "create-hash": "^1.1.0", 652 | "create-hmac": "^1.1.0", 653 | "diffie-hellman": "^5.0.0", 654 | "inherits": "^2.0.1", 655 | "pbkdf2": "^3.0.3", 656 | "public-encrypt": "^4.0.0", 657 | "randombytes": "^2.0.0", 658 | "randomfill": "^1.0.3" 659 | } 660 | }, 661 | "date-now": { 662 | "version": "0.1.4", 663 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 664 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" 665 | }, 666 | "debug": { 667 | "version": "2.6.9", 668 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 669 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 670 | "requires": { 671 | "ms": "2.0.0" 672 | } 673 | }, 674 | "decode-uri-component": { 675 | "version": "0.2.0", 676 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 677 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" 678 | }, 679 | "define-property": { 680 | "version": "2.0.2", 681 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 682 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 683 | "requires": { 684 | "is-descriptor": "^1.0.2", 685 | "isobject": "^3.0.1" 686 | }, 687 | "dependencies": { 688 | "is-accessor-descriptor": { 689 | "version": "1.0.0", 690 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 691 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 692 | "requires": { 693 | "kind-of": "^6.0.0" 694 | } 695 | }, 696 | "is-data-descriptor": { 697 | "version": "1.0.0", 698 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 699 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 700 | "requires": { 701 | "kind-of": "^6.0.0" 702 | } 703 | }, 704 | "is-descriptor": { 705 | "version": "1.0.2", 706 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 707 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 708 | "requires": { 709 | "is-accessor-descriptor": "^1.0.0", 710 | "is-data-descriptor": "^1.0.0", 711 | "kind-of": "^6.0.2" 712 | } 713 | } 714 | } 715 | }, 716 | "defined": { 717 | "version": "1.0.0", 718 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 719 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" 720 | }, 721 | "deps-sort": { 722 | "version": "2.0.0", 723 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", 724 | "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", 725 | "requires": { 726 | "JSONStream": "^1.0.3", 727 | "shasum": "^1.0.0", 728 | "subarg": "^1.0.0", 729 | "through2": "^2.0.0" 730 | } 731 | }, 732 | "des.js": { 733 | "version": "1.0.0", 734 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", 735 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 736 | "requires": { 737 | "inherits": "^2.0.1", 738 | "minimalistic-assert": "^1.0.0" 739 | } 740 | }, 741 | "detective": { 742 | "version": "5.1.0", 743 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", 744 | "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==", 745 | "requires": { 746 | "acorn-node": "^1.3.0", 747 | "defined": "^1.0.0", 748 | "minimist": "^1.1.1" 749 | } 750 | }, 751 | "diffie-hellman": { 752 | "version": "5.0.3", 753 | "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 754 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 755 | "requires": { 756 | "bn.js": "^4.1.0", 757 | "miller-rabin": "^4.0.0", 758 | "randombytes": "^2.0.0" 759 | } 760 | }, 761 | "domain-browser": { 762 | "version": "1.2.0", 763 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 764 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" 765 | }, 766 | "duplexer2": { 767 | "version": "0.1.4", 768 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 769 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 770 | "requires": { 771 | "readable-stream": "^2.0.2" 772 | } 773 | }, 774 | "elliptic": { 775 | "version": "6.4.1", 776 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", 777 | "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", 778 | "requires": { 779 | "bn.js": "^4.4.0", 780 | "brorand": "^1.0.1", 781 | "hash.js": "^1.0.0", 782 | "hmac-drbg": "^1.0.0", 783 | "inherits": "^2.0.1", 784 | "minimalistic-assert": "^1.0.0", 785 | "minimalistic-crypto-utils": "^1.0.0" 786 | } 787 | }, 788 | "entities": { 789 | "version": "1.1.2", 790 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 791 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" 792 | }, 793 | "error-ex": { 794 | "version": "1.3.2", 795 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 796 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 797 | "requires": { 798 | "is-arrayish": "^0.2.1" 799 | } 800 | }, 801 | "events": { 802 | "version": "2.1.0", 803 | "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", 804 | "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==" 805 | }, 806 | "evp_bytestokey": { 807 | "version": "1.0.3", 808 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 809 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 810 | "requires": { 811 | "md5.js": "^1.3.4", 812 | "safe-buffer": "^5.1.1" 813 | } 814 | }, 815 | "expand-brackets": { 816 | "version": "2.1.4", 817 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 818 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 819 | "requires": { 820 | "debug": "^2.3.3", 821 | "define-property": "^0.2.5", 822 | "extend-shallow": "^2.0.1", 823 | "posix-character-classes": "^0.1.0", 824 | "regex-not": "^1.0.0", 825 | "snapdragon": "^0.8.1", 826 | "to-regex": "^3.0.1" 827 | }, 828 | "dependencies": { 829 | "define-property": { 830 | "version": "0.2.5", 831 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 832 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 833 | "requires": { 834 | "is-descriptor": "^0.1.0" 835 | } 836 | }, 837 | "extend-shallow": { 838 | "version": "2.0.1", 839 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 840 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 841 | "requires": { 842 | "is-extendable": "^0.1.0" 843 | } 844 | } 845 | } 846 | }, 847 | "extend": { 848 | "version": "1.3.0", 849 | "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", 850 | "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" 851 | }, 852 | "extend-shallow": { 853 | "version": "3.0.2", 854 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 855 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 856 | "requires": { 857 | "assign-symbols": "^1.0.0", 858 | "is-extendable": "^1.0.1" 859 | }, 860 | "dependencies": { 861 | "is-extendable": { 862 | "version": "1.0.1", 863 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 864 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 865 | "requires": { 866 | "is-plain-object": "^2.0.4" 867 | } 868 | } 869 | } 870 | }, 871 | "extglob": { 872 | "version": "2.0.4", 873 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 874 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 875 | "requires": { 876 | "array-unique": "^0.3.2", 877 | "define-property": "^1.0.0", 878 | "expand-brackets": "^2.1.4", 879 | "extend-shallow": "^2.0.1", 880 | "fragment-cache": "^0.2.1", 881 | "regex-not": "^1.0.0", 882 | "snapdragon": "^0.8.1", 883 | "to-regex": "^3.0.1" 884 | }, 885 | "dependencies": { 886 | "define-property": { 887 | "version": "1.0.0", 888 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 889 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 890 | "requires": { 891 | "is-descriptor": "^1.0.0" 892 | } 893 | }, 894 | "extend-shallow": { 895 | "version": "2.0.1", 896 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 897 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 898 | "requires": { 899 | "is-extendable": "^0.1.0" 900 | } 901 | }, 902 | "is-accessor-descriptor": { 903 | "version": "1.0.0", 904 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 905 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 906 | "requires": { 907 | "kind-of": "^6.0.0" 908 | } 909 | }, 910 | "is-data-descriptor": { 911 | "version": "1.0.0", 912 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 913 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 914 | "requires": { 915 | "kind-of": "^6.0.0" 916 | } 917 | }, 918 | "is-descriptor": { 919 | "version": "1.0.2", 920 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 921 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 922 | "requires": { 923 | "is-accessor-descriptor": "^1.0.0", 924 | "is-data-descriptor": "^1.0.0", 925 | "kind-of": "^6.0.2" 926 | } 927 | } 928 | } 929 | }, 930 | "fill-range": { 931 | "version": "4.0.0", 932 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 933 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 934 | "requires": { 935 | "extend-shallow": "^2.0.1", 936 | "is-number": "^3.0.0", 937 | "repeat-string": "^1.6.1", 938 | "to-regex-range": "^2.1.0" 939 | }, 940 | "dependencies": { 941 | "extend-shallow": { 942 | "version": "2.0.1", 943 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 944 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 945 | "requires": { 946 | "is-extendable": "^0.1.0" 947 | } 948 | } 949 | } 950 | }, 951 | "for-in": { 952 | "version": "1.0.2", 953 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 954 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" 955 | }, 956 | "fragment-cache": { 957 | "version": "0.2.1", 958 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 959 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 960 | "requires": { 961 | "map-cache": "^0.2.2" 962 | } 963 | }, 964 | "fs.realpath": { 965 | "version": "1.0.0", 966 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 967 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 968 | }, 969 | "fsevents": { 970 | "version": "1.2.9", 971 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", 972 | "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", 973 | "optional": true, 974 | "requires": { 975 | "nan": "^2.12.1", 976 | "node-pre-gyp": "^0.12.0" 977 | }, 978 | "dependencies": { 979 | "abbrev": { 980 | "version": "1.1.1", 981 | "bundled": true, 982 | "optional": true 983 | }, 984 | "ansi-regex": { 985 | "version": "2.1.1", 986 | "bundled": true, 987 | "optional": true 988 | }, 989 | "aproba": { 990 | "version": "1.2.0", 991 | "bundled": true, 992 | "optional": true 993 | }, 994 | "are-we-there-yet": { 995 | "version": "1.1.5", 996 | "bundled": true, 997 | "optional": true, 998 | "requires": { 999 | "delegates": "^1.0.0", 1000 | "readable-stream": "^2.0.6" 1001 | } 1002 | }, 1003 | "balanced-match": { 1004 | "version": "1.0.0", 1005 | "bundled": true, 1006 | "optional": true 1007 | }, 1008 | "brace-expansion": { 1009 | "version": "1.1.11", 1010 | "bundled": true, 1011 | "optional": true, 1012 | "requires": { 1013 | "balanced-match": "^1.0.0", 1014 | "concat-map": "0.0.1" 1015 | } 1016 | }, 1017 | "chownr": { 1018 | "version": "1.1.1", 1019 | "bundled": true, 1020 | "optional": true 1021 | }, 1022 | "code-point-at": { 1023 | "version": "1.1.0", 1024 | "bundled": true, 1025 | "optional": true 1026 | }, 1027 | "concat-map": { 1028 | "version": "0.0.1", 1029 | "bundled": true, 1030 | "optional": true 1031 | }, 1032 | "console-control-strings": { 1033 | "version": "1.1.0", 1034 | "bundled": true, 1035 | "optional": true 1036 | }, 1037 | "core-util-is": { 1038 | "version": "1.0.2", 1039 | "bundled": true, 1040 | "optional": true 1041 | }, 1042 | "debug": { 1043 | "version": "4.1.1", 1044 | "bundled": true, 1045 | "optional": true, 1046 | "requires": { 1047 | "ms": "^2.1.1" 1048 | } 1049 | }, 1050 | "deep-extend": { 1051 | "version": "0.6.0", 1052 | "bundled": true, 1053 | "optional": true 1054 | }, 1055 | "delegates": { 1056 | "version": "1.0.0", 1057 | "bundled": true, 1058 | "optional": true 1059 | }, 1060 | "detect-libc": { 1061 | "version": "1.0.3", 1062 | "bundled": true, 1063 | "optional": true 1064 | }, 1065 | "fs-minipass": { 1066 | "version": "1.2.5", 1067 | "bundled": true, 1068 | "optional": true, 1069 | "requires": { 1070 | "minipass": "^2.2.1" 1071 | } 1072 | }, 1073 | "fs.realpath": { 1074 | "version": "1.0.0", 1075 | "bundled": true, 1076 | "optional": true 1077 | }, 1078 | "gauge": { 1079 | "version": "2.7.4", 1080 | "bundled": true, 1081 | "optional": true, 1082 | "requires": { 1083 | "aproba": "^1.0.3", 1084 | "console-control-strings": "^1.0.0", 1085 | "has-unicode": "^2.0.0", 1086 | "object-assign": "^4.1.0", 1087 | "signal-exit": "^3.0.0", 1088 | "string-width": "^1.0.1", 1089 | "strip-ansi": "^3.0.1", 1090 | "wide-align": "^1.1.0" 1091 | } 1092 | }, 1093 | "glob": { 1094 | "version": "7.1.3", 1095 | "bundled": true, 1096 | "optional": true, 1097 | "requires": { 1098 | "fs.realpath": "^1.0.0", 1099 | "inflight": "^1.0.4", 1100 | "inherits": "2", 1101 | "minimatch": "^3.0.4", 1102 | "once": "^1.3.0", 1103 | "path-is-absolute": "^1.0.0" 1104 | } 1105 | }, 1106 | "has-unicode": { 1107 | "version": "2.0.1", 1108 | "bundled": true, 1109 | "optional": true 1110 | }, 1111 | "iconv-lite": { 1112 | "version": "0.4.24", 1113 | "bundled": true, 1114 | "optional": true, 1115 | "requires": { 1116 | "safer-buffer": ">= 2.1.2 < 3" 1117 | } 1118 | }, 1119 | "ignore-walk": { 1120 | "version": "3.0.1", 1121 | "bundled": true, 1122 | "optional": true, 1123 | "requires": { 1124 | "minimatch": "^3.0.4" 1125 | } 1126 | }, 1127 | "inflight": { 1128 | "version": "1.0.6", 1129 | "bundled": true, 1130 | "optional": true, 1131 | "requires": { 1132 | "once": "^1.3.0", 1133 | "wrappy": "1" 1134 | } 1135 | }, 1136 | "inherits": { 1137 | "version": "2.0.3", 1138 | "bundled": true, 1139 | "optional": true 1140 | }, 1141 | "ini": { 1142 | "version": "1.3.5", 1143 | "bundled": true, 1144 | "optional": true 1145 | }, 1146 | "is-fullwidth-code-point": { 1147 | "version": "1.0.0", 1148 | "bundled": true, 1149 | "optional": true, 1150 | "requires": { 1151 | "number-is-nan": "^1.0.0" 1152 | } 1153 | }, 1154 | "isarray": { 1155 | "version": "1.0.0", 1156 | "bundled": true, 1157 | "optional": true 1158 | }, 1159 | "minimatch": { 1160 | "version": "3.0.4", 1161 | "bundled": true, 1162 | "optional": true, 1163 | "requires": { 1164 | "brace-expansion": "^1.1.7" 1165 | } 1166 | }, 1167 | "minimist": { 1168 | "version": "0.0.8", 1169 | "bundled": true, 1170 | "optional": true 1171 | }, 1172 | "minipass": { 1173 | "version": "2.3.5", 1174 | "bundled": true, 1175 | "optional": true, 1176 | "requires": { 1177 | "safe-buffer": "^5.1.2", 1178 | "yallist": "^3.0.0" 1179 | } 1180 | }, 1181 | "minizlib": { 1182 | "version": "1.2.1", 1183 | "bundled": true, 1184 | "optional": true, 1185 | "requires": { 1186 | "minipass": "^2.2.1" 1187 | } 1188 | }, 1189 | "mkdirp": { 1190 | "version": "0.5.1", 1191 | "bundled": true, 1192 | "optional": true, 1193 | "requires": { 1194 | "minimist": "0.0.8" 1195 | } 1196 | }, 1197 | "ms": { 1198 | "version": "2.1.1", 1199 | "bundled": true, 1200 | "optional": true 1201 | }, 1202 | "nan": { 1203 | "version": "2.13.2", 1204 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", 1205 | "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", 1206 | "optional": true 1207 | }, 1208 | "needle": { 1209 | "version": "2.3.0", 1210 | "bundled": true, 1211 | "optional": true, 1212 | "requires": { 1213 | "debug": "^4.1.0", 1214 | "iconv-lite": "^0.4.4", 1215 | "sax": "^1.2.4" 1216 | } 1217 | }, 1218 | "node-pre-gyp": { 1219 | "version": "0.12.0", 1220 | "bundled": true, 1221 | "optional": true, 1222 | "requires": { 1223 | "detect-libc": "^1.0.2", 1224 | "mkdirp": "^0.5.1", 1225 | "needle": "^2.2.1", 1226 | "nopt": "^4.0.1", 1227 | "npm-packlist": "^1.1.6", 1228 | "npmlog": "^4.0.2", 1229 | "rc": "^1.2.7", 1230 | "rimraf": "^2.6.1", 1231 | "semver": "^5.3.0", 1232 | "tar": "^4" 1233 | } 1234 | }, 1235 | "nopt": { 1236 | "version": "4.0.1", 1237 | "bundled": true, 1238 | "optional": true, 1239 | "requires": { 1240 | "abbrev": "1", 1241 | "osenv": "^0.1.4" 1242 | } 1243 | }, 1244 | "npm-bundled": { 1245 | "version": "1.0.6", 1246 | "bundled": true, 1247 | "optional": true 1248 | }, 1249 | "npm-packlist": { 1250 | "version": "1.4.1", 1251 | "bundled": true, 1252 | "optional": true, 1253 | "requires": { 1254 | "ignore-walk": "^3.0.1", 1255 | "npm-bundled": "^1.0.1" 1256 | } 1257 | }, 1258 | "npmlog": { 1259 | "version": "4.1.2", 1260 | "bundled": true, 1261 | "optional": true, 1262 | "requires": { 1263 | "are-we-there-yet": "~1.1.2", 1264 | "console-control-strings": "~1.1.0", 1265 | "gauge": "~2.7.3", 1266 | "set-blocking": "~2.0.0" 1267 | } 1268 | }, 1269 | "number-is-nan": { 1270 | "version": "1.0.1", 1271 | "bundled": true, 1272 | "optional": true 1273 | }, 1274 | "object-assign": { 1275 | "version": "4.1.1", 1276 | "bundled": true, 1277 | "optional": true 1278 | }, 1279 | "once": { 1280 | "version": "1.4.0", 1281 | "bundled": true, 1282 | "optional": true, 1283 | "requires": { 1284 | "wrappy": "1" 1285 | } 1286 | }, 1287 | "os-homedir": { 1288 | "version": "1.0.2", 1289 | "bundled": true, 1290 | "optional": true 1291 | }, 1292 | "os-tmpdir": { 1293 | "version": "1.0.2", 1294 | "bundled": true, 1295 | "optional": true 1296 | }, 1297 | "osenv": { 1298 | "version": "0.1.5", 1299 | "bundled": true, 1300 | "optional": true, 1301 | "requires": { 1302 | "os-homedir": "^1.0.0", 1303 | "os-tmpdir": "^1.0.0" 1304 | } 1305 | }, 1306 | "path-is-absolute": { 1307 | "version": "1.0.1", 1308 | "bundled": true, 1309 | "optional": true 1310 | }, 1311 | "process-nextick-args": { 1312 | "version": "2.0.0", 1313 | "bundled": true, 1314 | "optional": true 1315 | }, 1316 | "rc": { 1317 | "version": "1.2.8", 1318 | "bundled": true, 1319 | "optional": true, 1320 | "requires": { 1321 | "deep-extend": "^0.6.0", 1322 | "ini": "~1.3.0", 1323 | "minimist": "^1.2.0", 1324 | "strip-json-comments": "~2.0.1" 1325 | }, 1326 | "dependencies": { 1327 | "minimist": { 1328 | "version": "1.2.0", 1329 | "bundled": true, 1330 | "optional": true 1331 | } 1332 | } 1333 | }, 1334 | "readable-stream": { 1335 | "version": "2.3.6", 1336 | "bundled": true, 1337 | "optional": true, 1338 | "requires": { 1339 | "core-util-is": "~1.0.0", 1340 | "inherits": "~2.0.3", 1341 | "isarray": "~1.0.0", 1342 | "process-nextick-args": "~2.0.0", 1343 | "safe-buffer": "~5.1.1", 1344 | "string_decoder": "~1.1.1", 1345 | "util-deprecate": "~1.0.1" 1346 | } 1347 | }, 1348 | "rimraf": { 1349 | "version": "2.6.3", 1350 | "bundled": true, 1351 | "optional": true, 1352 | "requires": { 1353 | "glob": "^7.1.3" 1354 | } 1355 | }, 1356 | "safe-buffer": { 1357 | "version": "5.1.2", 1358 | "bundled": true, 1359 | "optional": true 1360 | }, 1361 | "safer-buffer": { 1362 | "version": "2.1.2", 1363 | "bundled": true, 1364 | "optional": true 1365 | }, 1366 | "sax": { 1367 | "version": "1.2.4", 1368 | "bundled": true, 1369 | "optional": true 1370 | }, 1371 | "semver": { 1372 | "version": "5.7.0", 1373 | "bundled": true, 1374 | "optional": true 1375 | }, 1376 | "set-blocking": { 1377 | "version": "2.0.0", 1378 | "bundled": true, 1379 | "optional": true 1380 | }, 1381 | "signal-exit": { 1382 | "version": "3.0.2", 1383 | "bundled": true, 1384 | "optional": true 1385 | }, 1386 | "string-width": { 1387 | "version": "1.0.2", 1388 | "bundled": true, 1389 | "optional": true, 1390 | "requires": { 1391 | "code-point-at": "^1.0.0", 1392 | "is-fullwidth-code-point": "^1.0.0", 1393 | "strip-ansi": "^3.0.0" 1394 | } 1395 | }, 1396 | "string_decoder": { 1397 | "version": "1.1.1", 1398 | "bundled": true, 1399 | "optional": true, 1400 | "requires": { 1401 | "safe-buffer": "~5.1.0" 1402 | } 1403 | }, 1404 | "strip-ansi": { 1405 | "version": "3.0.1", 1406 | "bundled": true, 1407 | "optional": true, 1408 | "requires": { 1409 | "ansi-regex": "^2.0.0" 1410 | } 1411 | }, 1412 | "strip-json-comments": { 1413 | "version": "2.0.1", 1414 | "bundled": true, 1415 | "optional": true 1416 | }, 1417 | "tar": { 1418 | "version": "4.4.8", 1419 | "bundled": true, 1420 | "optional": true, 1421 | "requires": { 1422 | "chownr": "^1.1.1", 1423 | "fs-minipass": "^1.2.5", 1424 | "minipass": "^2.3.4", 1425 | "minizlib": "^1.1.1", 1426 | "mkdirp": "^0.5.0", 1427 | "safe-buffer": "^5.1.2", 1428 | "yallist": "^3.0.2" 1429 | } 1430 | }, 1431 | "util-deprecate": { 1432 | "version": "1.0.2", 1433 | "bundled": true, 1434 | "optional": true 1435 | }, 1436 | "wide-align": { 1437 | "version": "1.1.3", 1438 | "bundled": true, 1439 | "optional": true, 1440 | "requires": { 1441 | "string-width": "^1.0.2 || 2" 1442 | } 1443 | }, 1444 | "wrappy": { 1445 | "version": "1.0.2", 1446 | "bundled": true, 1447 | "optional": true 1448 | }, 1449 | "yallist": { 1450 | "version": "3.0.3", 1451 | "bundled": true, 1452 | "optional": true 1453 | } 1454 | } 1455 | }, 1456 | "function-bind": { 1457 | "version": "1.1.1", 1458 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1459 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1460 | }, 1461 | "get-assigned-identifiers": { 1462 | "version": "1.2.0", 1463 | "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", 1464 | "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" 1465 | }, 1466 | "get-value": { 1467 | "version": "2.0.6", 1468 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 1469 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" 1470 | }, 1471 | "glob": { 1472 | "version": "7.1.3", 1473 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 1474 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 1475 | "requires": { 1476 | "fs.realpath": "^1.0.0", 1477 | "inflight": "^1.0.4", 1478 | "inherits": "2", 1479 | "minimatch": "^3.0.4", 1480 | "once": "^1.3.0", 1481 | "path-is-absolute": "^1.0.0" 1482 | } 1483 | }, 1484 | "glob-parent": { 1485 | "version": "3.1.0", 1486 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 1487 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 1488 | "requires": { 1489 | "is-glob": "^3.1.0", 1490 | "path-dirname": "^1.0.0" 1491 | }, 1492 | "dependencies": { 1493 | "is-glob": { 1494 | "version": "3.1.0", 1495 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 1496 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 1497 | "requires": { 1498 | "is-extglob": "^2.1.0" 1499 | } 1500 | } 1501 | } 1502 | }, 1503 | "graceful-fs": { 1504 | "version": "4.1.15", 1505 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 1506 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" 1507 | }, 1508 | "has": { 1509 | "version": "1.0.3", 1510 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1511 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1512 | "requires": { 1513 | "function-bind": "^1.1.1" 1514 | } 1515 | }, 1516 | "has-value": { 1517 | "version": "1.0.0", 1518 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 1519 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 1520 | "requires": { 1521 | "get-value": "^2.0.6", 1522 | "has-values": "^1.0.0", 1523 | "isobject": "^3.0.0" 1524 | } 1525 | }, 1526 | "has-values": { 1527 | "version": "1.0.0", 1528 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 1529 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 1530 | "requires": { 1531 | "is-number": "^3.0.0", 1532 | "kind-of": "^4.0.0" 1533 | }, 1534 | "dependencies": { 1535 | "kind-of": { 1536 | "version": "4.0.0", 1537 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 1538 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 1539 | "requires": { 1540 | "is-buffer": "^1.1.5" 1541 | } 1542 | } 1543 | } 1544 | }, 1545 | "hash-base": { 1546 | "version": "3.0.4", 1547 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 1548 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 1549 | "requires": { 1550 | "inherits": "^2.0.1", 1551 | "safe-buffer": "^5.0.1" 1552 | } 1553 | }, 1554 | "hash.js": { 1555 | "version": "1.1.5", 1556 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", 1557 | "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", 1558 | "requires": { 1559 | "inherits": "^2.0.3", 1560 | "minimalistic-assert": "^1.0.1" 1561 | } 1562 | }, 1563 | "hmac-drbg": { 1564 | "version": "1.0.1", 1565 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1566 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1567 | "requires": { 1568 | "hash.js": "^1.0.3", 1569 | "minimalistic-assert": "^1.0.0", 1570 | "minimalistic-crypto-utils": "^1.0.1" 1571 | } 1572 | }, 1573 | "htmlescape": { 1574 | "version": "1.1.1", 1575 | "resolved": "http://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", 1576 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" 1577 | }, 1578 | "https-browserify": { 1579 | "version": "1.0.0", 1580 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 1581 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" 1582 | }, 1583 | "ieee754": { 1584 | "version": "1.1.12", 1585 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", 1586 | "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" 1587 | }, 1588 | "inflight": { 1589 | "version": "1.0.6", 1590 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1591 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1592 | "requires": { 1593 | "once": "^1.3.0", 1594 | "wrappy": "1" 1595 | } 1596 | }, 1597 | "inherits": { 1598 | "version": "2.0.3", 1599 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1600 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1601 | }, 1602 | "inline-source-map": { 1603 | "version": "0.6.2", 1604 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", 1605 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 1606 | "requires": { 1607 | "source-map": "~0.5.3" 1608 | } 1609 | }, 1610 | "insert-module-globals": { 1611 | "version": "7.2.0", 1612 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", 1613 | "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", 1614 | "requires": { 1615 | "JSONStream": "^1.0.3", 1616 | "acorn-node": "^1.5.2", 1617 | "combine-source-map": "^0.8.0", 1618 | "concat-stream": "^1.6.1", 1619 | "is-buffer": "^1.1.0", 1620 | "path-is-absolute": "^1.0.1", 1621 | "process": "~0.11.0", 1622 | "through2": "^2.0.0", 1623 | "undeclared-identifiers": "^1.1.2", 1624 | "xtend": "^4.0.0" 1625 | } 1626 | }, 1627 | "is-accessor-descriptor": { 1628 | "version": "0.1.6", 1629 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 1630 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 1631 | "requires": { 1632 | "kind-of": "^3.0.2" 1633 | }, 1634 | "dependencies": { 1635 | "kind-of": { 1636 | "version": "3.2.2", 1637 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1638 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1639 | "requires": { 1640 | "is-buffer": "^1.1.5" 1641 | } 1642 | } 1643 | } 1644 | }, 1645 | "is-arrayish": { 1646 | "version": "0.2.1", 1647 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1648 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 1649 | }, 1650 | "is-binary-path": { 1651 | "version": "1.0.1", 1652 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 1653 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 1654 | "requires": { 1655 | "binary-extensions": "^1.0.0" 1656 | } 1657 | }, 1658 | "is-buffer": { 1659 | "version": "1.1.6", 1660 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1661 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 1662 | }, 1663 | "is-data-descriptor": { 1664 | "version": "0.1.4", 1665 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 1666 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 1667 | "requires": { 1668 | "kind-of": "^3.0.2" 1669 | }, 1670 | "dependencies": { 1671 | "kind-of": { 1672 | "version": "3.2.2", 1673 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1674 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1675 | "requires": { 1676 | "is-buffer": "^1.1.5" 1677 | } 1678 | } 1679 | } 1680 | }, 1681 | "is-descriptor": { 1682 | "version": "0.1.6", 1683 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 1684 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 1685 | "requires": { 1686 | "is-accessor-descriptor": "^0.1.6", 1687 | "is-data-descriptor": "^0.1.4", 1688 | "kind-of": "^5.0.0" 1689 | }, 1690 | "dependencies": { 1691 | "kind-of": { 1692 | "version": "5.1.0", 1693 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 1694 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" 1695 | } 1696 | } 1697 | }, 1698 | "is-extendable": { 1699 | "version": "0.1.1", 1700 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1701 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" 1702 | }, 1703 | "is-extglob": { 1704 | "version": "2.1.1", 1705 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1706 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 1707 | }, 1708 | "is-glob": { 1709 | "version": "4.0.0", 1710 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", 1711 | "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", 1712 | "requires": { 1713 | "is-extglob": "^2.1.1" 1714 | } 1715 | }, 1716 | "is-number": { 1717 | "version": "3.0.0", 1718 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1719 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1720 | "requires": { 1721 | "kind-of": "^3.0.2" 1722 | }, 1723 | "dependencies": { 1724 | "kind-of": { 1725 | "version": "3.2.2", 1726 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1727 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1728 | "requires": { 1729 | "is-buffer": "^1.1.5" 1730 | } 1731 | } 1732 | } 1733 | }, 1734 | "is-plain-object": { 1735 | "version": "2.0.4", 1736 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1737 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1738 | "requires": { 1739 | "isobject": "^3.0.1" 1740 | } 1741 | }, 1742 | "is-utf8": { 1743 | "version": "0.2.1", 1744 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1745 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" 1746 | }, 1747 | "is-windows": { 1748 | "version": "1.0.2", 1749 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1750 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" 1751 | }, 1752 | "isarray": { 1753 | "version": "1.0.0", 1754 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1755 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1756 | }, 1757 | "isobject": { 1758 | "version": "3.0.1", 1759 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1760 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 1761 | }, 1762 | "json-stable-stringify": { 1763 | "version": "0.0.1", 1764 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", 1765 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 1766 | "requires": { 1767 | "jsonify": "~0.0.0" 1768 | } 1769 | }, 1770 | "jsonify": { 1771 | "version": "0.0.0", 1772 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1773 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 1774 | }, 1775 | "jsonparse": { 1776 | "version": "1.3.1", 1777 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 1778 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" 1779 | }, 1780 | "kind-of": { 1781 | "version": "6.0.2", 1782 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 1783 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 1784 | }, 1785 | "labeled-stream-splicer": { 1786 | "version": "2.0.1", 1787 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", 1788 | "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", 1789 | "requires": { 1790 | "inherits": "^2.0.1", 1791 | "isarray": "^2.0.4", 1792 | "stream-splicer": "^2.0.0" 1793 | }, 1794 | "dependencies": { 1795 | "isarray": { 1796 | "version": "2.0.4", 1797 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", 1798 | "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==" 1799 | } 1800 | } 1801 | }, 1802 | "linkify-it": { 1803 | "version": "2.1.0", 1804 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", 1805 | "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", 1806 | "requires": { 1807 | "uc.micro": "^1.0.1" 1808 | } 1809 | }, 1810 | "lodash.debounce": { 1811 | "version": "4.0.8", 1812 | "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", 1813 | "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" 1814 | }, 1815 | "lodash.memoize": { 1816 | "version": "3.0.4", 1817 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", 1818 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" 1819 | }, 1820 | "map-cache": { 1821 | "version": "0.2.2", 1822 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 1823 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" 1824 | }, 1825 | "map-visit": { 1826 | "version": "1.0.0", 1827 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 1828 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 1829 | "requires": { 1830 | "object-visit": "^1.0.0" 1831 | } 1832 | }, 1833 | "markdown-it": { 1834 | "version": "8.4.2", 1835 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", 1836 | "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", 1837 | "requires": { 1838 | "argparse": "^1.0.7", 1839 | "entities": "~1.1.1", 1840 | "linkify-it": "^2.0.0", 1841 | "mdurl": "^1.0.1", 1842 | "uc.micro": "^1.0.5" 1843 | } 1844 | }, 1845 | "md5.js": { 1846 | "version": "1.3.5", 1847 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 1848 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 1849 | "requires": { 1850 | "hash-base": "^3.0.0", 1851 | "inherits": "^2.0.1", 1852 | "safe-buffer": "^5.1.2" 1853 | } 1854 | }, 1855 | "mdurl": { 1856 | "version": "1.0.1", 1857 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", 1858 | "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" 1859 | }, 1860 | "micromatch": { 1861 | "version": "3.1.10", 1862 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 1863 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 1864 | "requires": { 1865 | "arr-diff": "^4.0.0", 1866 | "array-unique": "^0.3.2", 1867 | "braces": "^2.3.1", 1868 | "define-property": "^2.0.2", 1869 | "extend-shallow": "^3.0.2", 1870 | "extglob": "^2.0.4", 1871 | "fragment-cache": "^0.2.1", 1872 | "kind-of": "^6.0.2", 1873 | "nanomatch": "^1.2.9", 1874 | "object.pick": "^1.3.0", 1875 | "regex-not": "^1.0.0", 1876 | "snapdragon": "^0.8.1", 1877 | "to-regex": "^3.0.2" 1878 | } 1879 | }, 1880 | "miller-rabin": { 1881 | "version": "4.0.1", 1882 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 1883 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 1884 | "requires": { 1885 | "bn.js": "^4.0.0", 1886 | "brorand": "^1.0.1" 1887 | } 1888 | }, 1889 | "minimalistic-assert": { 1890 | "version": "1.0.1", 1891 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1892 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 1893 | }, 1894 | "minimalistic-crypto-utils": { 1895 | "version": "1.0.1", 1896 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1897 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 1898 | }, 1899 | "minimatch": { 1900 | "version": "3.0.4", 1901 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1902 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1903 | "requires": { 1904 | "brace-expansion": "^1.1.7" 1905 | } 1906 | }, 1907 | "minimist": { 1908 | "version": "1.2.0", 1909 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1910 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 1911 | }, 1912 | "mixin-deep": { 1913 | "version": "1.3.2", 1914 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", 1915 | "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", 1916 | "requires": { 1917 | "for-in": "^1.0.2", 1918 | "is-extendable": "^1.0.1" 1919 | }, 1920 | "dependencies": { 1921 | "is-extendable": { 1922 | "version": "1.0.1", 1923 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1924 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1925 | "requires": { 1926 | "is-plain-object": "^2.0.4" 1927 | } 1928 | } 1929 | } 1930 | }, 1931 | "mkdirp": { 1932 | "version": "0.5.1", 1933 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1934 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1935 | "requires": { 1936 | "minimist": "0.0.8" 1937 | }, 1938 | "dependencies": { 1939 | "minimist": { 1940 | "version": "0.0.8", 1941 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1942 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1943 | } 1944 | } 1945 | }, 1946 | "module-deps": { 1947 | "version": "6.2.0", 1948 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.0.tgz", 1949 | "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==", 1950 | "requires": { 1951 | "JSONStream": "^1.0.3", 1952 | "browser-resolve": "^1.7.0", 1953 | "cached-path-relative": "^1.0.0", 1954 | "concat-stream": "~1.6.0", 1955 | "defined": "^1.0.0", 1956 | "detective": "^5.0.2", 1957 | "duplexer2": "^0.1.2", 1958 | "inherits": "^2.0.1", 1959 | "parents": "^1.0.0", 1960 | "readable-stream": "^2.0.2", 1961 | "resolve": "^1.4.0", 1962 | "stream-combiner2": "^1.1.1", 1963 | "subarg": "^1.0.0", 1964 | "through2": "^2.0.0", 1965 | "xtend": "^4.0.0" 1966 | } 1967 | }, 1968 | "moment": { 1969 | "version": "2.22.2", 1970 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", 1971 | "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" 1972 | }, 1973 | "moment-timezone": { 1974 | "version": "0.5.23", 1975 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", 1976 | "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", 1977 | "requires": { 1978 | "moment": ">= 2.9.0" 1979 | } 1980 | }, 1981 | "ms": { 1982 | "version": "2.0.0", 1983 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1984 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1985 | }, 1986 | "nanomatch": { 1987 | "version": "1.2.13", 1988 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 1989 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 1990 | "requires": { 1991 | "arr-diff": "^4.0.0", 1992 | "array-unique": "^0.3.2", 1993 | "define-property": "^2.0.2", 1994 | "extend-shallow": "^3.0.2", 1995 | "fragment-cache": "^0.2.1", 1996 | "is-windows": "^1.0.2", 1997 | "kind-of": "^6.0.2", 1998 | "object.pick": "^1.3.0", 1999 | "regex-not": "^1.0.0", 2000 | "snapdragon": "^0.8.1", 2001 | "to-regex": "^3.0.1" 2002 | } 2003 | }, 2004 | "normalize-path": { 2005 | "version": "2.1.1", 2006 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 2007 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 2008 | "requires": { 2009 | "remove-trailing-separator": "^1.0.1" 2010 | } 2011 | }, 2012 | "object-assign": { 2013 | "version": "4.1.1", 2014 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2015 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 2016 | }, 2017 | "object-copy": { 2018 | "version": "0.1.0", 2019 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 2020 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 2021 | "requires": { 2022 | "copy-descriptor": "^0.1.0", 2023 | "define-property": "^0.2.5", 2024 | "kind-of": "^3.0.3" 2025 | }, 2026 | "dependencies": { 2027 | "define-property": { 2028 | "version": "0.2.5", 2029 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2030 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2031 | "requires": { 2032 | "is-descriptor": "^0.1.0" 2033 | } 2034 | }, 2035 | "kind-of": { 2036 | "version": "3.2.2", 2037 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2038 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2039 | "requires": { 2040 | "is-buffer": "^1.1.5" 2041 | } 2042 | } 2043 | } 2044 | }, 2045 | "object-visit": { 2046 | "version": "1.0.1", 2047 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 2048 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 2049 | "requires": { 2050 | "isobject": "^3.0.0" 2051 | } 2052 | }, 2053 | "object.pick": { 2054 | "version": "1.3.0", 2055 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 2056 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 2057 | "requires": { 2058 | "isobject": "^3.0.1" 2059 | } 2060 | }, 2061 | "once": { 2062 | "version": "1.4.0", 2063 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2064 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2065 | "requires": { 2066 | "wrappy": "1" 2067 | } 2068 | }, 2069 | "os-browserify": { 2070 | "version": "0.3.0", 2071 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 2072 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" 2073 | }, 2074 | "outpipe": { 2075 | "version": "1.1.1", 2076 | "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", 2077 | "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", 2078 | "requires": { 2079 | "shell-quote": "^1.4.2" 2080 | } 2081 | }, 2082 | "pako": { 2083 | "version": "1.0.6", 2084 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", 2085 | "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" 2086 | }, 2087 | "parents": { 2088 | "version": "1.0.1", 2089 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", 2090 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 2091 | "requires": { 2092 | "path-platform": "~0.11.15" 2093 | } 2094 | }, 2095 | "parse-asn1": { 2096 | "version": "5.1.1", 2097 | "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", 2098 | "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", 2099 | "requires": { 2100 | "asn1.js": "^4.0.0", 2101 | "browserify-aes": "^1.0.0", 2102 | "create-hash": "^1.1.0", 2103 | "evp_bytestokey": "^1.0.0", 2104 | "pbkdf2": "^3.0.3" 2105 | } 2106 | }, 2107 | "parse-json": { 2108 | "version": "2.2.0", 2109 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2110 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2111 | "requires": { 2112 | "error-ex": "^1.2.0" 2113 | } 2114 | }, 2115 | "pascalcase": { 2116 | "version": "0.1.1", 2117 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 2118 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" 2119 | }, 2120 | "path-browserify": { 2121 | "version": "0.0.1", 2122 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 2123 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" 2124 | }, 2125 | "path-dirname": { 2126 | "version": "1.0.2", 2127 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 2128 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" 2129 | }, 2130 | "path-is-absolute": { 2131 | "version": "1.0.1", 2132 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2133 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2134 | }, 2135 | "path-parse": { 2136 | "version": "1.0.6", 2137 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2138 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 2139 | }, 2140 | "path-platform": { 2141 | "version": "0.11.15", 2142 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", 2143 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" 2144 | }, 2145 | "pbkdf2": { 2146 | "version": "3.0.17", 2147 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 2148 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 2149 | "requires": { 2150 | "create-hash": "^1.1.2", 2151 | "create-hmac": "^1.1.4", 2152 | "ripemd160": "^2.0.1", 2153 | "safe-buffer": "^5.0.1", 2154 | "sha.js": "^2.4.8" 2155 | } 2156 | }, 2157 | "posix-character-classes": { 2158 | "version": "0.1.1", 2159 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 2160 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" 2161 | }, 2162 | "process": { 2163 | "version": "0.11.10", 2164 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2165 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" 2166 | }, 2167 | "process-nextick-args": { 2168 | "version": "2.0.0", 2169 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 2170 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 2171 | }, 2172 | "public-encrypt": { 2173 | "version": "4.0.3", 2174 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 2175 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 2176 | "requires": { 2177 | "bn.js": "^4.1.0", 2178 | "browserify-rsa": "^4.0.0", 2179 | "create-hash": "^1.1.0", 2180 | "parse-asn1": "^5.0.0", 2181 | "randombytes": "^2.0.1", 2182 | "safe-buffer": "^5.1.2" 2183 | } 2184 | }, 2185 | "punycode": { 2186 | "version": "1.4.1", 2187 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2188 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 2189 | }, 2190 | "querystring": { 2191 | "version": "0.2.0", 2192 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2193 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 2194 | }, 2195 | "querystring-es3": { 2196 | "version": "0.2.1", 2197 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2198 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" 2199 | }, 2200 | "randombytes": { 2201 | "version": "2.0.6", 2202 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", 2203 | "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", 2204 | "requires": { 2205 | "safe-buffer": "^5.1.0" 2206 | } 2207 | }, 2208 | "randomfill": { 2209 | "version": "1.0.4", 2210 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 2211 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 2212 | "requires": { 2213 | "randombytes": "^2.0.5", 2214 | "safe-buffer": "^5.1.0" 2215 | } 2216 | }, 2217 | "read-only-stream": { 2218 | "version": "2.0.0", 2219 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", 2220 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 2221 | "requires": { 2222 | "readable-stream": "^2.0.2" 2223 | } 2224 | }, 2225 | "readable-stream": { 2226 | "version": "2.3.6", 2227 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2228 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2229 | "requires": { 2230 | "core-util-is": "~1.0.0", 2231 | "inherits": "~2.0.3", 2232 | "isarray": "~1.0.0", 2233 | "process-nextick-args": "~2.0.0", 2234 | "safe-buffer": "~5.1.1", 2235 | "string_decoder": "~1.1.1", 2236 | "util-deprecate": "~1.0.1" 2237 | } 2238 | }, 2239 | "readdirp": { 2240 | "version": "2.2.1", 2241 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", 2242 | "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", 2243 | "requires": { 2244 | "graceful-fs": "^4.1.11", 2245 | "micromatch": "^3.1.10", 2246 | "readable-stream": "^2.0.2" 2247 | } 2248 | }, 2249 | "regex-not": { 2250 | "version": "1.0.2", 2251 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 2252 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 2253 | "requires": { 2254 | "extend-shallow": "^3.0.2", 2255 | "safe-regex": "^1.1.0" 2256 | } 2257 | }, 2258 | "remove-trailing-separator": { 2259 | "version": "1.1.0", 2260 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 2261 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" 2262 | }, 2263 | "repeat-element": { 2264 | "version": "1.1.3", 2265 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 2266 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" 2267 | }, 2268 | "repeat-string": { 2269 | "version": "1.6.1", 2270 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2271 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 2272 | }, 2273 | "resolve": { 2274 | "version": "1.8.1", 2275 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", 2276 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", 2277 | "requires": { 2278 | "path-parse": "^1.0.5" 2279 | } 2280 | }, 2281 | "resolve-url": { 2282 | "version": "0.2.1", 2283 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 2284 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" 2285 | }, 2286 | "ret": { 2287 | "version": "0.1.15", 2288 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 2289 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" 2290 | }, 2291 | "ripemd160": { 2292 | "version": "2.0.2", 2293 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 2294 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 2295 | "requires": { 2296 | "hash-base": "^3.0.0", 2297 | "inherits": "^2.0.1" 2298 | } 2299 | }, 2300 | "safe-buffer": { 2301 | "version": "5.1.2", 2302 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2303 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2304 | }, 2305 | "safe-regex": { 2306 | "version": "1.1.0", 2307 | "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 2308 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 2309 | "requires": { 2310 | "ret": "~0.1.10" 2311 | } 2312 | }, 2313 | "sass": { 2314 | "version": "1.15.0", 2315 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.15.0.tgz", 2316 | "integrity": "sha512-xY+n0MB/KAjwwNJYXBD5yJOG2mS2Ac8AXB7Ci2KbWxivbiDVMxhy3vbvXAllVABAHjBqZYUPq1qOJeqZ2XMVIQ==", 2317 | "requires": { 2318 | "chokidar": "^2.0.0" 2319 | } 2320 | }, 2321 | "semver": { 2322 | "version": "5.6.0", 2323 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 2324 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" 2325 | }, 2326 | "set-value": { 2327 | "version": "2.0.1", 2328 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", 2329 | "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", 2330 | "requires": { 2331 | "extend-shallow": "^2.0.1", 2332 | "is-extendable": "^0.1.1", 2333 | "is-plain-object": "^2.0.3", 2334 | "split-string": "^3.0.1" 2335 | }, 2336 | "dependencies": { 2337 | "extend-shallow": { 2338 | "version": "2.0.1", 2339 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2340 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2341 | "requires": { 2342 | "is-extendable": "^0.1.0" 2343 | } 2344 | } 2345 | } 2346 | }, 2347 | "sha.js": { 2348 | "version": "2.4.11", 2349 | "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 2350 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 2351 | "requires": { 2352 | "inherits": "^2.0.1", 2353 | "safe-buffer": "^5.0.1" 2354 | } 2355 | }, 2356 | "shasum": { 2357 | "version": "1.0.2", 2358 | "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", 2359 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 2360 | "requires": { 2361 | "json-stable-stringify": "~0.0.0", 2362 | "sha.js": "~2.4.4" 2363 | } 2364 | }, 2365 | "shell-quote": { 2366 | "version": "1.6.1", 2367 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", 2368 | "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", 2369 | "requires": { 2370 | "array-filter": "~0.0.0", 2371 | "array-map": "~0.0.0", 2372 | "array-reduce": "~0.0.0", 2373 | "jsonify": "~0.0.0" 2374 | } 2375 | }, 2376 | "simple-concat": { 2377 | "version": "1.0.0", 2378 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 2379 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" 2380 | }, 2381 | "snapdragon": { 2382 | "version": "0.8.2", 2383 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 2384 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 2385 | "requires": { 2386 | "base": "^0.11.1", 2387 | "debug": "^2.2.0", 2388 | "define-property": "^0.2.5", 2389 | "extend-shallow": "^2.0.1", 2390 | "map-cache": "^0.2.2", 2391 | "source-map": "^0.5.6", 2392 | "source-map-resolve": "^0.5.0", 2393 | "use": "^3.1.0" 2394 | }, 2395 | "dependencies": { 2396 | "define-property": { 2397 | "version": "0.2.5", 2398 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2399 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2400 | "requires": { 2401 | "is-descriptor": "^0.1.0" 2402 | } 2403 | }, 2404 | "extend-shallow": { 2405 | "version": "2.0.1", 2406 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2407 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2408 | "requires": { 2409 | "is-extendable": "^0.1.0" 2410 | } 2411 | } 2412 | } 2413 | }, 2414 | "snapdragon-node": { 2415 | "version": "2.1.1", 2416 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 2417 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 2418 | "requires": { 2419 | "define-property": "^1.0.0", 2420 | "isobject": "^3.0.0", 2421 | "snapdragon-util": "^3.0.1" 2422 | }, 2423 | "dependencies": { 2424 | "define-property": { 2425 | "version": "1.0.0", 2426 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 2427 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 2428 | "requires": { 2429 | "is-descriptor": "^1.0.0" 2430 | } 2431 | }, 2432 | "is-accessor-descriptor": { 2433 | "version": "1.0.0", 2434 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 2435 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 2436 | "requires": { 2437 | "kind-of": "^6.0.0" 2438 | } 2439 | }, 2440 | "is-data-descriptor": { 2441 | "version": "1.0.0", 2442 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 2443 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 2444 | "requires": { 2445 | "kind-of": "^6.0.0" 2446 | } 2447 | }, 2448 | "is-descriptor": { 2449 | "version": "1.0.2", 2450 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 2451 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 2452 | "requires": { 2453 | "is-accessor-descriptor": "^1.0.0", 2454 | "is-data-descriptor": "^1.0.0", 2455 | "kind-of": "^6.0.2" 2456 | } 2457 | } 2458 | } 2459 | }, 2460 | "snapdragon-util": { 2461 | "version": "3.0.1", 2462 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 2463 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 2464 | "requires": { 2465 | "kind-of": "^3.2.0" 2466 | }, 2467 | "dependencies": { 2468 | "kind-of": { 2469 | "version": "3.2.2", 2470 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2471 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2472 | "requires": { 2473 | "is-buffer": "^1.1.5" 2474 | } 2475 | } 2476 | } 2477 | }, 2478 | "source-map": { 2479 | "version": "0.5.7", 2480 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2481 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 2482 | }, 2483 | "source-map-resolve": { 2484 | "version": "0.5.2", 2485 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 2486 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 2487 | "requires": { 2488 | "atob": "^2.1.1", 2489 | "decode-uri-component": "^0.2.0", 2490 | "resolve-url": "^0.2.1", 2491 | "source-map-url": "^0.4.0", 2492 | "urix": "^0.1.0" 2493 | } 2494 | }, 2495 | "source-map-support": { 2496 | "version": "0.5.9", 2497 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", 2498 | "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", 2499 | "requires": { 2500 | "buffer-from": "^1.0.0", 2501 | "source-map": "^0.6.0" 2502 | }, 2503 | "dependencies": { 2504 | "source-map": { 2505 | "version": "0.6.1", 2506 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2507 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 2508 | } 2509 | } 2510 | }, 2511 | "source-map-url": { 2512 | "version": "0.4.0", 2513 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 2514 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" 2515 | }, 2516 | "split-string": { 2517 | "version": "3.1.0", 2518 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 2519 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 2520 | "requires": { 2521 | "extend-shallow": "^3.0.0" 2522 | } 2523 | }, 2524 | "sprintf-js": { 2525 | "version": "1.0.3", 2526 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2527 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 2528 | }, 2529 | "static-extend": { 2530 | "version": "0.1.2", 2531 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 2532 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 2533 | "requires": { 2534 | "define-property": "^0.2.5", 2535 | "object-copy": "^0.1.0" 2536 | }, 2537 | "dependencies": { 2538 | "define-property": { 2539 | "version": "0.2.5", 2540 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2541 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2542 | "requires": { 2543 | "is-descriptor": "^0.1.0" 2544 | } 2545 | } 2546 | } 2547 | }, 2548 | "stream-browserify": { 2549 | "version": "2.0.1", 2550 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", 2551 | "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", 2552 | "requires": { 2553 | "inherits": "~2.0.1", 2554 | "readable-stream": "^2.0.2" 2555 | } 2556 | }, 2557 | "stream-combiner2": { 2558 | "version": "1.1.1", 2559 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", 2560 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 2561 | "requires": { 2562 | "duplexer2": "~0.1.0", 2563 | "readable-stream": "^2.0.2" 2564 | } 2565 | }, 2566 | "stream-http": { 2567 | "version": "2.8.3", 2568 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", 2569 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", 2570 | "requires": { 2571 | "builtin-status-codes": "^3.0.0", 2572 | "inherits": "^2.0.1", 2573 | "readable-stream": "^2.3.6", 2574 | "to-arraybuffer": "^1.0.0", 2575 | "xtend": "^4.0.0" 2576 | } 2577 | }, 2578 | "stream-splicer": { 2579 | "version": "2.0.0", 2580 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", 2581 | "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", 2582 | "requires": { 2583 | "inherits": "^2.0.1", 2584 | "readable-stream": "^2.0.2" 2585 | } 2586 | }, 2587 | "string_decoder": { 2588 | "version": "1.1.1", 2589 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2590 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2591 | "requires": { 2592 | "safe-buffer": "~5.1.0" 2593 | } 2594 | }, 2595 | "strip-bom": { 2596 | "version": "2.0.0", 2597 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 2598 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 2599 | "requires": { 2600 | "is-utf8": "^0.2.0" 2601 | } 2602 | }, 2603 | "strip-json-comments": { 2604 | "version": "2.0.1", 2605 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2606 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 2607 | }, 2608 | "subarg": { 2609 | "version": "1.0.0", 2610 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", 2611 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 2612 | "requires": { 2613 | "minimist": "^1.1.0" 2614 | } 2615 | }, 2616 | "syntax-error": { 2617 | "version": "1.4.0", 2618 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", 2619 | "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", 2620 | "requires": { 2621 | "acorn-node": "^1.2.0" 2622 | } 2623 | }, 2624 | "terser": { 2625 | "version": "3.10.11", 2626 | "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.11.tgz", 2627 | "integrity": "sha512-iruZ7j14oBbRYJC5cP0/vTU7YOWjN+J1ZskEGoF78tFzXdkK2hbCL/3TRZN8XB+MuvFhvOHMp7WkOCBO4VEL5g==", 2628 | "requires": { 2629 | "commander": "~2.17.1", 2630 | "source-map": "~0.6.1", 2631 | "source-map-support": "~0.5.6" 2632 | }, 2633 | "dependencies": { 2634 | "source-map": { 2635 | "version": "0.6.1", 2636 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2637 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 2638 | } 2639 | } 2640 | }, 2641 | "through": { 2642 | "version": "2.3.8", 2643 | "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", 2644 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 2645 | }, 2646 | "through2": { 2647 | "version": "2.0.5", 2648 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 2649 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 2650 | "requires": { 2651 | "readable-stream": "~2.3.6", 2652 | "xtend": "~4.0.1" 2653 | } 2654 | }, 2655 | "timers-browserify": { 2656 | "version": "1.4.2", 2657 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", 2658 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 2659 | "requires": { 2660 | "process": "~0.11.0" 2661 | } 2662 | }, 2663 | "to-arraybuffer": { 2664 | "version": "1.0.1", 2665 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 2666 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" 2667 | }, 2668 | "to-object-path": { 2669 | "version": "0.3.0", 2670 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 2671 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 2672 | "requires": { 2673 | "kind-of": "^3.0.2" 2674 | }, 2675 | "dependencies": { 2676 | "kind-of": { 2677 | "version": "3.2.2", 2678 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2679 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2680 | "requires": { 2681 | "is-buffer": "^1.1.5" 2682 | } 2683 | } 2684 | } 2685 | }, 2686 | "to-regex": { 2687 | "version": "3.0.2", 2688 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 2689 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 2690 | "requires": { 2691 | "define-property": "^2.0.2", 2692 | "extend-shallow": "^3.0.2", 2693 | "regex-not": "^1.0.2", 2694 | "safe-regex": "^1.1.0" 2695 | } 2696 | }, 2697 | "to-regex-range": { 2698 | "version": "2.1.1", 2699 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 2700 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 2701 | "requires": { 2702 | "is-number": "^3.0.0", 2703 | "repeat-string": "^1.6.1" 2704 | } 2705 | }, 2706 | "tsconfig": { 2707 | "version": "5.0.3", 2708 | "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", 2709 | "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=", 2710 | "requires": { 2711 | "any-promise": "^1.3.0", 2712 | "parse-json": "^2.2.0", 2713 | "strip-bom": "^2.0.0", 2714 | "strip-json-comments": "^2.0.0" 2715 | } 2716 | }, 2717 | "tsify": { 2718 | "version": "4.0.0", 2719 | "resolved": "https://registry.npmjs.org/tsify/-/tsify-4.0.0.tgz", 2720 | "integrity": "sha512-A33g5azPh2KDo/gbcSHpSo2m8l5FYC3SdjD5qNpBT+LP758HIGXT6cLko+aJhyFDRU5nCT/zQvfIq/5GQNRsoA==", 2721 | "requires": { 2722 | "convert-source-map": "^1.1.0", 2723 | "fs.realpath": "^1.0.0", 2724 | "object-assign": "^4.1.0", 2725 | "semver": "^5.1.0", 2726 | "through2": "^2.0.0", 2727 | "tsconfig": "^5.0.3" 2728 | } 2729 | }, 2730 | "tty-browserify": { 2731 | "version": "0.0.1", 2732 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", 2733 | "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" 2734 | }, 2735 | "typedarray": { 2736 | "version": "0.0.6", 2737 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2738 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 2739 | }, 2740 | "typescript": { 2741 | "version": "2.9.2", 2742 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", 2743 | "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==" 2744 | }, 2745 | "uc.micro": { 2746 | "version": "1.0.6", 2747 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", 2748 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" 2749 | }, 2750 | "uglifyify": { 2751 | "version": "5.0.1", 2752 | "resolved": "https://registry.npmjs.org/uglifyify/-/uglifyify-5.0.1.tgz", 2753 | "integrity": "sha512-PO44rgExvwj3rkK0UzenHVnPU18drBy9x9HOUmgkuRh6K2KIsDqrB5LqxGtjybgGTOS1JeP8SBc+TN5rhiva6w==", 2754 | "requires": { 2755 | "convert-source-map": "~1.1.0", 2756 | "extend": "^1.2.1", 2757 | "minimatch": "^3.0.2", 2758 | "terser": "^3.7.5", 2759 | "through": "~2.3.4" 2760 | } 2761 | }, 2762 | "umd": { 2763 | "version": "3.0.3", 2764 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", 2765 | "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" 2766 | }, 2767 | "undeclared-identifiers": { 2768 | "version": "1.1.2", 2769 | "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz", 2770 | "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==", 2771 | "requires": { 2772 | "acorn-node": "^1.3.0", 2773 | "get-assigned-identifiers": "^1.2.0", 2774 | "simple-concat": "^1.0.0", 2775 | "xtend": "^4.0.1" 2776 | } 2777 | }, 2778 | "union-value": { 2779 | "version": "1.0.1", 2780 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", 2781 | "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", 2782 | "requires": { 2783 | "arr-union": "^3.1.0", 2784 | "get-value": "^2.0.6", 2785 | "is-extendable": "^0.1.1", 2786 | "set-value": "^2.0.1" 2787 | } 2788 | }, 2789 | "unset-value": { 2790 | "version": "1.0.0", 2791 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 2792 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 2793 | "requires": { 2794 | "has-value": "^0.3.1", 2795 | "isobject": "^3.0.0" 2796 | }, 2797 | "dependencies": { 2798 | "has-value": { 2799 | "version": "0.3.1", 2800 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 2801 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 2802 | "requires": { 2803 | "get-value": "^2.0.3", 2804 | "has-values": "^0.1.4", 2805 | "isobject": "^2.0.0" 2806 | }, 2807 | "dependencies": { 2808 | "isobject": { 2809 | "version": "2.1.0", 2810 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 2811 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 2812 | "requires": { 2813 | "isarray": "1.0.0" 2814 | } 2815 | } 2816 | } 2817 | }, 2818 | "has-values": { 2819 | "version": "0.1.4", 2820 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 2821 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" 2822 | } 2823 | } 2824 | }, 2825 | "upath": { 2826 | "version": "1.1.0", 2827 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", 2828 | "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" 2829 | }, 2830 | "urix": { 2831 | "version": "0.1.0", 2832 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 2833 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" 2834 | }, 2835 | "url": { 2836 | "version": "0.11.0", 2837 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 2838 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 2839 | "requires": { 2840 | "punycode": "1.3.2", 2841 | "querystring": "0.2.0" 2842 | }, 2843 | "dependencies": { 2844 | "punycode": { 2845 | "version": "1.3.2", 2846 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 2847 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 2848 | } 2849 | } 2850 | }, 2851 | "use": { 2852 | "version": "3.1.1", 2853 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 2854 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" 2855 | }, 2856 | "util": { 2857 | "version": "0.10.4", 2858 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 2859 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 2860 | "requires": { 2861 | "inherits": "2.0.3" 2862 | } 2863 | }, 2864 | "util-deprecate": { 2865 | "version": "1.0.2", 2866 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2867 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2868 | }, 2869 | "vm-browserify": { 2870 | "version": "1.1.0", 2871 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", 2872 | "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" 2873 | }, 2874 | "watchify": { 2875 | "version": "3.11.1", 2876 | "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.1.tgz", 2877 | "integrity": "sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog==", 2878 | "requires": { 2879 | "anymatch": "^2.0.0", 2880 | "browserify": "^16.1.0", 2881 | "chokidar": "^2.1.1", 2882 | "defined": "^1.0.0", 2883 | "outpipe": "^1.1.0", 2884 | "through2": "^2.0.0", 2885 | "xtend": "^4.0.0" 2886 | }, 2887 | "dependencies": { 2888 | "chokidar": { 2889 | "version": "2.1.5", 2890 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", 2891 | "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", 2892 | "requires": { 2893 | "anymatch": "^2.0.0", 2894 | "async-each": "^1.0.1", 2895 | "braces": "^2.3.2", 2896 | "fsevents": "^1.2.7", 2897 | "glob-parent": "^3.1.0", 2898 | "inherits": "^2.0.3", 2899 | "is-binary-path": "^1.0.0", 2900 | "is-glob": "^4.0.0", 2901 | "normalize-path": "^3.0.0", 2902 | "path-is-absolute": "^1.0.0", 2903 | "readdirp": "^2.2.1", 2904 | "upath": "^1.1.1" 2905 | } 2906 | }, 2907 | "normalize-path": { 2908 | "version": "3.0.0", 2909 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2910 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 2911 | }, 2912 | "upath": { 2913 | "version": "1.1.2", 2914 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", 2915 | "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" 2916 | } 2917 | } 2918 | }, 2919 | "wrappy": { 2920 | "version": "1.0.2", 2921 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2922 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2923 | }, 2924 | "xtend": { 2925 | "version": "4.0.1", 2926 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2927 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 2928 | } 2929 | } 2930 | } 2931 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "schedule", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "watch": "watchify -v -p tsify src/app.ts -o ./app.js", 8 | "build": "browserify ./src/app.ts -p tsify --outfile ./app.js", 9 | "build-prod": "browserify ./src/app.ts -p tsify -g uglifyify --outfile ./app.js" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "MIT", 14 | "dependencies": { 15 | "@fortawesome/fontawesome-free": "^5.9.0", 16 | "@types/markdown-it": "0.0.7", 17 | "@types/moment": "^2.13.0", 18 | "@types/moment-timezone": "^0.5.6", 19 | "browserify": "^16.2.2", 20 | "markdown-it": "^8.4.2", 21 | "moment": "^2.22.2", 22 | "moment-timezone": "^0.5.20", 23 | "sass": "^1.9.0", 24 | "tsify": "^4.0.0", 25 | "typescript": "^2.9.2", 26 | "uglifyify": "^5.0.0", 27 | "watchify": "^3.11.1" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /scss/main.scss: -------------------------------------------------------------------------------- 1 | $page_width: 720px; 2 | $background: #181818; 3 | $foreground: #e4e4ef; 4 | $dimmed_foreground: desaturate(darken($foreground, 60%), 60%); 5 | $green: #73c936; 6 | $yellow: #ffdd33; 7 | $red: #f43841; 8 | 9 | // FontAwesome imports 10 | $fa-font-path: './webfonts'; 11 | @import 'fontawesome'; 12 | @import 'brands'; 13 | @import 'regular'; 14 | @import 'solid'; 15 | 16 | // Example to add FontAwesome to an existing class 17 | /* 18 | .twitch { 19 | @extend %fa-icon; 20 | @extend .fab; 21 | 22 | &:before { 23 | content: fa-content($fa-var-twitch); 24 | } 25 | } 26 | */ 27 | 28 | body { 29 | background: $background; 30 | color: $foreground; 31 | width: $page_width; 32 | margin-left: auto; 33 | margin-right: auto; 34 | font-family: 'Cantarell', sans-serif; 35 | } 36 | 37 | .event { 38 | padding: 20px; 39 | border: 1px solid $dimmed_foreground; 40 | margin-top: 10px; 41 | text-align: center; 42 | background: lighten($background, 1%); 43 | 44 | h1 { 45 | font-size: 25px; 46 | margin-bottom: 10px; 47 | width: $page_width * 0.75; 48 | margin-left: auto; 49 | margin-right: auto; 50 | text-align: center; 51 | } 52 | 53 | .countdown { 54 | font-size: 20px; 55 | margin-bottom: 10px; 56 | } 57 | 58 | .channel { 59 | font-size: 15px; 60 | } 61 | 62 | .timestamp { 63 | position: relative; 64 | color: $dimmed_foreground; 65 | font-size: 11px; 66 | height: 0px; 67 | text-align: left; 68 | 69 | a { 70 | color: $dimmed_foreground; 71 | } 72 | } 73 | 74 | .watch { 75 | height: 0px; 76 | text-align: right; 77 | color: $red; 78 | } 79 | 80 | .description { 81 | margin-top: 20px; 82 | text-align: left; 83 | color: desaturate(darken($foreground, 40%), 40%); 84 | line-height: 20px; 85 | width: $page_width * 0.75; 86 | margin-left: auto; 87 | margin-right: auto; 88 | 89 | a { 90 | color: darken($green, 5%) 91 | } 92 | 93 | ul { 94 | padding-top: 10px; 95 | li { 96 | margin-left: 20px; 97 | list-style-type: circle; 98 | } 99 | } 100 | 101 | ol { 102 | padding-top: 10px; 103 | li { 104 | margin-left: 20px; 105 | list-style-type: decimal; 106 | } 107 | } 108 | } 109 | 110 | .player { 111 | padding-top: 20px; 112 | width: $page_width * 0.75; 113 | height: $page_width * 0.75 * (9 / 16); 114 | } 115 | } 116 | 117 | .event.past { 118 | color: $dimmed_foreground; 119 | background: $background; 120 | a { 121 | color: $dimmed_foreground; 122 | } 123 | 124 | .description { 125 | color: $dimmed_foreground; 126 | } 127 | 128 | // TODO(#49): Cancelled stamp is not centered vertically 129 | .cancelled-stamp { 130 | position: relative; 131 | height: 0px; 132 | color: #f43841; 133 | font-size: 50px; 134 | transform: rotate(20deg); 135 | top: -80px; 136 | } 137 | } 138 | 139 | .event.current { 140 | border: 3px solid $red; 141 | } 142 | 143 | a { 144 | font-kerning: normal; 145 | font-family: 'Cantarell', sans-serif; 146 | color: $green; 147 | text-decoration: none; 148 | } 149 | 150 | strong { 151 | font-weight: bold; 152 | } 153 | 154 | .header { 155 | padding: 30px; 156 | text-align: center; 157 | 158 | h1 { 159 | font-size: 60px; 160 | } 161 | 162 | .subheader { 163 | a { 164 | font-size: 15px; 165 | border-bottom: 1px solid; 166 | 167 | } 168 | } 169 | } 170 | 171 | .markdown { 172 | p { 173 | margin-top: 10px; 174 | } 175 | 176 | a { 177 | border-bottom: 1px solid; 178 | } 179 | } 180 | 181 | footer { 182 | padding-top: 30px; 183 | padding-bottom: 30px; 184 | margin-top: 20px; 185 | } 186 | -------------------------------------------------------------------------------- /ts/CancelledEvent.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import * as html from './html'; 3 | import * as moment from 'moment'; 4 | import ComponentsArray from './ComponentsArray'; 5 | import Countdown from './Countdown'; 6 | import UiComponent from './UiComponent'; 7 | 8 | export default class CancelledEvent implements UiComponent { 9 | constructor(private _event: dto.Event) { 10 | } 11 | 12 | appendTo(entry: HTMLElement | null): void { 13 | new html.Div( 14 | new ComponentsArray([ 15 | new html.Div( 16 | new html.Href( 17 | `#_${this._event.datetime.utc().unix()}`, 18 | new html.Text(`${this._event.datetime.utc().unix()}`) 19 | ), 20 | {"class": "timestamp"} 21 | ), 22 | new html.H1( 23 | new html.Href( 24 | `${this._event.url}`, 25 | new html.Text(`${this._event.title}`) 26 | ) 27 | ), 28 | new Countdown(this._event.datetime, "should've started "), 29 | new html.Div( 30 | new html.Href( 31 | `https://twitch.tv/${this._event.channel}`, 32 | new html.Text(`https://twitch.tv/${this._event.channel}`)), 33 | {"class": "channel"} 34 | ), 35 | new html.Div( 36 | new html.Markdown(`${this._event.description}`), 37 | {"class": "description markdown"} 38 | ), 39 | new html.Div( 40 | new html.Text('CANCELLED'), 41 | {"class": "cancelled-stamp"} 42 | ) 43 | ]), 44 | {"class": "past event", 45 | "id": `_${this._event.datetime.utc().unix()}`} 46 | ).appendTo(entry) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ts/ComponentsArray.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from './UiComponent'; 2 | 3 | export default class ComponentsArray implements UiComponent { 4 | constructor(private _components: UiComponent[]) { 5 | } 6 | 7 | appendTo(entry: HTMLElement | null): void { 8 | this._components.forEach((c) => c.appendTo(entry)) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ts/ComponentsList.ts: -------------------------------------------------------------------------------- 1 | import * as list from './list'; 2 | import ComponentsArray from './ComponentsArray' 3 | import UiComponent from './UiComponent'; 4 | 5 | export default class ComponentsList implements UiComponent { 6 | constructor(private _componentsList: list.List) { 7 | } 8 | 9 | appendTo(entry: HTMLElement | null): void { 10 | new ComponentsArray(this._componentsList.asArray()).appendTo(entry); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ts/Countdown.ts: -------------------------------------------------------------------------------- 1 | import 'moment-timezone'; 2 | import * as html from './html'; 3 | import * as moment from 'moment'; 4 | import UiComponent from './UiComponent'; 5 | 6 | export default class Countdown implements UiComponent { 7 | constructor(private _datetime: moment.Moment, 8 | private _prefix: string) { 9 | } 10 | 11 | appendTo(entry: HTMLElement | null): void { 12 | new html.Div( 13 | new html.Text( 14 | `${this._prefix}${this._datetime.fromNow()} \ 15 | (${this._datetime.tz(moment.tz.guess()).format('llll')})` 16 | ), 17 | {"class": "countdown"} 18 | ).appendTo(entry) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ts/CurrentEvent.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import * as html from './html'; 3 | import * as moment from 'moment'; 4 | import ComponentsArray from './ComponentsArray'; 5 | import Countdown from './Countdown'; 6 | import UiComponent from './UiComponent'; 7 | import TwitchPlayer from './TwitchPlayer'; 8 | 9 | export default class CurrentEvent implements UiComponent { 10 | constructor(private _event: dto.Event) { 11 | } 12 | 13 | appendTo(entry: HTMLElement | null): void { 14 | new html.Div( 15 | new ComponentsArray([ 16 | new html.Div( 17 | new html.Href( 18 | `#_${this._event.datetime.utc().unix()}`, 19 | new html.Text(`${this._event.datetime.utc().unix()}`) 20 | ), 21 | {"class": "timestamp"} 22 | ), 23 | new html.Div( 24 | new html.Href( 25 | `https://twitch.tv/${this._event.channel ? this._event.channel : "tsoding"}`, 26 | new html.Tag( 27 | "i", 28 | new html.Empty(), 29 | {"class": "watch fas fa-external-link-alt fa-lg"} 30 | ) 31 | ), 32 | {"class": "watch"} 33 | ), 34 | new html.H1( 35 | new html.Href( 36 | `${this._event.url}`, 37 | new html.Text(`${this._event.title}`) 38 | ), 39 | ), 40 | new Countdown(this._event.datetime, "started "), 41 | new html.Div( 42 | new html.Href( 43 | `https://twitch.tv/${this._event.channel}`, 44 | new html.Text(`https://twitch.tv/${this._event.channel}`)), 45 | {"class": "channel"} 46 | ), 47 | new html.Div( 48 | new html.Markdown(`${this._event.description}`), 49 | {"class": "description markdown"} 50 | ), 51 | new TwitchPlayer(`https://twitch.tv/${this._event.channel}`) 52 | ]), 53 | { 54 | "id": `_${this._event.datetime.utc().unix()}`, 55 | "class": "current event" 56 | } 57 | ).appendTo(entry); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /ts/DayOff.ts: -------------------------------------------------------------------------------- 1 | import 'moment-timezone'; 2 | import * as dto from './dto'; 3 | import * as html from './html'; 4 | import * as moment from 'moment'; 5 | import ComponentsArray from './ComponentsArray' 6 | import UiComponent from './UiComponent'; 7 | 8 | export default class DayOff implements UiComponent { 9 | constructor(private _state: dto.State, 10 | private _date: string) { 11 | } 12 | 13 | appendTo(entry: HTMLElement | null): void { 14 | let datetime = moment.tz(`${this._date} 23:59`, this._state.timezone) 15 | 16 | new html.Div( 17 | new ComponentsArray ([ 18 | new html.H1( 19 | new html.Text("Day off") 20 | ), 21 | new html.Div( 22 | new html.Text( 23 | datetime.utc().tz(moment.tz.guess()).format('ddd, ll') 24 | ), 25 | {"class": "countdown"} 26 | ) 27 | ]), 28 | {"class": moment().diff(datetime, 'seconds') > 0 ? "event past" : "event"} 29 | ).appendTo(entry); 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /ts/Event.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import * as moment from 'moment'; 3 | import CancelledEvent from './CancelledEvent'; 4 | import Countdown from './Countdown'; 5 | import CurrentEvent from './CurrentEvent'; 6 | import FutureEvent from './FutureEvent'; 7 | import PastEvent from './PastEvent'; 8 | import UiComponent from './UiComponent'; 9 | 10 | export default class Event implements UiComponent { 11 | constructor(private _event: dto.Event, 12 | private _canceledEvents: Array) { 13 | } 14 | 15 | appendTo(entry: HTMLElement | null): void { 16 | let secondsDiff = moment().diff(this._event.datetime, 'seconds'); 17 | 18 | if (this.isCancelled()) { 19 | new CancelledEvent(this._event).appendTo(entry); 20 | } else if (0 <= secondsDiff && secondsDiff < 4 * 60 * 60) { 21 | new CurrentEvent(this._event).appendTo(entry); 22 | } else if (secondsDiff >= 4 * 60 * 60) { 23 | new PastEvent(this._event).appendTo(entry); 24 | } else { 25 | new FutureEvent(this._event).appendTo(entry); 26 | } 27 | 28 | const hashId = "#_" + this._event.datetime.utc().unix(); 29 | if (window.location.hash == hashId) { 30 | window.location.hash = ""; 31 | setTimeout(() => { window.location.hash = hashId; }, 0); 32 | } 33 | } 34 | 35 | isCancelled(): boolean { 36 | if (!this._canceledEvents) { 37 | return false; 38 | } 39 | 40 | return this._canceledEvents.findIndex((c) => c == this._event.datetime.unix()) >= 0; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /ts/EventsForCurrentPeriod.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import * as html from './html'; 3 | import * as list from './list'; 4 | import * as moment from 'moment'; 5 | import ComponentsList from './ComponentsList'; 6 | import ComponentsArray from './ComponentsArray'; 7 | import Event from './Event'; 8 | import EventsForDay from './EventsForDay' 9 | import UiComponent from './UiComponent'; 10 | import DayOff from './DayOff'; 11 | 12 | export default class EventsForCurrentPeriod implements UiComponent { 13 | constructor(private _state: dto.State) { 14 | } 15 | 16 | appendTo(entry: HTMLElement | null): void { 17 | let day = moment().clone().utc().startOf('day').subtract(2, 'days') 18 | 19 | new html.Div( 20 | new ComponentsList( 21 | new list.MappedList( 22 | new list.ListOfNumbersRange(1, 16), 23 | (_, i) => new EventsForDay( 24 | this._state, 25 | day.clone().add(i, 'days').format("YYYY-MM-DD"), 26 | ) 27 | ) 28 | ), 29 | {"class": "events"} 30 | ).appendTo(entry) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ts/EventsForDay.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import * as list from './list'; 3 | import * as moment from 'moment'; 4 | import Event from './Event' 5 | import UiComponent from './UiComponent'; 6 | import ComponentsArray from './ComponentsArray'; 7 | import DayOff from './DayOff'; 8 | 9 | // TODO(#69): EventsForDay can be a concatenation of RecurringEventsForDay and ScheduledEventsForDay objects 10 | export default class EventsForDay implements UiComponent { 11 | constructor(private _state: dto.State, 12 | private _date: string) { 13 | } 14 | 15 | appendTo(entry: HTMLElement | null): void { 16 | const events = this._asArray(); 17 | 18 | if (events.length > 0) { 19 | new ComponentsArray(events).appendTo(entry); 20 | } else { 21 | new DayOff(this._state, this._date).appendTo(entry); 22 | } 23 | } 24 | 25 | _asArray(): Array { 26 | let weekday = moment.tz(this._date, this._state.timezone).isoWeekday(); 27 | return !this._state.projects ? [] : this._state.projects 28 | .filter( 29 | (p) => { 30 | let thisDate = moment.tz(`${this._date}`, this._state.timezone).utc().unix(); 31 | let starts = p.starts ? moment.tz(`${p.starts}`, this._state.timezone).utc().unix() : 0; 32 | let ends = p.ends ? moment.tz(`${p.ends}`, this._state.timezone).utc().unix() : Number.MAX_SAFE_INTEGER; 33 | return starts <= thisDate && thisDate <= ends; 34 | } 35 | ) 36 | .filter( 37 | (p) => p.days.includes(weekday) 38 | ) 39 | .map( 40 | (p) => { 41 | return { 42 | datetime: moment.tz(`${this._date} ${p.time}`, this._state.timezone).utc(), 43 | title: p.name, 44 | description: p.description, 45 | url: p.url, 46 | channel: p.channel, 47 | }; 48 | } 49 | ) 50 | .concat( 51 | !this._state.extraEvents ? [] : this._state.extraEvents 52 | .filter( 53 | (ee) => ee.date == this._date 54 | ) 55 | .map( 56 | (ee) => { 57 | return { 58 | datetime: moment.tz(`${this._date} ${ee.time}`, this._state.timezone).utc(), 59 | title: ee.title, 60 | description: ee.description, 61 | url: ee.url, 62 | channel: ee.channel, 63 | }; 64 | } 65 | ) 66 | ) 67 | .map( 68 | (e) => new Event( 69 | this._state.eventPatches 70 | ? new dto.PatchedEvent(e, this._state.eventPatches[e.datetime.utc().unix()]) 71 | : e, 72 | this._state.cancelledEvents 73 | ) 74 | ) 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /ts/FailedScheduleLoad.ts: -------------------------------------------------------------------------------- 1 | import * as html from './html'; 2 | import UiComponent from './UiComponent'; 3 | 4 | export default class FailedScheduleLoad implements UiComponent { 5 | appendTo(entry: HTMLElement | null): void { 6 | // TODO(#55): FailedScheduleLoad component is not implemented 7 | new html.Div( 8 | new html.Text( 9 | 'Failed to load schedule data. Keep refreshing.' 10 | ) 11 | ).appendTo(entry) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ts/FutureEvent.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import * as html from './html'; 3 | import * as moment from 'moment'; 4 | import ComponentsArray from './ComponentsArray'; 5 | import Countdown from './Countdown'; 6 | import UiComponent from './UiComponent'; 7 | 8 | export default class FutureEvent implements UiComponent { 9 | constructor(private _event: dto.Event) { 10 | } 11 | 12 | appendTo(entry: HTMLElement | null): void { 13 | new html.Div( 14 | new ComponentsArray([ 15 | new html.Div( 16 | new html.Href( 17 | `#_${this._event.datetime.utc().unix()}`, 18 | new html.Text(`${this._event.datetime.utc().unix()}`) 19 | ), 20 | {"class": "timestamp"} 21 | ), 22 | new html.H1( 23 | new html.Href( 24 | `${this._event.url}`, 25 | new html.Text(`${this._event.title}`) 26 | ) 27 | ), 28 | new Countdown(this._event.datetime, "Starts "), 29 | new html.Div( 30 | new html.Href( 31 | `https://twitch.tv/${this._event.channel}`, 32 | new html.Text(`https://twitch.tv/${this._event.channel}`)), 33 | {"class": "channel"} 34 | ), 35 | new html.Div( 36 | new html.Markdown(`${this._event.description}`), 37 | {"class": "description markdown"} 38 | ) 39 | ]), 40 | {"class": "event", 41 | "id": `_${this._event.datetime.utc().unix()}`} 42 | ).appendTo(entry); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /ts/PastEvent.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import * as html from './html'; 3 | import * as moment from 'moment'; 4 | import ComponentsArray from './ComponentsArray'; 5 | import Countdown from './Countdown'; 6 | import UiComponent from './UiComponent'; 7 | 8 | export default class PastEvent implements UiComponent { 9 | constructor(private _event: dto.Event) { 10 | } 11 | 12 | appendTo(entry: HTMLElement | null): void { 13 | new html.Div( 14 | new ComponentsArray([ 15 | new html.Div( 16 | new html.Href( 17 | `#_${this._event.datetime.utc().unix()}`, 18 | new html.Text(`${this._event.datetime.utc().unix()}`) 19 | ), 20 | {"class": "timestamp"} 21 | ), 22 | new html.H1( 23 | new html.Href( 24 | `${this._event.url}`, 25 | new html.Text(`${this._event.title}`) 26 | ) 27 | ), 28 | new Countdown(this._event.datetime, "finished "), 29 | new html.Div( 30 | new html.Href( 31 | `https://twitch.tv/${this._event.channel}`, 32 | new html.Text(`https://twitch.tv/${this._event.channel}`)), 33 | {"class": "channel"} 34 | ), 35 | new html.Div( 36 | new html.Markdown(`${this._event.description}`), 37 | {"class": "description markdown"} 38 | ) 39 | ]), 40 | {"class": "event past", 41 | "id": `_${this._event.datetime.utc().unix()}`} 42 | ).appendTo(entry) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /ts/StateFromUrl.ts: -------------------------------------------------------------------------------- 1 | import * as dto from './dto'; 2 | import Weekday from './Weekday'; 3 | 4 | export default class StateFromUrl { 5 | constructor(private _url: string) { 6 | } 7 | 8 | asPromise(): Promise { 9 | return fetch(this._url) 10 | .then((response) => response.json()) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ts/TwitchPlayer.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from './UiComponent'; 2 | import * as html from './html'; 3 | 4 | export default class TwitchPlayer implements UiComponent { 5 | constructor(private _userName: string) { 6 | } 7 | 8 | appendTo(entry: HTMLElement | null): void { 9 | new html.Tag( 10 | "iframe", 11 | new html.Empty(), 12 | {"src": `https://player.twitch.tv/?channel=${this._userName}&parent=tsoding.org&muted=true`, 13 | "allowfullscreen": "true", 14 | "class": "player"} 15 | ).appendTo(entry); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ts/UiComponent.ts: -------------------------------------------------------------------------------- 1 | export default interface UiComponent { 2 | appendTo(entry: HTMLElement | null): void 3 | } 4 | -------------------------------------------------------------------------------- /ts/Weekday.ts: -------------------------------------------------------------------------------- 1 | enum Weekday { 2 | Mon = 1, 3 | Tue, 4 | Wed, 5 | Thu, 6 | Fri, 7 | Sat, 8 | Sun, 9 | } 10 | 11 | export default Weekday 12 | -------------------------------------------------------------------------------- /ts/app.ts: -------------------------------------------------------------------------------- 1 | import 'moment-timezone'; 2 | import * as moment from 'moment'; 3 | import Event from './Event'; 4 | import EventsForCurrentPeriod from './EventsForCurrentPeriod'; 5 | import FailedScheduleLoad from './FailedScheduleLoad' 6 | import StateFromUrl from './StateFromUrl' 7 | import Weekday from './Weekday' 8 | 9 | new StateFromUrl('schedule.json') 10 | .asPromise() 11 | .then( 12 | (state) => new EventsForCurrentPeriod(state), 13 | () => new FailedScheduleLoad() 14 | ) 15 | .then((c) => c.appendTo(document.getElementById('root'))); 16 | -------------------------------------------------------------------------------- /ts/dto/Event.ts: -------------------------------------------------------------------------------- 1 | import * as moment from 'moment'; 2 | 3 | export default interface Event { 4 | datetime: moment.Moment, 5 | title: string, 6 | description: string, 7 | url: string, 8 | channel: string, 9 | } 10 | -------------------------------------------------------------------------------- /ts/dto/EventPatch.ts: -------------------------------------------------------------------------------- 1 | export default interface EventPatch { 2 | title?: string, 3 | description?: string, 4 | url?: string, 5 | channel?: string 6 | } 7 | -------------------------------------------------------------------------------- /ts/dto/ExtraEvent.ts: -------------------------------------------------------------------------------- 1 | // TODO(#71): dto.ExtraEvent should be called dto.ScheduledEvent 2 | export default interface ExtraEvent { 3 | date: string, 4 | time: string, 5 | title: string, 6 | description: string, 7 | url: string, 8 | channel: string, 9 | } 10 | -------------------------------------------------------------------------------- /ts/dto/PatchedEvent.ts: -------------------------------------------------------------------------------- 1 | import * as moment from 'moment'; 2 | import Event from './Event'; 3 | import EventPatch from './EventPatch'; 4 | 5 | export default class PatchedEvent implements Event { 6 | datetime: moment.Moment; 7 | title: string; 8 | description: string; 9 | url: string; 10 | channel: string; 11 | 12 | constructor(event: Event, eventPatch: EventPatch | undefined) { 13 | this.datetime = event.datetime; 14 | this.title = event.title; 15 | this.description = event.description; 16 | this.url = event.url; 17 | this.channel = event.channel; 18 | 19 | if (eventPatch) { 20 | if (eventPatch.title) { 21 | this.title = eventPatch.title; 22 | } 23 | 24 | if (eventPatch.description) { 25 | this.description = eventPatch.description; 26 | } 27 | 28 | if (eventPatch.url) { 29 | this.url = eventPatch.url; 30 | } 31 | 32 | if (eventPatch.channel) { 33 | this.channel = eventPatch.channel; 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ts/dto/Project.ts: -------------------------------------------------------------------------------- 1 | import Weekday from '../Weekday' 2 | 3 | // TODO(#70): dto.Project should be called dto.RecurringEvent 4 | export default interface Project { 5 | name: string, 6 | description: string, 7 | url: string, 8 | days: Array, 9 | time: string, 10 | channel: string, 11 | starts?: string, 12 | ends?: string, 13 | comment?: string 14 | } 15 | -------------------------------------------------------------------------------- /ts/dto/State.ts: -------------------------------------------------------------------------------- 1 | import Project from './Project'; 2 | import ExtraEvent from './ExtraEvent'; 3 | import EventPatch from './EventPatch'; 4 | 5 | export default interface State { 6 | projects: Array; 7 | timezone: string; 8 | extraEvents: Array; 9 | cancelledEvents: Array; 10 | eventPatches?: { [id: number] : EventPatch }; 11 | } 12 | -------------------------------------------------------------------------------- /ts/dto/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Event } from './Event'; 2 | export { default as EventPatch } from './EventPatch'; 3 | export { default as ExtraEvent } from './ExtraEvent'; 4 | export { default as PatchedEvent } from './PatchedEvent'; 5 | export { default as Project } from './Project'; 6 | export { default as State } from './State'; 7 | -------------------------------------------------------------------------------- /ts/html/Div.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from '../UiComponent'; 2 | import Tag from './Tag'; 3 | 4 | export default class Div implements UiComponent { 5 | constructor(private _body?: UiComponent, 6 | private _attrs?: {[key: string]: any}) { 7 | } 8 | 9 | appendTo(entry: HTMLElement | null): void { 10 | new Tag( 11 | "div", 12 | this._body, 13 | this._attrs, 14 | ).appendTo(entry); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ts/html/Empty.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from '../UiComponent'; 2 | 3 | export default class Empty implements UiComponent { 4 | appendTo(entry: HTMLElement | null): void { 5 | // Nothing. It's empty. 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /ts/html/H1.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from '../UiComponent'; 2 | import Tag from './Tag'; 3 | 4 | export default class H1 implements UiComponent { 5 | constructor(private _body?: UiComponent, 6 | private _attrs?: {[key: string]: any}) { 7 | } 8 | 9 | appendTo(entry: HTMLElement | null): void { 10 | new Tag( 11 | "h1", 12 | this._body, 13 | this._attrs, 14 | ).appendTo(entry); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ts/html/Href.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from '../UiComponent'; 2 | import Tag from './Tag'; 3 | 4 | export default class H1 implements UiComponent { 5 | constructor(private _url: string, 6 | private _body?: UiComponent, 7 | private _attrs?: {[key: string]: any}) { 8 | } 9 | 10 | appendTo(entry: HTMLElement | null): void { 11 | new Tag( 12 | "a", 13 | this._body, 14 | Object.assign({"href": this._url}, this._attrs), 15 | ).appendTo(entry); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ts/html/InnerHtml.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from '../UiComponent' 2 | 3 | export default class InnerHtml implements UiComponent { 4 | constructor(private _text: string) { 5 | } 6 | 7 | appendTo(entry: HTMLElement | null): void { 8 | if (entry) { 9 | entry.innerHTML = this._text; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ts/html/Markdown.ts: -------------------------------------------------------------------------------- 1 | import * as MarkdownIt from 'markdown-it'; 2 | import InnerHtml from './InnerHtml'; 3 | import UiComponent from '../UiComponent'; 4 | 5 | export default class Markdown implements UiComponent { 6 | constructor(private _text: string) { 7 | } 8 | 9 | appendTo(entry: HTMLElement | null): void { 10 | new InnerHtml( 11 | new MarkdownIt({ 12 | html: true, 13 | linkify: true 14 | }).render(this._text) 15 | ).appendTo(entry) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ts/html/Tag.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from '../UiComponent'; 2 | 3 | export default class Tag implements UiComponent { 4 | constructor(private _name: string, 5 | private _body?: UiComponent, 6 | private _attrs?: {[key: string]: any}) { 7 | } 8 | 9 | appendTo(entry: HTMLElement | null): void { 10 | if (!entry) { 11 | return; 12 | } 13 | 14 | let element = document.createElement(this._name); 15 | 16 | if (this._attrs) { 17 | for (let attrKey in this._attrs) { 18 | let attr = document.createAttribute(attrKey); 19 | attr.value = this._attrs[attrKey]; 20 | element.attributes.setNamedItem(attr); 21 | } 22 | } 23 | 24 | if (this._body) { 25 | this._body.appendTo(element); 26 | } 27 | 28 | entry.appendChild(element); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ts/html/Text.ts: -------------------------------------------------------------------------------- 1 | import UiComponent from '../UiComponent'; 2 | 3 | export default class Text implements UiComponent { 4 | constructor(private _text: string) { 5 | } 6 | 7 | appendTo(entry: HTMLElement | null): void { 8 | if (entry) { 9 | entry.appendChild(document.createTextNode(this._text)); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ts/html/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Div } from './Div'; 2 | export { default as Empty } from './Empty'; 3 | export { default as H1 } from './H1'; 4 | export { default as Href } from './Href'; 5 | export { default as Tag } from './Tag'; 6 | export { default as Text } from './Text'; 7 | export { default as InnerHtml } from './InnerHtml'; 8 | export { default as Markdown } from './Markdown'; 9 | -------------------------------------------------------------------------------- /ts/list/ConcatLists.ts: -------------------------------------------------------------------------------- 1 | import List from './List'; 2 | 3 | export default class ConcatLists implements List { 4 | constructor(private _input: List[]) { 5 | } 6 | 7 | asArray(): Array { 8 | let result: Array = []; 9 | 10 | this._input.forEach( 11 | (xs) => { 12 | result = result.concat(xs.asArray()) 13 | } 14 | ) 15 | 16 | return result; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ts/list/FilteredList.ts: -------------------------------------------------------------------------------- 1 | import List from './List'; 2 | 3 | export default class FilteredList implements List { 4 | constructor(private _input: List, 5 | private _predicate: (value: T, index: number) => boolean) { 6 | } 7 | 8 | asArray(): Array { 9 | return this._input.asArray().filter(this._predicate) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ts/list/List.ts: -------------------------------------------------------------------------------- 1 | export default interface List { 2 | asArray(): Array 3 | } 4 | -------------------------------------------------------------------------------- /ts/list/ListOfNumbersRange.ts: -------------------------------------------------------------------------------- 1 | import List from './List'; 2 | 3 | export default class ListOfNumbersRange implements List { 4 | constructor(private _low: number, 5 | private _high: number) { 6 | } 7 | 8 | asArray(): Array { 9 | let result = []; 10 | 11 | for (let i = this._low; i <= this._high; ++i) { 12 | result.push(i); 13 | } 14 | 15 | return result; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ts/list/MappedList.ts: -------------------------------------------------------------------------------- 1 | import List from './List'; 2 | 3 | export default class MappedList implements List { 4 | constructor(private _input: List, 5 | private _mapper: (value: T, index: number) => U) { 6 | } 7 | 8 | asArray(): Array { 9 | return this._input.asArray().map(this._mapper); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ts/list/SlicedList.ts: -------------------------------------------------------------------------------- 1 | import List from './List'; 2 | 3 | export default class SlicedList implements List { 4 | constructor(private _input: List, 5 | private begin: number, 6 | private end?: number) { 7 | } 8 | 9 | asArray(): Array { 10 | return this._input.asArray().slice(this.begin, this.end); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ts/list/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ConcatLists } from "./ConcatLists"; 2 | export { default as List } from "./List"; 3 | export { default as SlicedList } from "./SlicedList"; 4 | export { default as FilteredList } from "./FilteredList"; 5 | export { default as ListOfNumbersRange } from "./ListOfNumbersRange"; 6 | export { default as MappedList } from "./MappedList"; 7 | -------------------------------------------------------------------------------- /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": ["es2015", "es2017", "dom"], /* 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": "./ts", /* 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": false /* 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 | "files": ["./ts/app.ts"] 60 | } 61 | --------------------------------------------------------------------------------