├── .editorconfig ├── Readme.md ├── code ├── ms_stl │ ├── main.cpp │ └── ms_stl.qbs └── naive_function │ ├── Function.hpp │ ├── main.cpp │ └── naive_function.qbs └── slides ├── .gitignore ├── .ruby-version ├── Gemfile ├── dev.cmd ├── docker-compose.yml ├── gulpfile.js ├── package.json ├── src ├── images │ ├── HummingBird-BY-SA-2.0.jpg │ ├── HummingBird.txt │ ├── Sonic amilibo.txt │ ├── Sonic_amilibo.jpg │ ├── The Elephant in the Room.txt │ ├── The_Elephant_in_the_Room_bigger.jpg │ ├── andreas.png │ ├── cppug.png │ ├── deepai_callback.jpg │ ├── deepai_curtain.jpg │ ├── deepai_extensions.jpg │ ├── deepai_happy_cpp_hackking.jpg │ ├── deepai_letsgo.jpg │ ├── deepai_puzzle.jpg │ ├── hicknhackLogo_new_text.png │ └── rebuild_logo.png ├── index.adoc ├── scripts │ └── main.js └── styles │ ├── bespoke-base-fixed.styl │ ├── bespoke-modes.styl │ ├── content-types.styl │ ├── fonts.css │ ├── main.styl │ ├── print.styl │ ├── reset.styl │ ├── slide-types.styl │ └── variables.styl └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.{h,hpp,hxx,c,cpp,cxx}{,.in}] 4 | indent_size = 4 5 | tab_width = 8 6 | indent_style = spaces 7 | 8 | [*{.js,.qml}{,.in}] 9 | indent_size = 4 10 | tab_width = 8 11 | indent_style = spaces 12 | 13 | [Makefile] 14 | indent_size = 8 15 | tab_width = 8 16 | indent_style = tabs 17 | 18 | [*] 19 | indent_size = 4 20 | tab_width = 8 21 | indent_style = spaces 22 | insert_final_newline = 1 23 | trim_trailing_whitespace = 1 24 | charset = UTF-8 25 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # std::function - a deep dive behind the curtain 2 | 3 | Presentation for [Meeting C++ 2022](https://meetingcpp.com/2022) (17.-19. November 2022 in Berlin) 4 | 5 | ## Slides 6 | 7 | View slides: [https://arbmind.github.io/2022-function-en](https://arbmind.github.io/2022-function-en) 8 | 9 | ## Example Code 10 | 11 | The `code/` Folder contains some examples used in the presentation. 12 | 13 | For compilation a C++20 capable compiler and the [QBS](https://github.com/qbs/qbs) build system is used. It should be easy read if you use something else. 14 | 15 | *Warning:* All the code is for learning and demonstration purposes only and has no production quality. 16 | Especially the slide code is aimed to fit on slides and lacks a lot of best practices. 17 | 18 | ## Slide Technology 19 | 20 | * [AsciiDoctor](https://github.com/asciidoctor/asciidoctor) as hackable html slide generator with a lot of features 21 | * [Bespoke.js](https://github.com/bespokejs/bespoke) as a flexible html slide framework 22 | * [Patched AsciiDoctor-Bespoke](https://github.com/arBmind/asciidoctor-bespoke/tree/patch-1) that allows the nested code display 23 | * [Patched Bespoke-Bullets](https://github.com/arBmind/bespoke-bullets) to allow better interactions through API 24 | * [Patched Bespoke-Hash](https://github.com/arBmind/bespoke-hash) that uses the extended bullets API 25 | * [Patched Bespoke-OnStage](https://github.com/arBmind/bespoke-onstage) with some customizations and fixes for my setup 26 | * [Gulp](https://github.com/gulpjs/gulp) to automate regeneration and push slide updates to the browser 27 | * [Docker-Compose](https://docs.docker.com/compose/) is used to ease the setup during slide development 28 | 29 | ## License 30 | 31 | The slides here are available under the terms of the Creative Commons Attribution-ShareAlike license. 32 | [(cc-by-sa-license)](https://creativecommons.org/licenses/by-sa/2.0/) 33 | 34 | ### Used Pictures 35 | 36 | * [Bit Boy: The Elephant in the room](https://flic.kr/p/nNWNY) [(cc-by-sa-license)](https://creativecommons.org/licenses/by-sa/2.0) 37 | * [Farley Santos: Sonic ambilibo](https://flic.kr/p/vtxD4A) [(cc-by-sa-license)](https://creativecommons.org/licenses/by-sa/2.0) 38 | * [Mike's Birds: Hummingbird](https://flic.kr/p/25A4Ah3) [(cc-by-sa-license)](https://creativecommons.org/licenses/by-sa/2.0) 39 | -------------------------------------------------------------------------------- /code/ms_stl/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | struct Example { 5 | int memberData = 2; 6 | int memberFunction() { return 3; } 7 | }; 8 | using F = std::function; 9 | 10 | struct Restricted { 11 | Restricted(int v) : m{v} {} 12 | Restricted(const Restricted&) = delete; 13 | Restricted(Restricted&&) = delete; 14 | Restricted& operator=(const Restricted&) = delete; 15 | Restricted& operator=(Restricted&&) = delete; 16 | 17 | void operator() (int v) const { 18 | std::cout << "restriced: " << v + m << '\n'; 19 | } 20 | 21 | int m; 22 | }; 23 | using MOF = std::move_only_function; 24 | 25 | int main() { 26 | auto example = Example{}; 27 | auto dataFunc = F{&Example::memberData}; 28 | std::cout << dataFunc(&example) << '\n'; 29 | 30 | auto memberFunc = F{&Example::memberFunction}; 31 | std::cout << memberFunc(&example) << '\n'; 32 | 33 | // auto empty = F{}; 34 | // std::cout << empty(&example) << '\n'; 35 | 36 | std::cout << sizeof(F{}) << '\n'; 37 | 38 | auto mof = MOF{std::in_place_type_t{}, 6}; 39 | mof(7); 40 | // auto x = std::move(mof); 41 | // x(8); 42 | 43 | std::cout << sizeof(MOF{}) << '\n'; 44 | } 45 | -------------------------------------------------------------------------------- /code/ms_stl/ms_stl.qbs: -------------------------------------------------------------------------------- 1 | Application { 2 | consoleApplication: true 3 | 4 | Depends { name: "cpp" } 5 | cpp.cxxLanguageVersion: "c++23" 6 | 7 | files: "main.cpp" 8 | } 9 | -------------------------------------------------------------------------------- /code/naive_function/Function.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | template struct Function; 6 | 7 | template 8 | struct Function { 9 | Function() = default; 10 | template 11 | requires(!std::is_same_v) 12 | Function(const Callable& callable) : m_ptr{new CallImpl{callable}} {} 13 | 14 | Ret operator() (Args... args) const { return m_ptr->call((Args)args...); } 15 | 16 | private: 17 | struct CallInterface { 18 | virtual Ret call(Args...) = 0; 19 | }; 20 | template 21 | struct CallImpl final : CallInterface { 22 | Callable m_callable; 23 | CallImpl(const Callable& callable) : m_callable{callable} {} 24 | 25 | Ret call(Args... args) override { return std::invoke(m_callable, (Args)args...); } 26 | }; 27 | std::shared_ptr m_ptr; 28 | }; 29 | -------------------------------------------------------------------------------- /code/naive_function/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "Function.hpp" 3 | 4 | using Clicked = Function; 5 | 6 | struct Button { 7 | Clicked clicked; 8 | }; 9 | 10 | struct Dialog { 11 | Button okButton; 12 | Button cancelButton; 13 | 14 | Dialog() { 15 | okButton.clicked = Clicked{[this]() { 16 | this->onOkClicked(); 17 | }}; 18 | } 19 | 20 | void onOkClicked() { 21 | std::cout << "Ok clicked!"; 22 | } 23 | void onCancelClicked() { 24 | std::cout << "Cancel clicked!"; 25 | } 26 | }; 27 | 28 | int main() { 29 | auto dialog = Dialog{}; 30 | dialog.okButton.clicked(); 31 | } 32 | -------------------------------------------------------------------------------- /code/naive_function/naive_function.qbs: -------------------------------------------------------------------------------- 1 | Application { 2 | consoleApplication: true 3 | 4 | Depends { name: "cpp" } 5 | cpp.cxxLanguageVersion: "c++20" 6 | 7 | files: [ 8 | "Function.hpp", 9 | "main.cpp", 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /slides/.gitignore: -------------------------------------------------------------------------------- 1 | /.bundle/gems/ 2 | /Gemfile.lock 3 | /node_modules/ 4 | /public/ 5 | -------------------------------------------------------------------------------- /slides/.ruby-version: -------------------------------------------------------------------------------- 1 | 3.1.2 2 | -------------------------------------------------------------------------------- /slides/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | #gem 'asciidoctor-bespoke', '1.0.0.alpha.1' 4 | # To use the latest version from git, use the following line instead 5 | #gem 'asciidoctor-bespoke', github: 'asciidoctor/asciidoctor-bespoke' 6 | gem 'asciidoctor-bespoke', github: 'arBmind/asciidoctor-bespoke', branch: 'patch-1' -------------------------------------------------------------------------------- /slides/dev.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | yarn run dev 3 | -------------------------------------------------------------------------------- /slides/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | volumes: 4 | bundle: # bundles 5 | node_modules: 6 | 7 | services: 8 | app: 9 | image: alpinelab/ruby-dev:3.1.2 10 | command: yarn run dev 11 | ports: 12 | - "8000:8000" 13 | - "35729:35729" 14 | volumes: 15 | - .:/app 16 | - bundle:/bundle 17 | - node_modules:/app/node_modules 18 | -------------------------------------------------------------------------------- /slides/gulpfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var autoprefixer = require('gulp-autoprefixer'), 3 | browserify = require('browserify'), 4 | buffer = require('vinyl-buffer'), 5 | chmod = require('gulp-chmod'), 6 | connect = require('gulp-connect'), 7 | csso = require('gulp-csso'), 8 | del = require('del'), 9 | exec = require('gulp-exec'), 10 | gulp = require('gulp'), 11 | gutil = require('gulp-util'), 12 | plumber = require('gulp-plumber'), // plumber prevents pipe breaking caused by errors thrown by plugins 13 | rename = require('gulp-rename'), 14 | source = require('vinyl-source-stream'), 15 | stylus = require('gulp-stylus'), 16 | through = require('through'), 17 | uglify = require('gulp-uglify'), 18 | isDist = process.argv.indexOf('deploy') >= 0, 19 | MAX_HTML_FILE_SIZE = 100 * 1024 * 1024; 20 | 21 | gulp.task('js', ['clean:js'], function() { 22 | // see https://wehavefaces.net/gulp-browserify-the-gulp-y-way-bb359b3f9623 23 | return browserify('src/scripts/main.js').bundle() 24 | // NOTE this error handler fills the role of plumber() when working with browserify 25 | .on('error', function(e) { if (isDist) { throw e; } else { gutil.log(e.stack); this.emit('end'); } }) 26 | .pipe(source('src/scripts/main.js')) 27 | .pipe(buffer()) 28 | .pipe(isDist ? uglify() : through()) 29 | .pipe(rename('build.js')) 30 | .pipe(gulp.dest('public/build')) 31 | .pipe(connect.reload()); 32 | }); 33 | 34 | gulp.task('html', [], function() { 35 | return gulp.src('src/index.adoc') 36 | .pipe(isDist ? through() : plumber()) 37 | .pipe(exec('bundle exec asciidoctor-bespoke -o - src/index.adoc', { pipeStdout: true, maxBuffer: MAX_HTML_FILE_SIZE })) 38 | .pipe(exec.reporter({ stdout: false })) 39 | .pipe(rename('index.html')) 40 | .pipe(chmod(644)) 41 | .pipe(gulp.dest('public')) 42 | .pipe(connect.reload()); 43 | }); 44 | 45 | gulp.task('css', ['clean:css'], function() { 46 | return gulp.src('src/styles/main.styl') 47 | .pipe(isDist ? through() : plumber()) 48 | .pipe(stylus({ 'include css': true, paths: ['./node_modules'] })) 49 | .pipe(autoprefixer({ browsers: ['last 2 versions'], cascade: false })) 50 | .pipe(isDist ? csso() : through()) 51 | .pipe(rename('build.css')) 52 | .pipe(gulp.dest('public/build')) 53 | .pipe(connect.reload()); 54 | }); 55 | 56 | gulp.task('fonts', ['clean:fonts'], function() { 57 | return gulp.src('src/fonts/*') 58 | .pipe(gulp.dest('public/fonts')) 59 | .pipe(connect.reload()); 60 | }); 61 | 62 | gulp.task('images', ['clean:images'], function() { 63 | return gulp.src('src/images/**/*') 64 | .pipe(gulp.dest('public/images')) 65 | .pipe(connect.reload()); 66 | }); 67 | 68 | gulp.task('onstage', ['clean:onstage'], function() { 69 | return gulp.src('node_modules/bespoke-onstage/demo/onstage*.*') 70 | .pipe(gulp.dest('public/')) 71 | .pipe(connect.reload()); 72 | }); 73 | 74 | gulp.task('clean', function() { 75 | return del('public'); 76 | }); 77 | 78 | gulp.task('clean:onstage', function() { 79 | return del('public/onstage*.*'); 80 | }); 81 | 82 | gulp.task('clean:html', function() { 83 | return del('public/index.html'); 84 | }); 85 | 86 | gulp.task('clean:js', function() { 87 | return del('public/build/build.js'); 88 | }); 89 | 90 | gulp.task('clean:css', function() { 91 | return del('public/build/build.css'); 92 | }); 93 | 94 | gulp.task('clean:fonts', function() { 95 | return del('public/fonts'); 96 | }); 97 | 98 | gulp.task('clean:images', function() { 99 | return del('public/images'); 100 | }); 101 | 102 | gulp.task('connect', ['build'], function() { 103 | connect.server({ root: 'public', host: '0.0.0.0', port: 8000, livereload: true }); 104 | }); 105 | 106 | gulp.task('watch', function() { 107 | gulp.watch(['src/**/*.adoc', 'src/code/**/*'], ['html']); 108 | gulp.watch('src/scripts/**/*.js', ['js']); 109 | gulp.watch('src/styles/**/*.styl', ['css']); 110 | gulp.watch('src/images/**/*', ['images']); 111 | gulp.watch('src/fonts/*', ['fonts']); 112 | gulp.watch('node_modules/bespoke-onstage/demo/onstage*.*', ['onstage']); 113 | }); 114 | 115 | gulp.task('build', ['js', 'html', 'css', 'fonts', 'images', 'onstage']); 116 | gulp.task('serve', ['connect', 'watch']); 117 | gulp.task('default', ['build']); 118 | -------------------------------------------------------------------------------- /slides/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test_presentation", 3 | "description": "Just testing bespoke", 4 | "author": "Andreas Reischuck", 5 | "license": "MIT", 6 | "version": "1.0.0", 7 | "dependencies": { 8 | "natives": "^1.1.6" 9 | }, 10 | "devDependencies": { 11 | "bespoke": "^1.1.0", 12 | "bespoke-blackout": "^1.0.1", 13 | "bespoke-bullets": "github:arBmind/bespoke-bullets#patches", 14 | "bespoke-classes": "^1.0.0", 15 | "bespoke-cursor": "^1.0.3", 16 | "bespoke-fullscreen": "^1.0.0", 17 | "bespoke-hash": "github:arBmind/bespoke-hash#patch-1", 18 | "bespoke-nav": "^1.0.2", 19 | "bespoke-onstage": "github:arBmind/bespoke-onstage#patches", 20 | "bespoke-overview": "^1.0.5", 21 | "bespoke-progress": "^1.0.0", 22 | "bespoke-scale": "^1.0.1", 23 | "bespoke-slidenumber": "^0.1.0", 24 | "bespoke-title": "^1.0.0", 25 | "browserify": "^16.2.3", 26 | "del": "^3.0.0", 27 | "gulp": "^3.9.1", 28 | "gulp-autoprefixer": "6.0.0", 29 | "gulp-chmod": "^2.0.0", 30 | "gulp-connect": "^5.7.0", 31 | "gulp-csso": "^3.0.1", 32 | "gulp-exec": "^3.0.2", 33 | "gulp-jade": "^1.1.0", 34 | "gulp-plumber": "^1.2.1", 35 | "gulp-rename": "^1.4.0", 36 | "gulp-stylus": "^2.7.0", 37 | "gulp-uglify": "^3.0.1", 38 | "gulp-util": "^3.0.8", 39 | "normalizecss": "^3.0.0", 40 | "prismjs": "^1.20.0", 41 | "through": "^2.3.8", 42 | "vinyl-buffer": "^1.0.1", 43 | "vinyl-source-stream": "^2.0.0" 44 | }, 45 | "resolutions": { 46 | "graceful-fs": "^4.2.4" 47 | }, 48 | "engines": { 49 | "node": ">=0.10.0" 50 | }, 51 | "scripts": { 52 | "dev": "gulp serve" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /slides/src/images/HummingBird-BY-SA-2.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/HummingBird-BY-SA-2.0.jpg -------------------------------------------------------------------------------- /slides/src/images/HummingBird.txt: -------------------------------------------------------------------------------- 1 | https://flic.kr/p/25A4Ah3 2 | 3 | Mike's Birds 4 | https://creativecommons.org/licenses/by-sa/2.0/ -------------------------------------------------------------------------------- /slides/src/images/Sonic amilibo.txt: -------------------------------------------------------------------------------- 1 | https://flic.kr/p/vtxD4A 2 | 3 | CC-BY-SA 2.0 4 | Farley Santos -------------------------------------------------------------------------------- /slides/src/images/Sonic_amilibo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/Sonic_amilibo.jpg -------------------------------------------------------------------------------- /slides/src/images/The Elephant in the Room.txt: -------------------------------------------------------------------------------- 1 | https://flic.kr/p/nNWNY 2 | 3 | Bit Boy 4 | CC-BY-SA 2.0 -------------------------------------------------------------------------------- /slides/src/images/The_Elephant_in_the_Room_bigger.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/The_Elephant_in_the_Room_bigger.jpg -------------------------------------------------------------------------------- /slides/src/images/andreas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/andreas.png -------------------------------------------------------------------------------- /slides/src/images/cppug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/cppug.png -------------------------------------------------------------------------------- /slides/src/images/deepai_callback.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/deepai_callback.jpg -------------------------------------------------------------------------------- /slides/src/images/deepai_curtain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/deepai_curtain.jpg -------------------------------------------------------------------------------- /slides/src/images/deepai_extensions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/deepai_extensions.jpg -------------------------------------------------------------------------------- /slides/src/images/deepai_happy_cpp_hackking.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/deepai_happy_cpp_hackking.jpg -------------------------------------------------------------------------------- /slides/src/images/deepai_letsgo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/deepai_letsgo.jpg -------------------------------------------------------------------------------- /slides/src/images/deepai_puzzle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/deepai_puzzle.jpg -------------------------------------------------------------------------------- /slides/src/images/hicknhackLogo_new_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/hicknhackLogo_new_text.png -------------------------------------------------------------------------------- /slides/src/images/rebuild_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arBmind/2022-function-en/54e55e1462ea51242e7894e63a310fa89cca3d34/slides/src/images/rebuild_logo.png -------------------------------------------------------------------------------- /slides/src/index.adoc: -------------------------------------------------------------------------------- 1 | = [language-cpp]#`std::function`#: a deep dive behind the curtain 2 | :author: Andreas Reischuck 3 | :twitter: @arBmind 4 | :!avatar: andreas.png 5 | :!organization: HicknHack Software GmbH 6 | :!sectids: 7 | :imagesdir: images 8 | :icons: font 9 | :use-link-attrs: 10 | :title-separator: : 11 | :codedir: code 12 | :!data-uri: 13 | :docinfo2: 14 | 15 | *Meeting C++ 2022* 16 | 17 | ++++ 18 | 19 | 25 | 26 | ++++ 27 | 28 | [.cue] 29 | **** 30 | Welcome to my talk! 31 | 32 | I will give you a deep dive behind the curtain of std::function. 33 | 34 | Some words about myself… 35 | **** 36 | 37 | == ! 38 | 39 | image::andreas.png[role="center", width="400"] 40 | 41 |   42 | 43 | [%build] 44 | * Andreas Reischuck 45 | * @*arBmind* 46 | 47 | [.cue] 48 | **** 49 | 1. My Name is Andreas Reischuck 50 | 2. … also known as arBmind on the interwebs. 51 | 52 | I give online and on-site trainings: 53 | 54 | * C++ 55 | * Qt 56 | * Clean Code 57 | 58 | You can also hire my company… 59 | **** 60 | 61 | == ! 62 | 63 | image::hicknhackLogo_new_text.png[role="center", width="400"] 64 | 65 |   66 | 67 | [%build] 68 | * [.blue]_Help_ with C++, Qt and more 69 | * [.green]_Work_ with us 70 | 71 | [.cue] 72 | **** 73 | … HicknHack Software! 74 | 75 | 1. We help you to build better software! 76 | * C++ Qt UIs 77 | * and much more! 78 | 79 | 2. We are always hiring! 80 | * locally in Dresden 81 | * or 100% remote in Germany 82 | 83 | Before we start a non expert disclaimer… 84 | **** 85 | 86 | == Not an Expert 87 | 88 | [.badge] 89 | Disclaimer 90 | 91 | [.cue] 92 | **** 93 | Like everybody on this planet, I am just learning! 94 | 95 | Take everything I say with the grain of salt. 96 | The code works, but might not be production ready. 97 | In fact I might have simplified it intendionally to bring my points accross. 98 | 99 | With all this taken care of, let us investigate std::function. 100 | **** 101 | 102 | [.subtitle] 103 | == Let's go 104 | 105 | image::deepai_letsgo.jpg[role="background overlay", width="2048"] 106 | 107 | [.cue] 108 | **** 109 | First, I would like to bring back your memories about normal C++ functions... 110 | **** 111 | 112 | == Simple C++ function 113 | 114 | [source.lang-cpp%nested, cpp] 115 | ---- 116 | // nest++ 117 | void basic_function() {} 118 | // nest-- 119 | // nest++ 120 | auto trailing_basic_function() -> void {} 121 | // nest-- 122 | ---- 123 | 124 | [.cue] 125 | **** 126 | 0 - This is a very simple function in C++. 127 | 128 | 1. Since C++11 we can also write it like this. 129 | * Many C++ developers don't know this. 130 | * It's called the trailing return type. 131 | * It was added for consistency with lambda return types. 132 | 133 | Both variants are implementations of an actual function. 134 | **** 135 | 136 | == Function signature are types 137 | 138 | [.build] 139 | -- 140 | [source.lang-cpp%nested, cpp] 141 | ---- 142 | // nest++ 143 | using VoidFunction = void(); 144 | // nest-- 145 | // nest++ 146 | using TrailingVoidFunction = auto() -> void; 147 | // nest-- 148 | ---- 149 | -- 150 | 151 | [.cue] 152 | **** 153 | In C++ function signatures are types. 154 | 155 | 1. For a simple void function 156 | * Basically: Leave out the name and body => function signature 157 | * The function signature is a type. 158 | 159 | 2. This also works with trailing return types… 160 | 161 | These signature types are cannot be stored in a variable. 162 | 163 | The compiler simply does not know the size. 164 | 165 | But we can … 166 | **** 167 | 168 | == Variable with pointer to function 169 | 170 | [source.lang-cpp%nested, cpp] 171 | ---- 172 | using VoidFunction = void(); 173 | // nest++ 174 | using VoidFunctionPtr = VoidFunction*; 175 | // nest-- 176 | // nest++ 177 | auto basic_function_ptr = 178 | VoidFunctionPtr{&basic_function}; 179 | // nest-- 180 | 181 | // nest++ 182 | basic_function_ptr(); // calls basic_function 183 | // nest-- 184 | ---- 185 | 186 | [.cue] 187 | **** 188 | 0 - create a pointer to a function with this… 189 | 190 | 1. Pointers can be stored in variables. 191 | * address of a function is a function pointer. 192 | 2. We can call the function pointer directly… 193 | * No need to deference it. 194 | 195 | I hope this brings everyone on the same page here. 196 | 197 | Any questions so far? 198 | **** 199 | 200 | == [language-cpp]#`constexpr`# function pointer 201 | 202 | [.build] 203 | -- 204 | [source.lang-cpp%nested, cpp] 205 | ---- 206 | // nest++ 207 | constexpr auto constexpr_basic_function_ptr = 208 | VoidFunctionPtr{&basic_function}; 209 | // nest-- 210 | 211 | // nest++ 212 | constexpr_basic_function_ptr(); 213 | // nest-- 214 | ---- 215 | -- 216 | 217 | [.cue] 218 | **** 219 | The compiler pretends to know the function pointers at compile time. 220 | 221 | 1. We can store them as constexpr variables… 222 | 2. ...and we can still call them in regular code. 223 | 224 | The function does not have to be constexpr. But the pointer to the function always is. 225 | 226 | Actual pointer might only be known when the kernel loaded our binary. 227 | 228 | This concludes the C++ function pointer introduction. To summarize… 229 | **** 230 | 231 | == Summary 232 | 233 | [%build] 234 | * function signatures are types 235 | * we can store pointers to functions 236 | * function pointers are known at compile time 237 | 238 | [.cue] 239 | **** 240 | 1-2-3 241 | 242 | Questions? 243 | 244 | Okay then… 245 | **** 246 | 247 | [.subtitle] 248 | == Why use [language-cpp]#`std::function`#? 249 | 250 | [.cue] 251 | **** 252 | Why do we actually need std::function then? 253 | 254 | Let's consider the following example… 255 | **** 256 | 257 | == Callback Example 258 | 259 | image::deepai_callback.jpg[role="center", width="512"] 260 | 261 | Button triggers callback when clicked. 262 | 263 | [.cue] 264 | **** 265 | How should we implement a callback? 266 | 267 | For a simple example when a button is clicked. 268 | 269 | Pause! 270 | 271 | Let's try to use what we have learned so far… 272 | **** 273 | 274 | == ! 275 | 276 | Use Function Pointers 277 | 278 | [.cue] 279 | **** 280 | We have just seen that we can store function pointers. 281 | Let's try that… 282 | **** 283 | 284 | [.source] 285 | == ! 286 | 287 | [source.lang-cpp%nested, cpp] 288 | ---- 289 | // nest++ 290 | struct Button { 291 | // nest++ 292 | VoidFunctionPtr clicked; 293 | // nest-- 294 | }; 295 | // nest-- 296 | // nest++ 297 | struct EditDialog { 298 | // nest++ 299 | Button okButton; 300 | Button cancelButton; 301 | // nest-- 302 | 303 | // nest++ 304 | void onOkClicked(); 305 | void onCancelClicked(); 306 | // nest-- 307 | }; 308 | // nest-- 309 | ---- 310 | 311 | [.cue] 312 | **** 313 | 0 - Our Button should be a C++ class. I use struct to make the slide code shorter. This is not my recommendation. 314 | 315 | 1. Store function pointer as member attribute. 316 | 2. Let's use it! With a dialog with… 317 | 3. … an ok and cancel button. 318 | 4. react when a buttons is clicked. 319 | 320 | But this is a problem. We can only store a function pointer in the button. How do we know which dialog instance is meant? 321 | 322 | So the actual challenge now is… 323 | **** 324 | 325 | == Challenge: 326 | 327 | How can we call the instance methods of Dialog on clicked? 328 | 329 | [.cue] 330 | **** 331 | Any ideas? 332 | 333 | Pause! 334 | 335 | If function pointers is all we have. Our only option is to add arguments to our functions. 336 | 337 | Let's try that… 338 | **** 339 | 340 | == ! 341 | 342 | [source.lang-cpp%nested, cpp] 343 | ---- 344 | // nest++ 345 | using VoidVoidPtrFunction = void(void*); 346 | // nest-- 347 | // nest++ 348 | struct Button { 349 | // nest++ 350 | void* clicked_instance; 351 | // nest-- 352 | // nest++ 353 | VoidVoidPtrFunction clicked; 354 | // nest-- 355 | }; 356 | // nest-- 357 | ---- 358 | 359 | [.cue] 360 | **** 361 | 0 - We don't know the type of thing that the button is used in. 362 | We extend the function with a void pointer argument. 363 | 364 | 1. We extend the Button 365 | 2. and store the pointer 366 | 3. next to the function pointer. 367 | 368 | So we store two pointers per callback now. 369 | 370 | As we cannot know the concrete types. It's not type safe. 371 | **** 372 | 373 | == Function Pointers 374 | 375 | [%build] 376 | * Extra pointer 377 | * C-Style Solution 378 | 379 | [.cue] 380 | **** 381 | To summarize. It works but… 382 | 383 | 1. We need an extra class pointer 384 | 2. This is the C style solution. 385 | 386 | Don't use this if you can avoid it. 387 | 388 | But this is the benchmark we have be measured against. 389 | 390 | Can we do better with C++? 391 | **** 392 | 393 | == ! 394 | 395 | Object Oriented Approach 396 | 397 | [.cue] 398 | **** 399 | Let's try some object oriented thinking here… 400 | **** 401 | 402 | [.source] 403 | == ! 404 | 405 | [source.lang-cpp%nested, cpp] 406 | ---- 407 | // nest++ 408 | struct ClickableInterface { 409 | // nest++ 410 | virtual ~ClickableInterface() = default; 411 | // nest-- 412 | virtual void onClicked() = 0; 413 | }; 414 | // nest-- 415 | // nest++ 416 | struct EditDialog { 417 | // nest++ 418 | Button okButton; 419 | Button cancelButton; 420 | // nest-- 421 | // nest++ 422 | // Puh… 423 | // nest-- 424 | }; 425 | // nest-- 426 | ---- 427 | 428 | [.cue] 429 | **** 430 | 0 - Let's create a small interface for the Clickable callback. 431 | 432 | As it's very easy to shoot yourself in the foot with C++. 433 | 434 | 1. We should never forget the virtual destructor. 435 | Okay. Does this solve the issue? 436 | 2. Let's consider again our dialog. 437 | 3. It has two buttons. 438 | 4. How do we implement this interface for each of the buttons? 439 | There are ways to do this, but they involve a lot of effort. 440 | 441 | Let's see where we are… 442 | **** 443 | 444 | == Object Oriented Approach 445 | 446 | Clickable Interface 447 | 448 | [.cue] 449 | **** 450 | This was not a fully working solution, yet. 451 | 452 | Before we get stuck here, try something else… 453 | **** 454 | 455 | == ! 456 | 457 | image::The_Elephant_in_the_Room_bigger.jpg[role="center", width="1024"] 458 | 459 | Use [language-cpp]#`std::function`# 460 | 461 | [.cue] 462 | **** 463 | std function is obviously the solution… 464 | **** 465 | 466 | [.source] 467 | == ! 468 | 469 | [source.lang-cpp%nested, cpp] 470 | ---- 471 | // nest++ 472 | #include 473 | // nest-- 474 | // nest++ 475 | using CallbackFunc = std::function; 476 | // nest-- 477 | // nest++ 478 | struct Button { 479 | CallbackFunc clicked; 480 | }; 481 | // nest-- 482 | // nest++ 483 | EditDialog::EditDialog() { 484 | // nest++ 485 | okButton.clicked = [this]() { 486 | this->onOkClicked(); 487 | }; 488 | // nest-- 489 | } 490 | // nest-- 491 | ---- 492 | 493 | [.cue] 494 | **** 495 | 0 - We include the necessary std header. 496 | 497 | 1. type alias of a std function with our signature. 498 | 2. Store it in our button. 499 | 3. An finnally we can implement our dialog 500 | 4. ...with a simple lambda that captures the this pointer and calls the correct member method. 501 | 502 | Yeah! Great! 503 | **** 504 | 505 | == Use [language-cpp]#`std::function`# 506 | 507 | [%build] 508 | * [green]#✔# Typesafe 509 | * [green]#✔# Easy 510 | * [green]#😻# Nice 511 | 512 | [.cue] 513 | **** 514 | 1. std function is type safe 515 | 2. very straight forward to use 516 | 3. great stuff! 517 | 518 | This callback example is also the 90% use case. 519 | 520 | Questions? 521 | 522 | But there are some more demanding examples as well… 523 | **** 524 | 525 | == Extreme Example 526 | 527 | image::deepai_happy_cpp_hackking.jpg[role="center", width="512"] 528 | 529 | Task Scheduler 530 | 531 | [.cue] 532 | **** 533 | So consider when a button is clicked you want to compute something. 534 | 535 | For example decompress a video with many frames and auto. 536 | So we have many small computing tasks that should be scheduled on a CPU with finite amount of cores. 537 | 538 | That's what our scheduler is supposed to do. 539 | **** 540 | 541 | == ! 542 | 543 | [source.lang-cpp%nested, cpp] 544 | ---- 545 | // nest++ 546 | struct Scheduler { 547 | // nest++ 548 | // nest++ 549 | using Task = std::function; 550 | // nest-- 551 | 552 | void queueUpTask(const Task&); 553 | // nest-- 554 | 555 | // nest++ 556 | private: 557 | std::queue queue; 558 | // nest-- 559 | }; 560 | // nest-- 561 | ---- 562 | 563 | [.cue] 564 | **** 565 | 0 - We implement the scheduler as a C++ class. 566 | 567 | 1. It needs an Api to queue up a new task. 568 | 2. Each task can be a std function. 569 | The task shoud be executed on a thread. 570 | 3. Store all tasks in a queue. 571 | 572 | I hope you get the idea. 573 | 574 | All the arguments for each task are captured in the std function. Which might be much more than just a this pointer. 575 | 576 | Let's summarize… 577 | **** 578 | 579 | == Summary 580 | 581 | [language-cpp]#`std::function`# 582 | 583 | [%build] 584 | * store any callable 585 | * type safe 586 | * small callables 587 | 588 | [.cue] 589 | **** 590 | As we have seen in the examples… 591 | 592 | 1. We can store any callable object. A lambda for the button handler or a big task like object. 593 | 2. Unlike the C Solution it's type safe 594 | 3. But most of our callables are small. Like calling a member function. 595 | 596 | std::function is a very useful thing! Good to have. 597 | 598 | Questions? 599 | 600 | Okay now we know it's useful. Let's look how this magic trick works… 601 | **** 602 | 603 | == ! 604 | 605 | image::deepai_curtain.jpg[role="center", width="1920"] 606 | 607 | [.subtitle] 608 | == Naive implemenation of [language-cpp]#`std::function`# 609 | 610 | [.cue] 611 | **** 612 | We could jump directly to the source of the std libraries. 613 | 614 | But I suggest to keep these as our final bosses. 615 | 616 | Let us try to implement it on our own. 617 | **** 618 | 619 | [.source] 620 | == Function template signature 621 | 622 | [.build] 623 | -- 624 | [source%nested, cpp] 625 | ---- 626 | // nest++ 627 | using IntFunction = Function; 628 | // nest-- 629 | 630 | // nest++ 631 | // nest_current 632 | template 633 | struct Function {}; 634 | // nest-- 635 | // nest++ 636 | // nest_hidden 637 | template 638 | struct Function; 639 | // nest-- 640 | 641 | // nest++ 642 | // Partial Template Specialisation 643 | template 644 | struct Function {}; 645 | // nest-- 646 | ---- 647 | -- 648 | 649 | [.cue] 650 | **** 651 | 1. Start with the interface. 652 | 2. We need a template 653 | … Pause … 654 | 3. Function signatures are just types. 655 | * How to access return type and arguments? 656 | * …Partial template specialisation… 657 | 4. function template requires a type 658 | * Implementation for function signature 659 | 660 | We get return type and all the argument types. 661 | 662 | Great start! What's next? 663 | 664 | We want our function to be callable… 665 | **** 666 | 667 | [.source.s54x13] 668 | == Call Interface 669 | 670 | [.build] 671 | -- 672 | [source.lang-cpp%nested, cpp] 673 | ---- 674 | template 675 | struct Function { 676 | // nest++ 677 | // nest_current 678 | /*?*/ operator() (/*args? */) const { 679 | 680 | } 681 | // nest-- 682 | // nest++ 683 | // nest_hidden 684 | Ret operator() (Args... args) const { 685 | // nest++ 686 | return m_ptr->call((Args)args...); 687 | // nest-- 688 | } 689 | // nest-- 690 | // nest++ 691 | struct CallInterface { 692 | virtual Ret call(Args...) = 0; 693 | }; 694 | // nest-- 695 | // nest++ 696 | std::shared_ptr m_ptr; 697 | // nest-- 698 | }; 699 | ---- 700 | -- 701 | 702 | [.cue] 703 | **** 704 | 1. Overload the C++ call operator. 705 | 2. Take types from template arguments. 706 | * Now what do we do inside? 707 | 3. Forward the call to something that knows… 708 | * Let's try OOP again... 709 | 4. Simple interface as inner member struct. 710 | 5. Store as shared pointer attribute. 711 | 712 | All we need now is an implementation for the interface… 713 | **** 714 | 715 | [.source.s67x16] 716 | == Call Implementation 717 | 718 | [.build] 719 | -- 720 | [source.lang-cpp%nested, cpp] 721 | ---- 722 | template 723 | struct Function { // 724 | // nest++ 725 | // nest_current 726 | template 727 | struct CallImpl; 728 | // nest-- 729 | // nest++ 730 | // nest_hidden 731 | template 732 | struct CallImpl final : CallInterface { 733 | // nest++ 734 | Callable m_callable; 735 | // nest-- 736 | // nest++ 737 | Ret call(Args... args) override { 738 | // nest++ 739 | // nest_current 740 | return m_callable((Args)args...); 741 | // nest-- 742 | // nest++ 743 | // nest_hidden 744 | return std::invoke(m_callable, (Args)args...); 745 | // nest-- 746 | } 747 | // nest-- 748 | }; 749 | // nest-- 750 | }; 751 | ---- 752 | -- 753 | 754 | [.cue] 755 | **** 756 | The trick is that the interface implementation is specific to a concrete callable. 757 | 758 | 1. Template with the actual callable type 759 | 2. implement our call interface. 760 | 3. Store an instance of the callable. 761 | 4. and implement the interface… 762 | 5. By invoking the callable with arguments. 763 | * Neat! 764 | 765 | 5 - Use std::invoke to call any invokable. 766 | 767 | The only missing function part is now the constructor… 768 | **** 769 | 770 | [.source.s54x13] 771 | == Constructor 772 | 773 | [.build] 774 | -- 775 | [source.lang-cpp%nested, cpp] 776 | ---- 777 | template 778 | struct Function { 779 | // nest++ 780 | template 781 | // nest++ 782 | requires(!std::is_same_v) 783 | // nest-- 784 | Function(const Callable& callable) 785 | // nest-- 786 | // nest++ 787 | : m_ptr{new CallImpl{callable}} {} 788 | // nest-- 789 | // nest++ 790 | /*snip*/ 791 | CallImpl(const Callable& callable) 792 | : m_callable{callable} {} 793 | // nest-- 794 | }; 795 | ---- 796 | -- 797 | 798 | [.cue] 799 | **** 800 | Constructor should allow any callable type. 801 | 802 | 1. So we template the constructor… 803 | 2. Not accidentally create a new copy constructor. 804 | * So callable schould not be Function. 805 | 3. Construct an instance of the CallImpl 806 | * store it in our shared pointer. 807 | 4. CallImpl needs a constructor as well. 808 | 809 | And now? All works! 810 | 811 | Good job! 812 | 813 | Here is all the code again… 814 | **** 815 | 816 | [.source.s90x30] 817 | == Naive Function Code 818 | 819 | [source.lang-cpp, cpp] 820 | ---- 821 | #include 822 | 823 | template struct Function; 824 | 825 | template 826 | struct Function { 827 | Function() = default; 828 | template 829 | requires(!std::is_same_v) 830 | Function(const Callable& callable) : m_ptr{new CallImpl{callable}} {} 831 | 832 | Ret operator() (Args... args) const { return m_ptr->call((Args)args...); } 833 | 834 | private: 835 | struct CallInterface { 836 | virtual Ret call(Args...) = 0; 837 | }; 838 | template 839 | struct CallImpl final : CallInterface { 840 | Callable m_callable; 841 | CallImpl(const Callable& callable) : m_callable{callable} {} 842 | 843 | Ret call(Args... args) override { return std::invoke(m_callable, (Args)args...); } 844 | }; 845 | std::shared_ptr m_ptr; 846 | }; 847 | ---- 848 | 849 | [.cue] 850 | **** 851 | Enough to our Callback and Scheduler examples. 852 | 853 | * Good example of a type erasure. 854 | * Our Function class template can be instantiated with any callable. 855 | * As long as the call signature matches. 856 | 857 | Let's summarize… 858 | **** 859 | 860 | == Summary 861 | 862 | [%build] 863 | * partial template specialisation 864 | * call interface 865 | * shared pointer to call interface 866 | * templated implementation 867 | 868 | [.cue] 869 | **** 870 | 1. We used partial template specialisation to extract the arguments from the function signature type 871 | 2. Small call interface for the extracted signature 872 | 3. We stored a shared pointer to the interface. 873 | 4. The implementation of the call interface a template for the specific callable 874 | 875 | So it works for our use cases. 876 | 877 | Questions to our implementation? 878 | **** 879 | 880 | 881 | [.subtitle] 882 | == [language-cpp]#`std::function`# interface 883 | 884 | [.cue] 885 | **** 886 | Maybe we missed some of that the standard defined… 887 | **** 888 | 889 | == We have some already… 890 | 891 | [%build] 892 | * [green]#✔# "template signature" 893 | * [green]#✔# "store, copy, and invoke any CopyConstructible Callable" 894 | * [green]#✔# call "[language-cpp]#`operator()`#" 895 | 896 | [.cue] 897 | **** 898 | But some we got right: 899 | 900 | 1. Our template signature matches. 901 | 2. We can handle any callable. 902 | 3. We have the call operator. 903 | 904 | Let's look at some other requirements: 905 | **** 906 | 907 | == Empty State 908 | 909 | [quote,cppreference.com] 910 | ____ 911 | If a std::function contains no target, it is called empty. 912 | 913 | Invoking the target of an empty std::function results in std::bad_function_call exception being thrown. 914 | ____ 915 | 916 | [.cue] 917 | **** 918 | If nothing is stored our function object is empty. 919 | 920 | But throwing an exception in this case might be a really bad idea. 921 | This makes the standard implementation unusable in many real time scenarios. 922 | 923 | If you ask me: it should do nothing and default construct the result and if that's not possible it's undefined behaviour. 924 | 925 | This empty state brings some other APIs… 926 | **** 927 | 928 | == Operator bool 929 | 930 | [source.lang-cpp%nested, cpp] 931 | ---- 932 | // nest++ 933 | explicit operator bool() const noexcept { 934 | // nest++ 935 | return m_ptr; 936 | // nest-- 937 | } 938 | // nest-- 939 | ---- 940 | 941 | [.cue] 942 | **** 943 | To be able to check for the empty state we have an explicit operator bool. 944 | 945 | shared ptr does the same. So the implemenation is easy for us. 946 | **** 947 | 948 | == Nullptr Constructor 949 | 950 | [source.lang-cpp%nested, cpp] 951 | ---- 952 | // nest++ 953 | Function(std::nullptr_t) noexcept {} 954 | // nest-- 955 | 956 | // nest++ 957 | Function& operator=(std::nullptr_t) noexcept { 958 | // nest++ 959 | m_ptr.reset(); 960 | return *this; 961 | // nest-- 962 | } 963 | // nest-- 964 | ---- 965 | 966 | [.cue] 967 | **** 968 | 0 - We can explicitly construct a function from nullptr to get the empty state. 969 | 970 | 1 - We can also assign nullptr to the function object. 971 | 972 | Since nullptr is considered the empty state, we can also compare against them… 973 | **** 974 | 975 | == Nullptr Comparison 976 | 977 | [source.lang-cpp%nested, cpp] 978 | ---- 979 | // nest++ 980 | // nest++ 981 | // note: C++20 generates other variants! 982 | // nest-- 983 | template 984 | bool operator==(const Function& f, 985 | std::nullptr_t) noexcept { 986 | // nest++ 987 | return !f; 988 | // nest-- 989 | } 990 | // nest-- 991 | ---- 992 | 993 | [.cue] 994 | **** 995 | 1 - Since C++20 all other overloads are generated by the compiler. 996 | 997 | As a side note, we cannot compare two function objects against each other. 998 | If you need that you are out of luck with std::function. 999 | 1000 | nullptr as an empty indicator might be discussed. 1001 | But we can live with that. 1002 | 1003 | So far so reasonable. 1004 | 1005 | Swap is implemented a bit strange… 1006 | **** 1007 | 1008 | [.source] 1009 | == Swap 1010 | 1011 | [source.lang-cpp%nested, cpp] 1012 | ---- 1013 | // nest++ 1014 | void swap(Function& other) noexcept { 1015 | // nest++ 1016 | std::swap(m_ptr, other.m_ptr); 1017 | // nest-- 1018 | } 1019 | // nest-- 1020 | 1021 | // nest++ 1022 | template 1023 | void swap(Function &lhs, 1024 | Function &rhs) noexcept { 1025 | // nest++ 1026 | lhs.swap(rhs); 1027 | // nest-- 1028 | } 1029 | // nest-- 1030 | ---- 1031 | 1032 | [.cue] 1033 | **** 1034 | 0 - First we have a member function swap. 1035 | 1036 | 1 - We can easily implement that with swapping our only shared pointer. 1037 | 1038 | 2 - Then we have the std::swap overload, that calls the member function. 1039 | 1040 | Next we have some member types we shoud expose… 1041 | **** 1042 | 1043 | == Member Types 1044 | 1045 | [source.lang-cpp%nested, cpp] 1046 | ---- 1047 | // nest++ 1048 | using result_type = Ret; 1049 | // nest-- 1050 | 1051 | // nest++ 1052 | // deprecated in C++17, removed in C++20: 1053 | // using argument_type, 1054 | // using first_argument_type 1055 | // using second_argument_type; 1056 | // nest-- 1057 | ---- 1058 | 1059 | [.cue] 1060 | **** 1061 | 0 - Basically only the result type is required now. 1062 | 1063 | 1 - All the others have been deprecated and removed. 1064 | 1065 | In C++17 also all API functions for allocator support were removed. 1066 | 1067 | All these removals seem strange. 1068 | Maybe the API was designed in a rush. 1069 | 1070 | But we have some niceties left… 1071 | **** 1072 | 1073 | == Member pointers 1074 | 1075 | [quote,cppreference.com] 1076 | ____ 1077 | … as well as pointers to member functions and pointers to data members. 1078 | ____ 1079 | 1080 | [.cue] 1081 | **** 1082 | Standard functions can not only handle functions but also member functions and data members as well. 1083 | 1084 | What does this actually mean? 1085 | 1086 | Let's try to use this feature… 1087 | **** 1088 | 1089 | [.source.s67x16] 1090 | == Data member pointer usage 1091 | 1092 | [%build] 1093 | -- 1094 | [source.lang-cpp%nested, cpp] 1095 | ---- 1096 | #include 1097 | 1098 | // nest++ 1099 | struct Example { 1100 | // nest++ 1101 | int memberData = 2; 1102 | // nest-- 1103 | }; 1104 | // nest-- 1105 | // nest++ 1106 | using F = std::function; 1107 | // nest-- 1108 | 1109 | // nest++ 1110 | int main() { 1111 | auto example = Example{}; 1112 | // nest++ 1113 | auto dataFunc = F{&Example::memberData}; 1114 | // nest-- 1115 | // nest++ 1116 | std::cout << dataFunc(&example) << '\n'; 1117 | // nest-- 1118 | } 1119 | // nest-- 1120 | ---- 1121 | -- 1122 | 1123 | [.cue] 1124 | **** 1125 | 1. Include standard header. 1126 | 2. We need some members. Define a struct 1127 | 3. With a public data member 1128 | 4. std function with pointer argument 1129 | 5. Instance of example 1130 | 6. std function instance of our member data. 1131 | 7. invoke it with a pointer to our example. 1132 | 1133 | member functions look similar… 1134 | **** 1135 | 1136 | [.source.s67x16] 1137 | == Member function pointer usage 1138 | 1139 | [source.lang-cpp%nested, cpp] 1140 | ---- 1141 | #include 1142 | 1143 | struct Example { 1144 | // nest++ 1145 | int memberFunction() { return 3; } 1146 | // nest-- 1147 | }; 1148 | using F = std::function; 1149 | 1150 | int main() { 1151 | auto example = Example{}; 1152 | // nest++ 1153 | auto memberFunc = F{&Example::memberFunction}; 1154 | // nest-- 1155 | // nest++ 1156 | std::cout << memberFunc(&example) << '\n'; 1157 | // nest-- 1158 | } 1159 | ---- 1160 | 1161 | [.cue] 1162 | **** 1163 | 0 - member function instead of data member 1164 | 1165 | 1. Same Function to member function 1166 | 2. Invoke like any function object 1167 | 1168 | By using std::invoke we get this feature for free. 1169 | 1170 | But is it actually useful? 1171 | 1172 | I don't know. Did anyone had a use case for that? 1173 | 1174 | … Pause … 1175 | 1176 | We have one strange feature left… 1177 | **** 1178 | 1179 | == Target type 1180 | 1181 | [source.lang-cpp%nested, cpp] 1182 | ---- 1183 | // nest++ 1184 | const std::type_info& target_type() const noexcept; 1185 | // nest-- 1186 | 1187 | // nest++ 1188 | template T* target() noexcept; 1189 | template const T* target() const noexcept; 1190 | // nest-- 1191 | ---- 1192 | 1193 | [.cue] 1194 | **** 1195 | 0 - Query the stored callable type in a std function 1196 | 1197 | note: Requires run time type information (RTTI) 1198 | 1199 | 1. target member function 1200 | * given the correct type T returns a pointer to the stored callable. 1201 | 1202 | >99% of instances make no use of this feature 1203 | 1204 | We pay for the RTTI part anyways. 1205 | 1206 | So let's summarize the std interface… 1207 | **** 1208 | 1209 | == Summary [language-cpp]#`std::function`# interface 1210 | 1211 | [%build] 1212 | * [red]#🤦‍♀️# empty state 1213 | * [green]#✔#? nullptr as empty placeholder 1214 | * 🤔 swap 1215 | * [green]#✔#? member pointers 1216 | * [red]#❌# target type 1217 | 1218 | [.cue] 1219 | **** 1220 | We had the basic stuff covered. 1221 | 1222 | 1. Empty state with exceptions is questionable 1223 | 2. nullptr was easy to implement 1224 | 3. Swap was a bit strange, but easy to implement 1225 | 4. Member pointers come for free with std::invoke 1226 | 5. Target types seem barely useful. 1227 | * I did not bother to show implementation. 1228 | 1229 | Questions on this? … Pause! 1230 | 1231 | * If we satisfy all of these are we done yet? 1232 | * Well *yes*, but there is a recommendations. 1233 | **** 1234 | 1235 | == ! 1236 | 1237 | [quote,C++ Standard] 1238 | ____ 1239 | Recommended practice: Implementations should avoid the use of dynamically allocated memory for small callable objects, for example, where f's target is an object holding only a pointer or reference to an object and a member function pointer. 1240 | ____ 1241 | 1242 | [.cue] 1243 | **** 1244 | To paraphrasy the standard. 1245 | 1246 | * reduce dynamic memory allocation 1247 | * Not worse than the C solution 1248 | 1249 | Using std::shared_ptr does not satisfy this 1250 | 1251 | So it's time to take a look at all the other attempts… 1252 | **** 1253 | 1254 | 1255 | [.subtitle] 1256 | == Comparison 1257 | 1258 | == Other Implementations 1259 | 1260 | [%build] 1261 | * "MS-STL" by Microsoft 1262 | * "libstdc++" by GCC project 1263 | * "libc++" by LLVM project 1264 | * "fb-folly" by Facebook 1265 | * "function2" by Naios 1266 | 1267 | [.cue] 1268 | **** 1269 | 1. Microsoft 1270 | 2. GCC standard library 1271 | 3. LLVM is has different implemenation 1272 | 4. Facebook folly as a popular alternative 1273 | 5. Function2 has many features 1274 | 1275 | I will not include my experiments as these are tailored and not widely used. 1276 | **** 1277 | 1278 | == ! 1279 | 1280 | image::Sonic_amilibo.jpg[role="center", width="1800"] 1281 | 1282 | [.cue] 1283 | **** 1284 | You want to go fast! 1285 | **** 1286 | 1287 | == Runtime 1288 | 1289 | [%build] 1290 | * call the function 1291 | * construct 1292 | * destruct, copy, move 1293 | 1294 | [.cue] 1295 | **** 1296 | Runtime charts have been canceled here! 1297 | 1298 | There are too many variables 1299 | 1300 | 1. How long does a call take? 1301 | * depends haevily on cache state 1302 | * flush and repeat are unrealistic 1303 | 2. Time for construction 1304 | * will depend on size of your functor 1305 | 3. Same for destruction, Copy or Move 1306 | 1307 | Measure your use case! 1308 | **** 1309 | 1310 | == ! 1311 | 1312 | image::HummingBird-BY-SA-2.0.jpg[role="center", width="1800"] 1313 | 1314 | [.cue] 1315 | **** 1316 | Low hanging fruits here. 1317 | 1318 | Memory is always a contraint. 1319 | 1320 | * Caches are sparse 1321 | **** 1322 | 1323 | == Small Object Optimization 1324 | 1325 | [%header,cols="3*>"] 1326 | |=== 1327 | | Contestant | x86_32 | x86_64 1328 | | MS-STL | #8+2 ptr# | #6+2 ptr# 1329 | | libstdc++ | | 1330 | | libc++ | | 1331 | | fb-folly | | 1332 | | function2 | | 1333 | |=== 1334 | 1335 | [.cue] 1336 | **** 1337 | * MS-STL: 6 pointers plus 16 bytes 1338 | ** 1 pointer overhead 1339 | 1340 | * On 32bits we have 40 bytes total or 10 pointers. 9 for functor + 1 overhead. 1341 | * On 64bits we have 64 bytes total or 8 pointers. 1342 | **** 1343 | 1344 | == Small Object Optimization 1345 | 1346 | [%header,cols="3*>"] 1347 | |=== 1348 | | Contestant | x86_32 | x86_64 1349 | | MS-STL | 8+2 ptr | 6+2 ptr 1350 | | libstdc++ | #2+2 ptr# | #2+2 ptr# 1351 | | libc++ | | 1352 | | fb-folly | | 1353 | | function2 | | 1354 | |=== 1355 | 1356 | [.cue] 1357 | **** 1358 | * lib-std-c++: 2 pointers for functor 1359 | ** 2 pointers overhead 1360 | **** 1361 | 1362 | == Small Object Optimization 1363 | 1364 | [%header,cols="3*>"] 1365 | |=== 1366 | | Contestant | x86_32 | x86_64 1367 | | MS-STL | 8+2 ptr | 6+2 ptr 1368 | | libstdc++ | 2+2 ptr | 2+2 ptr 1369 | | libc++ | #2+? ptr# | #2+4 ptr# 1370 | | fb-folly | | 1371 | | function2 | | 1372 | |=== 1373 | 1374 | [.cue] 1375 | **** 1376 | * lib-c++: does not compile on 32 bits 1377 | ** 2 pointers and 4 pointers overhead 1378 | **** 1379 | 1380 | == Small Object Optimization 1381 | 1382 | [%header,cols="3*>"] 1383 | |=== 1384 | | Contestant | x86_32 | x86_64 1385 | | MS-STL | 8+2 ptr | 6+2 ptr 1386 | | libstdc++ | 2+2 ptr | 2+2 ptr 1387 | | libc++ | 2+? ptr | 2+4 ptr 1388 | | fb-folly | #6+2 ptr# | #6+2 ptr# 1389 | | function2 | | 1390 | |=== 1391 | 1392 | [.cue] 1393 | **** 1394 | * fb-folly: 8 pointers including 2 as overhead 1395 | **** 1396 | 1397 | == Small Object Optimization 1398 | 1399 | [%header,cols="3*>"] 1400 | |=== 1401 | | Contestant | x86_32 | x86_64 1402 | | MS-STL | 8+2 ptr | 6+2 ptr 1403 | | libstdc++ | 2+2 ptr | 2+2 ptr 1404 | | libc++ | 2+? ptr | 2+4 ptr 1405 | | fb-folly | 6+2 ptr | 6+2 ptr 1406 | | function2 | #6+2 ptr# | #2+2 ptr# 1407 | |=== 1408 | 1409 | [.cue] 1410 | **** 1411 | * function2: tries to keep size to 32 bytes 1412 | 1413 | Remember: 90% use case uses 2 pointers in C 1414 | 1415 | This looks really bad for C++ here. 1416 | **** 1417 | 1418 | 1419 | [.subtitle] 1420 | == Possible Extensions 1421 | 1422 | image::deepai_extensions.jpg[role="center", width="512"] 1423 | 1424 | == Customize call qualifiers 1425 | 1426 | [source.lang-cpp%nested, cpp] 1427 | ---- 1428 | // nest++ 1429 | using F2 = fu2::function; 1430 | // nest-- 1431 | 1432 | // nest++ 1433 | // template instance pseudo code: 1434 | // nest-- 1435 | // nest++ 1436 | void function::operator() (int) const noexcept; 1437 | // nest-- 1438 | // nest++ 1439 | template 1440 | // nest++ 1441 | requires(noexcept(Callable)) 1442 | // nest-- 1443 | function(Callable&); 1444 | // nest-- 1445 | ---- 1446 | 1447 | [.cue] 1448 | **** 1449 | 0 - Example: Require that function is noexcept 1450 | 1451 | What should this mean? 1452 | 1453 | 1. Some Pseudo code 1454 | 2. The call operator becomes noexcept 1455 | 3. The constructor… 1456 | 4. …requires the callable noexcept 1457 | 1458 | Extend for const/non-const functors? 1459 | **** 1460 | 1461 | [.source.s54x13] 1462 | == Multiple Overloads 1463 | 1464 | [source.lang-cpp%nested, cpp] 1465 | ---- 1466 | // nest++ 1467 | using F2 = fu::function; 1468 | // nest-- 1469 | // nest++ 1470 | struct Example { 1471 | // nest++ 1472 | void operator() (int x) { 1473 | std::print("int: {}\n", x); } 1474 | void operator() (double x) { 1475 | std::print("double: {}\n", x); } 1476 | // nest-- 1477 | }; 1478 | // nest-- 1479 | // nest++ 1480 | auto f2 = F2{Example{}}; 1481 | // nest-- 1482 | // nest++ 1483 | f2(2); 1484 | // nest-- 1485 | // nest++ 1486 | f2(3.14); 1487 | // nest-- 1488 | ---- 1489 | 1490 | [.cue] 1491 | **** 1492 | 0 - Example: Callable with two overloads 1493 | 1494 | 1. We have an example struct 1495 | 2. With int and double function operators 1496 | 3. An instance 1497 | 4. Is callable with int 1498 | 5. And double 1499 | **** 1500 | 1501 | == More Ideas 1502 | 1503 | [%build] 1504 | * move only (fu2 & C++23) 1505 | * non-owning (fu2) 1506 | * custom small buffer size (fu2) 1507 | * PMR allocators (fu2) 1508 | * customize empty handling (fu2) 1509 | * constexpr usage 1510 | * disable allocations 1511 | * C-API adapter 1512 | 1513 | [.cue] 1514 | **** 1515 | Some more ideas… 1516 | 1517 | 1. Do not require functor to be copyable 1518 | 2. Behave like a pointer or view 1519 | 3. Tune the small buffer size 1520 | 4. Allocate using a custom strategy 1521 | 5. Avoid exceptions on empty state 1522 | 6. Allow callbacks during compile time 1523 | 7. Fail to compile if buffer is exceeded 1524 | 8. Convert to function pointer and context for C-APIs 1525 | **** 1526 | 1527 | == [language-cpp]#`std::move_only_function`# 1528 | 1529 | [%build] 1530 | * no copy support 1531 | * [green]#✔# forwards call qualifiers correctly 1532 | * [green]#✔# can store and invoke any constructible Callable 1533 | * [green]#✔# support for inplace construction 1534 | * [green]#✔# no more RTTI [language-cpp]#`target_type()`# or [language-cpp]#`target()`# 1535 | 1536 | [.cue] 1537 | **** 1538 | Let's take a look at C++23 move-only-function 1539 | 1540 | 1. No Copy for functor required 1541 | 2. Forwards call qualifiers as shown 1542 | 3. Keeps support for any callable 1543 | 4. Allows to inplace construct the callable 1544 | 5. Functions for RTTI were removed 1545 | 1546 | libstdc++ uses 40 bytes. 3 pointers for functor, 2 pointers overhead. 1547 | **** 1548 | 1549 | 1550 | 1551 | 1552 | 1553 | 1554 | 1555 | 1556 | == Summary 1557 | 1558 | [%build] 1559 | * function signatures are types 1560 | * [language-cpp]#`std::function`# is useful 1561 | * the world is bigger than std c++ 1562 | * [language-cpp]#`std::move_only_function`# in C++23 1563 | 1564 | [.cue] 1565 | **** 1566 | **** 1567 | 1568 | 1569 | == ! 1570 | 1571 | image::andreas.png[role="center", width="400"] 1572 | 1573 |   1574 | 1575 | [%build] 1576 | * Andreas Reischuck 1577 | * @*arBmind* 1578 | 1579 | [.cue] 1580 | **** 1581 | 1. My Name is Andreas Reischuck 1582 | 2. … also known as arBmind on the interwebs. 1583 | 1584 | I give online and on-site trainings: 1585 | 1586 | * C++ 1587 | * Qt 1588 | * Clean Code 1589 | 1590 | You can also hire my company… 1591 | **** 1592 | 1593 | == ! 1594 | 1595 | image::hicknhackLogo_new_text.png[role="center", width="400"] 1596 | 1597 |   1598 | 1599 | [%build] 1600 | * [.blue]_Help_ with C++, Qt and more 1601 | * [.green]_Work_ with us 1602 | 1603 | [.cue] 1604 | **** 1605 | … HicknHack Software! 1606 | 1607 | 1. We help you to build better software! 1608 | * C++ Qt UIs 1609 | * and much more! 1610 | 1611 | 2. We are always hiring! 1612 | * locally in Dresden 1613 | * or 100% remote in Germany 1614 | 1615 | Speaking of Dresden. 1616 | **** 1617 | 1618 | == ! 1619 | 1620 | image::cppug.png[role="pull-right", width="550"] 1621 | 1622 |   1623 | 1624 | Give a [.green]*Talk* + 1625 | => get a *Dresden* tour 1626 | 1627 | [.cue] 1628 | **** 1629 | * We want to restart the C++ usergroup in Dresden in 2023. 1630 | * It had to pause in 2022 because we ran out of speakers! 1631 | * We need more active speakers for that! 1632 | 1633 | Please contact me in any form. 1634 | 1635 | * Video Recording 1636 | * personal city tour 1637 | * I visit your local usergroup 1638 | **** 1639 | 1640 | == ! 1641 | 1642 | image::rebuild_logo.png[role="pull-left", width="450"] 1643 | 1644 | *Rebuild* language project 1645 | 1646 | [.bigger] 1647 |   1648 | 1649 | [.center] 1650 | [.green]__Collaborate__ 1651 | 1652 | [.cue] 1653 | **** 1654 | Another topic of my heart! 1655 | 1656 | * improved language & tools for everybody 1657 | * Compiler built with C++20 1658 | 1659 | If you are interested in language work I would like to get in contact with you! 1660 | 1661 | **** 1662 | 1663 | 1664 | [.subtitle] 1665 | == Hack more & learn everything! 1666 | 1667 | [.cue] 1668 | **** 1669 | … and talk about it! 1670 | **** 1671 | 1672 | == ! 1673 | 1674 | Photo Credits 1675 | 1676 | [.small.hd] 1677 | * link:https://flic.kr/p/nNWNY[Bit Boy: The Elephant in the room] link:https://creativecommons.org/licenses/by-sa/2.0[(cc-by-sa-license)] 1678 | * link:https://flic.kr/p/vtxD4A[Farley Santos: Sonic ambilibo] link:https://creativecommons.org/licenses/by-sa/2.0[(cc-by-sa-license)] 1679 | * link:https://flic.kr/p/25A4Ah3[Mike's Birds: Hummingbird] link:https://creativecommons.org/licenses/by-sa/2.0[(cc-by-sa-license)] 1680 | 1681 | 1682 | [.subtitle] 1683 | == std::function: [white]#a deep dive behind the curtain# 1684 | 1685 | [language-cpp]#`co_await question_ready()`# 1686 | 1687 | [.cue] 1688 | **** 1689 | Thank you for your attention! 1690 | 1691 | Now we are free to discuss any questions. 1692 | **** 1693 | 1694 | 1695 | [.subtitle] 1696 | == Bonus Quiz 1697 | 1698 | image::deepai_puzzle.jpg[role="pull-left", width="512"] 1699 | 1700 | == What is the size? (1) 1701 | 1702 | [source.lang-cpp%nested, cpp] 1703 | ---- 1704 | int demo(double x) { 1705 | return static_cast(x); 1706 | } 1707 | 1708 | int main() { 1709 | // nest++ 1710 | std::cout << sizeof(demo); 1711 | // nest-- 1712 | } 1713 | ---- 1714 | 1715 | [.cue] 1716 | **** 1717 | Size of the function is undefined. 1718 | All compilers reject that. 1719 | 1720 | gcc has option to allow this. would print 1. 1721 | **** 1722 | 1723 | == What is the size? (2) 1724 | 1725 | [source.lang-cpp%nested, cpp] 1726 | ---- 1727 | int demo(double x) { 1728 | return static_cast(x); 1729 | } 1730 | 1731 | int main() { 1732 | auto ptr = &demo; 1733 | // nest++ 1734 | std::cout << sizeof(ptr); 1735 | // nest-- 1736 | } 1737 | ---- 1738 | 1739 | [.cue] 1740 | **** 1741 | That's just a normal pointer. 1742 | 1743 | 8 bytes on 64 bits. 1744 | 4 bytes on 32 bits. 1745 | **** 1746 | 1747 | [.source.s54x13] 1748 | == What is the size? (3) 1749 | 1750 | [source.lang-cpp%nested, cpp] 1751 | ---- 1752 | struct Demo { 1753 | int memberFunc(double x) { 1754 | return static_cast(x); 1755 | } 1756 | }; 1757 | 1758 | int main() { 1759 | auto ptr = &Demo::memberFunc; 1760 | // nest++ 1761 | // nest_current 1762 | std::cout << sizeof(ptr); 1763 | // nest-- 1764 | // nest++ 1765 | // nest_hidden 1766 | Demo demo{}; 1767 | std::cout << (demo.*ptr)(3.14); 1768 | // nest-- 1769 | } 1770 | ---- 1771 | 1772 | [.cue] 1773 | **** 1774 | Compiler dependant. 1775 | 1776 | * clang/gcc use 2 pointers. 1777 | * msvc uses 1 pointer. 1778 | 1779 | notice that msvc decided they need more space. 1780 | **** 1781 | 1782 | [.source.s67x16] 1783 | == Reduce Size for members 1784 | 1785 | [source.lang-cpp%nested, cpp] 1786 | ---- 1787 | struct Demo { 1788 | int memberFunc(double x) { 1789 | return static_cast(x); 1790 | } 1791 | }; 1792 | // nest++ 1793 | using DemoFunc = int(Demo*, double); 1794 | // nest-- 1795 | // nest++ 1796 | constexpr DemoFunc* ptr = [](Demo* demo, double x) { 1797 | return demo->memberFunc(x); 1798 | }; 1799 | // nest-- 1800 | 1801 | int main() { 1802 | // nest++ 1803 | // nest_current 1804 | std::cout << sizeof(ptr); 1805 | // nest-- 1806 | // nest++ 1807 | // nest_hidden 1808 | Demo demo{}; 1809 | std::cout << ptr(&demo, 3.14); 1810 | // nest-- 1811 | } 1812 | ---- 1813 | 1814 | [.cue] 1815 | **** 1816 | To call a member function: 1817 | * object pointer for this 1818 | * arguments 1819 | 1820 | A Lambda without a capture is just a function pointer. 1821 | 1822 | **** 1823 | 1824 | [.subtitle] 1825 | == `std::exit(0)` 1826 | -------------------------------------------------------------------------------- /slides/src/scripts/main.js: -------------------------------------------------------------------------------- 1 | var isWebKit = 'webkitAppearance' in document.documentElement.style, 2 | // zoom-based scaling causes font sizes and line heights to be calculated differently 3 | // on the other hand, zoom-based scaling correctly anti-aliases fonts during transforms (no need for layer creation hack) 4 | scaleMethod = isWebKit ? 'zoom' : 'transform', 5 | bespoke = require('bespoke'), 6 | bullets = require('bespoke-bullets'), 7 | classes = require('bespoke-classes'), 8 | cursor = require('bespoke-cursor'), 9 | fullscreen = require('bespoke-fullscreen'), 10 | hash = require('bespoke-hash'), 11 | nav = require('bespoke-nav'), 12 | onstage = require('bespoke-onstage'), 13 | overview = require('bespoke-overview'), 14 | title = require('bespoke-title'), 15 | scale = require('bespoke-scale'), 16 | slidenumber = require('bespoke-slidenumber'), 17 | progress = require('bespoke-progress'), 18 | blackout = require('bespoke-blackout'); 19 | 20 | function prismjs() { 21 | var Prism = require('prismjs'); 22 | require('prismjs/components/prism-c'); 23 | require('prismjs/components/prism-cpp'); 24 | require('prismjs/components/prism-cmake'); 25 | require('prismjs/components/prism-json'); 26 | require('prismjs/plugins/toolbar/prism-toolbar'); 27 | require('prismjs/plugins/show-language/prism-show-language'); 28 | require('prismjs/plugins/keep-markup/prism-keep-markup'); 29 | return function () { 30 | Prism.highlightAll(); 31 | } 32 | } 33 | 34 | bespoke.from({ parent: 'article.deck', slides: 'section' }, [ 35 | classes(), 36 | cursor(), 37 | nav(), 38 | fullscreen(), 39 | (scaleMethod ? scale(scaleMethod) : function (deck) { }), 40 | overview({ columns: 3 }), 41 | bullets('.build, .build-items > *:not(.build-items)'), 42 | hash(), 43 | progress(), 44 | title(), 45 | prismjs(), 46 | onstage(), 47 | slidenumber('/'), 48 | blackout(), 49 | ]); 50 | -------------------------------------------------------------------------------- /slides/src/styles/bespoke-base-fixed.styl: -------------------------------------------------------------------------------- 1 | .deck 2 | overflow hidden 3 | background-color $color-surface 4 | font-family $font-family-base 5 | font-size $font-size-base 6 | color $color-text 7 | font-feature-settings "kern" 1 8 | text-rendering optimizeLegibility 9 | -webkit-font-smoothing antialiased 10 | -moz-osx-font-smoothing grayscale 11 | // NOTE hide deck and slide content until Bespoke.js classes have been added 12 | &:not(.bespoke-parent), section:not(.bespoke-slide) { display: none } 13 | 14 | .bespoke-parent, .bespoke-scale-parent 15 | position absolute 16 | top 0 17 | right 0 18 | bottom 0 19 | left 0 20 | 21 | .bespoke-scale-parent, .bespoke-slide, .bespoke-slide-canvas 22 | pointer-events none 23 | 24 | .bespoke-slide 25 | overflow hidden 26 | opacity 0 // NOTE force opacity to start at 0 to avoid transition on load when using bespoke-scale 27 | background-color $color-canvas 28 | position absolute 29 | top 50% 30 | left 50% 31 | width $slide-width 32 | margin-left -(@width / 2) 33 | height $slide-height 34 | margin-top -(@height / 2) 35 | padding $slide-padding 36 | display flex 37 | align-items center 38 | justify-content center 39 | flex-direction column 40 | transition $slide-transition 41 | 42 | .bespoke-active 43 | pointer-events auto 44 | opacity 1 45 | z-index 1 // NOTE Webkit requires z-index to be 1 for elements to receive focus (may no longer apply) 46 | &.no-transition { transition: none } 47 | 48 | .bespoke-bullet-inactive 49 | visibility hidden 50 | .hidden.bespoke-bullet-inactive 51 | display none 52 | 53 | .fade .bespoke-bullet-active:not(.bespoke-bullet-current) 54 | opacity 0.1 55 | 56 | .vanish .bespoke-bullet-active:not(.bespoke-bullet-current) 57 | opacity 0 58 | 59 | .active_hidden.bespoke-bullet-active:not(.bespoke-bullet-current) 60 | display none 61 | 62 | .bespoke-progress-parent { 63 | position absolute 64 | height .1em 65 | left 0 66 | right 0 67 | bottom 0 68 | } 69 | 70 | .bespoke-progress-bar { 71 | -webkit-transition width $progress-transition-time ease 72 | -moz-transition width $progress-transition-time ease 73 | -ms-transition width $progress-transition-time ease 74 | -o-transition width $progress-transition-time ease 75 | transition width $progress-transition-time ease 76 | position absolute 77 | z-index 1 78 | height 100% 79 | background $progress-color 80 | } 81 | 82 | .bespoke-slidenumber { 83 | position absolute 84 | bottom 0 85 | right 0 86 | z-index 1 87 | font-size 18pt 88 | color #888 89 | } 90 | .bespoke-slidenumber-current { 91 | padding: 0 5px; 92 | float: left; 93 | } 94 | .bespoke-slidenumber-divider { 95 | float: left; 96 | } 97 | .bespoke-slidenumber-overall { 98 | padding: 0 5px; 99 | float: left; 100 | /* border-left: 4px solid #000 */ 101 | } 102 | 103 | /* for transitioning to blackout */ 104 | .bespoke-blackout .bespoke-blackout-overlay { 105 | -webkit-transition: opacity 0.5s ease-in; 106 | transition: opacity 0.5s ease-in; 107 | } 108 | 109 | /* for transitioning from blackout */ 110 | .bespoke-blackout-overlay { 111 | -webkit-transition: opacity 0.5s ease-in, visibility 0s linear 0.5s; 112 | transition: opacity 0.5s ease-in, visibility 0s linear 0.5s; 113 | } 114 | -------------------------------------------------------------------------------- /slides/src/styles/bespoke-modes.styl: -------------------------------------------------------------------------------- 1 | .bespoke-overview 2 | -ms-overflow-style none // NOTE hide visible scrollbar in IE 10+ 3 | &::-webkit-scrollbar { width: 0 } // NOTE hide visible scrollbar in WebKit 4 | .bespoke-active 5 | outline-color $color-accent 6 | // FIXME the built-in rule in bespoke-overview is being overrridden 7 | .bespoke-bullet 8 | opacity 1 !important 9 | & > footer, .bespoke-progress-parent { display: none } 10 | &-to .bespoke-slide, &-from .bespoke-slide { transition: none } 11 | -------------------------------------------------------------------------------- /slides/src/styles/content-types.styl: -------------------------------------------------------------------------------- 1 | h1, h2 2 | font-weight 400 3 | color $color-heading 4 | 5 | figure.quote { 6 | /* Versatility: blockquote, p, h2... */ 7 | position: relative; 8 | 9 | &:before { 10 | content: '\201C'; 11 | font-family: arial, sans-serif; 12 | font-size: 12rem; 13 | height: 5.6rem; 14 | left: -.8rem; 15 | line-height: 1; 16 | position: absolute; 17 | text-align: center; 18 | top: -4rem; 19 | width: 5.6rem; 20 | } 21 | 22 | @media (min-width: 768px) { 23 | padding-left: 6.4rem; 24 | 25 | p { 26 | font-size: 3.2rem; 27 | line-height: 4.8rem; 28 | } 29 | 30 | &:before { 31 | left: .8rem; 32 | top: -1.6rem; 33 | } 34 | } 35 | } 36 | 37 | .small 38 | font-size 0.5em 39 | .big 40 | font-size 1.5em 41 | .green 42 | color #3C3 43 | .blue 44 | color #56E 45 | 46 | figure.image.overlay 47 | position absolute 48 | &.right 49 | right 100px 50 | bottom 50px 51 | &.top 52 | position absolute 53 | top 50px 54 | &.center 55 | position absolute 56 | top 50% 57 | border solid 5px red 58 | background #fff 59 | 60 | .badge 61 | margin: 0 62 | color: #fff 63 | background: #718c00 64 | font-size: 2em 65 | position: absolute 66 | right: -400px 67 | top: -200px 68 | transform: rotate(30deg) 69 | -webkit-transform-origin: top left 70 | -moz-transform-origin: top left 71 | -o-transform-origin: top left 72 | transform-origin: top left 73 | white-space: nowrap 74 | padding: 10px 350px 75 | -------------------------------------------------------------------------------- /slides/src/styles/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: SegoeUI; 3 | src: local("Segoe UI Semibold"), 4 | url(//c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff2) format("woff2"), 5 | url(//c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff) format("woff"), 6 | url(//c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.ttf) format("truetype"); 7 | font-weight: 600; 8 | } 9 | @font-face { 10 | font-family: SegoeUI; 11 | src: local("Segoe UI Bold"), 12 | url(//c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff2) format("woff2"), 13 | url(//c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff) format("woff"), 14 | url(//c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.ttf) format("truetype"); 15 | font-weight: 700; 16 | } 17 | -------------------------------------------------------------------------------- /slides/src/styles/main.styl: -------------------------------------------------------------------------------- 1 | @require "./variables" 2 | @require "./fonts.css" 3 | @require "normalizecss/normalize.css" 4 | @require "./reset" 5 | @require "./bespoke-base-fixed" 6 | @require "./content-types" 7 | @require "./slide-types" 8 | @require "./bespoke-modes" 9 | @require "./print" 10 | @require "prismjs/themes/prism.css" 11 | @require "prismjs/plugins/toolbar/prism-toolbar.css" 12 | 13 | pre.source 14 | text-shadow none 15 | border none 16 | box-shadow none 17 | padding .2em 18 | background none 19 | border 1px dashed #000 20 | border-left none 21 | border-right none 22 | 23 | code 24 | text-shadow none 25 | border none 26 | //box-shadow none 27 | padding 0 28 | background none 29 | 30 | > b 31 | display none 32 | 33 | pre.source 34 | padding 0 35 | margin 0 36 | border none 37 | overflow hidden 38 | 39 | &.bespoke-bullet-current 40 | box-shadow: inset 0 0 0 5px green 41 | .code-toolbar 42 | > .toolbar 43 | display: none 44 | 45 | section.source 46 | padding 0 47 | > pre.source 48 | padding 0 49 | 50 | div > div.code-toolbar > .toolbar 51 | top -0.2em 52 | 53 | div.code-toolbar 54 | > .toolbar 55 | font-size .5em 56 | top .2em 57 | right 0px 58 | opacity 1 59 | span 60 | padding 0 61 | color #555 62 | font-size 1em 63 | background none 64 | box-shadow none 65 | border-radius 0 66 | 67 | .build-items.bespoke-bullet-current > .code-toolbar > .toolbar 68 | display: none 69 | 70 | .conum[data-value] 71 | display inline-block 72 | background-color #333 73 | border-radius 100% 74 | text-align center 75 | vertical-align text-top 76 | font-size 60% 77 | width 1.3em 78 | height 1.3em 79 | line-height 1.3em 80 | font-style normal 81 | font-weight bold 82 | font-family monospace 83 | &, * 84 | color #fff !important 85 | + b 86 | display none 87 | &::after 88 | content attr(data-value) 89 | pre & 90 | position relative 91 | top -1px 92 | .colist & 93 | vertical-align 0.5em 94 | margin-right 0.5em 95 | 96 | .bespoke-slide 97 | ul.build 98 | margin 0 99 | > li 100 | display block 101 | 102 | .token.operator, 103 | .token.entity, 104 | .token.url, 105 | .language-css .token.string, 106 | .style .token.string 107 | background: inherit; 108 | 109 | .twitter 110 | display block 111 | position absolute 112 | right 20px 113 | bottom 20px 114 | 115 | svg.overlay 116 | position absolute 117 | left 0 118 | right 0 119 | 120 | .white 121 | color #fff 122 | 123 | figure.background 124 | z-index -1 125 | -------------------------------------------------------------------------------- /slides/src/styles/print.styl: -------------------------------------------------------------------------------- 1 | @page 2 | size $slide-width $slide-height 3 | margin 0 4 | 5 | @media print 6 | .bespoke-parent, .bespoke-scale-parent, .bespoke-slide 7 | margin unset 8 | position relative 9 | top unset 10 | right unset 11 | bottom unset 12 | left unset 13 | 14 | .bespoke-parent 15 | overflow visible 16 | 17 | .bespoke-scale-parent 18 | transform unset !important 19 | 20 | .bespoke-slide 21 | opacity unset 22 | zoom unset !important 23 | // page break should be implied, but sometimes is necessary 24 | page-break-after always 25 | // enable this next property to see where you're getting overflows 26 | //overflow visible 27 | 28 | .bespoke-bullet-inactive 29 | opacity unset 30 | visibility visible 31 | -------------------------------------------------------------------------------- /slides/src/styles/reset.styl: -------------------------------------------------------------------------------- 1 | *, ::before, ::after { box-sizing: inherit } 2 | 3 | html 4 | box-sizing border-box 5 | font-size 16px // NOTE normalize the base font size (at least for testing) 6 | quotes $sym-dblquote-left $sym-dblquote-right 7 | 8 | aside[role=notes] { display: none } 9 | figure { margin: 0 } 10 | img, video { vertical-align: middle } 11 | p, li { line-height: normal } 12 | p { line-height: 1.5; margin: 0 0 0.75rem 0 } 13 | 14 | table td, table th { padding: 0 20px; } 15 | table th { font-weight: 900; } 16 | .halign-right { text-align: right; } 17 | .halign-left { text-align: left; } 18 | .halign-center { text-align: center; } 19 | -------------------------------------------------------------------------------- /slides/src/styles/slide-types.styl: -------------------------------------------------------------------------------- 1 | section.title 2 | background-color $color-heading 3 | h1, h2 4 | color $color-inverse 5 | margin 0 6 | header 7 | margin-bottom 200px 8 | footer 9 | margin-top 100px 10 | p 11 | color #000 12 | 13 | section.subtitle 14 | background-color $color-titel-canvas 15 | h1, h2 16 | color $color-inverse 17 | p 18 | color $color-highlight 19 | 20 | section.source 21 | h2 22 | margin: 0 23 | pre.source 24 | margin-top: .2em 25 | margin-bottom: .2em 26 | 27 | section.s54x11 28 | pre.source 29 | font-size 100% 30 | line-height 1.5 31 | 32 | section.s54x13 33 | pre.source 34 | font-size 100% 35 | line-height 1.3 36 | code 37 | line-height 1.3 38 | .code-toolbar > .toolbar 39 | display none 40 | 41 | section.s67x16 42 | pre.source 43 | font-size 0.8em 44 | line-height 1.3 45 | code 46 | line-height 1.3 47 | pre.source 48 | font-size 100% 49 | 50 | section.s90x23 51 | pre.source 52 | font-size 0.6em 53 | line-height 1.2 54 | code 55 | line-height 1.2 56 | pre.source 57 | font-size 100% 58 | 59 | section.s90x30 60 | pre.source 61 | font-size 0.5em 62 | line-height 1.1 63 | code 64 | line-height 1.1 65 | pre.source 66 | font-size 100% 67 | -------------------------------------------------------------------------------- /slides/src/styles/variables.styl: -------------------------------------------------------------------------------- 1 | rem-calc(value) 2 | ((u = unit(value)) is "px") ? unit(round(value/16, 4), "rem") : value 3 | 4 | $slide-width = 1920px 5 | $slide-height = 1080px 6 | $slide-padding = .5em 7 | $slide-transition = none 8 | $color-surface = #212121 9 | $color-canvas = #fff 10 | $color-text = #212121 11 | $color-muted = #757575 12 | $color-accent = #00897b 13 | $color-inverse = #fff 14 | $color-titel-canvas = #000 15 | $color-highlight = #3476bc 16 | $color-heading = #00897b 17 | $font-family-base = "Roboto Slab", sans-serif 18 | $font-size-base = 4em 19 | $sym-dblquote-left = "\201c" 20 | $sym-dblquote-right = "\201d" 21 | $sym-dash-em = "\2014" 22 | 23 | $progress-transition-time = .2s 24 | $progress-color = #07b 25 | -------------------------------------------------------------------------------- /slides/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | JSONStream@^1.0.3: 6 | version "1.3.2" 7 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" 8 | dependencies: 9 | jsonparse "^1.2.0" 10 | through ">=2.2.7 <3" 11 | 12 | accepts@~1.3.4: 13 | version "1.3.5" 14 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 15 | dependencies: 16 | mime-types "~2.1.18" 17 | negotiator "0.6.1" 18 | 19 | accord@^0.26.3: 20 | version "0.26.4" 21 | resolved "https://registry.yarnpkg.com/accord/-/accord-0.26.4.tgz#fc4c8d3ebab406a07cb28819b859651c44a92e80" 22 | dependencies: 23 | convert-source-map "^1.2.0" 24 | glob "^7.0.5" 25 | indx "^0.2.3" 26 | lodash.clone "^4.3.2" 27 | lodash.defaults "^4.0.1" 28 | lodash.flatten "^4.2.0" 29 | lodash.merge "^4.4.0" 30 | lodash.partialright "^4.1.4" 31 | lodash.pick "^4.2.1" 32 | lodash.uniq "^4.3.0" 33 | resolve "^1.1.7" 34 | semver "^5.3.0" 35 | uglify-js "^2.7.0" 36 | when "^3.7.7" 37 | 38 | acorn-dynamic-import@^4.0.0: 39 | version "4.0.0" 40 | resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" 41 | 42 | acorn-globals@^1.0.3: 43 | version "1.0.9" 44 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" 45 | dependencies: 46 | acorn "^2.1.0" 47 | 48 | acorn-node@^1.2.0: 49 | version "1.3.0" 50 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" 51 | dependencies: 52 | acorn "^5.4.1" 53 | xtend "^4.0.1" 54 | 55 | acorn-node@^1.6.1: 56 | version "1.6.2" 57 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.6.2.tgz#b7d7ceca6f22e6417af933a62cad4de01048d5d2" 58 | dependencies: 59 | acorn "^6.0.2" 60 | acorn-dynamic-import "^4.0.0" 61 | acorn-walk "^6.1.0" 62 | xtend "^4.0.1" 63 | 64 | acorn-walk@^6.1.0: 65 | version "6.1.1" 66 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" 67 | 68 | acorn@^1.0.1: 69 | version "1.2.2" 70 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" 71 | 72 | acorn@^2.1.0: 73 | version "2.7.0" 74 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" 75 | 76 | acorn@^4.0.3: 77 | version "4.0.13" 78 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" 79 | 80 | acorn@^5.4.1: 81 | version "5.5.0" 82 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" 83 | 84 | acorn@^6.0.2: 85 | version "6.1.0" 86 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" 87 | 88 | align-text@^0.1.1, align-text@^0.1.3: 89 | version "0.1.4" 90 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 91 | dependencies: 92 | kind-of "^3.0.2" 93 | longest "^1.0.1" 94 | repeat-string "^1.5.2" 95 | 96 | amdefine@>=0.0.4: 97 | version "1.0.1" 98 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 99 | 100 | ansi-colors@^1.0.1: 101 | version "1.1.0" 102 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" 103 | dependencies: 104 | ansi-wrap "^0.1.0" 105 | 106 | ansi-colors@^2.0.5: 107 | version "2.0.5" 108 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-2.0.5.tgz#5da37825fef3e75f3bda47f760d64bfd10e15e10" 109 | 110 | ansi-cyan@^0.1.1: 111 | version "0.1.1" 112 | resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" 113 | dependencies: 114 | ansi-wrap "0.1.0" 115 | 116 | ansi-gray@^0.1.1: 117 | version "0.1.1" 118 | resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" 119 | dependencies: 120 | ansi-wrap "0.1.0" 121 | 122 | ansi-red@^0.1.1: 123 | version "0.1.1" 124 | resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" 125 | dependencies: 126 | ansi-wrap "0.1.0" 127 | 128 | ansi-regex@^2.0.0: 129 | version "2.1.1" 130 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 131 | 132 | ansi-styles@^2.2.1: 133 | version "2.2.1" 134 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 135 | 136 | ansi-styles@^3.2.1: 137 | version "3.2.1" 138 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 139 | dependencies: 140 | color-convert "^1.9.0" 141 | 142 | ansi-wrap@0.1.0, ansi-wrap@^0.1.0: 143 | version "0.1.0" 144 | resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" 145 | 146 | archy@^1.0.0: 147 | version "1.0.0" 148 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 149 | 150 | arr-diff@^1.0.1: 151 | version "1.1.0" 152 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" 153 | dependencies: 154 | arr-flatten "^1.0.1" 155 | array-slice "^0.2.3" 156 | 157 | arr-diff@^4.0.0: 158 | version "4.0.0" 159 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 160 | 161 | arr-flatten@^1.0.1, arr-flatten@^1.1.0: 162 | version "1.1.0" 163 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 164 | 165 | arr-union@^2.0.1: 166 | version "2.1.0" 167 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" 168 | 169 | arr-union@^3.1.0: 170 | version "3.1.0" 171 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 172 | 173 | array-differ@^1.0.0: 174 | version "1.0.0" 175 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" 176 | 177 | array-each@^1.0.1: 178 | version "1.0.1" 179 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" 180 | 181 | array-filter@~0.0.0: 182 | version "0.0.1" 183 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" 184 | 185 | array-map@~0.0.0: 186 | version "0.0.0" 187 | resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" 188 | 189 | array-reduce@~0.0.0: 190 | version "0.0.0" 191 | resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" 192 | 193 | array-slice@^0.2.3: 194 | version "0.2.3" 195 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" 196 | 197 | array-slice@^1.0.0: 198 | version "1.1.0" 199 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" 200 | 201 | array-union@^1.0.1: 202 | version "1.0.2" 203 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 204 | dependencies: 205 | array-uniq "^1.0.1" 206 | 207 | array-uniq@^1.0.1, array-uniq@^1.0.2: 208 | version "1.0.3" 209 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 210 | 211 | array-unique@^0.3.2: 212 | version "0.3.2" 213 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 214 | 215 | asap@~1.0.0: 216 | version "1.0.0" 217 | resolved "https://registry.yarnpkg.com/asap/-/asap-1.0.0.tgz#b2a45da5fdfa20b0496fc3768cc27c12fa916a7d" 218 | 219 | asn1.js@^4.0.0: 220 | version "4.10.1" 221 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" 222 | dependencies: 223 | bn.js "^4.0.0" 224 | inherits "^2.0.1" 225 | minimalistic-assert "^1.0.0" 226 | 227 | assert@^1.4.0: 228 | version "1.4.1" 229 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 230 | dependencies: 231 | util "0.10.3" 232 | 233 | assign-symbols@^1.0.0: 234 | version "1.0.0" 235 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 236 | 237 | astw@^2.0.0: 238 | version "2.2.0" 239 | resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" 240 | dependencies: 241 | acorn "^4.0.3" 242 | 243 | atob@^2.0.0: 244 | version "2.0.3" 245 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" 246 | 247 | autoprefixer@^9.1.3: 248 | version "9.4.7" 249 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.7.tgz#f997994f9a810eae47b38fa6d8a119772051c4ff" 250 | dependencies: 251 | browserslist "^4.4.1" 252 | caniuse-lite "^1.0.30000932" 253 | normalize-range "^0.1.2" 254 | num2fraction "^1.2.2" 255 | postcss "^7.0.14" 256 | postcss-value-parser "^3.3.1" 257 | 258 | balanced-match@^1.0.0: 259 | version "1.0.0" 260 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 261 | 262 | base64-js@^1.0.2: 263 | version "1.2.3" 264 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" 265 | 266 | base@^0.11.1: 267 | version "0.11.2" 268 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 269 | dependencies: 270 | cache-base "^1.0.1" 271 | class-utils "^0.3.5" 272 | component-emitter "^1.2.1" 273 | define-property "^1.0.0" 274 | isobject "^3.0.1" 275 | mixin-deep "^1.2.0" 276 | pascalcase "^0.1.1" 277 | 278 | batch@0.6.1: 279 | version "0.6.1" 280 | resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" 281 | 282 | beeper@^1.0.0: 283 | version "1.1.1" 284 | resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" 285 | 286 | bespoke-blackout@^1.0.1: 287 | version "1.0.1" 288 | resolved "https://registry.yarnpkg.com/bespoke-blackout/-/bespoke-blackout-1.0.1.tgz#acfe3b139f3bb608eb17ae48832b3f3ce5a23ae4" 289 | dependencies: 290 | insert-css "^0.2.0" 291 | 292 | "bespoke-bullets@github:arBmind/bespoke-bullets#patches": 293 | version "1.1.0" 294 | resolved "https://codeload.github.com/arBmind/bespoke-bullets/tar.gz/e1a9a52a6834aca01f65dd73416947e859028869" 295 | 296 | bespoke-classes@^1.0.0: 297 | version "1.0.0" 298 | resolved "https://registry.yarnpkg.com/bespoke-classes/-/bespoke-classes-1.0.0.tgz#d61c40ae48dd0825f9704d010d7ea5bb3ad11218" 299 | 300 | bespoke-cursor@^1.0.3: 301 | version "1.0.3" 302 | resolved "https://registry.yarnpkg.com/bespoke-cursor/-/bespoke-cursor-1.0.3.tgz#678a17a23d7ac71de7802b1ff35c00613956642c" 303 | dependencies: 304 | insert-css "^0.2.0" 305 | 306 | bespoke-fullscreen@^1.0.0: 307 | version "1.0.0" 308 | resolved "https://registry.yarnpkg.com/bespoke-fullscreen/-/bespoke-fullscreen-1.0.0.tgz#57aecac08a3444bc0329c9e288075c856277f64b" 309 | 310 | "bespoke-hash@github:arBmind/bespoke-hash#patch-1": 311 | version "1.1.0" 312 | resolved "https://codeload.github.com/arBmind/bespoke-hash/tar.gz/6a2c6447ef421829d1c0f881d1246ac359628d98" 313 | 314 | bespoke-nav-kbd@^1.0.3: 315 | version "1.0.3" 316 | resolved "https://registry.yarnpkg.com/bespoke-nav-kbd/-/bespoke-nav-kbd-1.0.3.tgz#73f926ba874ac23d731ed4ea061b03c7f6777145" 317 | 318 | bespoke-nav-touch@^1.0.1: 319 | version "1.0.1" 320 | resolved "https://registry.yarnpkg.com/bespoke-nav-touch/-/bespoke-nav-touch-1.0.1.tgz#685a343f16b0634dcbb1a2bacb125cdb432b7c36" 321 | 322 | bespoke-nav@^1.0.2: 323 | version "1.0.2" 324 | resolved "https://registry.yarnpkg.com/bespoke-nav/-/bespoke-nav-1.0.2.tgz#d2d7ea53fd2c7d113c94ef9b8abd29bccefbdd77" 325 | dependencies: 326 | bespoke-nav-kbd "^1.0.3" 327 | bespoke-nav-touch "^1.0.1" 328 | 329 | "bespoke-onstage@github:arBmind/bespoke-onstage#patches": 330 | version "1.0.0-dev" 331 | resolved "https://codeload.github.com/arBmind/bespoke-onstage/tar.gz/0f2399c77a3903208447d185fe464cd21b45a210" 332 | 333 | bespoke-overview@^1.0.5: 334 | version "1.0.5" 335 | resolved "https://registry.yarnpkg.com/bespoke-overview/-/bespoke-overview-1.0.5.tgz#8fc1d4103bcd8827f9f09b4935715bc67fd15b36" 336 | 337 | bespoke-progress@^1.0.0: 338 | version "1.0.0" 339 | resolved "https://registry.yarnpkg.com/bespoke-progress/-/bespoke-progress-1.0.0.tgz#c629d7b4f1be9abcf6fdf013f9c3983d8b6fc46e" 340 | 341 | bespoke-scale@^1.0.1: 342 | version "1.0.1" 343 | resolved "https://registry.yarnpkg.com/bespoke-scale/-/bespoke-scale-1.0.1.tgz#657c035d5bf2bcab73eccff009161dbb937f632c" 344 | 345 | bespoke-slidenumber@^0.1.0: 346 | version "0.1.0" 347 | resolved "https://registry.yarnpkg.com/bespoke-slidenumber/-/bespoke-slidenumber-0.1.0.tgz#9bb97d944673cd78aeef00c6424fd026805f3757" 348 | 349 | bespoke-title@^1.0.0: 350 | version "1.0.0" 351 | resolved "https://registry.yarnpkg.com/bespoke-title/-/bespoke-title-1.0.0.tgz#24f268f2da833621ee7a2b56af0a4cfafd14a1d7" 352 | 353 | bespoke@^1.1.0: 354 | version "1.1.0" 355 | resolved "https://registry.yarnpkg.com/bespoke/-/bespoke-1.1.0.tgz#7b0fb3cfff580220a0da4020138365a55f063b3c" 356 | 357 | bl@^1.2.1: 358 | version "1.2.1" 359 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" 360 | dependencies: 361 | readable-stream "^2.0.5" 362 | 363 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: 364 | version "4.11.8" 365 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" 366 | 367 | body@^5.1.0: 368 | version "5.1.0" 369 | resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" 370 | dependencies: 371 | continuable-cache "^0.3.1" 372 | error "^7.0.0" 373 | raw-body "~1.1.0" 374 | safe-json-parse "~1.0.1" 375 | 376 | brace-expansion@^1.0.0, brace-expansion@^1.1.7: 377 | version "1.1.11" 378 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 379 | dependencies: 380 | balanced-match "^1.0.0" 381 | concat-map "0.0.1" 382 | 383 | braces@^2.3.1: 384 | version "2.3.1" 385 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" 386 | dependencies: 387 | arr-flatten "^1.1.0" 388 | array-unique "^0.3.2" 389 | define-property "^1.0.0" 390 | extend-shallow "^2.0.1" 391 | fill-range "^4.0.0" 392 | isobject "^3.0.1" 393 | kind-of "^6.0.2" 394 | repeat-element "^1.1.2" 395 | snapdragon "^0.8.1" 396 | snapdragon-node "^2.0.1" 397 | split-string "^3.0.2" 398 | to-regex "^3.0.1" 399 | 400 | brorand@^1.0.1: 401 | version "1.1.0" 402 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 403 | 404 | browser-pack@^6.0.1: 405 | version "6.0.4" 406 | resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.4.tgz#9a73beb3b48f9e36868be007b64400102c04a99f" 407 | dependencies: 408 | JSONStream "^1.0.3" 409 | combine-source-map "~0.8.0" 410 | defined "^1.0.0" 411 | safe-buffer "^5.1.1" 412 | through2 "^2.0.0" 413 | umd "^3.0.0" 414 | 415 | browser-resolve@^1.11.0, browser-resolve@^1.7.0: 416 | version "1.11.2" 417 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" 418 | dependencies: 419 | resolve "1.1.7" 420 | 421 | browserify-aes@^1.0.0, browserify-aes@^1.0.4: 422 | version "1.1.1" 423 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" 424 | dependencies: 425 | buffer-xor "^1.0.3" 426 | cipher-base "^1.0.0" 427 | create-hash "^1.1.0" 428 | evp_bytestokey "^1.0.3" 429 | inherits "^2.0.1" 430 | safe-buffer "^5.0.1" 431 | 432 | browserify-cipher@^1.0.0: 433 | version "1.0.0" 434 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" 435 | dependencies: 436 | browserify-aes "^1.0.4" 437 | browserify-des "^1.0.0" 438 | evp_bytestokey "^1.0.0" 439 | 440 | browserify-des@^1.0.0: 441 | version "1.0.0" 442 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" 443 | dependencies: 444 | cipher-base "^1.0.1" 445 | des.js "^1.0.0" 446 | inherits "^2.0.1" 447 | 448 | browserify-rsa@^4.0.0: 449 | version "4.0.1" 450 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" 451 | dependencies: 452 | bn.js "^4.1.0" 453 | randombytes "^2.0.1" 454 | 455 | browserify-sign@^4.0.0: 456 | version "4.0.4" 457 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" 458 | dependencies: 459 | bn.js "^4.1.1" 460 | browserify-rsa "^4.0.0" 461 | create-hash "^1.1.0" 462 | create-hmac "^1.1.2" 463 | elliptic "^6.0.0" 464 | inherits "^2.0.1" 465 | parse-asn1 "^5.0.0" 466 | 467 | browserify-zlib@~0.2.0: 468 | version "0.2.0" 469 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" 470 | dependencies: 471 | pako "~1.0.5" 472 | 473 | browserify@^16.2.3: 474 | version "16.2.3" 475 | resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.3.tgz#7ee6e654ba4f92bce6ab3599c3485b1cc7a0ad0b" 476 | dependencies: 477 | JSONStream "^1.0.3" 478 | assert "^1.4.0" 479 | browser-pack "^6.0.1" 480 | browser-resolve "^1.11.0" 481 | browserify-zlib "~0.2.0" 482 | buffer "^5.0.2" 483 | cached-path-relative "^1.0.0" 484 | concat-stream "^1.6.0" 485 | console-browserify "^1.1.0" 486 | constants-browserify "~1.0.0" 487 | crypto-browserify "^3.0.0" 488 | defined "^1.0.0" 489 | deps-sort "^2.0.0" 490 | domain-browser "^1.2.0" 491 | duplexer2 "~0.1.2" 492 | events "^2.0.0" 493 | glob "^7.1.0" 494 | has "^1.0.0" 495 | htmlescape "^1.1.0" 496 | https-browserify "^1.0.0" 497 | inherits "~2.0.1" 498 | insert-module-globals "^7.0.0" 499 | labeled-stream-splicer "^2.0.0" 500 | mkdirp "^0.5.0" 501 | module-deps "^6.0.0" 502 | os-browserify "~0.3.0" 503 | parents "^1.0.1" 504 | path-browserify "~0.0.0" 505 | process "~0.11.0" 506 | punycode "^1.3.2" 507 | querystring-es3 "~0.2.0" 508 | read-only-stream "^2.0.0" 509 | readable-stream "^2.0.2" 510 | resolve "^1.1.4" 511 | shasum "^1.0.0" 512 | shell-quote "^1.6.1" 513 | stream-browserify "^2.0.0" 514 | stream-http "^2.0.0" 515 | string_decoder "^1.1.1" 516 | subarg "^1.0.0" 517 | syntax-error "^1.1.1" 518 | through2 "^2.0.0" 519 | timers-browserify "^1.0.1" 520 | tty-browserify "0.0.1" 521 | url "~0.11.0" 522 | util "~0.10.1" 523 | vm-browserify "^1.0.0" 524 | xtend "^4.0.0" 525 | 526 | browserslist@^4.4.1: 527 | version "4.4.1" 528 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062" 529 | dependencies: 530 | caniuse-lite "^1.0.30000929" 531 | electron-to-chromium "^1.3.103" 532 | node-releases "^1.1.3" 533 | 534 | buffer-from@^1.0.0: 535 | version "1.1.1" 536 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 537 | 538 | buffer-xor@^1.0.3: 539 | version "1.0.3" 540 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 541 | 542 | buffer@^5.0.2: 543 | version "5.2.1" 544 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" 545 | dependencies: 546 | base64-js "^1.0.2" 547 | ieee754 "^1.1.4" 548 | 549 | builtin-status-codes@^3.0.0: 550 | version "3.0.0" 551 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 552 | 553 | bytes@1: 554 | version "1.0.0" 555 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" 556 | 557 | cache-base@^1.0.1: 558 | version "1.0.1" 559 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 560 | dependencies: 561 | collection-visit "^1.0.0" 562 | component-emitter "^1.2.1" 563 | get-value "^2.0.6" 564 | has-value "^1.0.0" 565 | isobject "^3.0.1" 566 | set-value "^2.0.0" 567 | to-object-path "^0.3.0" 568 | union-value "^1.0.0" 569 | unset-value "^1.0.0" 570 | 571 | cached-path-relative@^1.0.0: 572 | version "1.0.1" 573 | resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" 574 | 575 | camelcase@^1.0.2: 576 | version "1.2.1" 577 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 578 | 579 | caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000932: 580 | version "1.0.30000935" 581 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz#d1b59df00b46f4921bb84a8a34c1d172b346df59" 582 | 583 | center-align@^0.1.1: 584 | version "0.1.3" 585 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 586 | dependencies: 587 | align-text "^0.1.3" 588 | lazy-cache "^1.0.3" 589 | 590 | chalk@^1.0.0, chalk@^1.1.3: 591 | version "1.1.3" 592 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 593 | dependencies: 594 | ansi-styles "^2.2.1" 595 | escape-string-regexp "^1.0.2" 596 | has-ansi "^2.0.0" 597 | strip-ansi "^3.0.0" 598 | supports-color "^2.0.0" 599 | 600 | chalk@^2.4.2: 601 | version "2.4.2" 602 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 603 | dependencies: 604 | ansi-styles "^3.2.1" 605 | escape-string-regexp "^1.0.5" 606 | supports-color "^5.3.0" 607 | 608 | character-parser@1.2.1: 609 | version "1.2.1" 610 | resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-1.2.1.tgz#c0dde4ab182713b919b970959a123ecc1a30fcd6" 611 | 612 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: 613 | version "1.0.4" 614 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" 615 | dependencies: 616 | inherits "^2.0.1" 617 | safe-buffer "^5.0.1" 618 | 619 | class-utils@^0.3.5: 620 | version "0.3.6" 621 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 622 | dependencies: 623 | arr-union "^3.1.0" 624 | define-property "^0.2.5" 625 | isobject "^3.0.0" 626 | static-extend "^0.1.1" 627 | 628 | clean-css@^3.1.9: 629 | version "3.4.28" 630 | resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff" 631 | dependencies: 632 | commander "2.8.x" 633 | source-map "0.4.x" 634 | 635 | clipboard@^2.0.0: 636 | version "2.0.0" 637 | resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.0.tgz#4661dc972fb72a4c4770b8db78aa9b1caef52b50" 638 | dependencies: 639 | good-listener "^1.2.2" 640 | select "^1.1.2" 641 | tiny-emitter "^2.0.0" 642 | 643 | cliui@^2.1.0: 644 | version "2.1.0" 645 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 646 | dependencies: 647 | center-align "^0.1.1" 648 | right-align "^0.1.1" 649 | wordwrap "0.0.2" 650 | 651 | clone-buffer@^1.0.0: 652 | version "1.0.0" 653 | resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" 654 | 655 | clone-stats@^0.0.1: 656 | version "0.0.1" 657 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" 658 | 659 | clone-stats@^1.0.0: 660 | version "1.0.0" 661 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" 662 | 663 | clone@^0.2.0: 664 | version "0.2.0" 665 | resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" 666 | integrity sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8= 667 | 668 | clone@^1.0.0: 669 | version "1.0.3" 670 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" 671 | 672 | clone@^1.0.2: 673 | version "1.0.4" 674 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 675 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 676 | 677 | clone@^2.1.1: 678 | version "2.1.2" 679 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" 680 | 681 | cloneable-readable@^1.0.0: 682 | version "1.1.2" 683 | resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" 684 | dependencies: 685 | inherits "^2.0.1" 686 | process-nextick-args "^2.0.0" 687 | readable-stream "^2.3.5" 688 | 689 | collection-visit@^1.0.0: 690 | version "1.0.0" 691 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 692 | dependencies: 693 | map-visit "^1.0.0" 694 | object-visit "^1.0.0" 695 | 696 | color-convert@^1.9.0: 697 | version "1.9.3" 698 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 699 | dependencies: 700 | color-name "1.1.3" 701 | 702 | color-name@1.1.3: 703 | version "1.1.3" 704 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 705 | 706 | color-support@^1.1.3: 707 | version "1.1.3" 708 | resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" 709 | 710 | combine-source-map@~0.7.1: 711 | version "0.7.2" 712 | resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" 713 | dependencies: 714 | convert-source-map "~1.1.0" 715 | inline-source-map "~0.6.0" 716 | lodash.memoize "~3.0.3" 717 | source-map "~0.5.3" 718 | 719 | combine-source-map@~0.8.0: 720 | version "0.8.0" 721 | resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" 722 | dependencies: 723 | convert-source-map "~1.1.0" 724 | inline-source-map "~0.6.0" 725 | lodash.memoize "~3.0.3" 726 | source-map "~0.5.3" 727 | 728 | commander@2.8.x: 729 | version "2.8.1" 730 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" 731 | dependencies: 732 | graceful-readlink ">= 1.0.0" 733 | 734 | commander@~2.17.1: 735 | version "2.17.1" 736 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" 737 | 738 | commander@~2.6.0: 739 | version "2.6.0" 740 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d" 741 | 742 | component-emitter@^1.2.1: 743 | version "1.2.1" 744 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 745 | 746 | concat-map@0.0.1: 747 | version "0.0.1" 748 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 749 | 750 | concat-stream@^1.6.0, concat-stream@~1.6.0: 751 | version "1.6.2" 752 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 753 | dependencies: 754 | buffer-from "^1.0.0" 755 | inherits "^2.0.3" 756 | readable-stream "^2.2.2" 757 | typedarray "^0.0.6" 758 | 759 | concat-stream@~1.5.1: 760 | version "1.5.2" 761 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" 762 | dependencies: 763 | inherits "~2.0.1" 764 | readable-stream "~2.0.0" 765 | typedarray "~0.0.5" 766 | 767 | connect-livereload@^0.6.0: 768 | version "0.6.1" 769 | resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.6.1.tgz#1ac0c8bb9d9cfd5b28b629987a56a9239db9baaa" 770 | 771 | connect@^3.6.6: 772 | version "3.6.6" 773 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" 774 | dependencies: 775 | debug "2.6.9" 776 | finalhandler "1.1.0" 777 | parseurl "~1.3.2" 778 | utils-merge "1.0.1" 779 | 780 | console-browserify@^1.1.0: 781 | version "1.1.0" 782 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 783 | dependencies: 784 | date-now "^0.1.4" 785 | 786 | constantinople@~3.0.1: 787 | version "3.0.2" 788 | resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.0.2.tgz#4b945d9937907bcd98ee575122c3817516544141" 789 | dependencies: 790 | acorn "^2.1.0" 791 | 792 | constants-browserify@~1.0.0: 793 | version "1.0.0" 794 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 795 | 796 | continuable-cache@^0.3.1: 797 | version "0.3.1" 798 | resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" 799 | 800 | convert-source-map@^1.2.0: 801 | version "1.5.1" 802 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" 803 | 804 | convert-source-map@~1.1.0: 805 | version "1.1.3" 806 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" 807 | 808 | copy-descriptor@^0.1.0: 809 | version "0.1.1" 810 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 811 | 812 | core-util-is@~1.0.0: 813 | version "1.0.2" 814 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 815 | 816 | create-ecdh@^4.0.0: 817 | version "4.0.0" 818 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" 819 | dependencies: 820 | bn.js "^4.1.0" 821 | elliptic "^6.0.0" 822 | 823 | create-hash@^1.1.0, create-hash@^1.1.2: 824 | version "1.1.3" 825 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" 826 | dependencies: 827 | cipher-base "^1.0.1" 828 | inherits "^2.0.1" 829 | ripemd160 "^2.0.0" 830 | sha.js "^2.4.0" 831 | 832 | create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: 833 | version "1.1.6" 834 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" 835 | dependencies: 836 | cipher-base "^1.0.3" 837 | create-hash "^1.1.0" 838 | inherits "^2.0.1" 839 | ripemd160 "^2.0.0" 840 | safe-buffer "^5.0.1" 841 | sha.js "^2.4.8" 842 | 843 | crypto-browserify@^3.0.0: 844 | version "3.12.0" 845 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" 846 | dependencies: 847 | browserify-cipher "^1.0.0" 848 | browserify-sign "^4.0.0" 849 | create-ecdh "^4.0.0" 850 | create-hash "^1.1.0" 851 | create-hmac "^1.1.0" 852 | diffie-hellman "^5.0.0" 853 | inherits "^2.0.1" 854 | pbkdf2 "^3.0.3" 855 | public-encrypt "^4.0.0" 856 | randombytes "^2.0.0" 857 | randomfill "^1.0.3" 858 | 859 | css-parse@1.0.4: 860 | version "1.0.4" 861 | resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.0.4.tgz#38b0503fbf9da9f54e9c1dbda60e145c77117bdd" 862 | 863 | css-parse@1.7.x: 864 | version "1.7.0" 865 | resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" 866 | 867 | css-stringify@1.0.5: 868 | version "1.0.5" 869 | resolved "https://registry.yarnpkg.com/css-stringify/-/css-stringify-1.0.5.tgz#b0d042946db2953bb9d292900a6cb5f6d0122031" 870 | 871 | css-tree@1.0.0-alpha.29: 872 | version "1.0.0-alpha.29" 873 | resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" 874 | dependencies: 875 | mdn-data "~1.1.0" 876 | source-map "^0.5.3" 877 | 878 | css@~1.0.8: 879 | version "1.0.8" 880 | resolved "https://registry.yarnpkg.com/css/-/css-1.0.8.tgz#9386811ca82bccc9ee7fb5a732b1e2a317c8a3e7" 881 | dependencies: 882 | css-parse "1.0.4" 883 | css-stringify "1.0.5" 884 | 885 | csso@^3.0.0: 886 | version "3.5.1" 887 | resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" 888 | dependencies: 889 | css-tree "1.0.0-alpha.29" 890 | 891 | date-now@^0.1.4: 892 | version "0.1.4" 893 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 894 | 895 | dateformat@^2.0.0: 896 | version "2.2.0" 897 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" 898 | 899 | debug@*, debug@2.6.9, debug@^2.2.0, debug@^2.3.3: 900 | version "2.6.9" 901 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 902 | dependencies: 903 | ms "2.0.0" 904 | 905 | debug@^3.1.0: 906 | version "3.2.6" 907 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 908 | dependencies: 909 | ms "^2.1.1" 910 | 911 | decamelize@^1.0.0: 912 | version "1.2.0" 913 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 914 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 915 | 916 | decode-uri-component@^0.2.0: 917 | version "0.2.0" 918 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 919 | 920 | deep-assign@^1.0.0: 921 | version "1.0.0" 922 | resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-1.0.0.tgz#b092743be8427dc621ea0067cdec7e70dd19f37b" 923 | dependencies: 924 | is-obj "^1.0.0" 925 | 926 | defaults@^1.0.0: 927 | version "1.0.3" 928 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" 929 | integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= 930 | dependencies: 931 | clone "^1.0.2" 932 | 933 | define-property@^0.2.5: 934 | version "0.2.5" 935 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 936 | dependencies: 937 | is-descriptor "^0.1.0" 938 | 939 | define-property@^1.0.0: 940 | version "1.0.0" 941 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 942 | dependencies: 943 | is-descriptor "^1.0.0" 944 | 945 | define-property@^2.0.2: 946 | version "2.0.2" 947 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 948 | dependencies: 949 | is-descriptor "^1.0.2" 950 | isobject "^3.0.1" 951 | 952 | defined@^1.0.0: 953 | version "1.0.0" 954 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 955 | 956 | del@^3.0.0: 957 | version "3.0.0" 958 | resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" 959 | dependencies: 960 | globby "^6.1.0" 961 | is-path-cwd "^1.0.0" 962 | is-path-in-cwd "^1.0.0" 963 | p-map "^1.1.1" 964 | pify "^3.0.0" 965 | rimraf "^2.2.8" 966 | 967 | delegate@^3.1.2: 968 | version "3.2.0" 969 | resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" 970 | 971 | depd@~1.1.2: 972 | version "1.1.2" 973 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 974 | 975 | deprecated@^0.0.1: 976 | version "0.0.1" 977 | resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" 978 | integrity sha1-+cmvVGSvoeepcUWKi97yqpTVuxk= 979 | 980 | deps-sort@^2.0.0: 981 | version "2.0.0" 982 | resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" 983 | dependencies: 984 | JSONStream "^1.0.3" 985 | shasum "^1.0.0" 986 | subarg "^1.0.0" 987 | through2 "^2.0.0" 988 | 989 | des.js@^1.0.0: 990 | version "1.0.0" 991 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" 992 | dependencies: 993 | inherits "^2.0.1" 994 | minimalistic-assert "^1.0.0" 995 | 996 | destroy@~1.0.4: 997 | version "1.0.4" 998 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 999 | 1000 | detect-file@^1.0.0: 1001 | version "1.0.0" 1002 | resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" 1003 | 1004 | detective@^5.0.2: 1005 | version "5.2.0" 1006 | resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" 1007 | dependencies: 1008 | acorn-node "^1.6.1" 1009 | defined "^1.0.0" 1010 | minimist "^1.1.1" 1011 | 1012 | diffie-hellman@^5.0.0: 1013 | version "5.0.2" 1014 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" 1015 | dependencies: 1016 | bn.js "^4.1.0" 1017 | miller-rabin "^4.0.0" 1018 | randombytes "^2.0.0" 1019 | 1020 | domain-browser@^1.2.0: 1021 | version "1.2.0" 1022 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" 1023 | 1024 | duplexer2@0.0.2: 1025 | version "0.0.2" 1026 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" 1027 | dependencies: 1028 | readable-stream "~1.1.9" 1029 | 1030 | duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: 1031 | version "0.1.4" 1032 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 1033 | dependencies: 1034 | readable-stream "^2.0.2" 1035 | 1036 | ee-first@1.1.1: 1037 | version "1.1.1" 1038 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 1039 | 1040 | electron-to-chromium@^1.3.103: 1041 | version "1.3.113" 1042 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" 1043 | 1044 | elliptic@^6.0.0: 1045 | version "6.4.0" 1046 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" 1047 | dependencies: 1048 | bn.js "^4.4.0" 1049 | brorand "^1.0.1" 1050 | hash.js "^1.0.0" 1051 | hmac-drbg "^1.0.0" 1052 | inherits "^2.0.1" 1053 | minimalistic-assert "^1.0.0" 1054 | minimalistic-crypto-utils "^1.0.0" 1055 | 1056 | encodeurl@~1.0.1, encodeurl@~1.0.2: 1057 | version "1.0.2" 1058 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 1059 | 1060 | end-of-stream@~0.1.5: 1061 | version "0.1.5" 1062 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" 1063 | integrity sha1-jhdyBsPICDfYVjLouTWd/osvbq8= 1064 | dependencies: 1065 | once "~1.3.0" 1066 | 1067 | error@^7.0.0: 1068 | version "7.0.2" 1069 | resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" 1070 | dependencies: 1071 | string-template "~0.2.1" 1072 | xtend "~4.0.0" 1073 | 1074 | escape-html@~1.0.3: 1075 | version "1.0.3" 1076 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1077 | 1078 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1079 | version "1.0.5" 1080 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1081 | 1082 | etag@~1.8.1: 1083 | version "1.8.1" 1084 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1085 | 1086 | events@^2.0.0: 1087 | version "2.1.0" 1088 | resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" 1089 | 1090 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 1091 | version "1.0.3" 1092 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" 1093 | dependencies: 1094 | md5.js "^1.3.4" 1095 | safe-buffer "^5.1.1" 1096 | 1097 | expand-brackets@^2.1.4: 1098 | version "2.1.4" 1099 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1100 | dependencies: 1101 | debug "^2.3.3" 1102 | define-property "^0.2.5" 1103 | extend-shallow "^2.0.1" 1104 | posix-character-classes "^0.1.0" 1105 | regex-not "^1.0.0" 1106 | snapdragon "^0.8.1" 1107 | to-regex "^3.0.1" 1108 | 1109 | expand-tilde@^2.0.0, expand-tilde@^2.0.2: 1110 | version "2.0.2" 1111 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" 1112 | dependencies: 1113 | homedir-polyfill "^1.0.1" 1114 | 1115 | extend-shallow@^1.1.2: 1116 | version "1.1.4" 1117 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" 1118 | dependencies: 1119 | kind-of "^1.1.0" 1120 | 1121 | extend-shallow@^2.0.1: 1122 | version "2.0.1" 1123 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1124 | dependencies: 1125 | is-extendable "^0.1.0" 1126 | 1127 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1128 | version "3.0.2" 1129 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1130 | dependencies: 1131 | assign-symbols "^1.0.0" 1132 | is-extendable "^1.0.1" 1133 | 1134 | extend@^3.0.0: 1135 | version "3.0.1" 1136 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 1137 | 1138 | extglob@^2.0.4: 1139 | version "2.0.4" 1140 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1141 | dependencies: 1142 | array-unique "^0.3.2" 1143 | define-property "^1.0.0" 1144 | expand-brackets "^2.1.4" 1145 | extend-shallow "^2.0.1" 1146 | fragment-cache "^0.2.1" 1147 | regex-not "^1.0.0" 1148 | snapdragon "^0.8.1" 1149 | to-regex "^3.0.1" 1150 | 1151 | fancy-log@^1.1.0, fancy-log@^1.3.2: 1152 | version "1.3.2" 1153 | resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" 1154 | dependencies: 1155 | ansi-gray "^0.1.1" 1156 | color-support "^1.1.3" 1157 | time-stamp "^1.0.0" 1158 | 1159 | faye-websocket@~0.10.0: 1160 | version "0.10.0" 1161 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" 1162 | dependencies: 1163 | websocket-driver ">=0.5.1" 1164 | 1165 | fill-range@^4.0.0: 1166 | version "4.0.0" 1167 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1168 | dependencies: 1169 | extend-shallow "^2.0.1" 1170 | is-number "^3.0.0" 1171 | repeat-string "^1.6.1" 1172 | to-regex-range "^2.1.0" 1173 | 1174 | finalhandler@1.1.0: 1175 | version "1.1.0" 1176 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" 1177 | dependencies: 1178 | debug "2.6.9" 1179 | encodeurl "~1.0.1" 1180 | escape-html "~1.0.3" 1181 | on-finished "~2.3.0" 1182 | parseurl "~1.3.2" 1183 | statuses "~1.3.1" 1184 | unpipe "~1.0.0" 1185 | 1186 | find-index@^0.1.1: 1187 | version "0.1.1" 1188 | resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" 1189 | integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ= 1190 | 1191 | findup-sync@^2.0.0: 1192 | version "2.0.0" 1193 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" 1194 | dependencies: 1195 | detect-file "^1.0.0" 1196 | is-glob "^3.1.0" 1197 | micromatch "^3.0.4" 1198 | resolve-dir "^1.0.1" 1199 | 1200 | fined@^1.0.1: 1201 | version "1.1.0" 1202 | resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" 1203 | dependencies: 1204 | expand-tilde "^2.0.2" 1205 | is-plain-object "^2.0.3" 1206 | object.defaults "^1.1.0" 1207 | object.pick "^1.2.0" 1208 | parse-filepath "^1.0.1" 1209 | 1210 | first-chunk-stream@^1.0.0: 1211 | version "1.0.0" 1212 | resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" 1213 | integrity sha1-Wb+1DNkF9g18OUzT2ayqtOatk04= 1214 | 1215 | flagged-respawn@^1.0.0: 1216 | version "1.0.0" 1217 | resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" 1218 | 1219 | for-in@^1.0.1, for-in@^1.0.2: 1220 | version "1.0.2" 1221 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1222 | 1223 | for-own@^1.0.0: 1224 | version "1.0.0" 1225 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" 1226 | dependencies: 1227 | for-in "^1.0.1" 1228 | 1229 | fragment-cache@^0.2.1: 1230 | version "0.2.1" 1231 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1232 | dependencies: 1233 | map-cache "^0.2.2" 1234 | 1235 | fresh@0.5.2: 1236 | version "0.5.2" 1237 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1238 | 1239 | fs.realpath@^1.0.0: 1240 | version "1.0.0" 1241 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1242 | 1243 | function-bind@^1.0.2: 1244 | version "1.1.1" 1245 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1246 | 1247 | gaze@^0.5.1: 1248 | version "0.5.2" 1249 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" 1250 | integrity sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8= 1251 | dependencies: 1252 | globule "~0.1.0" 1253 | 1254 | get-value@^2.0.3, get-value@^2.0.6: 1255 | version "2.0.6" 1256 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1257 | 1258 | glob-stream@^3.1.5: 1259 | version "3.1.18" 1260 | resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" 1261 | integrity sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs= 1262 | dependencies: 1263 | glob "^4.3.1" 1264 | glob2base "^0.0.12" 1265 | minimatch "^2.0.1" 1266 | ordered-read-streams "^0.1.0" 1267 | through2 "^0.6.1" 1268 | unique-stream "^1.0.0" 1269 | 1270 | glob-watcher@^0.0.6: 1271 | version "0.0.6" 1272 | resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" 1273 | integrity sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs= 1274 | dependencies: 1275 | gaze "^0.5.1" 1276 | 1277 | glob2base@^0.0.12: 1278 | version "0.0.12" 1279 | resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" 1280 | integrity sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY= 1281 | dependencies: 1282 | find-index "^0.1.1" 1283 | 1284 | glob@7.0.x: 1285 | version "7.0.6" 1286 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" 1287 | dependencies: 1288 | fs.realpath "^1.0.0" 1289 | inflight "^1.0.4" 1290 | inherits "2" 1291 | minimatch "^3.0.2" 1292 | once "^1.3.0" 1293 | path-is-absolute "^1.0.0" 1294 | 1295 | glob@^4.3.1: 1296 | version "4.5.3" 1297 | resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" 1298 | integrity sha1-xstz0yJsHv7wTePFbQEvAzd+4V8= 1299 | dependencies: 1300 | inflight "^1.0.4" 1301 | inherits "2" 1302 | minimatch "^2.0.1" 1303 | once "^1.3.0" 1304 | 1305 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.0: 1306 | version "7.1.2" 1307 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 1308 | dependencies: 1309 | fs.realpath "^1.0.0" 1310 | inflight "^1.0.4" 1311 | inherits "2" 1312 | minimatch "^3.0.4" 1313 | once "^1.3.0" 1314 | path-is-absolute "^1.0.0" 1315 | 1316 | glob@~3.1.21: 1317 | version "3.1.21" 1318 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" 1319 | integrity sha1-0p4KBV3qUTj00H7UDomC6DwgZs0= 1320 | dependencies: 1321 | graceful-fs "~1.2.0" 1322 | inherits "1" 1323 | minimatch "~0.2.11" 1324 | 1325 | global-modules@^1.0.0: 1326 | version "1.0.0" 1327 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" 1328 | dependencies: 1329 | global-prefix "^1.0.1" 1330 | is-windows "^1.0.1" 1331 | resolve-dir "^1.0.0" 1332 | 1333 | global-prefix@^1.0.1: 1334 | version "1.0.2" 1335 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" 1336 | dependencies: 1337 | expand-tilde "^2.0.2" 1338 | homedir-polyfill "^1.0.1" 1339 | ini "^1.3.4" 1340 | is-windows "^1.0.1" 1341 | which "^1.2.14" 1342 | 1343 | globby@^6.1.0: 1344 | version "6.1.0" 1345 | resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" 1346 | dependencies: 1347 | array-union "^1.0.1" 1348 | glob "^7.0.3" 1349 | object-assign "^4.0.1" 1350 | pify "^2.0.0" 1351 | pinkie-promise "^2.0.0" 1352 | 1353 | globule@~0.1.0: 1354 | version "0.1.0" 1355 | resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" 1356 | integrity sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU= 1357 | dependencies: 1358 | glob "~3.1.21" 1359 | lodash "~1.0.1" 1360 | minimatch "~0.2.11" 1361 | 1362 | glogg@^1.0.0: 1363 | version "1.0.1" 1364 | resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" 1365 | dependencies: 1366 | sparkles "^1.0.0" 1367 | 1368 | good-listener@^1.2.2: 1369 | version "1.2.2" 1370 | resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" 1371 | dependencies: 1372 | delegate "^3.1.2" 1373 | 1374 | graceful-fs@^3.0.0, graceful-fs@^4.2.4, graceful-fs@~1.2.0: 1375 | version "4.2.6" 1376 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1377 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 1378 | 1379 | "graceful-readlink@>= 1.0.0": 1380 | version "1.0.1" 1381 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 1382 | 1383 | gulp-autoprefixer@6.0.0: 1384 | version "6.0.0" 1385 | resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-6.0.0.tgz#7034ef12c24a92a5b20158d63623ebbd900faed8" 1386 | dependencies: 1387 | autoprefixer "^9.1.3" 1388 | fancy-log "^1.3.2" 1389 | plugin-error "^1.0.1" 1390 | postcss "^7.0.2" 1391 | through2 "^2.0.0" 1392 | vinyl-sourcemaps-apply "^0.2.0" 1393 | 1394 | gulp-chmod@^2.0.0: 1395 | version "2.0.0" 1396 | resolved "https://registry.yarnpkg.com/gulp-chmod/-/gulp-chmod-2.0.0.tgz#00c390b928a0799b251accf631aa09e01cc6299c" 1397 | dependencies: 1398 | deep-assign "^1.0.0" 1399 | stat-mode "^0.2.0" 1400 | through2 "^2.0.0" 1401 | 1402 | gulp-connect@^5.7.0: 1403 | version "5.7.0" 1404 | resolved "https://registry.yarnpkg.com/gulp-connect/-/gulp-connect-5.7.0.tgz#7e925f5e4c34ebfedf9f318576966e8fe8840d5a" 1405 | dependencies: 1406 | ansi-colors "^2.0.5" 1407 | connect "^3.6.6" 1408 | connect-livereload "^0.6.0" 1409 | fancy-log "^1.3.2" 1410 | map-stream "^0.0.7" 1411 | send "^0.16.2" 1412 | serve-index "^1.9.1" 1413 | serve-static "^1.13.2" 1414 | tiny-lr "^1.1.1" 1415 | 1416 | gulp-csso@^3.0.1: 1417 | version "3.0.1" 1418 | resolved "https://registry.yarnpkg.com/gulp-csso/-/gulp-csso-3.0.1.tgz#3c160364491e32f2ecefd5d531cf7724f1afb7f0" 1419 | dependencies: 1420 | csso "^3.0.0" 1421 | plugin-error "^0.1.2" 1422 | vinyl-sourcemaps-apply "^0.2.1" 1423 | 1424 | gulp-exec@^3.0.2: 1425 | version "3.0.2" 1426 | resolved "https://registry.yarnpkg.com/gulp-exec/-/gulp-exec-3.0.2.tgz#6e461646221dd6c47f5803d7f69b399bde20e214" 1427 | dependencies: 1428 | lodash.template "^4.4.0" 1429 | plugin-error "^0.1.2" 1430 | through2 "^2.0.3" 1431 | 1432 | gulp-jade@^1.1.0: 1433 | version "1.1.0" 1434 | resolved "https://registry.yarnpkg.com/gulp-jade/-/gulp-jade-1.1.0.tgz#cb2f332ac46824671f36891655c165c591c33bd4" 1435 | dependencies: 1436 | gulp-util "^3.0.2" 1437 | jade "1.1 - 1.11" 1438 | through2 "^2.0.0" 1439 | 1440 | gulp-plumber@^1.2.1: 1441 | version "1.2.1" 1442 | resolved "https://registry.yarnpkg.com/gulp-plumber/-/gulp-plumber-1.2.1.tgz#d38700755a300b9d372318e4ffb5ff7ced0b2c84" 1443 | dependencies: 1444 | chalk "^1.1.3" 1445 | fancy-log "^1.3.2" 1446 | plugin-error "^0.1.2" 1447 | through2 "^2.0.3" 1448 | 1449 | gulp-rename@^1.4.0: 1450 | version "1.4.0" 1451 | resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd" 1452 | 1453 | gulp-stylus@^2.7.0: 1454 | version "2.7.0" 1455 | resolved "https://registry.yarnpkg.com/gulp-stylus/-/gulp-stylus-2.7.0.tgz#f3e932626004927b75ea27ff5c1d3b0ba0b7cbb1" 1456 | dependencies: 1457 | accord "^0.26.3" 1458 | lodash.assign "^3.2.0" 1459 | plugin-error "^0.1.2" 1460 | replace-ext "0.0.1" 1461 | stylus "^0.54.0" 1462 | through2 "^2.0.0" 1463 | vinyl-sourcemaps-apply "^0.2.0" 1464 | 1465 | gulp-uglify@^3.0.1: 1466 | version "3.0.1" 1467 | resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-3.0.1.tgz#8d3eee466521bea6b10fd75dff72adf8b7ea2d97" 1468 | dependencies: 1469 | gulplog "^1.0.0" 1470 | has-gulplog "^0.1.0" 1471 | lodash "^4.13.1" 1472 | make-error-cause "^1.1.1" 1473 | safe-buffer "^5.1.2" 1474 | through2 "^2.0.0" 1475 | uglify-js "^3.0.5" 1476 | vinyl-sourcemaps-apply "^0.2.0" 1477 | 1478 | gulp-util@^3.0.0, gulp-util@^3.0.2, gulp-util@^3.0.8: 1479 | version "3.0.8" 1480 | resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" 1481 | integrity sha1-AFTh50RQLifATBh8PsxQXdVLu08= 1482 | dependencies: 1483 | array-differ "^1.0.0" 1484 | array-uniq "^1.0.2" 1485 | beeper "^1.0.0" 1486 | chalk "^1.0.0" 1487 | dateformat "^2.0.0" 1488 | fancy-log "^1.1.0" 1489 | gulplog "^1.0.0" 1490 | has-gulplog "^0.1.0" 1491 | lodash._reescape "^3.0.0" 1492 | lodash._reevaluate "^3.0.0" 1493 | lodash._reinterpolate "^3.0.0" 1494 | lodash.template "^3.0.0" 1495 | minimist "^1.1.0" 1496 | multipipe "^0.1.2" 1497 | object-assign "^3.0.0" 1498 | replace-ext "0.0.1" 1499 | through2 "^2.0.0" 1500 | vinyl "^0.5.0" 1501 | 1502 | gulp@^3.9.1: 1503 | version "3.9.1" 1504 | resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" 1505 | integrity sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ= 1506 | dependencies: 1507 | archy "^1.0.0" 1508 | chalk "^1.0.0" 1509 | deprecated "^0.0.1" 1510 | gulp-util "^3.0.0" 1511 | interpret "^1.0.0" 1512 | liftoff "^2.1.0" 1513 | minimist "^1.1.0" 1514 | orchestrator "^0.3.0" 1515 | pretty-hrtime "^1.0.0" 1516 | semver "^4.1.0" 1517 | tildify "^1.0.0" 1518 | v8flags "^2.0.2" 1519 | vinyl-fs "^0.3.0" 1520 | 1521 | gulplog@^1.0.0: 1522 | version "1.0.0" 1523 | resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" 1524 | dependencies: 1525 | glogg "^1.0.0" 1526 | 1527 | has-ansi@^2.0.0: 1528 | version "2.0.0" 1529 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1530 | dependencies: 1531 | ansi-regex "^2.0.0" 1532 | 1533 | has-flag@^3.0.0: 1534 | version "3.0.0" 1535 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1536 | 1537 | has-gulplog@^0.1.0: 1538 | version "0.1.0" 1539 | resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" 1540 | dependencies: 1541 | sparkles "^1.0.0" 1542 | 1543 | has-value@^0.3.1: 1544 | version "0.3.1" 1545 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1546 | dependencies: 1547 | get-value "^2.0.3" 1548 | has-values "^0.1.4" 1549 | isobject "^2.0.0" 1550 | 1551 | has-value@^1.0.0: 1552 | version "1.0.0" 1553 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1554 | dependencies: 1555 | get-value "^2.0.6" 1556 | has-values "^1.0.0" 1557 | isobject "^3.0.0" 1558 | 1559 | has-values@^0.1.4: 1560 | version "0.1.4" 1561 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1562 | 1563 | has-values@^1.0.0: 1564 | version "1.0.0" 1565 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1566 | dependencies: 1567 | is-number "^3.0.0" 1568 | kind-of "^4.0.0" 1569 | 1570 | has@^1.0.0: 1571 | version "1.0.1" 1572 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 1573 | dependencies: 1574 | function-bind "^1.0.2" 1575 | 1576 | hash-base@^2.0.0: 1577 | version "2.0.2" 1578 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" 1579 | dependencies: 1580 | inherits "^2.0.1" 1581 | 1582 | hash-base@^3.0.0: 1583 | version "3.0.4" 1584 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" 1585 | dependencies: 1586 | inherits "^2.0.1" 1587 | safe-buffer "^5.0.1" 1588 | 1589 | hash.js@^1.0.0, hash.js@^1.0.3: 1590 | version "1.1.3" 1591 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" 1592 | dependencies: 1593 | inherits "^2.0.3" 1594 | minimalistic-assert "^1.0.0" 1595 | 1596 | hmac-drbg@^1.0.0: 1597 | version "1.0.1" 1598 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1599 | dependencies: 1600 | hash.js "^1.0.3" 1601 | minimalistic-assert "^1.0.0" 1602 | minimalistic-crypto-utils "^1.0.1" 1603 | 1604 | homedir-polyfill@^1.0.1: 1605 | version "1.0.1" 1606 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" 1607 | dependencies: 1608 | parse-passwd "^1.0.0" 1609 | 1610 | htmlescape@^1.1.0: 1611 | version "1.1.1" 1612 | resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" 1613 | 1614 | http-errors@~1.6.2: 1615 | version "1.6.3" 1616 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 1617 | dependencies: 1618 | depd "~1.1.2" 1619 | inherits "2.0.3" 1620 | setprototypeof "1.1.0" 1621 | statuses ">= 1.4.0 < 2" 1622 | 1623 | http-parser-js@>=0.4.0: 1624 | version "0.4.10" 1625 | resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" 1626 | 1627 | https-browserify@^1.0.0: 1628 | version "1.0.0" 1629 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" 1630 | 1631 | ieee754@^1.1.4: 1632 | version "1.1.8" 1633 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 1634 | 1635 | indx@^0.2.3: 1636 | version "0.2.3" 1637 | resolved "https://registry.yarnpkg.com/indx/-/indx-0.2.3.tgz#15dcf56ee9cf65c0234c513c27fbd580e70fbc50" 1638 | 1639 | inflight@^1.0.4: 1640 | version "1.0.6" 1641 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1642 | dependencies: 1643 | once "^1.3.0" 1644 | wrappy "1" 1645 | 1646 | inherits@1: 1647 | version "1.0.2" 1648 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" 1649 | integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js= 1650 | 1651 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 1652 | version "2.0.3" 1653 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1654 | 1655 | inherits@2.0.1: 1656 | version "2.0.1" 1657 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1658 | 1659 | ini@^1.3.4: 1660 | version "1.3.5" 1661 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1662 | 1663 | inline-source-map@~0.6.0: 1664 | version "0.6.2" 1665 | resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" 1666 | dependencies: 1667 | source-map "~0.5.3" 1668 | 1669 | insert-css@^0.2.0: 1670 | version "0.2.0" 1671 | resolved "https://registry.yarnpkg.com/insert-css/-/insert-css-0.2.0.tgz#d15789971662d9899c28977fb6220d5381d2451a" 1672 | 1673 | insert-module-globals@^7.0.0: 1674 | version "7.0.2" 1675 | resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.2.tgz#012c56baa7d3307a8b417d4ec5270cf9741c18f4" 1676 | dependencies: 1677 | JSONStream "^1.0.3" 1678 | combine-source-map "~0.7.1" 1679 | concat-stream "~1.5.1" 1680 | is-buffer "^1.1.0" 1681 | lexical-scope "^1.2.0" 1682 | process "~0.11.0" 1683 | through2 "^2.0.0" 1684 | xtend "^4.0.0" 1685 | 1686 | interpret@^1.0.0: 1687 | version "1.4.0" 1688 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" 1689 | integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== 1690 | 1691 | is-absolute@^1.0.0: 1692 | version "1.0.0" 1693 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" 1694 | dependencies: 1695 | is-relative "^1.0.0" 1696 | is-windows "^1.0.1" 1697 | 1698 | is-accessor-descriptor@^0.1.6: 1699 | version "0.1.6" 1700 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1701 | dependencies: 1702 | kind-of "^3.0.2" 1703 | 1704 | is-accessor-descriptor@^1.0.0: 1705 | version "1.0.0" 1706 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1707 | dependencies: 1708 | kind-of "^6.0.0" 1709 | 1710 | is-buffer@^1.1.0, is-buffer@^1.1.5: 1711 | version "1.1.6" 1712 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1713 | 1714 | is-data-descriptor@^0.1.4: 1715 | version "0.1.4" 1716 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1717 | dependencies: 1718 | kind-of "^3.0.2" 1719 | 1720 | is-data-descriptor@^1.0.0: 1721 | version "1.0.0" 1722 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1723 | dependencies: 1724 | kind-of "^6.0.0" 1725 | 1726 | is-descriptor@^0.1.0: 1727 | version "0.1.6" 1728 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1729 | dependencies: 1730 | is-accessor-descriptor "^0.1.6" 1731 | is-data-descriptor "^0.1.4" 1732 | kind-of "^5.0.0" 1733 | 1734 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1735 | version "1.0.2" 1736 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1737 | dependencies: 1738 | is-accessor-descriptor "^1.0.0" 1739 | is-data-descriptor "^1.0.0" 1740 | kind-of "^6.0.2" 1741 | 1742 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1743 | version "0.1.1" 1744 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1745 | 1746 | is-extendable@^1.0.1: 1747 | version "1.0.1" 1748 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1749 | dependencies: 1750 | is-plain-object "^2.0.4" 1751 | 1752 | is-extglob@^2.1.0: 1753 | version "2.1.1" 1754 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1755 | 1756 | is-glob@^3.1.0: 1757 | version "3.1.0" 1758 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1759 | dependencies: 1760 | is-extglob "^2.1.0" 1761 | 1762 | is-number@^3.0.0: 1763 | version "3.0.0" 1764 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1765 | dependencies: 1766 | kind-of "^3.0.2" 1767 | 1768 | is-number@^4.0.0: 1769 | version "4.0.0" 1770 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" 1771 | 1772 | is-obj@^1.0.0: 1773 | version "1.0.1" 1774 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1775 | 1776 | is-odd@^2.0.0: 1777 | version "2.0.0" 1778 | resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" 1779 | dependencies: 1780 | is-number "^4.0.0" 1781 | 1782 | is-path-cwd@^1.0.0: 1783 | version "1.0.0" 1784 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 1785 | 1786 | is-path-in-cwd@^1.0.0: 1787 | version "1.0.0" 1788 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 1789 | dependencies: 1790 | is-path-inside "^1.0.0" 1791 | 1792 | is-path-inside@^1.0.0: 1793 | version "1.0.1" 1794 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1795 | dependencies: 1796 | path-is-inside "^1.0.1" 1797 | 1798 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1799 | version "2.0.4" 1800 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1801 | dependencies: 1802 | isobject "^3.0.1" 1803 | 1804 | is-promise@^2.0.0: 1805 | version "2.1.0" 1806 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1807 | 1808 | is-promise@~1: 1809 | version "1.0.1" 1810 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-1.0.1.tgz#31573761c057e33c2e91aab9e96da08cefbe76e5" 1811 | 1812 | is-relative@^1.0.0: 1813 | version "1.0.0" 1814 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" 1815 | dependencies: 1816 | is-unc-path "^1.0.0" 1817 | 1818 | is-unc-path@^1.0.0: 1819 | version "1.0.0" 1820 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" 1821 | dependencies: 1822 | unc-path-regex "^0.1.2" 1823 | 1824 | is-utf8@^0.2.0: 1825 | version "0.2.1" 1826 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1827 | integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= 1828 | 1829 | is-windows@^1.0.1, is-windows@^1.0.2: 1830 | version "1.0.2" 1831 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1832 | 1833 | isarray@0.0.1, isarray@~0.0.1: 1834 | version "0.0.1" 1835 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1836 | 1837 | isarray@1.0.0, isarray@~1.0.0: 1838 | version "1.0.0" 1839 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1840 | 1841 | isexe@^2.0.0: 1842 | version "2.0.0" 1843 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1844 | 1845 | isobject@^2.0.0: 1846 | version "2.1.0" 1847 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1848 | dependencies: 1849 | isarray "1.0.0" 1850 | 1851 | isobject@^3.0.0, isobject@^3.0.1: 1852 | version "3.0.1" 1853 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1854 | 1855 | "jade@1.1 - 1.11": 1856 | version "1.11.0" 1857 | resolved "https://registry.yarnpkg.com/jade/-/jade-1.11.0.tgz#9c80e538c12d3fb95c8d9bb9559fa0cc040405fd" 1858 | dependencies: 1859 | character-parser "1.2.1" 1860 | clean-css "^3.1.9" 1861 | commander "~2.6.0" 1862 | constantinople "~3.0.1" 1863 | jstransformer "0.0.2" 1864 | mkdirp "~0.5.0" 1865 | transformers "2.1.0" 1866 | uglify-js "^2.4.19" 1867 | void-elements "~2.0.1" 1868 | with "~4.0.0" 1869 | 1870 | json-stable-stringify@~0.0.0: 1871 | version "0.0.1" 1872 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" 1873 | dependencies: 1874 | jsonify "~0.0.0" 1875 | 1876 | jsonify@~0.0.0: 1877 | version "0.0.0" 1878 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1879 | 1880 | jsonparse@^1.2.0: 1881 | version "1.3.1" 1882 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1883 | 1884 | jstransformer@0.0.2: 1885 | version "0.0.2" 1886 | resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-0.0.2.tgz#7aae29a903d196cfa0973d885d3e47947ecd76ab" 1887 | dependencies: 1888 | is-promise "^2.0.0" 1889 | promise "^6.0.1" 1890 | 1891 | kind-of@^1.1.0: 1892 | version "1.1.0" 1893 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" 1894 | 1895 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.1.0, kind-of@^3.2.0: 1896 | version "3.2.2" 1897 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1898 | dependencies: 1899 | is-buffer "^1.1.5" 1900 | 1901 | kind-of@^4.0.0: 1902 | version "4.0.0" 1903 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1904 | dependencies: 1905 | is-buffer "^1.1.5" 1906 | 1907 | kind-of@^5.0.0: 1908 | version "5.1.0" 1909 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1910 | 1911 | kind-of@^6.0.0, kind-of@^6.0.2: 1912 | version "6.0.2" 1913 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1914 | 1915 | labeled-stream-splicer@^2.0.0: 1916 | version "2.0.0" 1917 | resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" 1918 | dependencies: 1919 | inherits "^2.0.1" 1920 | isarray "~0.0.1" 1921 | stream-splicer "^2.0.0" 1922 | 1923 | lazy-cache@^1.0.3: 1924 | version "1.0.4" 1925 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 1926 | 1927 | lazy-cache@^2.0.2: 1928 | version "2.0.2" 1929 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" 1930 | dependencies: 1931 | set-getter "^0.1.0" 1932 | 1933 | lexical-scope@^1.2.0: 1934 | version "1.2.0" 1935 | resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" 1936 | dependencies: 1937 | astw "^2.0.0" 1938 | 1939 | liftoff@^2.1.0: 1940 | version "2.5.0" 1941 | resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" 1942 | integrity sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= 1943 | dependencies: 1944 | extend "^3.0.0" 1945 | findup-sync "^2.0.0" 1946 | fined "^1.0.1" 1947 | flagged-respawn "^1.0.0" 1948 | is-plain-object "^2.0.4" 1949 | object.map "^1.0.0" 1950 | rechoir "^0.6.2" 1951 | resolve "^1.1.7" 1952 | 1953 | livereload-js@^2.3.0: 1954 | version "2.4.0" 1955 | resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" 1956 | 1957 | lodash._baseassign@^3.0.0: 1958 | version "3.2.0" 1959 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 1960 | dependencies: 1961 | lodash._basecopy "^3.0.0" 1962 | lodash.keys "^3.0.0" 1963 | 1964 | lodash._basecopy@^3.0.0: 1965 | version "3.0.1" 1966 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 1967 | 1968 | lodash._basetostring@^3.0.0: 1969 | version "3.0.1" 1970 | resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" 1971 | 1972 | lodash._basevalues@^3.0.0: 1973 | version "3.0.0" 1974 | resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" 1975 | 1976 | lodash._bindcallback@^3.0.0: 1977 | version "3.0.1" 1978 | resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" 1979 | 1980 | lodash._createassigner@^3.0.0: 1981 | version "3.1.1" 1982 | resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" 1983 | dependencies: 1984 | lodash._bindcallback "^3.0.0" 1985 | lodash._isiterateecall "^3.0.0" 1986 | lodash.restparam "^3.0.0" 1987 | 1988 | lodash._getnative@^3.0.0: 1989 | version "3.9.1" 1990 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 1991 | 1992 | lodash._isiterateecall@^3.0.0: 1993 | version "3.0.9" 1994 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 1995 | 1996 | lodash._reescape@^3.0.0: 1997 | version "3.0.0" 1998 | resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" 1999 | 2000 | lodash._reevaluate@^3.0.0: 2001 | version "3.0.0" 2002 | resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" 2003 | 2004 | lodash._reinterpolate@^3.0.0, lodash._reinterpolate@~3.0.0: 2005 | version "3.0.0" 2006 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" 2007 | 2008 | lodash._root@^3.0.0: 2009 | version "3.0.1" 2010 | resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" 2011 | 2012 | lodash.assign@^3.2.0: 2013 | version "3.2.0" 2014 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" 2015 | dependencies: 2016 | lodash._baseassign "^3.0.0" 2017 | lodash._createassigner "^3.0.0" 2018 | lodash.keys "^3.0.0" 2019 | 2020 | lodash.clone@^4.3.2: 2021 | version "4.5.0" 2022 | resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" 2023 | 2024 | lodash.defaults@^4.0.1: 2025 | version "4.2.0" 2026 | resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" 2027 | 2028 | lodash.escape@^3.0.0: 2029 | version "3.2.0" 2030 | resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" 2031 | dependencies: 2032 | lodash._root "^3.0.0" 2033 | 2034 | lodash.flatten@^4.2.0: 2035 | version "4.4.0" 2036 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" 2037 | 2038 | lodash.isarguments@^3.0.0: 2039 | version "3.1.0" 2040 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 2041 | 2042 | lodash.isarray@^3.0.0: 2043 | version "3.0.4" 2044 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 2045 | 2046 | lodash.keys@^3.0.0: 2047 | version "3.1.2" 2048 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 2049 | dependencies: 2050 | lodash._getnative "^3.0.0" 2051 | lodash.isarguments "^3.0.0" 2052 | lodash.isarray "^3.0.0" 2053 | 2054 | lodash.memoize@~3.0.3: 2055 | version "3.0.4" 2056 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" 2057 | 2058 | lodash.merge@^4.4.0: 2059 | version "4.6.1" 2060 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" 2061 | 2062 | lodash.partialright@^4.1.4: 2063 | version "4.2.1" 2064 | resolved "https://registry.yarnpkg.com/lodash.partialright/-/lodash.partialright-4.2.1.tgz#0130d80e83363264d40074f329b8a3e7a8a1cc4b" 2065 | 2066 | lodash.pick@^4.2.1: 2067 | version "4.4.0" 2068 | resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 2069 | 2070 | lodash.restparam@^3.0.0: 2071 | version "3.6.1" 2072 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" 2073 | 2074 | lodash.template@^3.0.0: 2075 | version "3.6.2" 2076 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" 2077 | dependencies: 2078 | lodash._basecopy "^3.0.0" 2079 | lodash._basetostring "^3.0.0" 2080 | lodash._basevalues "^3.0.0" 2081 | lodash._isiterateecall "^3.0.0" 2082 | lodash._reinterpolate "^3.0.0" 2083 | lodash.escape "^3.0.0" 2084 | lodash.keys "^3.0.0" 2085 | lodash.restparam "^3.0.0" 2086 | lodash.templatesettings "^3.0.0" 2087 | 2088 | lodash.template@^4.4.0: 2089 | version "4.4.0" 2090 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" 2091 | dependencies: 2092 | lodash._reinterpolate "~3.0.0" 2093 | lodash.templatesettings "^4.0.0" 2094 | 2095 | lodash.templatesettings@^3.0.0: 2096 | version "3.1.1" 2097 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" 2098 | dependencies: 2099 | lodash._reinterpolate "^3.0.0" 2100 | lodash.escape "^3.0.0" 2101 | 2102 | lodash.templatesettings@^4.0.0: 2103 | version "4.1.0" 2104 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" 2105 | dependencies: 2106 | lodash._reinterpolate "~3.0.0" 2107 | 2108 | lodash.uniq@^4.3.0: 2109 | version "4.5.0" 2110 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" 2111 | 2112 | lodash@^4.13.1: 2113 | version "4.17.11" 2114 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 2115 | 2116 | lodash@~1.0.1: 2117 | version "1.0.2" 2118 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" 2119 | integrity sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE= 2120 | 2121 | longest@^1.0.1: 2122 | version "1.0.1" 2123 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 2124 | 2125 | lru-cache@2: 2126 | version "2.7.3" 2127 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" 2128 | integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= 2129 | 2130 | make-error-cause@^1.1.1: 2131 | version "1.2.2" 2132 | resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d" 2133 | dependencies: 2134 | make-error "^1.2.0" 2135 | 2136 | make-error@^1.2.0: 2137 | version "1.3.5" 2138 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 2139 | 2140 | make-iterator@^1.0.0: 2141 | version "1.0.0" 2142 | resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.0.tgz#57bef5dc85d23923ba23767324d8e8f8f3d9694b" 2143 | dependencies: 2144 | kind-of "^3.1.0" 2145 | 2146 | map-cache@^0.2.0, map-cache@^0.2.2: 2147 | version "0.2.2" 2148 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 2149 | 2150 | map-stream@^0.0.7: 2151 | version "0.0.7" 2152 | resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8" 2153 | 2154 | map-visit@^1.0.0: 2155 | version "1.0.0" 2156 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 2157 | dependencies: 2158 | object-visit "^1.0.0" 2159 | 2160 | md5.js@^1.3.4: 2161 | version "1.3.4" 2162 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" 2163 | dependencies: 2164 | hash-base "^3.0.0" 2165 | inherits "^2.0.1" 2166 | 2167 | mdn-data@~1.1.0: 2168 | version "1.1.4" 2169 | resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" 2170 | 2171 | micromatch@^3.0.4: 2172 | version "3.1.9" 2173 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" 2174 | dependencies: 2175 | arr-diff "^4.0.0" 2176 | array-unique "^0.3.2" 2177 | braces "^2.3.1" 2178 | define-property "^2.0.2" 2179 | extend-shallow "^3.0.2" 2180 | extglob "^2.0.4" 2181 | fragment-cache "^0.2.1" 2182 | kind-of "^6.0.2" 2183 | nanomatch "^1.2.9" 2184 | object.pick "^1.3.0" 2185 | regex-not "^1.0.0" 2186 | snapdragon "^0.8.1" 2187 | to-regex "^3.0.1" 2188 | 2189 | miller-rabin@^4.0.0: 2190 | version "4.0.1" 2191 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" 2192 | dependencies: 2193 | bn.js "^4.0.0" 2194 | brorand "^1.0.1" 2195 | 2196 | mime-db@~1.33.0: 2197 | version "1.33.0" 2198 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 2199 | 2200 | mime-db@~1.37.0: 2201 | version "1.37.0" 2202 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" 2203 | 2204 | mime-types@~2.1.17: 2205 | version "2.1.21" 2206 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" 2207 | dependencies: 2208 | mime-db "~1.37.0" 2209 | 2210 | mime-types@~2.1.18: 2211 | version "2.1.18" 2212 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 2213 | dependencies: 2214 | mime-db "~1.33.0" 2215 | 2216 | mime@1.4.1: 2217 | version "1.4.1" 2218 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 2219 | 2220 | minimalistic-assert@^1.0.0: 2221 | version "1.0.0" 2222 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" 2223 | 2224 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: 2225 | version "1.0.1" 2226 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 2227 | 2228 | minimatch@^2.0.1: 2229 | version "2.0.10" 2230 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" 2231 | integrity sha1-jQh8OcazjAAbl/ynzm0OHoCvusc= 2232 | dependencies: 2233 | brace-expansion "^1.0.0" 2234 | 2235 | minimatch@^3.0.2, minimatch@^3.0.4: 2236 | version "3.0.4" 2237 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2238 | dependencies: 2239 | brace-expansion "^1.1.7" 2240 | 2241 | minimatch@~0.2.11: 2242 | version "0.2.14" 2243 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" 2244 | integrity sha1-x054BXT2PG+aCQ6Q775u9TpqdWo= 2245 | dependencies: 2246 | lru-cache "2" 2247 | sigmund "~1.0.0" 2248 | 2249 | minimist@0.0.8: 2250 | version "0.0.8" 2251 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2252 | 2253 | minimist@^1.1.0, minimist@^1.1.1: 2254 | version "1.2.0" 2255 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 2256 | 2257 | mixin-deep@^1.2.0: 2258 | version "1.3.1" 2259 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 2260 | dependencies: 2261 | for-in "^1.0.2" 2262 | is-extendable "^1.0.1" 2263 | 2264 | mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@~0.5.0: 2265 | version "0.5.1" 2266 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2267 | dependencies: 2268 | minimist "0.0.8" 2269 | 2270 | module-deps@^6.0.0: 2271 | version "6.2.0" 2272 | resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.0.tgz#d41a2e790245ce319171e4e7c4d8c73993ba3cd5" 2273 | dependencies: 2274 | JSONStream "^1.0.3" 2275 | browser-resolve "^1.7.0" 2276 | cached-path-relative "^1.0.0" 2277 | concat-stream "~1.6.0" 2278 | defined "^1.0.0" 2279 | detective "^5.0.2" 2280 | duplexer2 "^0.1.2" 2281 | inherits "^2.0.1" 2282 | parents "^1.0.0" 2283 | readable-stream "^2.0.2" 2284 | resolve "^1.4.0" 2285 | stream-combiner2 "^1.1.1" 2286 | subarg "^1.0.0" 2287 | through2 "^2.0.0" 2288 | xtend "^4.0.0" 2289 | 2290 | ms@2.0.0: 2291 | version "2.0.0" 2292 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2293 | 2294 | ms@^2.1.1: 2295 | version "2.1.1" 2296 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2297 | 2298 | multipipe@^0.1.2: 2299 | version "0.1.2" 2300 | resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" 2301 | dependencies: 2302 | duplexer2 "0.0.2" 2303 | 2304 | nanomatch@^1.2.9: 2305 | version "1.2.9" 2306 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" 2307 | dependencies: 2308 | arr-diff "^4.0.0" 2309 | array-unique "^0.3.2" 2310 | define-property "^2.0.2" 2311 | extend-shallow "^3.0.2" 2312 | fragment-cache "^0.2.1" 2313 | is-odd "^2.0.0" 2314 | is-windows "^1.0.2" 2315 | kind-of "^6.0.2" 2316 | object.pick "^1.3.0" 2317 | regex-not "^1.0.0" 2318 | snapdragon "^0.8.1" 2319 | to-regex "^3.0.1" 2320 | 2321 | natives@^1.1.6: 2322 | version "1.1.6" 2323 | resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" 2324 | integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== 2325 | 2326 | negotiator@0.6.1: 2327 | version "0.6.1" 2328 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 2329 | 2330 | node-releases@^1.1.3: 2331 | version "1.1.7" 2332 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.7.tgz#b09a10394d0ed8f7778f72bb861dde68b146303b" 2333 | dependencies: 2334 | semver "^5.3.0" 2335 | 2336 | normalize-range@^0.1.2: 2337 | version "0.1.2" 2338 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 2339 | 2340 | normalizecss@^3.0.0: 2341 | version "3.0.0" 2342 | resolved "https://registry.yarnpkg.com/normalizecss/-/normalizecss-3.0.0.tgz#d6c3d3861c98214573285a98adfc98d176ef1023" 2343 | 2344 | num2fraction@^1.2.2: 2345 | version "1.2.2" 2346 | resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" 2347 | 2348 | object-assign@^3.0.0: 2349 | version "3.0.0" 2350 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" 2351 | 2352 | object-assign@^4.0.1, object-assign@^4.1.0: 2353 | version "4.1.1" 2354 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2355 | 2356 | object-copy@^0.1.0: 2357 | version "0.1.0" 2358 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2359 | dependencies: 2360 | copy-descriptor "^0.1.0" 2361 | define-property "^0.2.5" 2362 | kind-of "^3.0.3" 2363 | 2364 | object-visit@^1.0.0: 2365 | version "1.0.1" 2366 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2367 | dependencies: 2368 | isobject "^3.0.0" 2369 | 2370 | object.defaults@^1.1.0: 2371 | version "1.1.0" 2372 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" 2373 | dependencies: 2374 | array-each "^1.0.1" 2375 | array-slice "^1.0.0" 2376 | for-own "^1.0.0" 2377 | isobject "^3.0.0" 2378 | 2379 | object.map@^1.0.0: 2380 | version "1.0.1" 2381 | resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" 2382 | dependencies: 2383 | for-own "^1.0.0" 2384 | make-iterator "^1.0.0" 2385 | 2386 | object.pick@^1.2.0, object.pick@^1.3.0: 2387 | version "1.3.0" 2388 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2389 | dependencies: 2390 | isobject "^3.0.1" 2391 | 2392 | on-finished@~2.3.0: 2393 | version "2.3.0" 2394 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 2395 | dependencies: 2396 | ee-first "1.1.1" 2397 | 2398 | once@^1.3.0: 2399 | version "1.4.0" 2400 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2401 | dependencies: 2402 | wrappy "1" 2403 | 2404 | once@~1.3.0: 2405 | version "1.3.3" 2406 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" 2407 | integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= 2408 | dependencies: 2409 | wrappy "1" 2410 | 2411 | optimist@~0.3.5: 2412 | version "0.3.7" 2413 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" 2414 | dependencies: 2415 | wordwrap "~0.0.2" 2416 | 2417 | orchestrator@^0.3.0: 2418 | version "0.3.8" 2419 | resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" 2420 | integrity sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4= 2421 | dependencies: 2422 | end-of-stream "~0.1.5" 2423 | sequencify "~0.0.7" 2424 | stream-consume "~0.1.0" 2425 | 2426 | ordered-read-streams@^0.1.0: 2427 | version "0.1.0" 2428 | resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" 2429 | integrity sha1-/VZamvjrRHO6abbtijQ1LLVS8SY= 2430 | 2431 | os-browserify@~0.3.0: 2432 | version "0.3.0" 2433 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" 2434 | 2435 | os-homedir@^1.0.0: 2436 | version "1.0.2" 2437 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2438 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 2439 | 2440 | p-map@^1.1.1: 2441 | version "1.2.0" 2442 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" 2443 | 2444 | pako@~1.0.5: 2445 | version "1.0.8" 2446 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.8.tgz#6844890aab9c635af868ad5fecc62e8acbba3ea4" 2447 | 2448 | parents@^1.0.0, parents@^1.0.1: 2449 | version "1.0.1" 2450 | resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" 2451 | dependencies: 2452 | path-platform "~0.11.15" 2453 | 2454 | parse-asn1@^5.0.0: 2455 | version "5.1.0" 2456 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" 2457 | dependencies: 2458 | asn1.js "^4.0.0" 2459 | browserify-aes "^1.0.0" 2460 | create-hash "^1.1.0" 2461 | evp_bytestokey "^1.0.0" 2462 | pbkdf2 "^3.0.3" 2463 | 2464 | parse-filepath@^1.0.1: 2465 | version "1.0.2" 2466 | resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" 2467 | dependencies: 2468 | is-absolute "^1.0.0" 2469 | map-cache "^0.2.0" 2470 | path-root "^0.1.1" 2471 | 2472 | parse-passwd@^1.0.0: 2473 | version "1.0.0" 2474 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" 2475 | 2476 | parseurl@~1.3.2: 2477 | version "1.3.2" 2478 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 2479 | 2480 | pascalcase@^0.1.1: 2481 | version "0.1.1" 2482 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2483 | 2484 | path-browserify@~0.0.0: 2485 | version "0.0.0" 2486 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" 2487 | 2488 | path-is-absolute@^1.0.0: 2489 | version "1.0.1" 2490 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2491 | 2492 | path-is-inside@^1.0.1: 2493 | version "1.0.2" 2494 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 2495 | 2496 | path-parse@^1.0.5: 2497 | version "1.0.5" 2498 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 2499 | 2500 | path-parse@^1.0.6: 2501 | version "1.0.6" 2502 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2503 | 2504 | path-platform@~0.11.15: 2505 | version "0.11.15" 2506 | resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" 2507 | 2508 | path-root-regex@^0.1.0: 2509 | version "0.1.2" 2510 | resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" 2511 | 2512 | path-root@^0.1.1: 2513 | version "0.1.1" 2514 | resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" 2515 | dependencies: 2516 | path-root-regex "^0.1.0" 2517 | 2518 | pbkdf2@^3.0.3: 2519 | version "3.0.14" 2520 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" 2521 | dependencies: 2522 | create-hash "^1.1.2" 2523 | create-hmac "^1.1.4" 2524 | ripemd160 "^2.0.1" 2525 | safe-buffer "^5.0.1" 2526 | sha.js "^2.4.8" 2527 | 2528 | pify@^2.0.0: 2529 | version "2.3.0" 2530 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2531 | 2532 | pify@^3.0.0: 2533 | version "3.0.0" 2534 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2535 | 2536 | pinkie-promise@^2.0.0: 2537 | version "2.0.1" 2538 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 2539 | dependencies: 2540 | pinkie "^2.0.0" 2541 | 2542 | pinkie@^2.0.0: 2543 | version "2.0.4" 2544 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 2545 | 2546 | plugin-error@^0.1.2: 2547 | version "0.1.2" 2548 | resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" 2549 | dependencies: 2550 | ansi-cyan "^0.1.1" 2551 | ansi-red "^0.1.1" 2552 | arr-diff "^1.0.1" 2553 | arr-union "^2.0.1" 2554 | extend-shallow "^1.1.2" 2555 | 2556 | plugin-error@^1.0.1: 2557 | version "1.0.1" 2558 | resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" 2559 | dependencies: 2560 | ansi-colors "^1.0.1" 2561 | arr-diff "^4.0.0" 2562 | arr-union "^3.1.0" 2563 | extend-shallow "^3.0.2" 2564 | 2565 | posix-character-classes@^0.1.0: 2566 | version "0.1.1" 2567 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2568 | 2569 | postcss-value-parser@^3.3.1: 2570 | version "3.3.1" 2571 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" 2572 | 2573 | postcss@^7.0.14, postcss@^7.0.2: 2574 | version "7.0.14" 2575 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" 2576 | dependencies: 2577 | chalk "^2.4.2" 2578 | source-map "^0.6.1" 2579 | supports-color "^6.1.0" 2580 | 2581 | pretty-hrtime@^1.0.0: 2582 | version "1.0.3" 2583 | resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" 2584 | 2585 | prismjs@^1.20.0: 2586 | version "1.20.0" 2587 | resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.20.0.tgz#9b685fc480a3514ee7198eac6a3bf5024319ff03" 2588 | integrity sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ== 2589 | optionalDependencies: 2590 | clipboard "^2.0.0" 2591 | 2592 | process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: 2593 | version "2.0.0" 2594 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 2595 | 2596 | process-nextick-args@~1.0.6: 2597 | version "1.0.7" 2598 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 2599 | 2600 | process@~0.11.0: 2601 | version "0.11.10" 2602 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 2603 | 2604 | promise@^6.0.1: 2605 | version "6.1.0" 2606 | resolved "https://registry.yarnpkg.com/promise/-/promise-6.1.0.tgz#2ce729f6b94b45c26891ad0602c5c90e04c6eef6" 2607 | dependencies: 2608 | asap "~1.0.0" 2609 | 2610 | promise@~2.0: 2611 | version "2.0.0" 2612 | resolved "https://registry.yarnpkg.com/promise/-/promise-2.0.0.tgz#46648aa9d605af5d2e70c3024bf59436da02b80e" 2613 | dependencies: 2614 | is-promise "~1" 2615 | 2616 | public-encrypt@^4.0.0: 2617 | version "4.0.0" 2618 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" 2619 | dependencies: 2620 | bn.js "^4.1.0" 2621 | browserify-rsa "^4.0.0" 2622 | create-hash "^1.1.0" 2623 | parse-asn1 "^5.0.0" 2624 | randombytes "^2.0.1" 2625 | 2626 | punycode@1.3.2: 2627 | version "1.3.2" 2628 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 2629 | 2630 | punycode@^1.3.2: 2631 | version "1.4.1" 2632 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2633 | 2634 | qs@^6.4.0: 2635 | version "6.6.0" 2636 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.6.0.tgz#a99c0f69a8d26bf7ef012f871cdabb0aee4424c2" 2637 | 2638 | querystring-es3@~0.2.0: 2639 | version "0.2.1" 2640 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 2641 | 2642 | querystring@0.2.0: 2643 | version "0.2.0" 2644 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 2645 | 2646 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: 2647 | version "2.0.6" 2648 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" 2649 | dependencies: 2650 | safe-buffer "^5.1.0" 2651 | 2652 | randomfill@^1.0.3: 2653 | version "1.0.4" 2654 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" 2655 | dependencies: 2656 | randombytes "^2.0.5" 2657 | safe-buffer "^5.1.0" 2658 | 2659 | range-parser@~1.2.0: 2660 | version "1.2.0" 2661 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 2662 | 2663 | raw-body@~1.1.0: 2664 | version "1.1.7" 2665 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" 2666 | dependencies: 2667 | bytes "1" 2668 | string_decoder "0.10" 2669 | 2670 | read-only-stream@^2.0.0: 2671 | version "2.0.0" 2672 | resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" 2673 | dependencies: 2674 | readable-stream "^2.0.2" 2675 | 2676 | "readable-stream@>=1.0.33-1 <1.1.0-0": 2677 | version "1.0.34" 2678 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 2679 | integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= 2680 | dependencies: 2681 | core-util-is "~1.0.0" 2682 | inherits "~2.0.1" 2683 | isarray "0.0.1" 2684 | string_decoder "~0.10.x" 2685 | 2686 | readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.3.3: 2687 | version "2.3.5" 2688 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" 2689 | dependencies: 2690 | core-util-is "~1.0.0" 2691 | inherits "~2.0.3" 2692 | isarray "~1.0.0" 2693 | process-nextick-args "~2.0.0" 2694 | safe-buffer "~5.1.1" 2695 | string_decoder "~1.0.3" 2696 | util-deprecate "~1.0.1" 2697 | 2698 | readable-stream@^2.2.2, readable-stream@^2.3.5: 2699 | version "2.3.6" 2700 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2701 | dependencies: 2702 | core-util-is "~1.0.0" 2703 | inherits "~2.0.3" 2704 | isarray "~1.0.0" 2705 | process-nextick-args "~2.0.0" 2706 | safe-buffer "~5.1.1" 2707 | string_decoder "~1.1.1" 2708 | util-deprecate "~1.0.1" 2709 | 2710 | readable-stream@~1.1.9: 2711 | version "1.1.14" 2712 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 2713 | dependencies: 2714 | core-util-is "~1.0.0" 2715 | inherits "~2.0.1" 2716 | isarray "0.0.1" 2717 | string_decoder "~0.10.x" 2718 | 2719 | readable-stream@~2.0.0: 2720 | version "2.0.6" 2721 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 2722 | dependencies: 2723 | core-util-is "~1.0.0" 2724 | inherits "~2.0.1" 2725 | isarray "~1.0.0" 2726 | process-nextick-args "~1.0.6" 2727 | string_decoder "~0.10.x" 2728 | util-deprecate "~1.0.1" 2729 | 2730 | rechoir@^0.6.2: 2731 | version "0.6.2" 2732 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 2733 | dependencies: 2734 | resolve "^1.1.6" 2735 | 2736 | regex-not@^1.0.0, regex-not@^1.0.2: 2737 | version "1.0.2" 2738 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2739 | dependencies: 2740 | extend-shallow "^3.0.2" 2741 | safe-regex "^1.1.0" 2742 | 2743 | remove-trailing-separator@^1.0.1: 2744 | version "1.1.0" 2745 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2746 | 2747 | repeat-element@^1.1.2: 2748 | version "1.1.2" 2749 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 2750 | 2751 | repeat-string@^1.5.2, repeat-string@^1.6.1: 2752 | version "1.6.1" 2753 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2754 | 2755 | replace-ext@0.0.1: 2756 | version "0.0.1" 2757 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" 2758 | 2759 | replace-ext@^1.0.0: 2760 | version "1.0.0" 2761 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" 2762 | 2763 | resolve-dir@^1.0.0, resolve-dir@^1.0.1: 2764 | version "1.0.1" 2765 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" 2766 | dependencies: 2767 | expand-tilde "^2.0.0" 2768 | global-modules "^1.0.0" 2769 | 2770 | resolve-url@^0.2.1: 2771 | version "0.2.1" 2772 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2773 | 2774 | resolve@1.1.7: 2775 | version "1.1.7" 2776 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2777 | 2778 | resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7: 2779 | version "1.5.0" 2780 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" 2781 | dependencies: 2782 | path-parse "^1.0.5" 2783 | 2784 | resolve@^1.4.0: 2785 | version "1.10.0" 2786 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" 2787 | dependencies: 2788 | path-parse "^1.0.6" 2789 | 2790 | ret@~0.1.10: 2791 | version "0.1.15" 2792 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2793 | 2794 | right-align@^0.1.1: 2795 | version "0.1.3" 2796 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 2797 | dependencies: 2798 | align-text "^0.1.1" 2799 | 2800 | rimraf@^2.2.8: 2801 | version "2.6.2" 2802 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 2803 | dependencies: 2804 | glob "^7.0.5" 2805 | 2806 | ripemd160@^2.0.0, ripemd160@^2.0.1: 2807 | version "2.0.1" 2808 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" 2809 | dependencies: 2810 | hash-base "^2.0.0" 2811 | inherits "^2.0.1" 2812 | 2813 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2814 | version "5.1.1" 2815 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 2816 | 2817 | safe-buffer@^5.1.2: 2818 | version "5.1.2" 2819 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2820 | 2821 | safe-json-parse@~1.0.1: 2822 | version "1.0.1" 2823 | resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" 2824 | 2825 | safe-regex@^1.1.0: 2826 | version "1.1.0" 2827 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2828 | dependencies: 2829 | ret "~0.1.10" 2830 | 2831 | sax@0.5.x: 2832 | version "0.5.8" 2833 | resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" 2834 | 2835 | select@^1.1.2: 2836 | version "1.1.2" 2837 | resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" 2838 | 2839 | semver@^4.1.0: 2840 | version "4.3.6" 2841 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" 2842 | integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= 2843 | 2844 | semver@^5.3.0: 2845 | version "5.5.0" 2846 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 2847 | 2848 | send@0.16.2, send@^0.16.2: 2849 | version "0.16.2" 2850 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 2851 | dependencies: 2852 | debug "2.6.9" 2853 | depd "~1.1.2" 2854 | destroy "~1.0.4" 2855 | encodeurl "~1.0.2" 2856 | escape-html "~1.0.3" 2857 | etag "~1.8.1" 2858 | fresh "0.5.2" 2859 | http-errors "~1.6.2" 2860 | mime "1.4.1" 2861 | ms "2.0.0" 2862 | on-finished "~2.3.0" 2863 | range-parser "~1.2.0" 2864 | statuses "~1.4.0" 2865 | 2866 | sequencify@~0.0.7: 2867 | version "0.0.7" 2868 | resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" 2869 | integrity sha1-kM/xnQLgcCf9dn9erT57ldHnOAw= 2870 | 2871 | serve-index@^1.9.1: 2872 | version "1.9.1" 2873 | resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" 2874 | dependencies: 2875 | accepts "~1.3.4" 2876 | batch "0.6.1" 2877 | debug "2.6.9" 2878 | escape-html "~1.0.3" 2879 | http-errors "~1.6.2" 2880 | mime-types "~2.1.17" 2881 | parseurl "~1.3.2" 2882 | 2883 | serve-static@^1.13.2: 2884 | version "1.13.2" 2885 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 2886 | dependencies: 2887 | encodeurl "~1.0.2" 2888 | escape-html "~1.0.3" 2889 | parseurl "~1.3.2" 2890 | send "0.16.2" 2891 | 2892 | set-getter@^0.1.0: 2893 | version "0.1.0" 2894 | resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" 2895 | dependencies: 2896 | to-object-path "^0.3.0" 2897 | 2898 | set-value@^0.4.3: 2899 | version "0.4.3" 2900 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 2901 | dependencies: 2902 | extend-shallow "^2.0.1" 2903 | is-extendable "^0.1.1" 2904 | is-plain-object "^2.0.1" 2905 | to-object-path "^0.3.0" 2906 | 2907 | set-value@^2.0.0: 2908 | version "2.0.0" 2909 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 2910 | dependencies: 2911 | extend-shallow "^2.0.1" 2912 | is-extendable "^0.1.1" 2913 | is-plain-object "^2.0.3" 2914 | split-string "^3.0.1" 2915 | 2916 | setprototypeof@1.1.0: 2917 | version "1.1.0" 2918 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 2919 | 2920 | sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: 2921 | version "2.4.10" 2922 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" 2923 | dependencies: 2924 | inherits "^2.0.1" 2925 | safe-buffer "^5.0.1" 2926 | 2927 | shasum@^1.0.0: 2928 | version "1.0.2" 2929 | resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" 2930 | dependencies: 2931 | json-stable-stringify "~0.0.0" 2932 | sha.js "~2.4.4" 2933 | 2934 | shell-quote@^1.6.1: 2935 | version "1.6.1" 2936 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" 2937 | dependencies: 2938 | array-filter "~0.0.0" 2939 | array-map "~0.0.0" 2940 | array-reduce "~0.0.0" 2941 | jsonify "~0.0.0" 2942 | 2943 | sigmund@~1.0.0: 2944 | version "1.0.1" 2945 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 2946 | integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= 2947 | 2948 | snapdragon-node@^2.0.1: 2949 | version "2.1.1" 2950 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2951 | dependencies: 2952 | define-property "^1.0.0" 2953 | isobject "^3.0.0" 2954 | snapdragon-util "^3.0.1" 2955 | 2956 | snapdragon-util@^3.0.1: 2957 | version "3.0.1" 2958 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2959 | dependencies: 2960 | kind-of "^3.2.0" 2961 | 2962 | snapdragon@^0.8.1: 2963 | version "0.8.1" 2964 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" 2965 | dependencies: 2966 | base "^0.11.1" 2967 | debug "^2.2.0" 2968 | define-property "^0.2.5" 2969 | extend-shallow "^2.0.1" 2970 | map-cache "^0.2.2" 2971 | source-map "^0.5.6" 2972 | source-map-resolve "^0.5.0" 2973 | use "^2.0.0" 2974 | 2975 | source-map-resolve@^0.5.0: 2976 | version "0.5.1" 2977 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" 2978 | dependencies: 2979 | atob "^2.0.0" 2980 | decode-uri-component "^0.2.0" 2981 | resolve-url "^0.2.1" 2982 | source-map-url "^0.4.0" 2983 | urix "^0.1.0" 2984 | 2985 | source-map-url@^0.4.0: 2986 | version "0.4.0" 2987 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2988 | 2989 | source-map@0.1.x, source-map@~0.1.7: 2990 | version "0.1.43" 2991 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" 2992 | dependencies: 2993 | amdefine ">=0.0.4" 2994 | 2995 | source-map@0.4.x: 2996 | version "0.4.4" 2997 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 2998 | dependencies: 2999 | amdefine ">=0.0.4" 3000 | 3001 | source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: 3002 | version "0.5.7" 3003 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 3004 | 3005 | source-map@^0.6.1, source-map@~0.6.1: 3006 | version "0.6.1" 3007 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 3008 | 3009 | sparkles@^1.0.0: 3010 | version "1.0.0" 3011 | resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" 3012 | 3013 | split-string@^3.0.1, split-string@^3.0.2: 3014 | version "3.1.0" 3015 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 3016 | dependencies: 3017 | extend-shallow "^3.0.0" 3018 | 3019 | stat-mode@^0.2.0: 3020 | version "0.2.2" 3021 | resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" 3022 | 3023 | static-extend@^0.1.1: 3024 | version "0.1.2" 3025 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 3026 | dependencies: 3027 | define-property "^0.2.5" 3028 | object-copy "^0.1.0" 3029 | 3030 | "statuses@>= 1.4.0 < 2": 3031 | version "1.5.0" 3032 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 3033 | 3034 | statuses@~1.3.1: 3035 | version "1.3.1" 3036 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 3037 | 3038 | statuses@~1.4.0: 3039 | version "1.4.0" 3040 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 3041 | 3042 | stream-browserify@^2.0.0: 3043 | version "2.0.1" 3044 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" 3045 | dependencies: 3046 | inherits "~2.0.1" 3047 | readable-stream "^2.0.2" 3048 | 3049 | stream-combiner2@^1.1.1: 3050 | version "1.1.1" 3051 | resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" 3052 | dependencies: 3053 | duplexer2 "~0.1.0" 3054 | readable-stream "^2.0.2" 3055 | 3056 | stream-consume@~0.1.0: 3057 | version "0.1.1" 3058 | resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" 3059 | integrity sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg== 3060 | 3061 | stream-http@^2.0.0: 3062 | version "2.8.0" 3063 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" 3064 | dependencies: 3065 | builtin-status-codes "^3.0.0" 3066 | inherits "^2.0.1" 3067 | readable-stream "^2.3.3" 3068 | to-arraybuffer "^1.0.0" 3069 | xtend "^4.0.0" 3070 | 3071 | stream-splicer@^2.0.0: 3072 | version "2.0.0" 3073 | resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" 3074 | dependencies: 3075 | inherits "^2.0.1" 3076 | readable-stream "^2.0.2" 3077 | 3078 | string-template@~0.2.1: 3079 | version "0.2.1" 3080 | resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" 3081 | 3082 | string_decoder@0.10, string_decoder@~0.10.x: 3083 | version "0.10.31" 3084 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 3085 | 3086 | string_decoder@^1.1.1: 3087 | version "1.2.0" 3088 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" 3089 | dependencies: 3090 | safe-buffer "~5.1.0" 3091 | 3092 | string_decoder@~1.0.3: 3093 | version "1.0.3" 3094 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 3095 | dependencies: 3096 | safe-buffer "~5.1.0" 3097 | 3098 | string_decoder@~1.1.1: 3099 | version "1.1.1" 3100 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 3101 | dependencies: 3102 | safe-buffer "~5.1.0" 3103 | 3104 | strip-ansi@^3.0.0: 3105 | version "3.0.1" 3106 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 3107 | dependencies: 3108 | ansi-regex "^2.0.0" 3109 | 3110 | strip-bom@^1.0.0: 3111 | version "1.0.0" 3112 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" 3113 | integrity sha1-hbiGLzhEtabV7IRnqTWYFzo295Q= 3114 | dependencies: 3115 | first-chunk-stream "^1.0.0" 3116 | is-utf8 "^0.2.0" 3117 | 3118 | stylus@^0.54.0: 3119 | version "0.54.5" 3120 | resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" 3121 | dependencies: 3122 | css-parse "1.7.x" 3123 | debug "*" 3124 | glob "7.0.x" 3125 | mkdirp "0.5.x" 3126 | sax "0.5.x" 3127 | source-map "0.1.x" 3128 | 3129 | subarg@^1.0.0: 3130 | version "1.0.0" 3131 | resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" 3132 | dependencies: 3133 | minimist "^1.1.0" 3134 | 3135 | supports-color@^2.0.0: 3136 | version "2.0.0" 3137 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 3138 | 3139 | supports-color@^5.3.0: 3140 | version "5.5.0" 3141 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 3142 | dependencies: 3143 | has-flag "^3.0.0" 3144 | 3145 | supports-color@^6.1.0: 3146 | version "6.1.0" 3147 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 3148 | dependencies: 3149 | has-flag "^3.0.0" 3150 | 3151 | syntax-error@^1.1.1: 3152 | version "1.4.0" 3153 | resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" 3154 | dependencies: 3155 | acorn-node "^1.2.0" 3156 | 3157 | through2@^0.6.1: 3158 | version "0.6.5" 3159 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" 3160 | integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= 3161 | dependencies: 3162 | readable-stream ">=1.0.33-1 <1.1.0-0" 3163 | xtend ">=4.0.0 <4.1.0-0" 3164 | 3165 | through2@^2.0.0, through2@^2.0.3: 3166 | version "2.0.3" 3167 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 3168 | dependencies: 3169 | readable-stream "^2.1.5" 3170 | xtend "~4.0.1" 3171 | 3172 | "through@>=2.2.7 <3", through@^2.3.8: 3173 | version "2.3.8" 3174 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 3175 | 3176 | tildify@^1.0.0: 3177 | version "1.2.0" 3178 | resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" 3179 | integrity sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo= 3180 | dependencies: 3181 | os-homedir "^1.0.0" 3182 | 3183 | time-stamp@^1.0.0: 3184 | version "1.1.0" 3185 | resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" 3186 | 3187 | timers-browserify@^1.0.1: 3188 | version "1.4.2" 3189 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" 3190 | dependencies: 3191 | process "~0.11.0" 3192 | 3193 | tiny-emitter@^2.0.0: 3194 | version "2.0.2" 3195 | resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" 3196 | 3197 | tiny-lr@^1.1.1: 3198 | version "1.1.1" 3199 | resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" 3200 | dependencies: 3201 | body "^5.1.0" 3202 | debug "^3.1.0" 3203 | faye-websocket "~0.10.0" 3204 | livereload-js "^2.3.0" 3205 | object-assign "^4.1.0" 3206 | qs "^6.4.0" 3207 | 3208 | to-arraybuffer@^1.0.0: 3209 | version "1.0.1" 3210 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 3211 | 3212 | to-object-path@^0.3.0: 3213 | version "0.3.0" 3214 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 3215 | dependencies: 3216 | kind-of "^3.0.2" 3217 | 3218 | to-regex-range@^2.1.0: 3219 | version "2.1.1" 3220 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 3221 | dependencies: 3222 | is-number "^3.0.0" 3223 | repeat-string "^1.6.1" 3224 | 3225 | to-regex@^3.0.1: 3226 | version "3.0.2" 3227 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 3228 | dependencies: 3229 | define-property "^2.0.2" 3230 | extend-shallow "^3.0.2" 3231 | regex-not "^1.0.2" 3232 | safe-regex "^1.1.0" 3233 | 3234 | transformers@2.1.0: 3235 | version "2.1.0" 3236 | resolved "https://registry.yarnpkg.com/transformers/-/transformers-2.1.0.tgz#5d23cb35561dd85dc67fb8482309b47d53cce9a7" 3237 | dependencies: 3238 | css "~1.0.8" 3239 | promise "~2.0" 3240 | uglify-js "~2.2.5" 3241 | 3242 | tty-browserify@0.0.1: 3243 | version "0.0.1" 3244 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" 3245 | 3246 | typedarray@^0.0.6, typedarray@~0.0.5: 3247 | version "0.0.6" 3248 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 3249 | 3250 | uglify-js@^2.4.19, uglify-js@^2.7.0: 3251 | version "2.8.29" 3252 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" 3253 | dependencies: 3254 | source-map "~0.5.1" 3255 | yargs "~3.10.0" 3256 | optionalDependencies: 3257 | uglify-to-browserify "~1.0.0" 3258 | 3259 | uglify-js@^3.0.5: 3260 | version "3.4.9" 3261 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" 3262 | dependencies: 3263 | commander "~2.17.1" 3264 | source-map "~0.6.1" 3265 | 3266 | uglify-js@~2.2.5: 3267 | version "2.2.5" 3268 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.2.5.tgz#a6e02a70d839792b9780488b7b8b184c095c99c7" 3269 | dependencies: 3270 | optimist "~0.3.5" 3271 | source-map "~0.1.7" 3272 | 3273 | uglify-to-browserify@~1.0.0: 3274 | version "1.0.2" 3275 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 3276 | 3277 | umd@^3.0.0: 3278 | version "3.0.1" 3279 | resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" 3280 | 3281 | unc-path-regex@^0.1.2: 3282 | version "0.1.2" 3283 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 3284 | 3285 | union-value@^1.0.0: 3286 | version "1.0.0" 3287 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 3288 | dependencies: 3289 | arr-union "^3.1.0" 3290 | get-value "^2.0.6" 3291 | is-extendable "^0.1.1" 3292 | set-value "^0.4.3" 3293 | 3294 | unique-stream@^1.0.0: 3295 | version "1.0.0" 3296 | resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" 3297 | integrity sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs= 3298 | 3299 | unpipe@~1.0.0: 3300 | version "1.0.0" 3301 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 3302 | 3303 | unset-value@^1.0.0: 3304 | version "1.0.0" 3305 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 3306 | dependencies: 3307 | has-value "^0.3.1" 3308 | isobject "^3.0.0" 3309 | 3310 | urix@^0.1.0: 3311 | version "0.1.0" 3312 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 3313 | 3314 | url@~0.11.0: 3315 | version "0.11.0" 3316 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 3317 | dependencies: 3318 | punycode "1.3.2" 3319 | querystring "0.2.0" 3320 | 3321 | use@^2.0.0: 3322 | version "2.0.2" 3323 | resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" 3324 | dependencies: 3325 | define-property "^0.2.5" 3326 | isobject "^3.0.0" 3327 | lazy-cache "^2.0.2" 3328 | 3329 | user-home@^1.1.1: 3330 | version "1.1.1" 3331 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 3332 | integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= 3333 | 3334 | util-deprecate@~1.0.1: 3335 | version "1.0.2" 3336 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3337 | 3338 | util@0.10.3, util@~0.10.1: 3339 | version "0.10.3" 3340 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 3341 | dependencies: 3342 | inherits "2.0.1" 3343 | 3344 | utils-merge@1.0.1: 3345 | version "1.0.1" 3346 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 3347 | 3348 | v8flags@^2.0.2: 3349 | version "2.1.1" 3350 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 3351 | integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= 3352 | dependencies: 3353 | user-home "^1.1.1" 3354 | 3355 | vinyl-buffer@^1.0.1: 3356 | version "1.0.1" 3357 | resolved "https://registry.yarnpkg.com/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz#96c1a3479b8c5392542c612029013b5b27f88bbf" 3358 | dependencies: 3359 | bl "^1.2.1" 3360 | through2 "^2.0.3" 3361 | 3362 | vinyl-fs@^0.3.0: 3363 | version "0.3.14" 3364 | resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" 3365 | integrity sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY= 3366 | dependencies: 3367 | defaults "^1.0.0" 3368 | glob-stream "^3.1.5" 3369 | glob-watcher "^0.0.6" 3370 | graceful-fs "^3.0.0" 3371 | mkdirp "^0.5.0" 3372 | strip-bom "^1.0.0" 3373 | through2 "^0.6.1" 3374 | vinyl "^0.4.0" 3375 | 3376 | vinyl-source-stream@^2.0.0: 3377 | version "2.0.0" 3378 | resolved "https://registry.yarnpkg.com/vinyl-source-stream/-/vinyl-source-stream-2.0.0.tgz#f38a5afb9dd1e93b65d550469ac6182ac4f54b8e" 3379 | dependencies: 3380 | through2 "^2.0.3" 3381 | vinyl "^2.1.0" 3382 | 3383 | vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1: 3384 | version "0.2.1" 3385 | resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" 3386 | dependencies: 3387 | source-map "^0.5.1" 3388 | 3389 | vinyl@^0.4.0: 3390 | version "0.4.6" 3391 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" 3392 | integrity sha1-LzVsh6VQolVGHza76ypbqL94SEc= 3393 | dependencies: 3394 | clone "^0.2.0" 3395 | clone-stats "^0.0.1" 3396 | 3397 | vinyl@^0.5.0: 3398 | version "0.5.3" 3399 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" 3400 | dependencies: 3401 | clone "^1.0.0" 3402 | clone-stats "^0.0.1" 3403 | replace-ext "0.0.1" 3404 | 3405 | vinyl@^2.1.0: 3406 | version "2.2.0" 3407 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" 3408 | dependencies: 3409 | clone "^2.1.1" 3410 | clone-buffer "^1.0.0" 3411 | clone-stats "^1.0.0" 3412 | cloneable-readable "^1.0.0" 3413 | remove-trailing-separator "^1.0.1" 3414 | replace-ext "^1.0.0" 3415 | 3416 | vm-browserify@^1.0.0: 3417 | version "1.1.0" 3418 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" 3419 | 3420 | void-elements@~2.0.1: 3421 | version "2.0.1" 3422 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" 3423 | 3424 | websocket-driver@>=0.5.1: 3425 | version "0.7.0" 3426 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" 3427 | dependencies: 3428 | http-parser-js ">=0.4.0" 3429 | websocket-extensions ">=0.1.1" 3430 | 3431 | websocket-extensions@>=0.1.1: 3432 | version "0.1.3" 3433 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" 3434 | 3435 | when@^3.7.7: 3436 | version "3.7.8" 3437 | resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" 3438 | 3439 | which@^1.2.14: 3440 | version "1.3.0" 3441 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 3442 | dependencies: 3443 | isexe "^2.0.0" 3444 | 3445 | window-size@0.1.0: 3446 | version "0.1.0" 3447 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 3448 | 3449 | with@~4.0.0: 3450 | version "4.0.3" 3451 | resolved "https://registry.yarnpkg.com/with/-/with-4.0.3.tgz#eefd154e9e79d2c8d3417b647a8f14d9fecce14e" 3452 | dependencies: 3453 | acorn "^1.0.1" 3454 | acorn-globals "^1.0.3" 3455 | 3456 | wordwrap@0.0.2: 3457 | version "0.0.2" 3458 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 3459 | 3460 | wordwrap@~0.0.2: 3461 | version "0.0.3" 3462 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 3463 | 3464 | wrappy@1: 3465 | version "1.0.2" 3466 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3467 | 3468 | "xtend@>=4.0.0 <4.1.0-0": 3469 | version "4.0.2" 3470 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 3471 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 3472 | 3473 | xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: 3474 | version "4.0.1" 3475 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 3476 | 3477 | yargs@~3.10.0: 3478 | version "3.10.0" 3479 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 3480 | dependencies: 3481 | camelcase "^1.0.2" 3482 | cliui "^2.1.0" 3483 | decamelize "^1.0.0" 3484 | window-size "0.1.0" 3485 | --------------------------------------------------------------------------------