Merge branch 'develop'

This commit is contained in:
Oliver Davies 2017-06-18 19:41:10 +01:00
commit a5a82c04ff
29 changed files with 175 additions and 152 deletions

View file

@ -1,3 +0,0 @@
{
"directory": "vendor/bower_components"
}

View file

@ -3,7 +3,7 @@ api: '1'
sculpin: sculpin:
theme: theme:
build: build:
bower: yes bower: no
npm: no npm: no
type: gulp type: gulp
yarn: yes yarn: yes

View file

@ -1,4 +1,4 @@
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
.post-pager .post-pager
clear: both clear: both

View file

@ -1,4 +1,4 @@
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
.page--blog__list .page--blog__list
ul.posts ul.posts

View file

@ -1,5 +1,5 @@
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/variables'
@import 'mixins' @import 'mixins'
.experience-item .experience-item

View file

@ -1,4 +1,4 @@
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap'
@import 'base' @import 'base'
@import 'mixins' @import 'mixins'

View file

@ -1,4 +1,4 @@
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/variables'
@import 'mixins' @import 'mixins'
.project-company .project-company

View file

@ -1,4 +1,4 @@
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/variables'
@import 'mixins' @import 'mixins'
.talk-full h1 .talk-full h1

View file

@ -1,5 +1,5 @@
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' @import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/variables'
@import 'mixins' @import 'mixins'
.testimonial .testimonial

View file

@ -1,9 +0,0 @@
{
"name": "oliverdavies.uk",
"devDependencies": {
"bootstrap-sass": "~3.3.6",
"font-awesome": "fontawesome#~4.5.0",
"jquery2": "^2.0.0",
"prism": "prismjs#^1.6.0"
}
}

View file

@ -6,7 +6,7 @@ Feature: Home
Scenario: Scenario:
Given I am on the homepage Given I am on the homepage
Then the response status code should be 200 Then the response status code should be 200
And I should see "Im a Web Developer and System Administrator based in Wales, UK." And I should see "a Web Developer and System Administrator based in Wales, UK."
And the active menu link should be "About" And the active menu link should be "About"
And the page title should be "Web Developer, System Administrator - PHP, Drupal, Symfony, Linux | Oliver Davies" And the page title should be "Web Developer, System Administrator - PHP, Drupal, Symfony, Linux | Oliver Davies"
And the page title should not be "About | Oliver Davies" And the page title should not be "About | Oliver Davies"

View file

@ -5,7 +5,6 @@ var plugins = require('gulp-load-plugins')();
var del = require('del'); var del = require('del');
var config = { var config = {
bowerDir: 'vendor/bower_components',
fontsDir: 'source/assets/fonts', fontsDir: 'source/assets/fonts',
js: { js: {
sourceDir: 'assets/js', sourceDir: 'assets/js',
@ -46,14 +45,14 @@ app.sass = function (sourceFiles, filename) {
gulp.task('styles', function () { gulp.task('styles', function () {
app.sass([ app.sass([
config.bowerDir + '/font-awesome/css/font-awesome.css', 'node_modules/font-awesome/css/font-awesome.css',
config.sass.sourceDir + '/main.sass' config.sass.sourceDir + '/main.sass'
], 'main.css'); ], 'main.css');
app.sass(config.sass.sourceDir + '/about.sass', 'about.css'); app.sass(config.sass.sourceDir + '/about.sass', 'about.css');
app.sass(config.sass.sourceDir + '/blog.sass', 'blog.css'); app.sass(config.sass.sourceDir + '/blog.sass', 'blog.css');
app.sass([ app.sass([
config.bowerDir + '/prism/themes/prism-twilight.css', 'node_modules/prism/themes/prism-twilight.css',
config.sass.sourceDir + '/blog-post.sass' config.sass.sourceDir + '/blog-post.sass'
], 'blog-post.css'); ], 'blog-post.css');
app.sass(config.sass.sourceDir + '/experience.sass', 'experience.css'); app.sass(config.sass.sourceDir + '/experience.sass', 'experience.css');
@ -65,10 +64,10 @@ gulp.task('styles', function () {
gulp.task('scripts', function () { gulp.task('scripts', function () {
return gulp.src([ return gulp.src([
config.bowerDir + '/jquery2/jquery.js', 'node_modules/jquery/dist/jquery.js',
config.bowerDir + '/bootstrap-sass/assets/javascripts/bootstrap.js', 'node_modules/bootstrap-sass/assets/javascripts/bootstrap.js',
config.bowerDir + '/prism/prism.js', 'node_modules/prism/prism.js',
config.bowerDir + '/prism/components/prism-{apacheconf,bash,css,diff,ini,json,nginx,php,sass,scss,sql,less,twig,xml,yaml}.js', 'node_modules/prism/components/prism-{apacheconf,bash,css,diff,ini,json,nginx,php,sass,scss,sql,less,twig,xml,yaml}.js',
config.js.sourceDir + config.js.pattern config.js.sourceDir + config.js.pattern
]) ])
.pipe(plugins.plumber()) .pipe(plugins.plumber())
@ -80,7 +79,7 @@ gulp.task('scripts', function () {
}); });
gulp.task('fonts', function () { gulp.task('fonts', function () {
return gulp.src(config.bowerDir + "/font-awesome/fonts/*") return gulp.src('node_modules/font-awesome/fonts/*')
.pipe(gulp.dest(config.fontsDir)); .pipe(gulp.dest(config.fontsDir));
}); });

View file

@ -21,5 +21,11 @@
"gulp-sourcemaps": "^1.6.0", "gulp-sourcemaps": "^1.6.0",
"gulp-uglify": "^1.5.3", "gulp-uglify": "^1.5.3",
"gulp-util": "^3.0.7" "gulp-util": "^3.0.7"
},
"dependencies": {
"bootstrap-sass": "^3.3.7",
"font-awesome": "^4.7.0",
"jquery.2": "^1.0.0",
"prismjs": "^1.6.0"
} }
} }

View file

@ -1,7 +1,5 @@
<div class="availability panel panel-default"> <div class="availability panel panel-default">
<div class="panel-heading"> <div class="panel-heading">Availability</div>
Availability
</div>
<div class="panel-body"> <div class="panel-body">
{% for key, availability in site.availability %} {% for key, availability in site.availability %}

View file

@ -1,5 +0,0 @@
{% if experience.description %}
<div class="experience-item-description">
{{ experience.description|markdown }}
</div>
{% endif %}

View file

@ -1,16 +0,0 @@
{% set classes = [
'experience-item',
company.logo ? 'has-logo',
] %}
<div class="{{ classes|join(' ')|trim }}">
{{ include('experience/logo') }}
<div class="experience-item-inner">
<h2>{{ company.name }}</h2>
{{ include('experience/website') }}
{{ include('experience/role') }}
{{ include('experience/description') }}
</div>{# /.inner #}
</div>

View file

@ -1,5 +0,0 @@
{% if company.logo %}
<div class="experience-item-logo">
<img src="{{ site.images_url }}/assets/images/experience/{{ company.logo }}" alt="{{ company.name }} logo">
</div>
{% endif %}

View file

@ -1,4 +0,0 @@
<div class="experience-item-role">
{{- experience.role ~ ' from ' ~ experience.start ~ ' to ' ~ experience.end|default('Present') -}}
{%- if experience.location %} ({{ experience.location }}){% endif %}.
</div>

View file

@ -1,5 +0,0 @@
{% if company.url -%}
<a class="experience-item-website" href="{{ company.url }}">
{{- company.url -}}
</a>
{%- endif %}

View file

@ -1,13 +0,0 @@
<footer class="container">
<p class="copyright">
&copy; 2010-{{ 'now'|date('Y') }} {{ site.title }}. Built with <a href="https://sculpin.io">Sculpin</a>.
</p>
{% include 'meetups' %}
</footer>
<script src="{{ site.url }}/assets/js/site.js"></script>
{% if site.google_analytics_tracking_id %}
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{{ site.google_analytics_tracking_id }}', 'auto'); ga('send', 'pageview');</script>
{% endif %}

View file

@ -1,9 +0,0 @@
{% block sidebar_wrapper %}
<div class="col-md-3">
{% block sidebar %}
{% include 'badges' %}
{% include 'availability' %}
{% include 'posts/latest' %}
{% endblock %}
</div>
{% endblock %}

View file

@ -1,11 +0,0 @@
<div class="talk-events">
<h2>Events</h2>
{% set events = [] %}
{% for event in page.events %}
{% set event = event|merge({ talk: page })|merge(site.events[event.id]) %}
{% set events = events|merge([event]) %}
{% endfor %}
{% include "talks-table" with { events: events, hide_talk: true } %}
</div>

View file

@ -1,8 +0,0 @@
{% if page.slides.embed %}
<div class="talk-slides">
<h2>Slides</h2>
<div class="presentation">
{{ page.slides.embed|raw }}
</div>
</div>
{% endif %}

View file

@ -1,8 +0,0 @@
{% if page.video.embed %}
<div class="talk-video">
<h2>Video</h2>
<div class="embed-container">
{{ page.video.embed|raw }}
</div>
</div>
{% endif %}

View file

@ -1,7 +0,0 @@
<title>{% spaceless %}
{% if page.url == '/.' %}
{{ site.subtitle }} | {{ site.title }}
{% else %}
{{ page.title }} | {{ site.title }}
{% endif %}
{% endspaceless %}</title>

View file

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html class="no-js" lang="en-GB"> <html class="no-js" lang="en-GB">
<head> <head>
{% include 'title' %} <title>{% if page.url == '/.' %}{{ site.subtitle }} | {{ site.title }}{% else %}{{ page.title }} | {{ site.title }}{% endif %}</title>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
@ -24,7 +24,6 @@
<link rel="icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}"> <link rel="icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
{% endfor %} {% endfor %}
</head> </head>
<body class="{{ page.blocks.body_classes }}"> <body class="{{ page.blocks.body_classes }}">
{% include 'nav' %} {% include 'nav' %}
@ -36,11 +35,32 @@
{% block content_bottom %}{% endblock %} {% block content_bottom %}{% endblock %}
</main> </main>
{% include 'sidebar' %} {% block sidebar_wrapper %}
<div class="col-md-3">
{% block sidebar %}
{% include 'badges' %}
{% include 'availability' %}
{% include 'posts/latest' %}
{% endblock %}
</div>
{% endblock %}
</div>{# .row #} </div>{# .row #}
</div>{# .container #} </div>{# .container #}
{% include 'footer' %} <footer class="container">
<p class="copyright">
&copy; 2010-{{ 'now'|date('Y') }} {{ site.title }}. Built with <a href="https://sculpin.io">Sculpin</a>.
</p>
{% include 'meetups' %}
</footer>
<script src="{{ site.url }}/assets/js/site.js"></script>
{% if site.google_analytics_tracking_id %}
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{{ site.google_analytics_tracking_id }}', 'auto'); ga('send', 'pageview');</script>
{% endif %}
{% block scripts '' %} {% block scripts '' %}
</body> </body>

View file

@ -11,9 +11,35 @@
{% block content %}{% endblock %} {% block content %}{% endblock %}
</div> </div>
{% include 'talk/slides' %} {% if page.slides.embed %}
{% include 'talk/video' %} <div class="talk-slides">
{% include 'talk/events' %} <h2>Slides</h2>
<div class="presentation">
{{ page.slides.embed|raw }}
</div>{# .presentation #}
</div>{# .talk-slides #}
{% endif %}
{% if page.video.embed %}
<div class="talk-video">
<h2>Video</h2>
<div class="embed-container">
{{ page.video.embed|raw }}
</div>
</div>{# .talk-video #}
{% endif %}
<div class="talk-events">
<h2>Events</h2>
{% set events = [] %}
{% for event in page.events %}
{% set event = event|merge({ talk: page })|merge(site.events[event.id]) %}
{% set events = events|merge([event]) %}
{% endfor %}
{% include "talks-table" with { events: events, hide_talk: true } %}
</div>{# .talk-events #}
{% endblock %} {% endblock %}
{% block stylesheets %} {% block stylesheets %}

View file

@ -103,10 +103,37 @@ use: [posts]
<h1>Experience</h1> <h1>Experience</h1>
{% for experience in page.experiences %} {% for experience in page.experiences %}
{% include "experience/item" with { {% set company = site.companies[experience.company] %}
experience: experience,
company: site.companies[experience.company] <div class="experience-item{% if company.logo %} has-logo{% endif %}">
} %} {% if company.logo %}
<div class="experience-item-logo">
<img src="{{ site.images_url }}/assets/images/experience/{{ company.logo }}" alt="{{ company.name }} logo">
</div>
{% endif %}
<div class="experience-item-inner">
<h2>{{ company.name }}</h2>
{% if company.url -%}
<a class="experience-item-website" href="{{ company.url }}">
{{- company.url -}}
</a>
{%- endif %}
<div class="experience-item-role">
{{- experience.role }} from {{ experience.start }} to {{ experience.end|default('Present') -}}
{%- if experience.location %} ({{ experience.location }}){% endif %}.
</div>
{% if experience.description %}
<div class="experience-item-description">
{{ experience.description|markdown }}
</div>
{% endif %}
</div>{# /.inner #}
</div>
{% endfor %} {% endfor %}
{% endblock %} {% endblock %}

View file

@ -188,6 +188,10 @@ boom@2.x.x:
dependencies: dependencies:
hoek "2.x.x" hoek "2.x.x"
bootstrap-sass@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498"
bower@^1.7.7: bower@^1.7.7:
version "1.7.9" version "1.7.9"
resolved "https://registry.yarnpkg.com/bower/-/bower-1.7.9.tgz#b7296c2393e0d75edaa6ca39648132dd255812b0" resolved "https://registry.yarnpkg.com/bower/-/bower-1.7.9.tgz#b7296c2393e0d75edaa6ca39648132dd255812b0"
@ -296,6 +300,14 @@ clean-css@^4.0.4:
dependencies: dependencies:
source-map "0.5.x" source-map "0.5.x"
clipboard@^1.5.5:
version "1.7.1"
resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-1.7.1.tgz#360d6d6946e99a7a1fef395e42ba92b5e9b5a16b"
dependencies:
good-listener "^1.2.2"
select "^1.1.2"
tiny-emitter "^2.0.0"
cliui@^2.1.0: cliui@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
@ -473,6 +485,10 @@ delayed-stream@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
delegate@^3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.1.3.tgz#9a8251a777d7025faa55737bc3b071742127a9fd"
delegates@^1.0.0: delegates@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@ -679,6 +695,10 @@ flagged-respawn@^0.3.2:
version "0.3.2" version "0.3.2"
resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5"
font-awesome@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
for-in@^0.1.5: for-in@^0.1.5:
version "0.1.6" version "0.1.6"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
@ -920,6 +940,12 @@ glogg@^1.0.0:
dependencies: dependencies:
sparkles "^1.0.0" sparkles "^1.0.0"
good-listener@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
dependencies:
delegate "^3.1.2"
graceful-fs@^3.0.0: graceful-fs@^3.0.0:
version "3.0.11" version "3.0.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
@ -1402,6 +1428,16 @@ jodid25519@^1.0.0:
dependencies: dependencies:
jsbn "~0.1.0" jsbn "~0.1.0"
jquery.2@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/jquery.2/-/jquery.2-1.0.0.tgz#a8995f96fb804c335d08b90a57ec47db0faae6f8"
dependencies:
jquery "^2.0"
jquery@^2.0:
version "2.2.4"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02"
js-base64@^2.1.9: js-base64@^2.1.9:
version "2.1.9" version "2.1.9"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
@ -2027,6 +2063,12 @@ pretty-hrtime@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.2.tgz#70ca96f4d0628a443b918758f79416a9a7bc9fa8" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.2.tgz#70ca96f4d0628a443b918758f79416a9a7bc9fa8"
prismjs@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.6.0.tgz#118d95fb7a66dba2272e343b345f5236659db365"
optionalDependencies:
clipboard "^1.5.5"
process-nextick-args@~1.0.6: process-nextick-args@~1.0.6:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
@ -2254,6 +2296,10 @@ sass-graph@^2.1.1:
lodash "^4.0.0" lodash "^4.0.0"
yargs "^4.7.1" yargs "^4.7.1"
select@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
semver@^4.1.0: semver@^4.1.0:
version "4.3.6" version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
@ -2493,6 +2539,10 @@ time-stamp@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151"
tiny-emitter@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.0.tgz#bad327adb1804b42a231afa741532bd884cd09ad"
tough-cookie@~2.3.0: tough-cookie@~2.3.0:
version "2.3.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd"