diff options
236 files changed, 8359 insertions, 8395 deletions
diff --git a/.dev/.sasslintrc b/.dev/.sasslintrc deleted file mode 100644 index 47c3145d..00000000 --- a/.dev/.sasslintrc +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | options: | ||
2 | max-warnings: 0 | ||
3 | rules: | ||
4 | property-sort-order: | ||
5 | - 0 | ||
6 | # Sort order rule does not work with CSS variables: https://github.com/sasstools/sass-lint/issues/1161 | ||
7 | # - 1 | ||
8 | # - | ||
9 | # order: 'concentric' | ||
10 | no-important: | ||
11 | - 0 | ||
12 | no-vendor-prefixes: | ||
13 | - 0 # this will be fixed with v2: see https://github.com/sasstools/sass-lint/pull/1137 | ||
14 | nesting-depth: | ||
15 | - 1 | ||
16 | - | ||
17 | max-depth: 4 | ||
diff --git a/.dev/.stylelintrc.js b/.dev/.stylelintrc.js new file mode 100644 index 00000000..a754e33b --- /dev/null +++ b/.dev/.stylelintrc.js | |||
@@ -0,0 +1,15 @@ | |||
1 | module.exports = { | ||
2 | extends: 'stylelint-config-standard', | ||
3 | plugins: [ | ||
4 | "stylelint-scss" | ||
5 | ], | ||
6 | rules: { | ||
7 | "indentation": [2], | ||
8 | "number-leading-zero": null, | ||
9 | // Replace CSS @ with SASS ones | ||
10 | "at-rule-no-unknown": null, | ||
11 | "scss/at-rule-no-unknown": true, | ||
12 | // not compatible with SASS apparently | ||
13 | "no-descending-specificity": null | ||
14 | }, | ||
15 | } | ||
diff --git a/.github/mailmap b/.github/mailmap index 366946e8..15a25e43 100644 --- a/.github/mailmap +++ b/.github/mailmap | |||
@@ -3,6 +3,7 @@ ArthurHoaro <arthur@hoa.ro> Arthur | |||
3 | Florian Eula <eula.florian@gmail.com> feula | 3 | Florian Eula <eula.florian@gmail.com> feula |
4 | Florian Eula <eula.florian@gmail.com> <mr.pikzen@gmail.com> | 4 | Florian Eula <eula.florian@gmail.com> <mr.pikzen@gmail.com> |
5 | Immánuel Fodor <immanuelfactor+github@gmail.com> | 5 | Immánuel Fodor <immanuelfactor+github@gmail.com> |
6 | Immánuel Fodor <immanuelfactor+github@gmail.com> Immánuel! <21174107+immanuelfodor@users.noreply.github.com> | ||
6 | kalvn <kalvnthereal@gmail.com> <kalvn@users.noreply.github.com> | 7 | kalvn <kalvnthereal@gmail.com> <kalvn@users.noreply.github.com> |
7 | kalvn <kalvnthereal@gmail.com> <kalvn@pm.me> | 8 | kalvn <kalvnthereal@gmail.com> <kalvn@pm.me> |
8 | Neros <contact@neros.fr> <NerosTie@users.noreply.github.com> | 9 | Neros <contact@neros.fr> <NerosTie@users.noreply.github.com> |
@@ -7,31 +7,20 @@ RewriteEngine On | |||
7 | RewriteRule ^(.git|doxygen|vendor) - [F] | 7 | RewriteRule ^(.git|doxygen|vendor) - [F] |
8 | 8 | ||
9 | # Forward the "Authorization" HTTP header | 9 | # Forward the "Authorization" HTTP header |
10 | # fixes JWT token not correctly forwarded on some Apache/FastCGI setups | ||
10 | RewriteCond %{HTTP:Authorization} ^(.*) | 11 | RewriteCond %{HTTP:Authorization} ^(.*) |
11 | RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] | 12 | RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] |
13 | # Alternative (if the 2 lines above don't work) | ||
14 | # SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 | ||
12 | 15 | ||
13 | # REST API | 16 | # REST API |
17 | # Ionos Hosting needs RewriteBase / | ||
18 | # RewriteBase / | ||
14 | RewriteCond %{REQUEST_FILENAME} !-f | 19 | RewriteCond %{REQUEST_FILENAME} !-f |
15 | RewriteCond %{REQUEST_FILENAME} !-d | 20 | RewriteCond %{REQUEST_FILENAME} !-d |
16 | RewriteRule ^ index.php [QSA,L] | 21 | RewriteRule ^ index.php [QSA,L] |
17 | 22 | ||
18 | <Limit GET POST PUT DELETE OPTIONS> | 23 | <LimitExcept GET POST PUT DELETE PATCH OPTIONS> |
19 | <IfModule version_module> | ||
20 | <IfVersion >= 2.4> | ||
21 | Require all granted | ||
22 | </IfVersion> | ||
23 | <IfVersion < 2.4> | ||
24 | Allow from all | ||
25 | Deny from none | ||
26 | </IfVersion> | ||
27 | </IfModule> | ||
28 | |||
29 | <IfModule !version_module> | ||
30 | Require all granted | ||
31 | </IfModule> | ||
32 | </Limit> | ||
33 | |||
34 | <LimitExcept GET POST PUT DELETE OPTIONS> | ||
35 | <IfModule version_module> | 24 | <IfModule version_module> |
36 | <IfVersion >= 2.4> | 25 | <IfVersion >= 2.4> |
37 | Require all denied | 26 | Require all denied |
diff --git a/.travis.yml b/.travis.yml index d04a45d1..d7460947 100644 --- a/.travis.yml +++ b/.travis.yml | |||
@@ -2,6 +2,15 @@ dist: bionic | |||
2 | 2 | ||
3 | matrix: | 3 | matrix: |
4 | include: | 4 | include: |
5 | # jobs for each supported php version | ||
6 | - language: php | ||
7 | php: nightly # PHP 8.0 | ||
8 | install: | ||
9 | - composer self-update --2 | ||
10 | - composer update --ignore-platform-req=php | ||
11 | - composer remove --dev --ignore-platform-req=php phpunit/phpunit | ||
12 | - composer require --dev --ignore-platform-req=php phpunit/php-text-template ^2.0 | ||
13 | - composer require --dev --ignore-platform-req=php phpunit/phpunit ^9.0 | ||
5 | - language: php | 14 | - language: php |
6 | php: 7.4 | 15 | php: 7.4 |
7 | - language: php | 16 | - language: php |
@@ -10,23 +19,22 @@ matrix: | |||
10 | php: 7.2 | 19 | php: 7.2 |
11 | - language: php | 20 | - language: php |
12 | php: 7.1 | 21 | php: 7.1 |
22 | # jobs for frontend builds | ||
13 | - language: node_js | 23 | - language: node_js |
14 | node_js: 8 | 24 | node_js: 10 |
15 | cache: | 25 | cache: |
16 | yarn: true | 26 | yarn: true |
17 | directories: | 27 | directories: |
18 | - $HOME/.cache/yarn | 28 | - $HOME/.cache/yarn |
19 | |||
20 | install: | 29 | install: |
21 | - yarn install | 30 | - yarn install |
22 | |||
23 | before_script: | 31 | before_script: |
24 | - PATH=${PATH//:\.\/node_modules\/\.bin/} | 32 | - PATH=${PATH//:\.\/node_modules\/\.bin/} |
25 | |||
26 | script: | 33 | script: |
27 | - yarn run build # Just to be sure that the build isn't broken | 34 | - yarn run build # verify successful frontend builds |
28 | - make eslint | 35 | - make eslint # javascript static analysis |
29 | - make sasslint | 36 | - make sasslint # linter for SASS syntax |
37 | # jobs for documentation builds | ||
30 | - language: python | 38 | - language: python |
31 | python: 3.6 | 39 | python: 3.6 |
32 | cache: | 40 | cache: |
@@ -42,7 +50,9 @@ cache: | |||
42 | - $HOME/.composer/cache | 50 | - $HOME/.composer/cache |
43 | 51 | ||
44 | install: | 52 | install: |
45 | - composer install --prefer-dist | 53 | # install/update composer and php dependencies |
54 | - composer config --unset platform && composer config platform.php $TRAVIS_PHP_VERSION | ||
55 | - composer update | ||
46 | 56 | ||
47 | before_script: | 57 | before_script: |
48 | - PATH=${PATH//:\.\/node_modules\/\.bin/} | 58 | - PATH=${PATH//:\.\/node_modules\/\.bin/} |
@@ -1,23 +1,26 @@ | |||
1 | 903 ArthurHoaro <arthur@hoa.ro> | 1 | 991 ArthurHoaro <arthur@hoa.ro> |
2 | 402 VirtualTam <virtualtam@flibidi.net> | 2 | 402 VirtualTam <virtualtam@flibidi.net> |
3 | 250 nodiscc <nodiscc@gmail.com> | 3 | 294 nodiscc <nodiscc@gmail.com> |
4 | 56 Sébastien Sauvage <sebsauvage@sebsauvage.net> | 4 | 56 Sébastien Sauvage <sebsauvage@sebsauvage.net> |
5 | 16 Luce Carević <lcarevic@access42.net> | 5 | 16 Luce Carević <lcarevic@access42.net> |
6 | 15 Florian Eula <eula.florian@gmail.com> | 6 | 15 Florian Eula <eula.florian@gmail.com> |
7 | 13 Emilien Klein <emilien@klein.st> | 7 | 13 Emilien Klein <emilien@klein.st> |
8 | 12 Nicolas Danelon <hi@nicolasmd.com.ar> | 8 | 12 Nicolas Danelon <hi@nicolasmd.com.ar> |
9 | 9 Lucas Cimon <lucas.cimon@gmail.com> | ||
9 | 9 Willi Eggeling <thewilli@gmail.com> | 10 | 9 Willi Eggeling <thewilli@gmail.com> |
10 | 8 Christophe HENRY <christophe.henry@sbgodin.fr> | 11 | 8 Christophe HENRY <christophe.henry@sbgodin.fr> |
11 | 7 Lucas Cimon <lucas.cimon@gmail.com> | ||
12 | 6 B. van Berkum <dev@dotmpe.com> | 12 | 6 B. van Berkum <dev@dotmpe.com> |
13 | 6 Immánuel Fodor <immanuelfactor+github@gmail.com> | ||
14 | 6 Keith Carangelo <mail@kcaran.com> | ||
13 | 6 kalvn <kalvnthereal@gmail.com> | 15 | 6 kalvn <kalvnthereal@gmail.com> |
14 | 6 llune <llune@users.noreply.github.com> | 16 | 6 llune <llune@users.noreply.github.com> |
15 | 5 Mark Schmitz <kramred@gmail.com> | 17 | 5 Mark Schmitz <kramred@gmail.com> |
16 | 5 Sébastien NOBILI <code@pipoprods.org> | 18 | 5 Sébastien NOBILI <code@pipoprods.org> |
19 | 5 dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> | ||
17 | 4 Alexandre Alapetite <alexandre@alapetite.fr> | 20 | 4 Alexandre Alapetite <alexandre@alapetite.fr> |
18 | 4 David Sferruzza <david.sferruzza@gmail.com> | 21 | 4 David Sferruzza <david.sferruzza@gmail.com> |
19 | 4 Immánuel Fodor <immanuelfactor+github@gmail.com> | ||
20 | 3 Agurato <mail.vmonot@gmail.com> | 22 | 3 Agurato <mail.vmonot@gmail.com> |
23 | 3 Christoph Stoettner <christoph.stoettner@stoeps.de> | ||
21 | 3 Teromene <teromene@teromene.fr> | 24 | 3 Teromene <teromene@teromene.fr> |
22 | 2 Alexandre G.-Raymond <alex@ndre.gr> | 25 | 2 Alexandre G.-Raymond <alex@ndre.gr> |
23 | 2 Chris Kuethe <chris.kuethe@gmail.com> | 26 | 2 Chris Kuethe <chris.kuethe@gmail.com> |
@@ -30,7 +33,6 @@ | |||
30 | 2 Qwerty <champlywood@free.fr> | 33 | 2 Qwerty <champlywood@free.fr> |
31 | 2 Stephen Muth <smuth4@gmail.com> | 34 | 2 Stephen Muth <smuth4@gmail.com> |
32 | 2 Timo Van Neerden <fire@lehollandaisvolant.net> | 35 | 2 Timo Van Neerden <fire@lehollandaisvolant.net> |
33 | 2 dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> | ||
34 | 2 flow.gunso <flow.gunso@gmail.com> | 36 | 2 flow.gunso <flow.gunso@gmail.com> |
35 | 2 julienCXX <software@chmodplusx.eu> | 37 | 2 julienCXX <software@chmodplusx.eu> |
36 | 2 philipp-r <philipp-r@users.noreply.github.com> | 38 | 2 philipp-r <philipp-r@users.noreply.github.com> |
@@ -75,4 +77,6 @@ | |||
75 | 1 dimtion <zizou.xena@gmail.com> | 77 | 1 dimtion <zizou.xena@gmail.com> |
76 | 1 durcheinandr <jochen@durcheinandr.de> | 78 | 1 durcheinandr <jochen@durcheinandr.de> |
77 | 1 lapineige <lapineige@users.noreply.github.com> | 79 | 1 lapineige <lapineige@users.noreply.github.com> |
80 | 1 owen bell <66233223+xfnw@users.noreply.github.com> | ||
78 | 1 rfolo9li <50079896+rfolo9li@users.noreply.github.com> | 81 | 1 rfolo9li <50079896+rfolo9li@users.noreply.github.com> |
82 | 1 sprak3000 <sprak3000+github@gmail.com> | ||
diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bae5b48..f1686d67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
@@ -4,19 +4,20 @@ All notable changes to this project will be documented in this file. | |||
4 | The format is based on [Keep a Changelog](http://keepachangelog.com/) | 4 | The format is based on [Keep a Changelog](http://keepachangelog.com/) |
5 | and this project adheres to [Semantic Versioning](http://semver.org/). | 5 | and this project adheres to [Semantic Versioning](http://semver.org/). |
6 | 6 | ||
7 | ## [v0.12.0](https://github.com/shaarli/Shaarli/releases/tag/v0.12.0-beta) - UNRELEASED [beta 2020-08-27] | 7 | ## [v0.12.1]() - UNRELEASED |
8 | 8 | ||
9 | **Save you `data/` folder before updating!** | 9 | ## [v0.12.0](https://github.com/shaarli/Shaarli/releases/tag/v0.12.0) - 2020-10-13 |
10 | 10 | ||
11 | This is a beta version containing major changes, including new URLs for Shaarli and datastore format update. | 11 | **Save you `data/` folder before updating!** |
12 | Be aware that by using a beta version you might encounter bugs, and that 3rd party themes or plugins might not be compatible. | ||
13 | 12 | ||
14 | ### Added | 13 | ### Added |
15 | - Thumbnailer: add soundcloud.com to list of common media domains | 14 | - Thumbnailer: add soundcloud.com to list of common media domains |
16 | - Markdown rendering is now integrated into Shaarli core | 15 | - Markdown rendering is now integrated into Shaarli core |
17 | - Add autofocus on tag cloud filter input | 16 | - Add autofocus on tag cloud filter input |
18 | - Japanese translations | 17 | - Japanese translations |
19 | - Support for local anchor URL (startting with `#`) | 18 | - Japanese translation: add language to admin configuration page |
19 | - Support for PHP 8.0 | ||
20 | - Support for local anchor URL (starting with `#`) | ||
20 | - LDAP authentication | 21 | - LDAP authentication |
21 | - Encapsulated PageCacheManager | 22 | - Encapsulated PageCacheManager |
22 | - Docs: | 23 | - Docs: |
@@ -24,18 +25,24 @@ Be aware that by using a beta version you might encounter bugs, and that 3rd par | |||
24 | - section about mkdocs | 25 | - section about mkdocs |
25 | - Ulauncher extension | 26 | - Ulauncher extension |
26 | - CI: run against PHP 7.4 | 27 | - CI: run against PHP 7.4 |
28 | - Added $links_per_page variable to template and display on default | ||
29 | - Inject BookmarkServiceInterface in plugins data | ||
30 | - Add manual configuration for root URL | ||
31 | - Added PATCH to the allowed Apache request methods. | ||
32 | - REST API: compatibility with ionos Apache's headers | ||
27 | 33 | ||
28 | ### Changed | 34 | ### Changed |
29 | - Introduce Bookmark object and Service layer | 35 | - Introduce Bookmark object and Service layer |
30 | - Save bookmark as objects in the datastore | 36 | - Save bookmark as objects in the datastore |
31 | - Handle bookmark as objects across the whole codebase (except templates and plugins) | 37 | - Handle bookmark as objects across the whole codebase (except templates and plugins) |
32 | - Process all Shaarli page through Slim controller, with proper URL rewriting (see #1516) | 38 | - Process all Shaarli page through Slim controller, with proper URL rewriting (see #1516) |
39 | - Docs: the entire documentation has been reviewed, updated and improved, thanks to @nodiscc! | ||
33 | - ATOM feed: use instance name as author name instead of URL | 40 | - ATOM feed: use instance name as author name instead of URL |
34 | - Updated French translation | 41 | - Updated French translation |
35 | - Docs: | 42 | - Default colors plugin: generate CSS file during initialization |
36 | - Troubleshooting page rewritten | 43 | - Improve default bookmarks after install |
37 | - Updated unit tests page | 44 | - Upgrade all front end dependencies and webpack build |
38 | - Updated Server security page | 45 | - Default theme: Make tag cloud/list views buttons more obvious |
39 | 46 | ||
40 | ### Fixed | 47 | ### Fixed |
41 | - Undefined index: thumbnail in daily page | 48 | - Undefined index: thumbnail in daily page |
@@ -54,15 +61,20 @@ Be aware that by using a beta version you might encounter bugs, and that 3rd par | |||
54 | - Division by zero in tag cloud | 61 | - Division by zero in tag cloud |
55 | - CI: deprecated linux distribution and sudo directive | 62 | - CI: deprecated linux distribution and sudo directive |
56 | - Docker build: gcc is no longer included in python alpine image | 63 | - Docker build: gcc is no longer included in python alpine image |
64 | - Default template: display pin button in mobile view | ||
65 | - Pinned bookmarks are not longer displayed first in ATOM/RSS feeds | ||
57 | - Docs: | 66 | - Docs: |
58 | - Outdated Docker documentation for stable branch | 67 | - Outdated Docker documentation for stable branch |
59 | - Outdated links | 68 | - Outdated links |
60 | - Plugin description in meta files | 69 | - Plugin description in meta files |
70 | - docker-compose.yml: pin traefik image to 1.7-alpine | ||
61 | 71 | ||
62 | ### Removed | 72 | ### Removed |
63 | - Markdown plugin | 73 | - Markdown plugin |
64 | - Docs: | 74 | - Docs: |
65 | - emojione & twemoji removed | 75 | - emojione & twemoji removed |
76 | - Makefile: remove static_analysis_summary from all: target | ||
77 | - doc/Makefile: remove references to composer update | ||
66 | 78 | ||
67 | ## [v0.11.1](https://github.com/shaarli/Shaarli/releases/tag/v0.11.1) - 2019-08-03 | 79 | ## [v0.11.1](https://github.com/shaarli/Shaarli/releases/tag/v0.11.1) - 2019-08-03 |
68 | 80 | ||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | BIN = vendor/bin | 4 | BIN = vendor/bin |
5 | 5 | ||
6 | all: static_analysis_summary check_permissions test | 6 | all: check_permissions test |
7 | 7 | ||
8 | ## | 8 | ## |
9 | # Docker test adapter | 9 | # Docker test adapter |
@@ -85,6 +85,10 @@ all_tests: test locale_test_de_DE locale_test_en_US locale_test_fr_FR | |||
85 | @# --text doesn't work with phpunit 4.* (v5 requires PHP 5.6) | 85 | @# --text doesn't work with phpunit 4.* (v5 requires PHP 5.6) |
86 | @#$(BIN)/phpcov merge --text coverage/txt coverage | 86 | @#$(BIN)/phpcov merge --text coverage/txt coverage |
87 | 87 | ||
88 | ### download 3rd-party PHP libraries, including dev dependencies | ||
89 | composer_dependencies_dev: clean | ||
90 | composer install --prefer-dist | ||
91 | |||
88 | ## | 92 | ## |
89 | # Custom release archive generation | 93 | # Custom release archive generation |
90 | # | 94 | # |
@@ -174,4 +178,4 @@ eslint: | |||
174 | 178 | ||
175 | ### Run CSSLint check against Shaarli's SCSS files | 179 | ### Run CSSLint check against Shaarli's SCSS files |
176 | sasslint: | 180 | sasslint: |
177 | @yarn run sass-lint -c .dev/.sasslintrc 'assets/default/scss/*.scss' -v -q | 181 | @yarn run stylelint --config .dev/.stylelintrc.js 'assets/default/scss/*.scss' |
@@ -6,13 +6,13 @@ _Do you want to share the links you discover?_ | |||
6 | _Shaarli is a minimalist link sharing service that you can install on your own server._ | 6 | _Shaarli is a minimalist link sharing service that you can install on your own server._ |
7 | _It is designed to be personal (single-user), fast and handy._ | 7 | _It is designed to be personal (single-user), fast and handy._ |
8 | 8 | ||
9 | [![](https://img.shields.io/badge/stable-v0.10.4-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.10.4) | 9 | [![](https://img.shields.io/badge/stable-v0.11.1-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.11.1) |
10 | [![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli) | 10 | [![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli) |
11 | • | 11 | • |
12 | [![](https://img.shields.io/badge/latest-v0.11.1-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.11.1) | 12 | [![](https://img.shields.io/badge/latest-v0.12.0-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.12.0) |
13 | [![](https://img.shields.io/travis/shaarli/Shaarli/latest.svg?label=latest)](https://travis-ci.org/shaarli/Shaarli) | 13 | [![](https://img.shields.io/travis/shaarli/Shaarli/latest.svg?label=latest)](https://travis-ci.org/shaarli/Shaarli) |
14 | • | 14 | • |
15 | [![](https://img.shields.io/badge/master-v0.11.x-blue.svg)](https://github.com/shaarli/Shaarli) | 15 | [![](https://img.shields.io/badge/master-v0.12.x-blue.svg)](https://github.com/shaarli/Shaarli) |
16 | [![](https://img.shields.io/travis/shaarli/Shaarli.svg?label=master)](https://travis-ci.org/shaarli/Shaarli) | 16 | [![](https://img.shields.io/travis/shaarli/Shaarli.svg?label=master)](https://travis-ci.org/shaarli/Shaarli) |
17 | 17 | ||
18 | [![Join the chat at https://gitter.im/shaarli/Shaarli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/shaarli/Shaarli) | 18 | [![Join the chat at https://gitter.im/shaarli/Shaarli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/shaarli/Shaarli) |
diff --git a/application/Languages.php b/application/Languages.php index 5cda802e..d83e0765 100644 --- a/application/Languages.php +++ b/application/Languages.php | |||
@@ -179,9 +179,10 @@ class Languages | |||
179 | { | 179 | { |
180 | return [ | 180 | return [ |
181 | 'auto' => t('Automatic'), | 181 | 'auto' => t('Automatic'), |
182 | 'de' => t('German'), | ||
182 | 'en' => t('English'), | 183 | 'en' => t('English'), |
183 | 'fr' => t('French'), | 184 | 'fr' => t('French'), |
184 | 'de' => t('German'), | 185 | 'jp' => t('Japanese'), |
185 | ]; | 186 | ]; |
186 | } | 187 | } |
187 | } | 188 | } |
diff --git a/application/Utils.php b/application/Utils.php index 9c9eaaa2..bcfda65c 100644 --- a/application/Utils.php +++ b/application/Utils.php | |||
@@ -95,14 +95,14 @@ function escape($input) | |||
95 | return null; | 95 | return null; |
96 | } | 96 | } |
97 | 97 | ||
98 | if (is_bool($input)) { | 98 | if (is_bool($input) || is_int($input) || is_float($input) || $input instanceof DateTimeInterface) { |
99 | return $input; | 99 | return $input; |
100 | } | 100 | } |
101 | 101 | ||
102 | if (is_array($input)) { | 102 | if (is_array($input)) { |
103 | $out = array(); | 103 | $out = array(); |
104 | foreach ($input as $key => $value) { | 104 | foreach ($input as $key => $value) { |
105 | $out[$key] = escape($value); | 105 | $out[escape($key)] = escape($value); |
106 | } | 106 | } |
107 | return $out; | 107 | return $out; |
108 | } | 108 | } |
diff --git a/application/api/ApiMiddleware.php b/application/api/ApiMiddleware.php index 09ce6445..f5b53b01 100644 --- a/application/api/ApiMiddleware.php +++ b/application/api/ApiMiddleware.php | |||
@@ -107,7 +107,9 @@ class ApiMiddleware | |||
107 | */ | 107 | */ |
108 | protected function checkToken($request) | 108 | protected function checkToken($request) |
109 | { | 109 | { |
110 | if (! $request->hasHeader('Authorization')) { | 110 | if (!$request->hasHeader('Authorization') |
111 | && !isset($this->container->environment['REDIRECT_HTTP_AUTHORIZATION']) | ||
112 | ) { | ||
111 | throw new ApiAuthorizationException('JWT token not provided'); | 113 | throw new ApiAuthorizationException('JWT token not provided'); |
112 | } | 114 | } |
113 | 115 | ||
@@ -115,7 +117,11 @@ class ApiMiddleware | |||
115 | throw new ApiAuthorizationException('Token secret must be set in Shaarli\'s administration'); | 117 | throw new ApiAuthorizationException('Token secret must be set in Shaarli\'s administration'); |
116 | } | 118 | } |
117 | 119 | ||
118 | $authorization = $request->getHeaderLine('Authorization'); | 120 | if (isset($this->container->environment['REDIRECT_HTTP_AUTHORIZATION'])) { |
121 | $authorization = $this->container->environment['REDIRECT_HTTP_AUTHORIZATION']; | ||
122 | } else { | ||
123 | $authorization = $request->getHeaderLine('Authorization'); | ||
124 | } | ||
119 | 125 | ||
120 | if (! preg_match('/^Bearer (.*)/i', $authorization, $matches)) { | 126 | if (! preg_match('/^Bearer (.*)/i', $authorization, $matches)) { |
121 | throw new ApiAuthorizationException('Invalid JWT header'); | 127 | throw new ApiAuthorizationException('Invalid JWT header'); |
diff --git a/application/bookmark/BookmarkArray.php b/application/bookmark/BookmarkArray.php index d87d43b4..3bd5eb20 100644 --- a/application/bookmark/BookmarkArray.php +++ b/application/bookmark/BookmarkArray.php | |||
@@ -234,16 +234,17 @@ class BookmarkArray implements \Iterator, \Countable, \ArrayAccess | |||
234 | * | 234 | * |
235 | * Also update the urls and ids mapping arrays. | 235 | * Also update the urls and ids mapping arrays. |
236 | * | 236 | * |
237 | * @param string $order ASC|DESC | 237 | * @param string $order ASC|DESC |
238 | * @param bool $ignoreSticky If set to true, sticky bookmarks won't be first | ||
238 | */ | 239 | */ |
239 | public function reorder($order = 'DESC') | 240 | public function reorder(string $order = 'DESC', bool $ignoreSticky = false): void |
240 | { | 241 | { |
241 | $order = $order === 'ASC' ? -1 : 1; | 242 | $order = $order === 'ASC' ? -1 : 1; |
242 | // Reorder array by dates. | 243 | // Reorder array by dates. |
243 | usort($this->bookmarks, function ($a, $b) use ($order) { | 244 | usort($this->bookmarks, function ($a, $b) use ($order, $ignoreSticky) { |
244 | /** @var $a Bookmark */ | 245 | /** @var $a Bookmark */ |
245 | /** @var $b Bookmark */ | 246 | /** @var $b Bookmark */ |
246 | if ($a->isSticky() !== $b->isSticky()) { | 247 | if (false === $ignoreSticky && $a->isSticky() !== $b->isSticky()) { |
247 | return $a->isSticky() ? -1 : 1; | 248 | return $a->isSticky() ? -1 : 1; |
248 | } | 249 | } |
249 | return $a->getCreated() < $b->getCreated() ? 1 * $order : -1 * $order; | 250 | return $a->getCreated() < $b->getCreated() ? 1 * $order : -1 * $order; |
diff --git a/application/bookmark/BookmarkFileService.php b/application/bookmark/BookmarkFileService.php index b3a90ed4..c9ec2609 100644 --- a/application/bookmark/BookmarkFileService.php +++ b/application/bookmark/BookmarkFileService.php | |||
@@ -114,8 +114,13 @@ class BookmarkFileService implements BookmarkServiceInterface | |||
114 | /** | 114 | /** |
115 | * @inheritDoc | 115 | * @inheritDoc |
116 | */ | 116 | */ |
117 | public function search($request = [], $visibility = null, $caseSensitive = false, $untaggedOnly = false) | 117 | public function search( |
118 | { | 118 | $request = [], |
119 | $visibility = null, | ||
120 | $caseSensitive = false, | ||
121 | $untaggedOnly = false, | ||
122 | bool $ignoreSticky = false | ||
123 | ) { | ||
119 | if ($visibility === null) { | 124 | if ($visibility === null) { |
120 | $visibility = $this->isLoggedIn ? BookmarkFilter::$ALL : BookmarkFilter::$PUBLIC; | 125 | $visibility = $this->isLoggedIn ? BookmarkFilter::$ALL : BookmarkFilter::$PUBLIC; |
121 | } | 126 | } |
@@ -124,6 +129,10 @@ class BookmarkFileService implements BookmarkServiceInterface | |||
124 | $searchtags = isset($request['searchtags']) ? $request['searchtags'] : ''; | 129 | $searchtags = isset($request['searchtags']) ? $request['searchtags'] : ''; |
125 | $searchterm = isset($request['searchterm']) ? $request['searchterm'] : ''; | 130 | $searchterm = isset($request['searchterm']) ? $request['searchterm'] : ''; |
126 | 131 | ||
132 | if ($ignoreSticky) { | ||
133 | $this->bookmarks->reorder('DESC', true); | ||
134 | } | ||
135 | |||
127 | return $this->bookmarkFilter->filter( | 136 | return $this->bookmarkFilter->filter( |
128 | BookmarkFilter::$FILTER_TAG | BookmarkFilter::$FILTER_TEXT, | 137 | BookmarkFilter::$FILTER_TAG | BookmarkFilter::$FILTER_TEXT, |
129 | [$searchtags, $searchterm], | 138 | [$searchtags, $searchterm], |
@@ -353,7 +362,9 @@ class BookmarkFileService implements BookmarkServiceInterface | |||
353 | */ | 362 | */ |
354 | public function filterDay($request) | 363 | public function filterDay($request) |
355 | { | 364 | { |
356 | return $this->bookmarkFilter->filter(BookmarkFilter::$FILTER_DAY, $request); | 365 | $visibility = $this->isLoggedIn ? BookmarkFilter::$ALL : BookmarkFilter::$PUBLIC; |
366 | |||
367 | return $this->bookmarkFilter->filter(BookmarkFilter::$FILTER_DAY, $request, false, $visibility); | ||
357 | } | 368 | } |
358 | 369 | ||
359 | /** | 370 | /** |
diff --git a/application/bookmark/BookmarkFilter.php b/application/bookmark/BookmarkFilter.php index 797a36b8..6636bbfe 100644 --- a/application/bookmark/BookmarkFilter.php +++ b/application/bookmark/BookmarkFilter.php | |||
@@ -115,7 +115,7 @@ class BookmarkFilter | |||
115 | return $this->filterTags($request, $casesensitive, $visibility); | 115 | return $this->filterTags($request, $casesensitive, $visibility); |
116 | } | 116 | } |
117 | case self::$FILTER_DAY: | 117 | case self::$FILTER_DAY: |
118 | return $this->filterDay($request); | 118 | return $this->filterDay($request, $visibility); |
119 | default: | 119 | default: |
120 | return $this->noFilter($visibility); | 120 | return $this->noFilter($visibility); |
121 | } | 121 | } |
@@ -425,21 +425,26 @@ class BookmarkFilter | |||
425 | * print_r($mydb->filterDay('20120125')); | 425 | * print_r($mydb->filterDay('20120125')); |
426 | * | 426 | * |
427 | * @param string $day day to filter. | 427 | * @param string $day day to filter. |
428 | * | 428 | * @param string $visibility return only all/private/public bookmarks. |
429 | |||
429 | * @return array all link matching given day. | 430 | * @return array all link matching given day. |
430 | * | 431 | * |
431 | * @throws Exception if date format is invalid. | 432 | * @throws Exception if date format is invalid. |
432 | */ | 433 | */ |
433 | public function filterDay($day) | 434 | public function filterDay($day, $visibility) |
434 | { | 435 | { |
435 | if (!checkDateFormat('Ymd', $day)) { | 436 | if (!checkDateFormat('Ymd', $day)) { |
436 | throw new Exception('Invalid date format'); | 437 | throw new Exception('Invalid date format'); |
437 | } | 438 | } |
438 | 439 | ||
439 | $filtered = []; | 440 | $filtered = []; |
440 | foreach ($this->bookmarks as $key => $l) { | 441 | foreach ($this->bookmarks as $key => $bookmark) { |
441 | if ($l->getCreated()->format('Ymd') == $day) { | 442 | if ($visibility === static::$PUBLIC && $bookmark->isPrivate()) { |
442 | $filtered[$key] = $l; | 443 | continue; |
444 | } | ||
445 | |||
446 | if ($bookmark->getCreated()->format('Ymd') == $day) { | ||
447 | $filtered[$key] = $bookmark; | ||
443 | } | 448 | } |
444 | } | 449 | } |
445 | 450 | ||
diff --git a/application/bookmark/BookmarkInitializer.php b/application/bookmark/BookmarkInitializer.php index cd2d1724..815047e3 100644 --- a/application/bookmark/BookmarkInitializer.php +++ b/application/bookmark/BookmarkInitializer.php | |||
@@ -34,25 +34,77 @@ class BookmarkInitializer | |||
34 | public function initialize() | 34 | public function initialize() |
35 | { | 35 | { |
36 | $bookmark = new Bookmark(); | 36 | $bookmark = new Bookmark(); |
37 | $bookmark->setTitle(t('My secret stuff... - Pastebin.com')); | 37 | $bookmark->setTitle('quicksilver (loop) on Vimeo ' . t('(private bookmark with thumbnail demo)')); |
38 | $bookmark->setUrl('http://sebsauvage.net/paste/?8434b27936c09649#bR7XsXhoTiLcqCpQbmOpBi3rq2zzQUC5hBI7ZT1O3x8='); | 38 | $bookmark->setUrl('https://vimeo.com/153493904'); |
39 | $bookmark->setDescription(t('Shhhh! I\'m a private link only YOU can see. You can delete me too.')); | 39 | $bookmark->setDescription(t( |
40 | $bookmark->setTagsString('secretstuff'); | 40 | 'Shaarli will automatically pick up the thumbnail for links to a variety of websites. |
41 | |||
42 | Explore your new Shaarli instance by trying out controls and menus. | ||
43 | Visit the project on [Github](https://github.com/shaarli/Shaarli) or [the documentation](https://shaarli.readthedocs.io/en/master/) to learn more about Shaarli. | ||
44 | |||
45 | Now you can edit or delete the default shaares. | ||
46 | ' | ||
47 | )); | ||
48 | $bookmark->setTagsString('shaarli help thumbnail'); | ||
49 | $bookmark->setPrivate(true); | ||
50 | $this->bookmarkService->add($bookmark, false); | ||
51 | |||
52 | $bookmark = new Bookmark(); | ||
53 | $bookmark->setTitle(t('Note: Shaare descriptions')); | ||
54 | $bookmark->setDescription(t( | ||
55 | 'Adding a shaare without entering a URL creates a text-only "note" post such as this one. | ||
56 | This note is private, so you are the only one able to see it while logged in. | ||
57 | |||
58 | You can use this to keep notes, post articles, code snippets, and much more. | ||
59 | |||
60 | The Markdown formatting setting allows you to format your notes and bookmark description: | ||
61 | |||
62 | ### Title headings | ||
63 | |||
64 | #### Multiple headings levels | ||
65 | * bullet lists | ||
66 | * _italic_ text | ||
67 | * **bold** text | ||
68 | * ~~strike through~~ text | ||
69 | * `code` blocks | ||
70 | * images | ||
71 | * [links](https://en.wikipedia.org/wiki/Markdown) | ||
72 | |||
73 | Markdown also supports tables: | ||
74 | |||
75 | | Name | Type | Color | Qty | | ||
76 | | ------- | --------- | ------ | ----- | | ||
77 | | Orange | Fruit | Orange | 126 | | ||
78 | | Apple | Fruit | Any | 62 | | ||
79 | | Lemon | Fruit | Yellow | 30 | | ||
80 | | Carrot | Vegetable | Red | 14 | | ||
81 | ' | ||
82 | )); | ||
83 | $bookmark->setTagsString('shaarli help'); | ||
41 | $bookmark->setPrivate(true); | 84 | $bookmark->setPrivate(true); |
42 | $this->bookmarkService->add($bookmark, false); | 85 | $this->bookmarkService->add($bookmark, false); |
43 | 86 | ||
44 | $bookmark = new Bookmark(); | 87 | $bookmark = new Bookmark(); |
45 | $bookmark->setTitle(t('The personal, minimalist, super-fast, database free, bookmarking service')); | 88 | $bookmark->setTitle( |
46 | $bookmark->setUrl('https://shaarli.readthedocs.io', []); | 89 | 'Shaarli - ' . t('The personal, minimalist, super-fast, database free, bookmarking service') |
90 | ); | ||
47 | $bookmark->setDescription(t( | 91 | $bookmark->setDescription(t( |
48 | 'Welcome to Shaarli! This is your first public bookmark. ' | 92 | 'Welcome to Shaarli! |
49 | . 'To edit or delete me, you must first login. | 93 | |
94 | Shaarli allows you to bookmark your favorite pages, and share them with others or store them privately. | ||
95 | You can add a description to your bookmarks, such as this one, and tag them. | ||
96 | |||
97 | Create a new shaare by clicking the `+Shaare` button, or using any of the recommended tools (browser extension, mobile app, bookmarklet, REST API, etc.). | ||
50 | 98 | ||
51 | To learn how to use Shaarli, consult the link "Documentation" at the bottom of this page. | 99 | You can easily retrieve your links, even with thousands of them, using the internal search engine, or search through tags (e.g. this Shaare is tagged with `shaarli` and `help`). |
100 | Hashtags such as #shaarli #help are also supported. | ||
101 | You can also filter the available [RSS feed](/feed/atom) and picture wall by tag or plaintext search. | ||
52 | 102 | ||
53 | You use the community supported version of the original Shaarli project, by Sebastien Sauvage.' | 103 | We hope that you will enjoy using Shaarli, maintained with ❤️ by the community! |
104 | Feel free to open [an issue](https://github.com/shaarli/Shaarli/issues) if you have a suggestion or encounter an issue. | ||
105 | ' | ||
54 | )); | 106 | )); |
55 | $bookmark->setTagsString('opensource software'); | 107 | $bookmark->setTagsString('shaarli help'); |
56 | $this->bookmarkService->add($bookmark, false); | 108 | $this->bookmarkService->add($bookmark, false); |
57 | } | 109 | } |
58 | } | 110 | } |
diff --git a/application/bookmark/BookmarkServiceInterface.php b/application/bookmark/BookmarkServiceInterface.php index ce8bd912..b9b483eb 100644 --- a/application/bookmark/BookmarkServiceInterface.php +++ b/application/bookmark/BookmarkServiceInterface.php | |||
@@ -49,10 +49,17 @@ interface BookmarkServiceInterface | |||
49 | * @param string $visibility | 49 | * @param string $visibility |
50 | * @param bool $caseSensitive | 50 | * @param bool $caseSensitive |
51 | * @param bool $untaggedOnly | 51 | * @param bool $untaggedOnly |
52 | * @param bool $ignoreSticky | ||
52 | * | 53 | * |
53 | * @return Bookmark[] | 54 | * @return Bookmark[] |
54 | */ | 55 | */ |
55 | public function search($request = [], $visibility = null, $caseSensitive = false, $untaggedOnly = false); | 56 | public function search( |
57 | $request = [], | ||
58 | $visibility = null, | ||
59 | $caseSensitive = false, | ||
60 | $untaggedOnly = false, | ||
61 | bool $ignoreSticky = false | ||
62 | ); | ||
56 | 63 | ||
57 | /** | 64 | /** |
58 | * Get a single bookmark by its ID. | 65 | * Get a single bookmark by its ID. |
diff --git a/application/bookmark/LinkUtils.php b/application/bookmark/LinkUtils.php index 68914fca..e7af4d55 100644 --- a/application/bookmark/LinkUtils.php +++ b/application/bookmark/LinkUtils.php | |||
@@ -26,7 +26,7 @@ function html_extract_title($html) | |||
26 | */ | 26 | */ |
27 | function header_extract_charset($header) | 27 | function header_extract_charset($header) |
28 | { | 28 | { |
29 | preg_match('/charset="?([^; ]+)/i', $header, $match); | 29 | preg_match('/charset=["\']?([^; "\']+)/i', $header, $match); |
30 | if (! empty($match[1])) { | 30 | if (! empty($match[1])) { |
31 | return strtolower(trim($match[1])); | 31 | return strtolower(trim($match[1])); |
32 | } | 32 | } |
diff --git a/application/config/ConfigJson.php b/application/config/ConfigJson.php index 4509357c..c0c0dab9 100644 --- a/application/config/ConfigJson.php +++ b/application/config/ConfigJson.php | |||
@@ -46,7 +46,7 @@ class ConfigJson implements ConfigIO | |||
46 | // JSON_PRETTY_PRINT is available from PHP 5.4. | 46 | // JSON_PRETTY_PRINT is available from PHP 5.4. |
47 | $print = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0; | 47 | $print = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0; |
48 | $data = self::getPhpHeaders() . json_encode($conf, $print) . self::getPhpSuffix(); | 48 | $data = self::getPhpHeaders() . json_encode($conf, $print) . self::getPhpSuffix(); |
49 | if (!file_put_contents($filepath, $data)) { | 49 | if (empty($filepath) || !file_put_contents($filepath, $data)) { |
50 | throw new \Shaarli\Exceptions\IOException( | 50 | throw new \Shaarli\Exceptions\IOException( |
51 | $filepath, | 51 | $filepath, |
52 | t('Shaarli could not create the config file. '. | 52 | t('Shaarli could not create the config file. '. |
diff --git a/application/container/ContainerBuilder.php b/application/container/ContainerBuilder.php index 58067c99..55bb51b5 100644 --- a/application/container/ContainerBuilder.php +++ b/application/container/ContainerBuilder.php | |||
@@ -10,6 +10,7 @@ use Shaarli\Config\ConfigManager; | |||
10 | use Shaarli\Feed\FeedBuilder; | 10 | use Shaarli\Feed\FeedBuilder; |
11 | use Shaarli\Formatter\FormatterFactory; | 11 | use Shaarli\Formatter\FormatterFactory; |
12 | use Shaarli\Front\Controller\Visitor\ErrorController; | 12 | use Shaarli\Front\Controller\Visitor\ErrorController; |
13 | use Shaarli\Front\Controller\Visitor\ErrorNotFoundController; | ||
13 | use Shaarli\History; | 14 | use Shaarli\History; |
14 | use Shaarli\Http\HttpAccess; | 15 | use Shaarli\Http\HttpAccess; |
15 | use Shaarli\Netscape\NetscapeBookmarkUtils; | 16 | use Shaarli\Netscape\NetscapeBookmarkUtils; |
@@ -149,6 +150,9 @@ class ContainerBuilder | |||
149 | ); | 150 | ); |
150 | }; | 151 | }; |
151 | 152 | ||
153 | $container['notFoundHandler'] = function (ShaarliContainer $container): ErrorNotFoundController { | ||
154 | return new ErrorNotFoundController($container); | ||
155 | }; | ||
152 | $container['errorHandler'] = function (ShaarliContainer $container): ErrorController { | 156 | $container['errorHandler'] = function (ShaarliContainer $container): ErrorController { |
153 | return new ErrorController($container); | 157 | return new ErrorController($container); |
154 | }; | 158 | }; |
diff --git a/application/container/ShaarliContainer.php b/application/container/ShaarliContainer.php index 9a9a974a..66e669aa 100644 --- a/application/container/ShaarliContainer.php +++ b/application/container/ShaarliContainer.php | |||
@@ -24,21 +24,22 @@ use Slim\Container; | |||
24 | /** | 24 | /** |
25 | * Extension of Slim container to document the injected objects. | 25 | * Extension of Slim container to document the injected objects. |
26 | * | 26 | * |
27 | * @property string $basePath Shaarli's instance base path (e.g. `/shaarli/`) | 27 | * @property string $basePath Shaarli's instance base path (e.g. `/shaarli/`) |
28 | * @property BookmarkServiceInterface $bookmarkService | 28 | * @property BookmarkServiceInterface $bookmarkService |
29 | * @property CookieManager $cookieManager | 29 | * @property CookieManager $cookieManager |
30 | * @property ConfigManager $conf | 30 | * @property ConfigManager $conf |
31 | * @property mixed[] $environment $_SERVER automatically injected by Slim | 31 | * @property mixed[] $environment $_SERVER automatically injected by Slim |
32 | * @property callable $errorHandler Overrides default Slim exception display | 32 | * @property callable $errorHandler Overrides default Slim exception display |
33 | * @property FeedBuilder $feedBuilder | 33 | * @property FeedBuilder $feedBuilder |
34 | * @property FormatterFactory $formatterFactory | 34 | * @property FormatterFactory $formatterFactory |
35 | * @property History $history | 35 | * @property History $history |
36 | * @property HttpAccess $httpAccess | 36 | * @property HttpAccess $httpAccess |
37 | * @property LoginManager $loginManager | 37 | * @property LoginManager $loginManager |
38 | * @property NetscapeBookmarkUtils $netscapeBookmarkUtils | 38 | * @property NetscapeBookmarkUtils $netscapeBookmarkUtils |
39 | * @property callable $notFoundHandler Overrides default Slim exception display | ||
39 | * @property PageBuilder $pageBuilder | 40 | * @property PageBuilder $pageBuilder |
40 | * @property PageCacheManager $pageCacheManager | 41 | * @property PageCacheManager $pageCacheManager |
41 | * @property callable $phpErrorHandler Overrides default Slim PHP error display | 42 | * @property callable $phpErrorHandler Overrides default Slim PHP error display |
42 | * @property PluginManager $pluginManager | 43 | * @property PluginManager $pluginManager |
43 | * @property SessionManager $sessionManager | 44 | * @property SessionManager $sessionManager |
44 | * @property Thumbnailer $thumbnailer | 45 | * @property Thumbnailer $thumbnailer |
diff --git a/application/feed/FeedBuilder.php b/application/feed/FeedBuilder.php index 269ad877..f6def630 100644 --- a/application/feed/FeedBuilder.php +++ b/application/feed/FeedBuilder.php | |||
@@ -102,7 +102,7 @@ class FeedBuilder | |||
102 | } | 102 | } |
103 | 103 | ||
104 | // Optionally filter the results: | 104 | // Optionally filter the results: |
105 | $linksToDisplay = $this->linkDB->search($userInput); | 105 | $linksToDisplay = $this->linkDB->search($userInput, null, false, false, true); |
106 | 106 | ||
107 | $nblinksToDisplay = $this->getNbLinks(count($linksToDisplay), $userInput); | 107 | $nblinksToDisplay = $this->getNbLinks(count($linksToDisplay), $userInput); |
108 | 108 | ||
@@ -122,9 +122,9 @@ class FeedBuilder | |||
122 | $data['language'] = $this->getTypeLanguage($feedType); | 122 | $data['language'] = $this->getTypeLanguage($feedType); |
123 | $data['last_update'] = $this->getLatestDateFormatted($feedType); | 123 | $data['last_update'] = $this->getLatestDateFormatted($feedType); |
124 | $data['show_dates'] = !$this->hideDates || $this->isLoggedIn; | 124 | $data['show_dates'] = !$this->hideDates || $this->isLoggedIn; |
125 | // Remove leading slash from REQUEST_URI. | 125 | // Remove leading path from REQUEST_URI (already contained in $pageaddr). |
126 | $data['self_link'] = escape(server_url($this->serverInfo)) | 126 | $requestUri = preg_replace('#(.*?/)(feed.*)#', '$2', escape($this->serverInfo['REQUEST_URI'])); |
127 | . escape($this->serverInfo['REQUEST_URI']); | 127 | $data['self_link'] = $pageaddr . $requestUri; |
128 | $data['index_url'] = $pageaddr; | 128 | $data['index_url'] = $pageaddr; |
129 | $data['usepermalinks'] = $this->usePermalinks === true; | 129 | $data['usepermalinks'] = $this->usePermalinks === true; |
130 | $data['links'] = $linkDisplayed; | 130 | $data['links'] = $linkDisplayed; |
diff --git a/application/formatter/BookmarkFormatter.php b/application/formatter/BookmarkFormatter.php index 22ba7aae..0042dafe 100644 --- a/application/formatter/BookmarkFormatter.php +++ b/application/formatter/BookmarkFormatter.php | |||
@@ -58,7 +58,9 @@ abstract class BookmarkFormatter | |||
58 | $out['title'] = $this->formatTitle($bookmark); | 58 | $out['title'] = $this->formatTitle($bookmark); |
59 | $out['description'] = $this->formatDescription($bookmark); | 59 | $out['description'] = $this->formatDescription($bookmark); |
60 | $out['thumbnail'] = $this->formatThumbnail($bookmark); | 60 | $out['thumbnail'] = $this->formatThumbnail($bookmark); |
61 | $out['urlencoded_taglist'] = $this->formatUrlEncodedTagList($bookmark); | ||
61 | $out['taglist'] = $this->formatTagList($bookmark); | 62 | $out['taglist'] = $this->formatTagList($bookmark); |
63 | $out['urlencoded_tags'] = $this->formatUrlEncodedTagString($bookmark); | ||
62 | $out['tags'] = $this->formatTagString($bookmark); | 64 | $out['tags'] = $this->formatTagString($bookmark); |
63 | $out['sticky'] = $bookmark->isSticky(); | 65 | $out['sticky'] = $bookmark->isSticky(); |
64 | $out['private'] = $bookmark->isPrivate(); | 66 | $out['private'] = $bookmark->isPrivate(); |
@@ -182,6 +184,18 @@ abstract class BookmarkFormatter | |||
182 | } | 184 | } |
183 | 185 | ||
184 | /** | 186 | /** |
187 | * Format Url Encoded Tags | ||
188 | * | ||
189 | * @param Bookmark $bookmark instance | ||
190 | * | ||
191 | * @return array formatted Tags | ||
192 | */ | ||
193 | protected function formatUrlEncodedTagList($bookmark) | ||
194 | { | ||
195 | return array_map('urlencode', $this->filterTagList($bookmark->getTags())); | ||
196 | } | ||
197 | |||
198 | /** | ||
185 | * Format TagString | 199 | * Format TagString |
186 | * | 200 | * |
187 | * @param Bookmark $bookmark instance | 201 | * @param Bookmark $bookmark instance |
@@ -194,6 +208,18 @@ abstract class BookmarkFormatter | |||
194 | } | 208 | } |
195 | 209 | ||
196 | /** | 210 | /** |
211 | * Format TagString | ||
212 | * | ||
213 | * @param Bookmark $bookmark instance | ||
214 | * | ||
215 | * @return string formatted TagString | ||
216 | */ | ||
217 | protected function formatUrlEncodedTagString($bookmark) | ||
218 | { | ||
219 | return implode(' ', $this->formatUrlEncodedTagList($bookmark)); | ||
220 | } | ||
221 | |||
222 | /** | ||
197 | * Format Class | 223 | * Format Class |
198 | * Used to add specific CSS class for a link | 224 | * Used to add specific CSS class for a link |
199 | * | 225 | * |
diff --git a/application/formatter/BookmarkMarkdownExtraFormatter.php b/application/formatter/BookmarkMarkdownExtraFormatter.php new file mode 100644 index 00000000..0694b23f --- /dev/null +++ b/application/formatter/BookmarkMarkdownExtraFormatter.php | |||
@@ -0,0 +1,24 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Shaarli\Formatter; | ||
4 | |||
5 | use Shaarli\Config\ConfigManager; | ||
6 | |||
7 | /** | ||
8 | * Class BookmarkMarkdownExtraFormatter | ||
9 | * | ||
10 | * Format bookmark description into MarkdownExtra format. | ||
11 | * | ||
12 | * @see https://michelf.ca/projects/php-markdown/extra/ | ||
13 | * | ||
14 | * @package Shaarli\Formatter | ||
15 | */ | ||
16 | class BookmarkMarkdownExtraFormatter extends BookmarkMarkdownFormatter | ||
17 | { | ||
18 | public function __construct(ConfigManager $conf, bool $isLoggedIn) | ||
19 | { | ||
20 | parent::__construct($conf, $isLoggedIn); | ||
21 | |||
22 | $this->parsedown = new \ParsedownExtra(); | ||
23 | } | ||
24 | } | ||
diff --git a/application/front/ShaarliMiddleware.php b/application/front/ShaarliMiddleware.php index c015c0c6..d1aa1399 100644 --- a/application/front/ShaarliMiddleware.php +++ b/application/front/ShaarliMiddleware.php | |||
@@ -94,7 +94,7 @@ class ShaarliMiddleware | |||
94 | && $this->container->conf->get('privacy.force_login') | 94 | && $this->container->conf->get('privacy.force_login') |
95 | // and the current page isn't already the login page | 95 | // and the current page isn't already the login page |
96 | // and the user is not requesting a feed (which would lead to a different content-type as expected) | 96 | // and the user is not requesting a feed (which would lead to a different content-type as expected) |
97 | && !in_array($next->getName(), ['login', 'atom', 'rss'], true) | 97 | && !in_array($next->getName(), ['login', 'processLogin', 'atom', 'rss'], true) |
98 | ) { | 98 | ) { |
99 | throw new UnauthorizedException(); | 99 | throw new UnauthorizedException(); |
100 | } | 100 | } |
diff --git a/application/front/controller/admin/ConfigureController.php b/application/front/controller/admin/ConfigureController.php index e675fcca..0ed7ad81 100644 --- a/application/front/controller/admin/ConfigureController.php +++ b/application/front/controller/admin/ConfigureController.php | |||
@@ -30,7 +30,7 @@ class ConfigureController extends ShaarliAdminController | |||
30 | 'theme_available', | 30 | 'theme_available', |
31 | ThemeUtils::getThemes($this->container->conf->get('resource.raintpl_tpl')) | 31 | ThemeUtils::getThemes($this->container->conf->get('resource.raintpl_tpl')) |
32 | ); | 32 | ); |
33 | $this->assignView('formatter_available', ['default', 'markdown']); | 33 | $this->assignView('formatter_available', ['default', 'markdown', 'markdownExtra']); |
34 | list($continents, $cities) = generateTimeZoneData( | 34 | list($continents, $cities) = generateTimeZoneData( |
35 | timezone_identifiers_list(), | 35 | timezone_identifiers_list(), |
36 | $this->container->conf->get('general.timezone') | 36 | $this->container->conf->get('general.timezone') |
diff --git a/application/front/controller/admin/ManageShaareController.php b/application/front/controller/admin/ManageShaareController.php index 33e1188e..bb083486 100644 --- a/application/front/controller/admin/ManageShaareController.php +++ b/application/front/controller/admin/ManageShaareController.php | |||
@@ -69,7 +69,7 @@ class ManageShaareController extends ShaarliAdminController | |||
69 | $retrieveDescription | 69 | $retrieveDescription |
70 | ) | 70 | ) |
71 | ); | 71 | ); |
72 | if (! empty($title) && strtolower($charset) !== 'utf-8') { | 72 | if (! empty($title) && strtolower($charset) !== 'utf-8' && mb_check_encoding($charset)) { |
73 | $title = mb_convert_encoding($title, 'utf-8', $charset); | 73 | $title = mb_convert_encoding($title, 'utf-8', $charset); |
74 | } | 74 | } |
75 | } | 75 | } |
@@ -78,13 +78,13 @@ class ManageShaareController extends ShaarliAdminController | |||
78 | $title = $this->container->conf->get('general.default_note_title', t('Note: ')); | 78 | $title = $this->container->conf->get('general.default_note_title', t('Note: ')); |
79 | } | 79 | } |
80 | 80 | ||
81 | $link = escape([ | 81 | $link = [ |
82 | 'title' => $title, | 82 | 'title' => $title, |
83 | 'url' => $url ?? '', | 83 | 'url' => $url ?? '', |
84 | 'description' => $description ?? '', | 84 | 'description' => $description ?? '', |
85 | 'tags' => $tags ?? '', | 85 | 'tags' => $tags ?? '', |
86 | 'private' => $private, | 86 | 'private' => $private, |
87 | ]); | 87 | ]; |
88 | } else { | 88 | } else { |
89 | $formatter = $this->container->formatterFactory->getFormatter('raw'); | 89 | $formatter = $this->container->formatterFactory->getFormatter('raw'); |
90 | $link = $formatter->format($bookmark); | 90 | $link = $formatter->format($bookmark); |
@@ -127,7 +127,7 @@ class ManageShaareController extends ShaarliAdminController | |||
127 | $this->checkToken($request); | 127 | $this->checkToken($request); |
128 | 128 | ||
129 | // lf_id should only be present if the link exists. | 129 | // lf_id should only be present if the link exists. |
130 | $id = $request->getParam('lf_id') ? intval(escape($request->getParam('lf_id'))) : null; | 130 | $id = $request->getParam('lf_id') !== null ? intval(escape($request->getParam('lf_id'))) : null; |
131 | if (null !== $id && true === $this->container->bookmarkService->exists($id)) { | 131 | if (null !== $id && true === $this->container->bookmarkService->exists($id)) { |
132 | // Edit | 132 | // Edit |
133 | $bookmark = $this->container->bookmarkService->get($id); | 133 | $bookmark = $this->container->bookmarkService->get($id); |
@@ -169,7 +169,7 @@ class ManageShaareController extends ShaarliAdminController | |||
169 | return $this->redirectFromReferer( | 169 | return $this->redirectFromReferer( |
170 | $request, | 170 | $request, |
171 | $response, | 171 | $response, |
172 | ['add-shaare', 'shaare'], ['addlink', 'post', 'edit_link'], | 172 | ['/admin/add-shaare', '/admin/shaare'], ['addlink', 'post', 'edit_link'], |
173 | $bookmark->getShortUrl() | 173 | $bookmark->getShortUrl() |
174 | ); | 174 | ); |
175 | } | 175 | } |
@@ -345,14 +345,14 @@ class ManageShaareController extends ShaarliAdminController | |||
345 | $tags[BookmarkMarkdownFormatter::NO_MD_TAG] = 1; | 345 | $tags[BookmarkMarkdownFormatter::NO_MD_TAG] = 1; |
346 | } | 346 | } |
347 | 347 | ||
348 | $data = [ | 348 | $data = escape([ |
349 | 'link' => $link, | 349 | 'link' => $link, |
350 | 'link_is_new' => $isNew, | 350 | 'link_is_new' => $isNew, |
351 | 'http_referer' => escape($this->container->environment['HTTP_REFERER'] ?? ''), | 351 | 'http_referer' => $this->container->environment['HTTP_REFERER'] ?? '', |
352 | 'source' => $request->getParam('source') ?? '', | 352 | 'source' => $request->getParam('source') ?? '', |
353 | 'tags' => $tags, | 353 | 'tags' => $tags, |
354 | 'default_private_links' => $this->container->conf->get('privacy.default_private_links', false), | 354 | 'default_private_links' => $this->container->conf->get('privacy.default_private_links', false), |
355 | ]; | 355 | ]); |
356 | 356 | ||
357 | $this->executePageHooks('render_editlink', $data, TemplatePage::EDIT_LINK); | 357 | $this->executePageHooks('render_editlink', $data, TemplatePage::EDIT_LINK); |
358 | 358 | ||
diff --git a/application/front/controller/admin/ManageTagController.php b/application/front/controller/admin/ManageTagController.php index 0380ef1f..2065c3e2 100644 --- a/application/front/controller/admin/ManageTagController.php +++ b/application/front/controller/admin/ManageTagController.php | |||
@@ -41,8 +41,8 @@ class ManageTagController extends ShaarliAdminController | |||
41 | 41 | ||
42 | $isDelete = null !== $request->getParam('deletetag') && null === $request->getParam('renametag'); | 42 | $isDelete = null !== $request->getParam('deletetag') && null === $request->getParam('renametag'); |
43 | 43 | ||
44 | $fromTag = escape(trim($request->getParam('fromtag') ?? '')); | 44 | $fromTag = trim($request->getParam('fromtag') ?? ''); |
45 | $toTag = escape(trim($request->getParam('totag') ?? '')); | 45 | $toTag = trim($request->getParam('totag') ?? ''); |
46 | 46 | ||
47 | if (0 === strlen($fromTag) || false === $isDelete && 0 === strlen($toTag)) { | 47 | if (0 === strlen($fromTag) || false === $isDelete && 0 === strlen($toTag)) { |
48 | $this->saveWarningMessage(t('Invalid tags provided.')); | 48 | $this->saveWarningMessage(t('Invalid tags provided.')); |
diff --git a/application/front/controller/admin/PluginsController.php b/application/front/controller/admin/PluginsController.php index 0e09116e..8e059681 100644 --- a/application/front/controller/admin/PluginsController.php +++ b/application/front/controller/admin/PluginsController.php | |||
@@ -62,6 +62,7 @@ class PluginsController extends ShaarliAdminController | |||
62 | 62 | ||
63 | if (isset($parameters['parameters_form'])) { | 63 | if (isset($parameters['parameters_form'])) { |
64 | unset($parameters['parameters_form']); | 64 | unset($parameters['parameters_form']); |
65 | unset($parameters['token']); | ||
65 | foreach ($parameters as $param => $value) { | 66 | foreach ($parameters as $param => $value) { |
66 | $this->container->conf->set('plugins.'. $param, escape($value)); | 67 | $this->container->conf->set('plugins.'. $param, escape($value)); |
67 | } | 68 | } |
diff --git a/application/front/controller/admin/ShaarliAdminController.php b/application/front/controller/admin/ShaarliAdminController.php index 3b5939bb..c26c9cbe 100644 --- a/application/front/controller/admin/ShaarliAdminController.php +++ b/application/front/controller/admin/ShaarliAdminController.php | |||
@@ -4,9 +4,7 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use Shaarli\Container\ShaarliContainer; | ||
8 | use Shaarli\Front\Controller\Visitor\ShaarliVisitorController; | 7 | use Shaarli\Front\Controller\Visitor\ShaarliVisitorController; |
9 | use Shaarli\Front\Exception\UnauthorizedException; | ||
10 | use Shaarli\Front\Exception\WrongTokenException; | 8 | use Shaarli\Front\Exception\WrongTokenException; |
11 | use Shaarli\Security\SessionManager; | 9 | use Shaarli\Security\SessionManager; |
12 | use Slim\Http\Request; | 10 | use Slim\Http\Request; |
diff --git a/application/front/controller/visitor/BookmarkListController.php b/application/front/controller/visitor/BookmarkListController.php index 2988bee6..18368751 100644 --- a/application/front/controller/visitor/BookmarkListController.php +++ b/application/front/controller/visitor/BookmarkListController.php | |||
@@ -34,7 +34,7 @@ class BookmarkListController extends ShaarliVisitorController | |||
34 | $formatter = $this->container->formatterFactory->getFormatter(); | 34 | $formatter = $this->container->formatterFactory->getFormatter(); |
35 | $formatter->addContextData('base_path', $this->container->basePath); | 35 | $formatter->addContextData('base_path', $this->container->basePath); |
36 | 36 | ||
37 | $searchTags = escape(normalize_spaces($request->getParam('searchtags') ?? '')); | 37 | $searchTags = normalize_spaces($request->getParam('searchtags') ?? ''); |
38 | $searchTerm = escape(normalize_spaces($request->getParam('searchterm') ?? ''));; | 38 | $searchTerm = escape(normalize_spaces($request->getParam('searchterm') ?? ''));; |
39 | 39 | ||
40 | // Filter bookmarks according search parameters. | 40 | // Filter bookmarks according search parameters. |
@@ -104,8 +104,9 @@ class BookmarkListController extends ShaarliVisitorController | |||
104 | 'page_current' => $page, | 104 | 'page_current' => $page, |
105 | 'page_max' => $pageCount, | 105 | 'page_max' => $pageCount, |
106 | 'result_count' => count($linksToDisplay), | 106 | 'result_count' => count($linksToDisplay), |
107 | 'search_term' => $searchTerm, | 107 | 'search_term' => escape($searchTerm), |
108 | 'search_tags' => $searchTags, | 108 | 'search_tags' => escape($searchTags), |
109 | 'search_tags_url' => array_map('urlencode', explode(' ', $searchTags)), | ||
109 | 'visibility' => $visibility, | 110 | 'visibility' => $visibility, |
110 | 'links' => $linkDisp, | 111 | 'links' => $linkDisp, |
111 | ] | 112 | ] |
diff --git a/application/front/controller/visitor/DailyController.php b/application/front/controller/visitor/DailyController.php index 54a4778f..07617cf1 100644 --- a/application/front/controller/visitor/DailyController.php +++ b/application/front/controller/visitor/DailyController.php | |||
@@ -132,7 +132,7 @@ class DailyController extends ShaarliVisitorController | |||
132 | 'date' => $dayDatetime, | 132 | 'date' => $dayDatetime, |
133 | 'date_rss' => $dayDatetime->format(DateTime::RSS), | 133 | 'date_rss' => $dayDatetime->format(DateTime::RSS), |
134 | 'date_human' => format_date($dayDatetime, false, true), | 134 | 'date_human' => format_date($dayDatetime, false, true), |
135 | 'absolute_url' => $indexUrl . '/daily?day=' . $day, | 135 | 'absolute_url' => $indexUrl . 'daily?day=' . $day, |
136 | 'links' => [], | 136 | 'links' => [], |
137 | ]; | 137 | ]; |
138 | 138 | ||
diff --git a/application/front/controller/visitor/ErrorNotFoundController.php b/application/front/controller/visitor/ErrorNotFoundController.php new file mode 100644 index 00000000..758dd83b --- /dev/null +++ b/application/front/controller/visitor/ErrorNotFoundController.php | |||
@@ -0,0 +1,29 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\Front\Controller\Visitor; | ||
6 | |||
7 | use Slim\Http\Request; | ||
8 | use Slim\Http\Response; | ||
9 | |||
10 | /** | ||
11 | * Controller used to render the 404 error page. | ||
12 | */ | ||
13 | class ErrorNotFoundController extends ShaarliVisitorController | ||
14 | { | ||
15 | public function __invoke(Request $request, Response $response): Response | ||
16 | { | ||
17 | // Request from the API | ||
18 | if (false !== strpos($request->getRequestTarget(), '/api/v1')) { | ||
19 | return $response->withStatus(404); | ||
20 | } | ||
21 | |||
22 | // This is required because the middleware is ignored if the route is not found. | ||
23 | $this->container->basePath = rtrim($request->getUri()->getBasePath(), '/'); | ||
24 | |||
25 | $this->assignView('error_message', t('Requested page could not be found.')); | ||
26 | |||
27 | return $response->withStatus(404)->write($this->render('404')); | ||
28 | } | ||
29 | } | ||
diff --git a/application/front/controller/visitor/FeedController.php b/application/front/controller/visitor/FeedController.php index da2848c2..8d8b546a 100644 --- a/application/front/controller/visitor/FeedController.php +++ b/application/front/controller/visitor/FeedController.php | |||
@@ -46,10 +46,10 @@ class FeedController extends ShaarliVisitorController | |||
46 | 46 | ||
47 | $data = $this->container->feedBuilder->buildData($feedType, $request->getParams()); | 47 | $data = $this->container->feedBuilder->buildData($feedType, $request->getParams()); |
48 | 48 | ||
49 | $this->executePageHooks('render_feed', $data, $feedType); | 49 | $this->executePageHooks('render_feed', $data, 'feed.' . $feedType); |
50 | $this->assignAllView($data); | 50 | $this->assignAllView($data); |
51 | 51 | ||
52 | $content = $this->render('feed.'. $feedType); | 52 | $content = $this->render('feed.' . $feedType); |
53 | 53 | ||
54 | $cache->cache($content); | 54 | $cache->cache($content); |
55 | 55 | ||
diff --git a/application/front/controller/visitor/ShaarliVisitorController.php b/application/front/controller/visitor/ShaarliVisitorController.php index f17c8ed3..55c075a2 100644 --- a/application/front/controller/visitor/ShaarliVisitorController.php +++ b/application/front/controller/visitor/ShaarliVisitorController.php | |||
@@ -78,16 +78,14 @@ abstract class ShaarliVisitorController | |||
78 | 'footer', | 78 | 'footer', |
79 | ]; | 79 | ]; |
80 | 80 | ||
81 | $parameters = $this->buildPluginParameters($template); | ||
82 | |||
81 | foreach ($common_hooks as $name) { | 83 | foreach ($common_hooks as $name) { |
82 | $pluginData = []; | 84 | $pluginData = []; |
83 | $this->container->pluginManager->executeHooks( | 85 | $this->container->pluginManager->executeHooks( |
84 | 'render_' . $name, | 86 | 'render_' . $name, |
85 | $pluginData, | 87 | $pluginData, |
86 | [ | 88 | $parameters |
87 | 'target' => $template, | ||
88 | 'loggedin' => $this->container->loginManager->isLoggedIn(), | ||
89 | 'basePath' => $this->container->basePath, | ||
90 | ] | ||
91 | ); | 89 | ); |
92 | $this->assignView('plugins_' . $name, $pluginData); | 90 | $this->assignView('plugins_' . $name, $pluginData); |
93 | } | 91 | } |
@@ -95,19 +93,23 @@ abstract class ShaarliVisitorController | |||
95 | 93 | ||
96 | protected function executePageHooks(string $hook, array &$data, string $template = null): void | 94 | protected function executePageHooks(string $hook, array &$data, string $template = null): void |
97 | { | 95 | { |
98 | $params = [ | ||
99 | 'target' => $template, | ||
100 | 'loggedin' => $this->container->loginManager->isLoggedIn(), | ||
101 | 'basePath' => $this->container->basePath, | ||
102 | ]; | ||
103 | |||
104 | $this->container->pluginManager->executeHooks( | 96 | $this->container->pluginManager->executeHooks( |
105 | $hook, | 97 | $hook, |
106 | $data, | 98 | $data, |
107 | $params | 99 | $this->buildPluginParameters($template) |
108 | ); | 100 | ); |
109 | } | 101 | } |
110 | 102 | ||
103 | protected function buildPluginParameters(?string $template): array | ||
104 | { | ||
105 | return [ | ||
106 | 'target' => $template, | ||
107 | 'loggedin' => $this->container->loginManager->isLoggedIn(), | ||
108 | 'basePath' => $this->container->basePath, | ||
109 | 'bookmarkService' => $this->container->bookmarkService | ||
110 | ]; | ||
111 | } | ||
112 | |||
111 | /** | 113 | /** |
112 | * Simple helper which prepend the base path to redirect path. | 114 | * Simple helper which prepend the base path to redirect path. |
113 | * | 115 | * |
@@ -140,6 +142,13 @@ abstract class ShaarliVisitorController | |||
140 | 142 | ||
141 | if (null !== $referer) { | 143 | if (null !== $referer) { |
142 | $currentUrl = parse_url($referer); | 144 | $currentUrl = parse_url($referer); |
145 | // If the referer is not related to Shaarli instance, redirect to default | ||
146 | if (isset($currentUrl['host']) | ||
147 | && strpos(index_url($this->container->environment), $currentUrl['host']) === false | ||
148 | ) { | ||
149 | return $response->withRedirect($defaultPath); | ||
150 | } | ||
151 | |||
143 | parse_str($currentUrl['query'] ?? '', $params); | 152 | parse_str($currentUrl['query'] ?? '', $params); |
144 | $path = $currentUrl['path'] ?? $defaultPath; | 153 | $path = $currentUrl['path'] ?? $defaultPath; |
145 | } else { | 154 | } else { |
diff --git a/application/front/controller/visitor/TagCloudController.php b/application/front/controller/visitor/TagCloudController.php index f9c529bc..76ed7690 100644 --- a/application/front/controller/visitor/TagCloudController.php +++ b/application/front/controller/visitor/TagCloudController.php | |||
@@ -66,10 +66,18 @@ class TagCloudController extends ShaarliVisitorController | |||
66 | $tags = $this->formatTagsForCloud($tags); | 66 | $tags = $this->formatTagsForCloud($tags); |
67 | } | 67 | } |
68 | 68 | ||
69 | $tagsUrl = []; | ||
70 | foreach ($tags as $tag => $value) { | ||
71 | $tagsUrl[escape($tag)] = urlencode((string) $tag); | ||
72 | } | ||
73 | |||
69 | $searchTags = implode(' ', escape($filteringTags)); | 74 | $searchTags = implode(' ', escape($filteringTags)); |
75 | $searchTagsUrl = urlencode(implode(' ', $filteringTags)); | ||
70 | $data = [ | 76 | $data = [ |
71 | 'search_tags' => $searchTags, | 77 | 'search_tags' => escape($searchTags), |
72 | 'tags' => $tags, | 78 | 'search_tags_url' => $searchTagsUrl, |
79 | 'tags' => escape($tags), | ||
80 | 'tags_url' => $tagsUrl, | ||
73 | ]; | 81 | ]; |
74 | $this->executePageHooks('render_tag' . $type, $data, 'tag.' . $type); | 82 | $this->executePageHooks('render_tag' . $type, $data, 'tag.' . $type); |
75 | $this->assignAllView($data); | 83 | $this->assignAllView($data); |
diff --git a/application/http/HttpUtils.php b/application/http/HttpUtils.php index 4fc4e3dc..9f414073 100644 --- a/application/http/HttpUtils.php +++ b/application/http/HttpUtils.php | |||
@@ -369,7 +369,11 @@ function server_url($server) | |||
369 | */ | 369 | */ |
370 | function index_url($server) | 370 | function index_url($server) |
371 | { | 371 | { |
372 | $scriptname = $server['SCRIPT_NAME'] ?? ''; | 372 | if (defined('SHAARLI_ROOT_URL') && null !== SHAARLI_ROOT_URL) { |
373 | return rtrim(SHAARLI_ROOT_URL, '/') . '/'; | ||
374 | } | ||
375 | |||
376 | $scriptname = !empty($server['SCRIPT_NAME']) ? $server['SCRIPT_NAME'] : '/'; | ||
373 | if (endsWith($scriptname, 'index.php')) { | 377 | if (endsWith($scriptname, 'index.php')) { |
374 | $scriptname = substr($scriptname, 0, -9); | 378 | $scriptname = substr($scriptname, 0, -9); |
375 | } | 379 | } |
@@ -392,7 +396,7 @@ function page_url($server) | |||
392 | $scriptname = substr($scriptname, 0, -9); | 396 | $scriptname = substr($scriptname, 0, -9); |
393 | } | 397 | } |
394 | 398 | ||
395 | $route = ltrim($server['REQUEST_URI'] ?? '', $scriptname); | 399 | $route = preg_replace('@^' . $scriptname . '@', '', $server['REQUEST_URI'] ?? ''); |
396 | if (! empty($server['QUERY_STRING'])) { | 400 | if (! empty($server['QUERY_STRING'])) { |
397 | return index_url($server) . $route . '?' . $server['QUERY_STRING']; | 401 | return index_url($server) . $route . '?' . $server['QUERY_STRING']; |
398 | } | 402 | } |
diff --git a/application/legacy/LegacyController.php b/application/legacy/LegacyController.php index 26465d2c..826604e7 100644 --- a/application/legacy/LegacyController.php +++ b/application/legacy/LegacyController.php | |||
@@ -39,29 +39,44 @@ class LegacyController extends ShaarliVisitorController | |||
39 | /** Legacy route: ?post= */ | 39 | /** Legacy route: ?post= */ |
40 | public function post(Request $request, Response $response): Response | 40 | public function post(Request $request, Response $response): Response |
41 | { | 41 | { |
42 | $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : ''; | 42 | $route = '/admin/shaare'; |
43 | $buildParameters = function (?array $parameters, bool $encode) { | ||
44 | if ($encode) { | ||
45 | $parameters = array_map('urlencode', $parameters); | ||
46 | } | ||
47 | |||
48 | return count($parameters) > 0 ? '?' . http_build_query($parameters) : ''; | ||
49 | }; | ||
50 | |||
43 | 51 | ||
44 | if (!$this->container->loginManager->isLoggedIn()) { | 52 | if (!$this->container->loginManager->isLoggedIn()) { |
45 | return $this->redirect($response, '/login' . $parameters); | 53 | $parameters = $buildParameters($request->getQueryParams(), true); |
54 | return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters); | ||
46 | } | 55 | } |
47 | 56 | ||
48 | return $this->redirect($response, '/admin/shaare' . $parameters); | 57 | $parameters = $buildParameters($request->getQueryParams(), false); |
58 | |||
59 | return $this->redirect($response, $route . $parameters); | ||
49 | } | 60 | } |
50 | 61 | ||
51 | /** Legacy route: ?addlink= */ | 62 | /** Legacy route: ?addlink= */ |
52 | protected function addlink(Request $request, Response $response): Response | 63 | protected function addlink(Request $request, Response $response): Response |
53 | { | 64 | { |
65 | $route = '/admin/add-shaare'; | ||
66 | |||
54 | if (!$this->container->loginManager->isLoggedIn()) { | 67 | if (!$this->container->loginManager->isLoggedIn()) { |
55 | return $this->redirect($response, '/login'); | 68 | return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route); |
56 | } | 69 | } |
57 | 70 | ||
58 | return $this->redirect($response, '/admin/add-shaare'); | 71 | return $this->redirect($response, $route); |
59 | } | 72 | } |
60 | 73 | ||
61 | /** Legacy route: ?do=login */ | 74 | /** Legacy route: ?do=login */ |
62 | protected function login(Request $request, Response $response): Response | 75 | protected function login(Request $request, Response $response): Response |
63 | { | 76 | { |
64 | return $this->redirect($response, '/login'); | 77 | $returnUrl = $request->getQueryParam('returnurl'); |
78 | |||
79 | return $this->redirect($response, '/login' . ($returnUrl ? '?returnurl=' . $returnUrl : '')); | ||
65 | } | 80 | } |
66 | 81 | ||
67 | /** Legacy route: ?do=logout */ | 82 | /** Legacy route: ?do=logout */ |
@@ -127,4 +142,21 @@ class LegacyController extends ShaarliVisitorController | |||
127 | 142 | ||
128 | return $this->redirect($response, '/feed/' . $feedType . $parameters); | 143 | return $this->redirect($response, '/feed/' . $feedType . $parameters); |
129 | } | 144 | } |
145 | |||
146 | /** Legacy route: ?do=configure */ | ||
147 | protected function configure(Request $request, Response $response): Response | ||
148 | { | ||
149 | $route = '/admin/configure'; | ||
150 | |||
151 | if (!$this->container->loginManager->isLoggedIn()) { | ||
152 | return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route); | ||
153 | } | ||
154 | |||
155 | return $this->redirect($response, $route); | ||
156 | } | ||
157 | |||
158 | protected function getBasePath(): string | ||
159 | { | ||
160 | return $this->container->basePath ?: ''; | ||
161 | } | ||
130 | } | 162 | } |
diff --git a/application/legacy/LegacyRouter.php b/application/legacy/LegacyRouter.php index cea99154..0449c7e1 100644 --- a/application/legacy/LegacyRouter.php +++ b/application/legacy/LegacyRouter.php | |||
@@ -17,15 +17,15 @@ class LegacyRouter | |||
17 | 17 | ||
18 | public static $PAGE_PICWALL = 'picwall'; | 18 | public static $PAGE_PICWALL = 'picwall'; |
19 | 19 | ||
20 | public static $PAGE_TAGCLOUD = 'tagcloud'; | 20 | public static $PAGE_TAGCLOUD = 'tag.cloud'; |
21 | 21 | ||
22 | public static $PAGE_TAGLIST = 'taglist'; | 22 | public static $PAGE_TAGLIST = 'tag.list'; |
23 | 23 | ||
24 | public static $PAGE_DAILY = 'daily'; | 24 | public static $PAGE_DAILY = 'daily'; |
25 | 25 | ||
26 | public static $PAGE_FEED_ATOM = 'atom'; | 26 | public static $PAGE_FEED_ATOM = 'feed.atom'; |
27 | 27 | ||
28 | public static $PAGE_FEED_RSS = 'rss'; | 28 | public static $PAGE_FEED_RSS = 'feed.rss'; |
29 | 29 | ||
30 | public static $PAGE_TOOLS = 'tools'; | 30 | public static $PAGE_TOOLS = 'tools'; |
31 | 31 | ||
@@ -37,7 +37,7 @@ class LegacyRouter | |||
37 | 37 | ||
38 | public static $PAGE_ADDLINK = 'addlink'; | 38 | public static $PAGE_ADDLINK = 'addlink'; |
39 | 39 | ||
40 | public static $PAGE_EDITLINK = 'edit_link'; | 40 | public static $PAGE_EDITLINK = 'editlink'; |
41 | 41 | ||
42 | public static $PAGE_DELETELINK = 'delete_link'; | 42 | public static $PAGE_DELETELINK = 'delete_link'; |
43 | 43 | ||
@@ -60,128 +60,4 @@ class LegacyRouter | |||
60 | public static $PAGE_THUMBS_UPDATE = 'thumbs_update'; | 60 | public static $PAGE_THUMBS_UPDATE = 'thumbs_update'; |
61 | 61 | ||
62 | public static $GET_TOKEN = 'token'; | 62 | public static $GET_TOKEN = 'token'; |
63 | |||
64 | /** | ||
65 | * Reproducing renderPage() if hell, to avoid regression. | ||
66 | * | ||
67 | * This highlights how bad this needs to be rewrite, | ||
68 | * but let's focus on plugins for now. | ||
69 | * | ||
70 | * @param string $query $_SERVER['QUERY_STRING']. | ||
71 | * @param array $get $_SERVER['GET']. | ||
72 | * @param bool $loggedIn true if authenticated user. | ||
73 | * | ||
74 | * @return string page found. | ||
75 | */ | ||
76 | public static function findPage($query, $get, $loggedIn) | ||
77 | { | ||
78 | $loggedIn = ($loggedIn === true) ? true : false; | ||
79 | |||
80 | if (empty($query) && !isset($get['edit_link']) && !isset($get['post'])) { | ||
81 | return self::$PAGE_LINKLIST; | ||
82 | } | ||
83 | |||
84 | if (startsWith($query, 'do=' . self::$PAGE_LOGIN) && $loggedIn === false) { | ||
85 | return self::$PAGE_LOGIN; | ||
86 | } | ||
87 | |||
88 | if (startsWith($query, 'do=' . self::$PAGE_PICWALL)) { | ||
89 | return self::$PAGE_PICWALL; | ||
90 | } | ||
91 | |||
92 | if (startsWith($query, 'do=' . self::$PAGE_TAGCLOUD)) { | ||
93 | return self::$PAGE_TAGCLOUD; | ||
94 | } | ||
95 | |||
96 | if (startsWith($query, 'do=' . self::$PAGE_TAGLIST)) { | ||
97 | return self::$PAGE_TAGLIST; | ||
98 | } | ||
99 | |||
100 | if (startsWith($query, 'do=' . self::$PAGE_OPENSEARCH)) { | ||
101 | return self::$PAGE_OPENSEARCH; | ||
102 | } | ||
103 | |||
104 | if (startsWith($query, 'do=' . self::$PAGE_DAILY)) { | ||
105 | return self::$PAGE_DAILY; | ||
106 | } | ||
107 | |||
108 | if (startsWith($query, 'do=' . self::$PAGE_FEED_ATOM)) { | ||
109 | return self::$PAGE_FEED_ATOM; | ||
110 | } | ||
111 | |||
112 | if (startsWith($query, 'do=' . self::$PAGE_FEED_RSS)) { | ||
113 | return self::$PAGE_FEED_RSS; | ||
114 | } | ||
115 | |||
116 | if (startsWith($query, 'do=' . self::$PAGE_THUMBS_UPDATE)) { | ||
117 | return self::$PAGE_THUMBS_UPDATE; | ||
118 | } | ||
119 | |||
120 | if (startsWith($query, 'do=' . self::$AJAX_THUMB_UPDATE)) { | ||
121 | return self::$AJAX_THUMB_UPDATE; | ||
122 | } | ||
123 | |||
124 | // At this point, only loggedin pages. | ||
125 | if (!$loggedIn) { | ||
126 | return self::$PAGE_LINKLIST; | ||
127 | } | ||
128 | |||
129 | if (startsWith($query, 'do=' . self::$PAGE_TOOLS)) { | ||
130 | return self::$PAGE_TOOLS; | ||
131 | } | ||
132 | |||
133 | if (startsWith($query, 'do=' . self::$PAGE_CHANGEPASSWORD)) { | ||
134 | return self::$PAGE_CHANGEPASSWORD; | ||
135 | } | ||
136 | |||
137 | if (startsWith($query, 'do=' . self::$PAGE_CONFIGURE)) { | ||
138 | return self::$PAGE_CONFIGURE; | ||
139 | } | ||
140 | |||
141 | if (startsWith($query, 'do=' . self::$PAGE_CHANGETAG)) { | ||
142 | return self::$PAGE_CHANGETAG; | ||
143 | } | ||
144 | |||
145 | if (startsWith($query, 'do=' . self::$PAGE_ADDLINK)) { | ||
146 | return self::$PAGE_ADDLINK; | ||
147 | } | ||
148 | |||
149 | if (isset($get['edit_link']) || isset($get['post'])) { | ||
150 | return self::$PAGE_EDITLINK; | ||
151 | } | ||
152 | |||
153 | if (isset($get['delete_link'])) { | ||
154 | return self::$PAGE_DELETELINK; | ||
155 | } | ||
156 | |||
157 | if (isset($get[self::$PAGE_CHANGE_VISIBILITY])) { | ||
158 | return self::$PAGE_CHANGE_VISIBILITY; | ||
159 | } | ||
160 | |||
161 | if (startsWith($query, 'do=' . self::$PAGE_PINLINK)) { | ||
162 | return self::$PAGE_PINLINK; | ||
163 | } | ||
164 | |||
165 | if (startsWith($query, 'do=' . self::$PAGE_EXPORT)) { | ||
166 | return self::$PAGE_EXPORT; | ||
167 | } | ||
168 | |||
169 | if (startsWith($query, 'do=' . self::$PAGE_IMPORT)) { | ||
170 | return self::$PAGE_IMPORT; | ||
171 | } | ||
172 | |||
173 | if (startsWith($query, 'do=' . self::$PAGE_PLUGINSADMIN)) { | ||
174 | return self::$PAGE_PLUGINSADMIN; | ||
175 | } | ||
176 | |||
177 | if (startsWith($query, 'do=' . self::$PAGE_SAVE_PLUGINSADMIN)) { | ||
178 | return self::$PAGE_SAVE_PLUGINSADMIN; | ||
179 | } | ||
180 | |||
181 | if (startsWith($query, 'do=' . self::$GET_TOKEN)) { | ||
182 | return self::$GET_TOKEN; | ||
183 | } | ||
184 | |||
185 | return self::$PAGE_LINKLIST; | ||
186 | } | ||
187 | } | 63 | } |
diff --git a/application/plugin/PluginManager.php b/application/plugin/PluginManager.php index 2d93cb3a..1b2197c9 100644 --- a/application/plugin/PluginManager.php +++ b/application/plugin/PluginManager.php | |||
@@ -100,16 +100,17 @@ class PluginManager | |||
100 | */ | 100 | */ |
101 | public function executeHooks($hook, &$data, $params = array()) | 101 | public function executeHooks($hook, &$data, $params = array()) |
102 | { | 102 | { |
103 | if (!empty($params['target'])) { | 103 | $metadataParameters = [ |
104 | $data['_PAGE_'] = $params['target']; | 104 | 'target' => '_PAGE_', |
105 | } | 105 | 'loggedin' => '_LOGGEDIN_', |
106 | 106 | 'basePath' => '_BASE_PATH_', | |
107 | if (isset($params['loggedin'])) { | 107 | 'bookmarkService' => '_BOOKMARK_SERVICE_', |
108 | $data['_LOGGEDIN_'] = $params['loggedin']; | 108 | ]; |
109 | } | 109 | |
110 | 110 | foreach ($metadataParameters as $parameter => $metaKey) { | |
111 | if (isset($params['basePath'])) { | 111 | if (array_key_exists($parameter, $params)) { |
112 | $data['_BASE_PATH_'] = $params['basePath']; | 112 | $data[$metaKey] = $params[$parameter]; |
113 | } | ||
113 | } | 114 | } |
114 | 115 | ||
115 | foreach ($this->loadedPlugins as $plugin) { | 116 | foreach ($this->loadedPlugins as $plugin) { |
@@ -124,6 +125,10 @@ class PluginManager | |||
124 | } | 125 | } |
125 | } | 126 | } |
126 | } | 127 | } |
128 | |||
129 | foreach ($metadataParameters as $metaKey) { | ||
130 | unset($data[$metaKey]); | ||
131 | } | ||
127 | } | 132 | } |
128 | 133 | ||
129 | /** | 134 | /** |
diff --git a/application/render/PageBuilder.php b/application/render/PageBuilder.php index 7a716673..41b357dd 100644 --- a/application/render/PageBuilder.php +++ b/application/render/PageBuilder.php | |||
@@ -137,7 +137,7 @@ class PageBuilder | |||
137 | $this->tpl->assign('language', $this->conf->get('translation.language')); | 137 | $this->tpl->assign('language', $this->conf->get('translation.language')); |
138 | 138 | ||
139 | if ($this->bookmarkService !== null) { | 139 | if ($this->bookmarkService !== null) { |
140 | $this->tpl->assign('tags', $this->bookmarkService->bookmarksCountPerTag()); | 140 | $this->tpl->assign('tags', escape($this->bookmarkService->bookmarksCountPerTag())); |
141 | } | 141 | } |
142 | 142 | ||
143 | $this->tpl->assign( | 143 | $this->tpl->assign( |
@@ -149,6 +149,8 @@ class PageBuilder | |||
149 | 149 | ||
150 | $this->tpl->assign('formatter', $this->conf->get('formatter', 'default')); | 150 | $this->tpl->assign('formatter', $this->conf->get('formatter', 'default')); |
151 | 151 | ||
152 | $this->tpl->assign('links_per_page', $this->session['LINKS_PER_PAGE']); | ||
153 | |||
152 | // To be removed with a proper theme configuration. | 154 | // To be removed with a proper theme configuration. |
153 | $this->tpl->assign('conf', $this->conf); | 155 | $this->tpl->assign('conf', $this->conf); |
154 | } | 156 | } |
diff --git a/application/security/SessionManager.php b/application/security/SessionManager.php index 76b0afe8..36df8c1c 100644 --- a/application/security/SessionManager.php +++ b/application/security/SessionManager.php | |||
@@ -183,7 +183,6 @@ class SessionManager | |||
183 | unset($this->session['expires_on']); | 183 | unset($this->session['expires_on']); |
184 | unset($this->session['username']); | 184 | unset($this->session['username']); |
185 | unset($this->session['visibility']); | 185 | unset($this->session['visibility']); |
186 | unset($this->session['untaggedonly']); | ||
187 | } | 186 | } |
188 | } | 187 | } |
189 | 188 | ||
diff --git a/assets/default/js/base.js b/assets/default/js/base.js index 0f29799d..be986ae0 100644 --- a/assets/default/js/base.js +++ b/assets/default/js/base.js | |||
@@ -10,7 +10,7 @@ import Awesomplete from 'awesomplete'; | |||
10 | * @returns Found element or null. | 10 | * @returns Found element or null. |
11 | */ | 11 | */ |
12 | function findParent(element, tagName, attributes) { | 12 | function findParent(element, tagName, attributes) { |
13 | const parentMatch = key => attributes[key] !== '' && element.getAttribute(key).indexOf(attributes[key]) !== -1; | 13 | const parentMatch = (key) => attributes[key] !== '' && element.getAttribute(key).indexOf(attributes[key]) !== -1; |
14 | while (element) { | 14 | while (element) { |
15 | if (element.tagName.toLowerCase() === tagName) { | 15 | if (element.tagName.toLowerCase() === tagName) { |
16 | if (Object.keys(attributes).find(parentMatch)) { | 16 | if (Object.keys(attributes).find(parentMatch)) { |
@@ -25,16 +25,18 @@ function findParent(element, tagName, attributes) { | |||
25 | /** | 25 | /** |
26 | * Ajax request to refresh the CSRF token. | 26 | * Ajax request to refresh the CSRF token. |
27 | */ | 27 | */ |
28 | function refreshToken(basePath) { | 28 | function refreshToken(basePath, callback) { |
29 | console.log('refresh'); | ||
30 | const xhr = new XMLHttpRequest(); | 29 | const xhr = new XMLHttpRequest(); |
31 | xhr.open('GET', `${basePath}/admin/token`); | 30 | xhr.open('GET', `${basePath}/admin/token`); |
32 | xhr.onload = () => { | 31 | xhr.onload = () => { |
33 | const elements = document.querySelectorAll('input[name="token"]'); | 32 | const elements = document.querySelectorAll('input[name="token"]'); |
34 | [...elements].forEach((element) => { | 33 | [...elements].forEach((element) => { |
35 | console.log(element); | ||
36 | element.setAttribute('value', xhr.responseText); | 34 | element.setAttribute('value', xhr.responseText); |
37 | }); | 35 | }); |
36 | |||
37 | if (callback) { | ||
38 | callback(xhr.response); | ||
39 | } | ||
38 | }; | 40 | }; |
39 | xhr.send(); | 41 | xhr.send(); |
40 | } | 42 | } |
@@ -99,7 +101,7 @@ function updateAwesompleteList(selector, tags, instances) { | |||
99 | * @see http://stackoverflow.com/questions/18749591/encode-html-entities-in-javascript | 101 | * @see http://stackoverflow.com/questions/18749591/encode-html-entities-in-javascript |
100 | */ | 102 | */ |
101 | function htmlEntities(str) { | 103 | function htmlEntities(str) { |
102 | return str.replace(/[\u00A0-\u9999<>&]/gim, i => `&#${i.charCodeAt(0)};`); | 104 | return str.replace(/[\u00A0-\u9999<>&]/gim, (i) => `&#${i.charCodeAt(0)};`); |
103 | } | 105 | } |
104 | 106 | ||
105 | /** | 107 | /** |
@@ -192,8 +194,8 @@ function removeClass(element, classname) { | |||
192 | function init(description) { | 194 | function init(description) { |
193 | function resize() { | 195 | function resize() { |
194 | /* Fix jumpy resizing: https://stackoverflow.com/a/18262927/1484919 */ | 196 | /* Fix jumpy resizing: https://stackoverflow.com/a/18262927/1484919 */ |
195 | const scrollTop = window.pageYOffset || | 197 | const scrollTop = window.pageYOffset |
196 | (document.documentElement || document.body.parentNode || document.body).scrollTop; | 198 | || (document.documentElement || document.body.parentNode || document.body).scrollTop; |
197 | 199 | ||
198 | description.style.height = 'auto'; | 200 | description.style.height = 'auto'; |
199 | description.style.height = `${description.scrollHeight + 10}px`; | 201 | description.style.height = `${description.scrollHeight + 10}px`; |
@@ -488,9 +490,10 @@ function init(description) { | |||
488 | }); | 490 | }); |
489 | }); | 491 | }); |
490 | 492 | ||
491 | const ids = links.map(item => item.id); | 493 | const ids = links.map((item) => item.id); |
492 | window.location = | 494 | window.location = ( |
493 | `${basePath}/admin/shaare/visibility?token=${token.value}&newVisibility=${visibility}&id=${ids.join('+')}`; | 495 | `${basePath}/admin/shaare/visibility?token=${token.value}&newVisibility=${visibility}&id=${ids.join('+')}` |
496 | ); | ||
494 | }); | 497 | }); |
495 | }); | 498 | }); |
496 | } | 499 | } |
@@ -552,6 +555,7 @@ function init(description) { | |||
552 | } | 555 | } |
553 | const refreshedToken = document.getElementById('token').value; | 556 | const refreshedToken = document.getElementById('token').value; |
554 | const fromtag = block.getAttribute('data-tag'); | 557 | const fromtag = block.getAttribute('data-tag'); |
558 | const fromtagUrl = block.getAttribute('data-tag-url'); | ||
555 | const xhr = new XMLHttpRequest(); | 559 | const xhr = new XMLHttpRequest(); |
556 | xhr.open('POST', `${basePath}/admin/tags`); | 560 | xhr.open('POST', `${basePath}/admin/tags`); |
557 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); | 561 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); |
@@ -561,6 +565,7 @@ function init(description) { | |||
561 | location.reload(); | 565 | location.reload(); |
562 | } else { | 566 | } else { |
563 | block.setAttribute('data-tag', totag); | 567 | block.setAttribute('data-tag', totag); |
568 | block.setAttribute('data-tag-url', encodeURIComponent(totag)); | ||
564 | input.setAttribute('name', totag); | 569 | input.setAttribute('name', totag); |
565 | input.setAttribute('value', totag); | 570 | input.setAttribute('value', totag); |
566 | findParent(input, 'div', { class: 'rename-tag-form' }).style.display = 'none'; | 571 | findParent(input, 'div', { class: 'rename-tag-form' }).style.display = 'none'; |
@@ -569,15 +574,18 @@ function init(description) { | |||
569 | .querySelector('a.tag-link') | 574 | .querySelector('a.tag-link') |
570 | .setAttribute('href', `${basePath}/?searchtags=${encodeURIComponent(totag)}`); | 575 | .setAttribute('href', `${basePath}/?searchtags=${encodeURIComponent(totag)}`); |
571 | block | 576 | block |
577 | .querySelector('a.count') | ||
578 | .setAttribute('href', `${basePath}/add-tag/${encodeURIComponent(totag)}`); | ||
579 | block | ||
572 | .querySelector('a.rename-tag') | 580 | .querySelector('a.rename-tag') |
573 | .setAttribute('href', `${basePath}/admin/tags?fromtag=${encodeURIComponent(totag)}`); | 581 | .setAttribute('href', `${basePath}/admin/tags?fromtag=${encodeURIComponent(totag)}`); |
574 | 582 | ||
575 | // Refresh awesomplete values | 583 | // Refresh awesomplete values |
576 | existingTags = existingTags.map(tag => (tag === fromtag ? totag : tag)); | 584 | existingTags = existingTags.map((tag) => (tag === fromtag ? totag : tag)); |
577 | awesomepletes = updateAwesompleteList('.rename-tag-input', existingTags, awesomepletes); | 585 | awesomepletes = updateAwesompleteList('.rename-tag-input', existingTags, awesomepletes); |
578 | } | 586 | } |
579 | }; | 587 | }; |
580 | xhr.send(`renametag=1&fromtag=${encodeURIComponent(fromtag)}&totag=${encodeURIComponent(totag)}&token=${refreshedToken}`); | 588 | xhr.send(`renametag=1&fromtag=${fromtagUrl}&totag=${encodeURIComponent(totag)}&token=${refreshedToken}`); |
581 | refreshToken(basePath); | 589 | refreshToken(basePath); |
582 | }); | 590 | }); |
583 | }); | 591 | }); |
@@ -600,6 +608,7 @@ function init(description) { | |||
600 | event.preventDefault(); | 608 | event.preventDefault(); |
601 | const block = findParent(event.target, 'div', { class: 'tag-list-item' }); | 609 | const block = findParent(event.target, 'div', { class: 'tag-list-item' }); |
602 | const tag = block.getAttribute('data-tag'); | 610 | const tag = block.getAttribute('data-tag'); |
611 | const tagUrl = block.getAttribute('data-tag-url'); | ||
603 | const refreshedToken = document.getElementById('token').value; | 612 | const refreshedToken = document.getElementById('token').value; |
604 | 613 | ||
605 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { | 614 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { |
@@ -609,10 +618,10 @@ function init(description) { | |||
609 | xhr.onload = () => { | 618 | xhr.onload = () => { |
610 | block.remove(); | 619 | block.remove(); |
611 | }; | 620 | }; |
612 | xhr.send(encodeURI(`deletetag=1&fromtag=${tag}&token=${refreshedToken}`)); | 621 | xhr.send(`deletetag=1&fromtag=${tagUrl}&token=${refreshedToken}`); |
613 | refreshToken(basePath); | 622 | refreshToken(basePath); |
614 | 623 | ||
615 | existingTags = existingTags.filter(tagItem => tagItem !== tag); | 624 | existingTags = existingTags.filter((tagItem) => tagItem !== tag); |
616 | awesomepletes = updateAwesompleteList('.rename-tag-input', existingTags, awesomepletes); | 625 | awesomepletes = updateAwesompleteList('.rename-tag-input', existingTags, awesomepletes); |
617 | } | 626 | } |
618 | }); | 627 | }); |
@@ -622,4 +631,15 @@ function init(description) { | |||
622 | [...autocompleteFields].forEach((autocompleteField) => { | 631 | [...autocompleteFields].forEach((autocompleteField) => { |
623 | awesomepletes.push(createAwesompleteInstance(autocompleteField)); | 632 | awesomepletes.push(createAwesompleteInstance(autocompleteField)); |
624 | }); | 633 | }); |
634 | |||
635 | const exportForm = document.querySelector('#exportform'); | ||
636 | if (exportForm != null) { | ||
637 | exportForm.addEventListener('submit', (event) => { | ||
638 | event.preventDefault(); | ||
639 | |||
640 | refreshToken(basePath, () => { | ||
641 | event.target.submit(); | ||
642 | }); | ||
643 | }); | ||
644 | } | ||
625 | })(); | 645 | })(); |
diff --git a/assets/default/scss/shaarli.scss b/assets/default/scss/shaarli.scss index 759dff29..a528adb0 100644 --- a/assets/default/scss/shaarli.scss +++ b/assets/default/scss/shaarli.scss | |||
@@ -69,20 +69,22 @@ pre { | |||
69 | font-family: 'Roboto'; | 69 | font-family: 'Roboto'; |
70 | font-weight: 400; | 70 | font-weight: 400; |
71 | font-style: normal; | 71 | font-style: normal; |
72 | src: local('Roboto'), | 72 | src: |
73 | local('Roboto-Regular'), | 73 | local('Roboto'), |
74 | url('../fonts/Roboto-Regular.woff2') format('woff2'), | 74 | local('Roboto-Regular'), |
75 | url('../fonts/Roboto-Regular.woff') format('woff'); | 75 | url('../fonts/Roboto-Regular.woff2') format('woff2'), |
76 | url('../fonts/Roboto-Regular.woff') format('woff'); | ||
76 | } | 77 | } |
77 | 78 | ||
78 | @font-face { | 79 | @font-face { |
79 | font-family: 'Roboto'; | 80 | font-family: 'Roboto'; |
80 | font-weight: 700; | 81 | font-weight: 700; |
81 | font-style: normal; | 82 | font-style: normal; |
82 | src: local('Roboto'), | 83 | src: |
83 | local('Roboto-Bold'), | 84 | local('Roboto'), |
84 | url('../fonts/Roboto-Bold.woff2') format('woff2'), | 85 | local('Roboto-Bold'), |
85 | url('../fonts/Roboto-Bold.woff') format('woff'); | 86 | url('../fonts/Roboto-Bold.woff2') format('woff2'), |
87 | url('../fonts/Roboto-Bold.woff') format('woff'); | ||
86 | } | 88 | } |
87 | 89 | ||
88 | body, | 90 | body, |
@@ -375,7 +377,7 @@ body, | |||
375 | } | 377 | } |
376 | 378 | ||
377 | @media screen and (max-width: 64em) { | 379 | @media screen and (max-width: 64em) { |
378 | .header-search , | 380 | .header-search, |
379 | .header-search * { | 381 | .header-search * { |
380 | visibility: hidden; | 382 | visibility: hidden; |
381 | } | 383 | } |
@@ -554,7 +556,6 @@ body, | |||
554 | color: $dark-grey; | 556 | color: $dark-grey; |
555 | font-size: .9em; | 557 | font-size: .9em; |
556 | 558 | ||
557 | |||
558 | a { | 559 | a { |
559 | display: inline-block; | 560 | display: inline-block; |
560 | margin: 3px 0; | 561 | margin: 3px 0; |
@@ -616,6 +617,11 @@ body, | |||
616 | padding: 5px; | 617 | padding: 5px; |
617 | text-decoration: none; | 618 | text-decoration: none; |
618 | color: $dark-grey; | 619 | color: $dark-grey; |
620 | |||
621 | &.selected { | ||
622 | background: var(--main-color); | ||
623 | color: $white; | ||
624 | } | ||
619 | } | 625 | } |
620 | 626 | ||
621 | input { | 627 | input { |
@@ -1552,11 +1558,11 @@ form { | |||
1552 | text-align: center; | 1558 | text-align: center; |
1553 | 1559 | ||
1554 | a { | 1560 | a { |
1561 | background: $almost-white; | ||
1555 | display: inline-block; | 1562 | display: inline-block; |
1556 | margin: 0 15px; | 1563 | padding: 5px; |
1557 | text-decoration: none; | 1564 | text-decoration: none; |
1558 | color: $white; | 1565 | color: $dark-grey; |
1559 | font-weight: bold; | ||
1560 | } | 1566 | } |
1561 | } | 1567 | } |
1562 | 1568 | ||
@@ -1604,13 +1610,14 @@ form { | |||
1604 | 1610 | ||
1605 | > div { | 1611 | > div { |
1606 | border-radius: 10px; | 1612 | border-radius: 10px; |
1607 | background: repeating-linear-gradient( | 1613 | background: |
1608 | -45deg, | 1614 | repeating-linear-gradient( |
1609 | $almost-white, | 1615 | -45deg, |
1610 | $almost-white 6px, | 1616 | $almost-white, |
1611 | var(--background-color) 6px, | 1617 | $almost-white 6px, |
1612 | var(--background-color) 12px | 1618 | var(--background-color) 6px, |
1613 | ); | 1619 | var(--background-color) 12px |
1620 | ); | ||
1614 | width: 0%; | 1621 | width: 0%; |
1615 | height: 10px; | 1622 | height: 10px; |
1616 | } | 1623 | } |
diff --git a/assets/vintage/css/shaarli.css b/assets/vintage/css/shaarli.css index 87c440c8..1688dce0 100644 --- a/assets/vintage/css/shaarli.css +++ b/assets/vintage/css/shaarli.css | |||
@@ -746,8 +746,6 @@ a.bigbutton, #pageheader a.bigbutton { | |||
746 | text-align: left; | 746 | text-align: left; |
747 | background-color: transparent; | 747 | background-color: transparent; |
748 | background-color: rgba(0, 0, 0, 0.4); | 748 | background-color: rgba(0, 0, 0, 0.4); |
749 | /* FF3+, Saf3+, Opera 10.10+, Chrome, IE9 */ | ||
750 | filter: progid: DXImageTransform.Microsoft.gradient(startColorstr=#66000000, endColorstr=#66000000); | ||
751 | /* IE6IE9 */ | 749 | /* IE6IE9 */ |
752 | text-shadow: 2px 2px 1px #000000; | 750 | text-shadow: 2px 2px 1px #000000; |
753 | } | 751 | } |
diff --git a/composer.json b/composer.json index 738d9f58..7e675623 100644 --- a/composer.json +++ b/composer.json | |||
@@ -10,6 +10,7 @@ | |||
10 | }, | 10 | }, |
11 | "keywords": ["bookmark", "link", "share", "web"], | 11 | "keywords": ["bookmark", "link", "share", "web"], |
12 | "config": { | 12 | "config": { |
13 | "sort-packages": true, | ||
13 | "platform": { | 14 | "platform": { |
14 | "php": "7.1.29" | 15 | "php": "7.1.29" |
15 | } | 16 | } |
@@ -18,18 +19,18 @@ | |||
18 | "php": ">=7.1", | 19 | "php": ">=7.1", |
19 | "ext-json": "*", | 20 | "ext-json": "*", |
20 | "ext-zlib": "*", | 21 | "ext-zlib": "*", |
21 | "shaarli/netscape-bookmark-parser": "^2.1", | ||
22 | "erusev/parsedown": "^1.6", | ||
23 | "slim/slim": "^3.0", | ||
24 | "arthurhoaro/web-thumbnailer": "^2.0", | 22 | "arthurhoaro/web-thumbnailer": "^2.0", |
23 | "erusev/parsedown": "^1.6", | ||
24 | "erusev/parsedown-extra": "^0.8.1", | ||
25 | "gettext/gettext": "^4.4", | ||
25 | "pubsubhubbub/publisher": "dev-master", | 26 | "pubsubhubbub/publisher": "dev-master", |
26 | "gettext/gettext": "^4.4" | 27 | "shaarli/netscape-bookmark-parser": "^2.1", |
28 | "slim/slim": "^3.0" | ||
27 | }, | 29 | }, |
28 | "require-dev": { | 30 | "require-dev": { |
29 | "roave/security-advisories": "dev-master", | 31 | "roave/security-advisories": "dev-master", |
30 | "phpunit/phpcov": "*", | 32 | "squizlabs/php_codesniffer": "3.*", |
31 | "phpunit/phpunit": "^7.5", | 33 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" |
32 | "squizlabs/php_codesniffer": "3.*" | ||
33 | }, | 34 | }, |
34 | "suggest": { | 35 | "suggest": { |
35 | "ext-curl": "Allows fetching web pages and thumbnails in a more robust way", | 36 | "ext-curl": "Allows fetching web pages and thumbnails in a more robust way", |
diff --git a/composer.lock b/composer.lock index ae7a9269..e02491ff 100644 --- a/composer.lock +++ b/composer.lock | |||
@@ -4,29 +4,31 @@ | |||
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", |
5 | "This file is @generated automatically" | 5 | "This file is @generated automatically" |
6 | ], | 6 | ], |
7 | "content-hash": "37e420b4b6e9fa74b27e127dd422d9a6", | 7 | "content-hash": "f84918821b0dceb0cd569875c0418bb8", |
8 | "packages": [ | 8 | "packages": [ |
9 | { | 9 | { |
10 | "name": "arthurhoaro/web-thumbnailer", | 10 | "name": "arthurhoaro/web-thumbnailer", |
11 | "version": "v2.0.1", | 11 | "version": "v2.0.3", |
12 | "source": { | 12 | "source": { |
13 | "type": "git", | 13 | "type": "git", |
14 | "url": "https://github.com/ArthurHoaro/web-thumbnailer.git", | 14 | "url": "https://github.com/ArthurHoaro/web-thumbnailer.git", |
15 | "reference": "4aa27a1b54b9823341fedd7ca2dcfb11a6b3186a" | 15 | "reference": "39bfd4f3136d9e6096496b9720e877326cfe4775" |
16 | }, | 16 | }, |
17 | "dist": { | 17 | "dist": { |
18 | "type": "zip", | 18 | "type": "zip", |
19 | "url": "https://api.github.com/repos/ArthurHoaro/web-thumbnailer/zipball/4aa27a1b54b9823341fedd7ca2dcfb11a6b3186a", | 19 | "url": "https://api.github.com/repos/ArthurHoaro/web-thumbnailer/zipball/39bfd4f3136d9e6096496b9720e877326cfe4775", |
20 | "reference": "4aa27a1b54b9823341fedd7ca2dcfb11a6b3186a", | 20 | "reference": "39bfd4f3136d9e6096496b9720e877326cfe4775", |
21 | "shasum": "" | 21 | "shasum": "" |
22 | }, | 22 | }, |
23 | "require": { | 23 | "require": { |
24 | "php": ">=7.1", | 24 | "php": ">=7.1", |
25 | "phpunit/php-text-template": "^1.2" | 25 | "phpunit/php-text-template": "^1.2 || ^2.0" |
26 | }, | 26 | }, |
27 | "require-dev": { | 27 | "require-dev": { |
28 | "gskema/phpcs-type-sniff": "^0.13.1", | ||
28 | "php-coveralls/php-coveralls": "^2.0", | 29 | "php-coveralls/php-coveralls": "^2.0", |
29 | "phpunit/phpunit": "^7.0 || ^8.0", | 30 | "phpstan/phpstan": "^0.12.9", |
31 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", | ||
30 | "squizlabs/php_codesniffer": "^3.0" | 32 | "squizlabs/php_codesniffer": "^3.0" |
31 | }, | 33 | }, |
32 | "type": "library", | 34 | "type": "library", |
@@ -49,7 +51,11 @@ | |||
49 | } | 51 | } |
50 | ], | 52 | ], |
51 | "description": "PHP library which will retrieve a thumbnail for any given URL", | 53 | "description": "PHP library which will retrieve a thumbnail for any given URL", |
52 | "time": "2020-01-17T19:42:49+00:00" | 54 | "support": { |
55 | "issues": "https://github.com/ArthurHoaro/web-thumbnailer/issues", | ||
56 | "source": "https://github.com/ArthurHoaro/web-thumbnailer/tree/v2.0.3" | ||
57 | }, | ||
58 | "time": "2020-09-29T15:51:03+00:00" | ||
53 | }, | 59 | }, |
54 | { | 60 | { |
55 | "name": "erusev/parsedown", | 61 | "name": "erusev/parsedown", |
@@ -95,9 +101,64 @@ | |||
95 | "markdown", | 101 | "markdown", |
96 | "parser" | 102 | "parser" |
97 | ], | 103 | ], |
104 | "support": { | ||
105 | "issues": "https://github.com/erusev/parsedown/issues", | ||
106 | "source": "https://github.com/erusev/parsedown/tree/1.7.x" | ||
107 | }, | ||
98 | "time": "2019-12-30T22:54:17+00:00" | 108 | "time": "2019-12-30T22:54:17+00:00" |
99 | }, | 109 | }, |
100 | { | 110 | { |
111 | "name": "erusev/parsedown-extra", | ||
112 | "version": "0.8.1", | ||
113 | "source": { | ||
114 | "type": "git", | ||
115 | "url": "https://github.com/erusev/parsedown-extra.git", | ||
116 | "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef" | ||
117 | }, | ||
118 | "dist": { | ||
119 | "type": "zip", | ||
120 | "url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/91ac3ff98f0cea243bdccc688df43810f044dcef", | ||
121 | "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef", | ||
122 | "shasum": "" | ||
123 | }, | ||
124 | "require": { | ||
125 | "erusev/parsedown": "^1.7.4" | ||
126 | }, | ||
127 | "require-dev": { | ||
128 | "phpunit/phpunit": "^4.8.35" | ||
129 | }, | ||
130 | "type": "library", | ||
131 | "autoload": { | ||
132 | "psr-0": { | ||
133 | "ParsedownExtra": "" | ||
134 | } | ||
135 | }, | ||
136 | "notification-url": "https://packagist.org/downloads/", | ||
137 | "license": [ | ||
138 | "MIT" | ||
139 | ], | ||
140 | "authors": [ | ||
141 | { | ||
142 | "name": "Emanuil Rusev", | ||
143 | "email": "hello@erusev.com", | ||
144 | "homepage": "http://erusev.com" | ||
145 | } | ||
146 | ], | ||
147 | "description": "An extension of Parsedown that adds support for Markdown Extra.", | ||
148 | "homepage": "https://github.com/erusev/parsedown-extra", | ||
149 | "keywords": [ | ||
150 | "markdown", | ||
151 | "markdown extra", | ||
152 | "parsedown", | ||
153 | "parser" | ||
154 | ], | ||
155 | "support": { | ||
156 | "issues": "https://github.com/erusev/parsedown-extra/issues", | ||
157 | "source": "https://github.com/erusev/parsedown-extra/tree/0.8.x" | ||
158 | }, | ||
159 | "time": "2019-12-30T23:20:37+00:00" | ||
160 | }, | ||
161 | { | ||
101 | "name": "gettext/gettext", | 162 | "name": "gettext/gettext", |
102 | "version": "v4.8.2", | 163 | "version": "v4.8.2", |
103 | "source": { | 164 | "source": { |
@@ -157,6 +218,11 @@ | |||
157 | "po", | 218 | "po", |
158 | "translation" | 219 | "translation" |
159 | ], | 220 | ], |
221 | "support": { | ||
222 | "email": "oom@oscarotero.com", | ||
223 | "issues": "https://github.com/oscarotero/Gettext/issues", | ||
224 | "source": "https://github.com/php-gettext/Gettext/tree/v4.8.2" | ||
225 | }, | ||
160 | "time": "2019-12-02T10:21:14+00:00" | 226 | "time": "2019-12-02T10:21:14+00:00" |
161 | }, | 227 | }, |
162 | { | 228 | { |
@@ -218,6 +284,10 @@ | |||
218 | "translations", | 284 | "translations", |
219 | "unicode" | 285 | "unicode" |
220 | ], | 286 | ], |
287 | "support": { | ||
288 | "issues": "https://github.com/php-gettext/Languages/issues", | ||
289 | "source": "https://github.com/php-gettext/Languages/tree/2.6.0" | ||
290 | }, | ||
221 | "time": "2019-11-13T10:30:21+00:00" | 291 | "time": "2019-11-13T10:30:21+00:00" |
222 | }, | 292 | }, |
223 | { | 293 | { |
@@ -268,6 +338,10 @@ | |||
268 | "keywords": [ | 338 | "keywords": [ |
269 | "logging" | 339 | "logging" |
270 | ], | 340 | ], |
341 | "support": { | ||
342 | "issues": "https://github.com/katzgrau/KLogger/issues", | ||
343 | "source": "https://github.com/katzgrau/KLogger/tree/master" | ||
344 | }, | ||
271 | "time": "2016-11-07T19:29:14+00:00" | 345 | "time": "2016-11-07T19:29:14+00:00" |
272 | }, | 346 | }, |
273 | { | 347 | { |
@@ -314,6 +388,10 @@ | |||
314 | "router", | 388 | "router", |
315 | "routing" | 389 | "routing" |
316 | ], | 390 | ], |
391 | "support": { | ||
392 | "issues": "https://github.com/nikic/FastRoute/issues", | ||
393 | "source": "https://github.com/nikic/FastRoute/tree/master" | ||
394 | }, | ||
317 | "time": "2018-02-13T20:26:39+00:00" | 395 | "time": "2018-02-13T20:26:39+00:00" |
318 | }, | 396 | }, |
319 | { | 397 | { |
@@ -355,6 +433,10 @@ | |||
355 | "keywords": [ | 433 | "keywords": [ |
356 | "template" | 434 | "template" |
357 | ], | 435 | ], |
436 | "support": { | ||
437 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", | ||
438 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" | ||
439 | }, | ||
358 | "time": "2015-06-21T13:50:34+00:00" | 440 | "time": "2015-06-21T13:50:34+00:00" |
359 | }, | 441 | }, |
360 | { | 442 | { |
@@ -405,6 +487,10 @@ | |||
405 | "container", | 487 | "container", |
406 | "dependency injection" | 488 | "dependency injection" |
407 | ], | 489 | ], |
490 | "support": { | ||
491 | "issues": "https://github.com/silexphp/Pimple/issues", | ||
492 | "source": "https://github.com/silexphp/Pimple/tree/master" | ||
493 | }, | ||
408 | "time": "2018-01-21T07:42:36+00:00" | 494 | "time": "2018-01-21T07:42:36+00:00" |
409 | }, | 495 | }, |
410 | { | 496 | { |
@@ -454,6 +540,10 @@ | |||
454 | "container-interop", | 540 | "container-interop", |
455 | "psr" | 541 | "psr" |
456 | ], | 542 | ], |
543 | "support": { | ||
544 | "issues": "https://github.com/php-fig/container/issues", | ||
545 | "source": "https://github.com/php-fig/container/tree/master" | ||
546 | }, | ||
457 | "time": "2017-02-14T16:28:37+00:00" | 547 | "time": "2017-02-14T16:28:37+00:00" |
458 | }, | 548 | }, |
459 | { | 549 | { |
@@ -504,6 +594,9 @@ | |||
504 | "request", | 594 | "request", |
505 | "response" | 595 | "response" |
506 | ], | 596 | ], |
597 | "support": { | ||
598 | "source": "https://github.com/php-fig/http-message/tree/master" | ||
599 | }, | ||
507 | "time": "2016-08-06T14:39:51+00:00" | 600 | "time": "2016-08-06T14:39:51+00:00" |
508 | }, | 601 | }, |
509 | { | 602 | { |
@@ -551,6 +644,9 @@ | |||
551 | "psr", | 644 | "psr", |
552 | "psr-3" | 645 | "psr-3" |
553 | ], | 646 | ], |
647 | "support": { | ||
648 | "source": "https://github.com/php-fig/log/tree/1.1.3" | ||
649 | }, | ||
554 | "time": "2020-03-23T09:12:05+00:00" | 650 | "time": "2020-03-23T09:12:05+00:00" |
555 | }, | 651 | }, |
556 | { | 652 | { |
@@ -571,6 +667,7 @@ | |||
571 | "ext-curl": "*", | 667 | "ext-curl": "*", |
572 | "php": "~5.4 || ~7.0" | 668 | "php": "~5.4 || ~7.0" |
573 | }, | 669 | }, |
670 | "default-branch": true, | ||
574 | "type": "library", | 671 | "type": "library", |
575 | "autoload": { | 672 | "autoload": { |
576 | "psr-4": { | 673 | "psr-4": { |
@@ -596,20 +693,24 @@ | |||
596 | "pubsubhubbub", | 693 | "pubsubhubbub", |
597 | "websub" | 694 | "websub" |
598 | ], | 695 | ], |
696 | "support": { | ||
697 | "issues": "https://github.com/pubsubhubbub/php-publisher/issues", | ||
698 | "source": "https://github.com/pubsubhubbub/php-publisher/tree/master" | ||
699 | }, | ||
599 | "time": "2018-10-09T05:20:28+00:00" | 700 | "time": "2018-10-09T05:20:28+00:00" |
600 | }, | 701 | }, |
601 | { | 702 | { |
602 | "name": "shaarli/netscape-bookmark-parser", | 703 | "name": "shaarli/netscape-bookmark-parser", |
603 | "version": "v2.1.0", | 704 | "version": "v2.2.0", |
604 | "source": { | 705 | "source": { |
605 | "type": "git", | 706 | "type": "git", |
606 | "url": "https://github.com/shaarli/netscape-bookmark-parser.git", | 707 | "url": "https://github.com/shaarli/netscape-bookmark-parser.git", |
607 | "reference": "819008ee42c4dd7e45d988176a4a22d6ed689577" | 708 | "reference": "432a010af2bb1832d6fbc4763e6b0100b980a1df" |
608 | }, | 709 | }, |
609 | "dist": { | 710 | "dist": { |
610 | "type": "zip", | 711 | "type": "zip", |
611 | "url": "https://api.github.com/repos/shaarli/netscape-bookmark-parser/zipball/819008ee42c4dd7e45d988176a4a22d6ed689577", | 712 | "url": "https://api.github.com/repos/shaarli/netscape-bookmark-parser/zipball/432a010af2bb1832d6fbc4763e6b0100b980a1df", |
612 | "reference": "819008ee42c4dd7e45d988176a4a22d6ed689577", | 713 | "reference": "432a010af2bb1832d6fbc4763e6b0100b980a1df", |
613 | "shasum": "" | 714 | "shasum": "" |
614 | }, | 715 | }, |
615 | "require": { | 716 | "require": { |
@@ -649,9 +750,13 @@ | |||
649 | "bookmark", | 750 | "bookmark", |
650 | "link", | 751 | "link", |
651 | "netscape", | 752 | "netscape", |
652 | "parser" | 753 | "parse" |
653 | ], | 754 | ], |
654 | "time": "2018-10-06T14:43:38+00:00" | 755 | "support": { |
756 | "issues": "https://github.com/shaarli/netscape-bookmark-parser/issues", | ||
757 | "source": "https://github.com/shaarli/netscape-bookmark-parser/tree/v2.2.0" | ||
758 | }, | ||
759 | "time": "2020-06-06T15:53:53+00:00" | ||
655 | }, | 760 | }, |
656 | { | 761 | { |
657 | "name": "slim/slim", | 762 | "name": "slim/slim", |
@@ -724,26 +829,30 @@ | |||
724 | "micro", | 829 | "micro", |
725 | "router" | 830 | "router" |
726 | ], | 831 | ], |
832 | "support": { | ||
833 | "issues": "https://github.com/slimphp/Slim/issues", | ||
834 | "source": "https://github.com/slimphp/Slim/tree/3.x" | ||
835 | }, | ||
727 | "time": "2019-11-28T17:40:33+00:00" | 836 | "time": "2019-11-28T17:40:33+00:00" |
728 | } | 837 | } |
729 | ], | 838 | ], |
730 | "packages-dev": [ | 839 | "packages-dev": [ |
731 | { | 840 | { |
732 | "name": "doctrine/instantiator", | 841 | "name": "doctrine/instantiator", |
733 | "version": "1.3.0", | 842 | "version": "1.3.1", |
734 | "source": { | 843 | "source": { |
735 | "type": "git", | 844 | "type": "git", |
736 | "url": "https://github.com/doctrine/instantiator.git", | 845 | "url": "https://github.com/doctrine/instantiator.git", |
737 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" | 846 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" |
738 | }, | 847 | }, |
739 | "dist": { | 848 | "dist": { |
740 | "type": "zip", | 849 | "type": "zip", |
741 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", | 850 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", |
742 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", | 851 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", |
743 | "shasum": "" | 852 | "shasum": "" |
744 | }, | 853 | }, |
745 | "require": { | 854 | "require": { |
746 | "php": "^7.1" | 855 | "php": "^7.1 || ^8.0" |
747 | }, | 856 | }, |
748 | "require-dev": { | 857 | "require-dev": { |
749 | "doctrine/coding-standard": "^6.0", | 858 | "doctrine/coding-standard": "^6.0", |
@@ -782,24 +891,42 @@ | |||
782 | "constructor", | 891 | "constructor", |
783 | "instantiate" | 892 | "instantiate" |
784 | ], | 893 | ], |
785 | "time": "2019-10-21T16:45:58+00:00" | 894 | "support": { |
895 | "issues": "https://github.com/doctrine/instantiator/issues", | ||
896 | "source": "https://github.com/doctrine/instantiator/tree/1.3.x" | ||
897 | }, | ||
898 | "funding": [ | ||
899 | { | ||
900 | "url": "https://www.doctrine-project.org/sponsorship.html", | ||
901 | "type": "custom" | ||
902 | }, | ||
903 | { | ||
904 | "url": "https://www.patreon.com/phpdoctrine", | ||
905 | "type": "patreon" | ||
906 | }, | ||
907 | { | ||
908 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", | ||
909 | "type": "tidelift" | ||
910 | } | ||
911 | ], | ||
912 | "time": "2020-05-29T17:27:14+00:00" | ||
786 | }, | 913 | }, |
787 | { | 914 | { |
788 | "name": "myclabs/deep-copy", | 915 | "name": "myclabs/deep-copy", |
789 | "version": "1.9.5", | 916 | "version": "1.10.1", |
790 | "source": { | 917 | "source": { |
791 | "type": "git", | 918 | "type": "git", |
792 | "url": "https://github.com/myclabs/DeepCopy.git", | 919 | "url": "https://github.com/myclabs/DeepCopy.git", |
793 | "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" | 920 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" |
794 | }, | 921 | }, |
795 | "dist": { | 922 | "dist": { |
796 | "type": "zip", | 923 | "type": "zip", |
797 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", | 924 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", |
798 | "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", | 925 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", |
799 | "shasum": "" | 926 | "shasum": "" |
800 | }, | 927 | }, |
801 | "require": { | 928 | "require": { |
802 | "php": "^7.1" | 929 | "php": "^7.1 || ^8.0" |
803 | }, | 930 | }, |
804 | "replace": { | 931 | "replace": { |
805 | "myclabs/deep-copy": "self.version" | 932 | "myclabs/deep-copy": "self.version" |
@@ -830,7 +957,17 @@ | |||
830 | "object", | 957 | "object", |
831 | "object graph" | 958 | "object graph" |
832 | ], | 959 | ], |
833 | "time": "2020-01-17T21:11:47+00:00" | 960 | "support": { |
961 | "issues": "https://github.com/myclabs/DeepCopy/issues", | ||
962 | "source": "https://github.com/myclabs/DeepCopy/tree/1.x" | ||
963 | }, | ||
964 | "funding": [ | ||
965 | { | ||
966 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", | ||
967 | "type": "tidelift" | ||
968 | } | ||
969 | ], | ||
970 | "time": "2020-06-29T13:22:24+00:00" | ||
834 | }, | 971 | }, |
835 | { | 972 | { |
836 | "name": "phar-io/manifest", | 973 | "name": "phar-io/manifest", |
@@ -885,6 +1022,10 @@ | |||
885 | } | 1022 | } |
886 | ], | 1023 | ], |
887 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", | 1024 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", |
1025 | "support": { | ||
1026 | "issues": "https://github.com/phar-io/manifest/issues", | ||
1027 | "source": "https://github.com/phar-io/manifest/tree/master" | ||
1028 | }, | ||
888 | "time": "2018-07-08T19:23:20+00:00" | 1029 | "time": "2018-07-08T19:23:20+00:00" |
889 | }, | 1030 | }, |
890 | { | 1031 | { |
@@ -932,6 +1073,10 @@ | |||
932 | } | 1073 | } |
933 | ], | 1074 | ], |
934 | "description": "Library for handling version information and constraints", | 1075 | "description": "Library for handling version information and constraints", |
1076 | "support": { | ||
1077 | "issues": "https://github.com/phar-io/version/issues", | ||
1078 | "source": "https://github.com/phar-io/version/tree/master" | ||
1079 | }, | ||
935 | "time": "2018-07-08T19:19:57+00:00" | 1080 | "time": "2018-07-08T19:19:57+00:00" |
936 | }, | 1081 | }, |
937 | { | 1082 | { |
@@ -981,6 +1126,10 @@ | |||
981 | "reflection", | 1126 | "reflection", |
982 | "static analysis" | 1127 | "static analysis" |
983 | ], | 1128 | ], |
1129 | "support": { | ||
1130 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", | ||
1131 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" | ||
1132 | }, | ||
984 | "time": "2020-04-27T09:25:28+00:00" | 1133 | "time": "2020-04-27T09:25:28+00:00" |
985 | }, | 1134 | }, |
986 | { | 1135 | { |
@@ -1033,6 +1182,10 @@ | |||
1033 | } | 1182 | } |
1034 | ], | 1183 | ], |
1035 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", | 1184 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", |
1185 | "support": { | ||
1186 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", | ||
1187 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x" | ||
1188 | }, | ||
1036 | "time": "2019-12-28T18:55:12+00:00" | 1189 | "time": "2019-12-28T18:55:12+00:00" |
1037 | }, | 1190 | }, |
1038 | { | 1191 | { |
@@ -1080,6 +1233,10 @@ | |||
1080 | } | 1233 | } |
1081 | ], | 1234 | ], |
1082 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", | 1235 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", |
1236 | "support": { | ||
1237 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", | ||
1238 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/0.7.2" | ||
1239 | }, | ||
1083 | "time": "2019-08-22T18:11:29+00:00" | 1240 | "time": "2019-08-22T18:11:29+00:00" |
1084 | }, | 1241 | }, |
1085 | { | 1242 | { |
@@ -1143,6 +1300,10 @@ | |||
1143 | "spy", | 1300 | "spy", |
1144 | "stub" | 1301 | "stub" |
1145 | ], | 1302 | ], |
1303 | "support": { | ||
1304 | "issues": "https://github.com/phpspec/prophecy/issues", | ||
1305 | "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" | ||
1306 | }, | ||
1146 | "time": "2020-03-05T15:02:03+00:00" | 1307 | "time": "2020-03-05T15:02:03+00:00" |
1147 | }, | 1308 | }, |
1148 | { | 1309 | { |
@@ -1206,6 +1367,10 @@ | |||
1206 | "testing", | 1367 | "testing", |
1207 | "xunit" | 1368 | "xunit" |
1208 | ], | 1369 | ], |
1370 | "support": { | ||
1371 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", | ||
1372 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master" | ||
1373 | }, | ||
1209 | "time": "2018-10-31T16:06:48+00:00" | 1374 | "time": "2018-10-31T16:06:48+00:00" |
1210 | }, | 1375 | }, |
1211 | { | 1376 | { |
@@ -1256,6 +1421,10 @@ | |||
1256 | "filesystem", | 1421 | "filesystem", |
1257 | "iterator" | 1422 | "iterator" |
1258 | ], | 1423 | ], |
1424 | "support": { | ||
1425 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", | ||
1426 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.2" | ||
1427 | }, | ||
1259 | "time": "2018-09-13T20:33:42+00:00" | 1428 | "time": "2018-09-13T20:33:42+00:00" |
1260 | }, | 1429 | }, |
1261 | { | 1430 | { |
@@ -1305,6 +1474,10 @@ | |||
1305 | "keywords": [ | 1474 | "keywords": [ |
1306 | "timer" | 1475 | "timer" |
1307 | ], | 1476 | ], |
1477 | "support": { | ||
1478 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", | ||
1479 | "source": "https://github.com/sebastianbergmann/php-timer/tree/master" | ||
1480 | }, | ||
1308 | "time": "2019-06-07T04:22:29+00:00" | 1481 | "time": "2019-06-07T04:22:29+00:00" |
1309 | }, | 1482 | }, |
1310 | { | 1483 | { |
@@ -1354,59 +1527,12 @@ | |||
1354 | "keywords": [ | 1527 | "keywords": [ |
1355 | "tokenizer" | 1528 | "tokenizer" |
1356 | ], | 1529 | ], |
1357 | "time": "2019-09-17T06:23:10+00:00" | 1530 | "support": { |
1358 | }, | 1531 | "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", |
1359 | { | 1532 | "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.1" |
1360 | "name": "phpunit/phpcov", | ||
1361 | "version": "5.0.0", | ||
1362 | "source": { | ||
1363 | "type": "git", | ||
1364 | "url": "https://github.com/sebastianbergmann/phpcov.git", | ||
1365 | "reference": "72fb974e6fe9b39d7e0b0d44061d2ba4c49ee0b8" | ||
1366 | }, | ||
1367 | "dist": { | ||
1368 | "type": "zip", | ||
1369 | "url": "https://api.github.com/repos/sebastianbergmann/phpcov/zipball/72fb974e6fe9b39d7e0b0d44061d2ba4c49ee0b8", | ||
1370 | "reference": "72fb974e6fe9b39d7e0b0d44061d2ba4c49ee0b8", | ||
1371 | "shasum": "" | ||
1372 | }, | ||
1373 | "require": { | ||
1374 | "php": "^7.1", | ||
1375 | "phpunit/php-code-coverage": "^6.0", | ||
1376 | "phpunit/phpunit": "^7.0", | ||
1377 | "sebastian/diff": "^3.0", | ||
1378 | "sebastian/finder-facade": "^1.1", | ||
1379 | "sebastian/version": "^2.0", | ||
1380 | "symfony/console": "^3.0 || ^4.0" | ||
1381 | }, | ||
1382 | "bin": [ | ||
1383 | "phpcov" | ||
1384 | ], | ||
1385 | "type": "library", | ||
1386 | "extra": { | ||
1387 | "branch-alias": { | ||
1388 | "dev-master": "5.0-dev" | ||
1389 | } | ||
1390 | }, | ||
1391 | "autoload": { | ||
1392 | "classmap": [ | ||
1393 | "src/" | ||
1394 | ] | ||
1395 | }, | 1533 | }, |
1396 | "notification-url": "https://packagist.org/downloads/", | 1534 | "abandoned": true, |
1397 | "license": [ | 1535 | "time": "2019-09-17T06:23:10+00:00" |
1398 | "BSD-3-Clause" | ||
1399 | ], | ||
1400 | "authors": [ | ||
1401 | { | ||
1402 | "name": "Sebastian Bergmann", | ||
1403 | "email": "sebastian@phpunit.de", | ||
1404 | "role": "lead" | ||
1405 | } | ||
1406 | ], | ||
1407 | "description": "CLI frontend for php-code-coverage", | ||
1408 | "homepage": "https://github.com/sebastianbergmann/phpcov", | ||
1409 | "time": "2018-02-04T10:18:50+00:00" | ||
1410 | }, | 1536 | }, |
1411 | { | 1537 | { |
1412 | "name": "phpunit/phpunit", | 1538 | "name": "phpunit/phpunit", |
@@ -1490,6 +1616,10 @@ | |||
1490 | "testing", | 1616 | "testing", |
1491 | "xunit" | 1617 | "xunit" |
1492 | ], | 1618 | ], |
1619 | "support": { | ||
1620 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", | ||
1621 | "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20" | ||
1622 | }, | ||
1493 | "time": "2020-01-08T08:45:45+00:00" | 1623 | "time": "2020-01-08T08:45:45+00:00" |
1494 | }, | 1624 | }, |
1495 | { | 1625 | { |
@@ -1498,12 +1628,12 @@ | |||
1498 | "source": { | 1628 | "source": { |
1499 | "type": "git", | 1629 | "type": "git", |
1500 | "url": "https://github.com/Roave/SecurityAdvisories.git", | 1630 | "url": "https://github.com/Roave/SecurityAdvisories.git", |
1501 | "reference": "5a342e2dc0408d026b97ee3176b5b406e54e3766" | 1631 | "reference": "ba5d234b3a1559321b816b64aafc2ce6728799ff" |
1502 | }, | 1632 | }, |
1503 | "dist": { | 1633 | "dist": { |
1504 | "type": "zip", | 1634 | "type": "zip", |
1505 | "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/5a342e2dc0408d026b97ee3176b5b406e54e3766", | 1635 | "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ba5d234b3a1559321b816b64aafc2ce6728799ff", |
1506 | "reference": "5a342e2dc0408d026b97ee3176b5b406e54e3766", | 1636 | "reference": "ba5d234b3a1559321b816b64aafc2ce6728799ff", |
1507 | "shasum": "" | 1637 | "shasum": "" |
1508 | }, | 1638 | }, |
1509 | "conflict": { | 1639 | "conflict": { |
@@ -1512,12 +1642,15 @@ | |||
1512 | "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", | 1642 | "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", |
1513 | "amphp/artax": "<1.0.6|>=2,<2.0.6", | 1643 | "amphp/artax": "<1.0.6|>=2,<2.0.6", |
1514 | "amphp/http": "<1.0.1", | 1644 | "amphp/http": "<1.0.1", |
1645 | "amphp/http-client": ">=4,<4.4", | ||
1515 | "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", | 1646 | "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", |
1516 | "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", | 1647 | "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", |
1517 | "aws/aws-sdk-php": ">=3,<3.2.1", | 1648 | "aws/aws-sdk-php": ">=3,<3.2.1", |
1518 | "bagisto/bagisto": "<0.1.5", | 1649 | "bagisto/bagisto": "<0.1.5", |
1519 | "barrelstrength/sprout-base-email": "<3.9", | 1650 | "barrelstrength/sprout-base-email": "<1.2.7", |
1520 | "bolt/bolt": "<3.6.10", | 1651 | "barrelstrength/sprout-forms": "<3.9", |
1652 | "baserproject/basercms": ">=4,<=4.3.6", | ||
1653 | "bolt/bolt": "<3.7.1", | ||
1521 | "brightlocal/phpwhois": "<=4.2.5", | 1654 | "brightlocal/phpwhois": "<=4.2.5", |
1522 | "buddypress/buddypress": "<5.1.2", | 1655 | "buddypress/buddypress": "<5.1.2", |
1523 | "bugsnag/bugsnag-laravel": ">=2,<2.0.2", | 1656 | "bugsnag/bugsnag-laravel": ">=2,<2.0.2", |
@@ -1530,10 +1663,11 @@ | |||
1530 | "composer/composer": "<=1-alpha.11", | 1663 | "composer/composer": "<=1-alpha.11", |
1531 | "contao-components/mediaelement": ">=2.14.2,<2.21.1", | 1664 | "contao-components/mediaelement": ">=2.14.2,<2.21.1", |
1532 | "contao/core": ">=2,<3.5.39", | 1665 | "contao/core": ">=2,<3.5.39", |
1533 | "contao/core-bundle": ">=4,<4.4.46|>=4.5,<4.8.6", | 1666 | "contao/core-bundle": ">=4,<4.4.52|>=4.5,<4.9.6|= 4.10.0", |
1534 | "contao/listing-bundle": ">=4,<4.4.8", | 1667 | "contao/listing-bundle": ">=4,<4.4.8", |
1535 | "datadog/dd-trace": ">=0.30,<0.30.2", | 1668 | "datadog/dd-trace": ">=0.30,<0.30.2", |
1536 | "david-garcia/phpwhois": "<=4.3.1", | 1669 | "david-garcia/phpwhois": "<=4.3.1", |
1670 | "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", | ||
1537 | "doctrine/annotations": ">=1,<1.2.7", | 1671 | "doctrine/annotations": ">=1,<1.2.7", |
1538 | "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", | 1672 | "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", |
1539 | "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", | 1673 | "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", |
@@ -1543,10 +1677,10 @@ | |||
1543 | "doctrine/mongodb-odm": ">=1,<1.0.2", | 1677 | "doctrine/mongodb-odm": ">=1,<1.0.2", |
1544 | "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", | 1678 | "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", |
1545 | "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", | 1679 | "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", |
1546 | "dolibarr/dolibarr": "<=10.0.6", | 1680 | "dolibarr/dolibarr": "<11.0.4", |
1547 | "dompdf/dompdf": ">=0.6,<0.6.2", | 1681 | "dompdf/dompdf": ">=0.6,<0.6.2", |
1548 | "drupal/core": ">=7,<7.69|>=8,<8.7.12|>=8.8,<8.8.4", | 1682 | "drupal/core": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6", |
1549 | "drupal/drupal": ">=7,<7.69|>=8,<8.7.12|>=8.8,<8.8.4", | 1683 | "drupal/drupal": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6", |
1550 | "endroid/qr-code-bundle": "<3.4.2", | 1684 | "endroid/qr-code-bundle": "<3.4.2", |
1551 | "enshrined/svg-sanitize": "<0.13.1", | 1685 | "enshrined/svg-sanitize": "<0.13.1", |
1552 | "erusev/parsedown": "<1.7.2", | 1686 | "erusev/parsedown": "<1.7.2", |
@@ -1555,10 +1689,12 @@ | |||
1555 | "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", | 1689 | "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", |
1556 | "ezsystems/ezplatform": ">=1.7,<1.7.9.1|>=1.13,<1.13.5.1|>=2.5,<2.5.4", | 1690 | "ezsystems/ezplatform": ">=1.7,<1.7.9.1|>=1.13,<1.13.5.1|>=2.5,<2.5.4", |
1557 | "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6", | 1691 | "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6", |
1558 | "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2", | 1692 | "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", |
1693 | "ezsystems/ezplatform-kernel": ">=1,<1.0.2.1", | ||
1559 | "ezsystems/ezplatform-user": ">=1,<1.0.1", | 1694 | "ezsystems/ezplatform-user": ">=1,<1.0.1", |
1560 | "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.1|>=6,<6.7.9.1|>=6.8,<6.13.6.2|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.6.2", | 1695 | "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.2|>=6,<6.7.9.1|>=6.8,<6.13.6.3|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.7.1", |
1561 | "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.1|>=2011,<2017.12.7.2|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.4.2", | 1696 | "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.2|>=2011,<2017.12.7.3|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.5.1", |
1697 | "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", | ||
1562 | "ezsystems/repository-forms": ">=2.3,<2.3.2.1", | 1698 | "ezsystems/repository-forms": ">=2.3,<2.3.2.1", |
1563 | "ezyang/htmlpurifier": "<4.1.1", | 1699 | "ezyang/htmlpurifier": "<4.1.1", |
1564 | "firebase/php-jwt": "<2", | 1700 | "firebase/php-jwt": "<2", |
@@ -1567,14 +1703,16 @@ | |||
1567 | "friendsofsymfony/oauth2-php": "<1.3", | 1703 | "friendsofsymfony/oauth2-php": "<1.3", |
1568 | "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", | 1704 | "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", |
1569 | "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", | 1705 | "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", |
1706 | "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", | ||
1570 | "fuel/core": "<1.8.1", | 1707 | "fuel/core": "<1.8.1", |
1571 | "getgrav/grav": "<1.7-beta.8", | 1708 | "getgrav/grav": "<1.7-beta.8", |
1709 | "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", | ||
1572 | "gree/jose": "<=2.2", | 1710 | "gree/jose": "<=2.2", |
1573 | "gregwar/rst": "<1.0.3", | 1711 | "gregwar/rst": "<1.0.3", |
1574 | "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", | 1712 | "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", |
1575 | "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", | 1713 | "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", |
1576 | "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", | 1714 | "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", |
1577 | "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", | 1715 | "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29|>=5.5,<=5.5.44|>=6,<6.18.34|>=7,<7.23.2", |
1578 | "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", | 1716 | "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", |
1579 | "illuminate/view": ">=7,<7.1.2", | 1717 | "illuminate/view": ">=7,<7.1.2", |
1580 | "ivankristianto/phpwhois": "<=4.3", | 1718 | "ivankristianto/phpwhois": "<=4.3", |
@@ -1582,22 +1720,34 @@ | |||
1582 | "joomla/session": "<1.3.1", | 1720 | "joomla/session": "<1.3.1", |
1583 | "jsmitty12/phpwhois": "<5.1", | 1721 | "jsmitty12/phpwhois": "<5.1", |
1584 | "kazist/phpwhois": "<=4.2.6", | 1722 | "kazist/phpwhois": "<=4.2.6", |
1723 | "kitodo/presentation": "<3.1.2", | ||
1585 | "kreait/firebase-php": ">=3.2,<3.8.1", | 1724 | "kreait/firebase-php": ">=3.2,<3.8.1", |
1586 | "la-haute-societe/tcpdf": "<6.2.22", | 1725 | "la-haute-societe/tcpdf": "<6.2.22", |
1587 | "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30|>=7,<7.1.2", | 1726 | "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.34|>=7,<7.23.2", |
1588 | "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", | 1727 | "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", |
1589 | "league/commonmark": "<0.18.3", | 1728 | "league/commonmark": "<0.18.3", |
1590 | "librenms/librenms": "<1.53", | 1729 | "librenms/librenms": "<1.53", |
1730 | "livewire/livewire": ">2.2.4,<2.2.6", | ||
1591 | "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", | 1731 | "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", |
1592 | "magento/magento1ce": "<1.9.4.3", | 1732 | "magento/magento1ce": "<1.9.4.3", |
1593 | "magento/magento1ee": ">=1,<1.14.4.3", | 1733 | "magento/magento1ee": ">=1,<1.14.4.3", |
1594 | "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", | 1734 | "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", |
1735 | "marcwillmann/turn": "<0.3.3", | ||
1736 | "mittwald/typo3_forum": "<1.2.1", | ||
1595 | "monolog/monolog": ">=1.8,<1.12", | 1737 | "monolog/monolog": ">=1.8,<1.12", |
1596 | "namshi/jose": "<2.2", | 1738 | "namshi/jose": "<2.2", |
1739 | "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", | ||
1740 | "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", | ||
1741 | "nystudio107/craft-seomatic": "<3.3", | ||
1597 | "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", | 1742 | "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", |
1743 | "october/backend": ">=1.0.319,<1.0.467", | ||
1744 | "october/cms": ">=1.0.319,<1.0.466", | ||
1745 | "october/october": ">=1.0.319,<1.0.466", | ||
1746 | "october/rain": ">=1.0.319,<1.0.468", | ||
1598 | "onelogin/php-saml": "<2.10.4", | 1747 | "onelogin/php-saml": "<2.10.4", |
1599 | "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", | 1748 | "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", |
1600 | "openid/php-openid": "<2.3", | 1749 | "openid/php-openid": "<2.3", |
1750 | "openmage/magento-lts": "<19.4.6|>=20,<20.0.2", | ||
1601 | "oro/crm": ">=1.7,<1.7.4", | 1751 | "oro/crm": ">=1.7,<1.7.4", |
1602 | "oro/platform": ">=1.7,<1.7.4", | 1752 | "oro/platform": ">=1.7,<1.7.4", |
1603 | "padraic/humbug_get_contents": "<1.1.2", | 1753 | "padraic/humbug_get_contents": "<1.1.2", |
@@ -1605,8 +1755,10 @@ | |||
1605 | "paragonie/random_compat": "<2", | 1755 | "paragonie/random_compat": "<2", |
1606 | "paypal/merchant-sdk-php": "<3.12", | 1756 | "paypal/merchant-sdk-php": "<3.12", |
1607 | "pear/archive_tar": "<1.4.4", | 1757 | "pear/archive_tar": "<1.4.4", |
1758 | "personnummer/personnummer": "<3.0.2", | ||
1608 | "phpfastcache/phpfastcache": ">=5,<5.0.13", | 1759 | "phpfastcache/phpfastcache": ">=5,<5.0.13", |
1609 | "phpmailer/phpmailer": ">=5,<5.2.27|>=6,<6.0.6", | 1760 | "phpmailer/phpmailer": "<6.1.6", |
1761 | "phpmussel/phpmussel": ">=1,<1.6", | ||
1610 | "phpmyadmin/phpmyadmin": "<4.9.2", | 1762 | "phpmyadmin/phpmyadmin": "<4.9.2", |
1611 | "phpoffice/phpexcel": "<1.8.2", | 1763 | "phpoffice/phpexcel": "<1.8.2", |
1612 | "phpoffice/phpspreadsheet": "<1.8", | 1764 | "phpoffice/phpspreadsheet": "<1.8", |
@@ -1615,25 +1767,31 @@ | |||
1615 | "phpxmlrpc/extras": "<0.6.1", | 1767 | "phpxmlrpc/extras": "<0.6.1", |
1616 | "pimcore/pimcore": "<6.3", | 1768 | "pimcore/pimcore": "<6.3", |
1617 | "prestashop/autoupgrade": ">=4,<4.10.1", | 1769 | "prestashop/autoupgrade": ">=4,<4.10.1", |
1770 | "prestashop/contactform": ">1.0.1,<4.3", | ||
1618 | "prestashop/gamification": "<2.3.2", | 1771 | "prestashop/gamification": "<2.3.2", |
1619 | "prestashop/ps_facetedsearch": "<3.4.1", | 1772 | "prestashop/ps_facetedsearch": "<3.4.1", |
1620 | "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2", | 1773 | "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2", |
1621 | "propel/propel": ">=2-alpha.1,<=2-alpha.7", | 1774 | "propel/propel": ">=2-alpha.1,<=2-alpha.7", |
1622 | "propel/propel1": ">=1,<=1.7.1", | 1775 | "propel/propel1": ">=1,<=1.7.1", |
1776 | "pterodactyl/panel": "<0.7.19|>=1-rc.0,<=1-rc.6", | ||
1623 | "pusher/pusher-php-server": "<2.2.1", | 1777 | "pusher/pusher-php-server": "<2.2.1", |
1778 | "rainlab/debugbar-plugin": "<3.1", | ||
1624 | "robrichards/xmlseclibs": "<3.0.4", | 1779 | "robrichards/xmlseclibs": "<3.0.4", |
1780 | "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", | ||
1625 | "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", | 1781 | "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", |
1626 | "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", | 1782 | "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", |
1627 | "sensiolabs/connect": "<4.2.3", | 1783 | "sensiolabs/connect": "<4.2.3", |
1628 | "serluck/phpwhois": "<=4.2.6", | 1784 | "serluck/phpwhois": "<=4.2.6", |
1785 | "shopware/core": "<=6.3.1", | ||
1786 | "shopware/platform": "<=6.3.1", | ||
1629 | "shopware/shopware": "<5.3.7", | 1787 | "shopware/shopware": "<5.3.7", |
1630 | "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1", | 1788 | "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1", |
1631 | "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", | 1789 | "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", |
1632 | "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", | 1790 | "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", |
1633 | "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", | 1791 | "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", |
1634 | "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", | 1792 | "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", |
1635 | "silverstripe/framework": "<4.4.5|>=4.5,<4.5.2", | 1793 | "silverstripe/framework": "<4.4.7|>=4.5,<4.5.4", |
1636 | "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2", | 1794 | "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2|>=3.2,<3.2.4", |
1637 | "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", | 1795 | "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", |
1638 | "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", | 1796 | "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", |
1639 | "silverstripe/subsites": ">=2,<2.1.1", | 1797 | "silverstripe/subsites": ">=2,<2.1.1", |
@@ -1652,11 +1810,12 @@ | |||
1652 | "ssddanbrown/bookstack": "<0.29.2", | 1810 | "ssddanbrown/bookstack": "<0.29.2", |
1653 | "stormpath/sdk": ">=0,<9.9.99", | 1811 | "stormpath/sdk": ">=0,<9.9.99", |
1654 | "studio-42/elfinder": "<2.1.49", | 1812 | "studio-42/elfinder": "<2.1.49", |
1813 | "sulu/sulu": "<1.6.34|>=2,<2.0.10|>=2.1,<2.1.1", | ||
1655 | "swiftmailer/swiftmailer": ">=4,<5.4.5", | 1814 | "swiftmailer/swiftmailer": ">=4,<5.4.5", |
1656 | "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", | 1815 | "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", |
1657 | "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", | 1816 | "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", |
1658 | "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", | 1817 | "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", |
1659 | "sylius/resource-bundle": "<1.3.13|>=1.4,<1.4.6|>=1.5,<1.5.1|>=1.6,<1.6.3", | 1818 | "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", |
1660 | "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5", | 1819 | "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5", |
1661 | "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", | 1820 | "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", |
1662 | "symbiote/silverstripe-versionedfiles": "<=2.0.3", | 1821 | "symbiote/silverstripe-versionedfiles": "<=2.0.3", |
@@ -1666,7 +1825,7 @@ | |||
1666 | "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", | 1825 | "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", |
1667 | "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", | 1826 | "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", |
1668 | "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", | 1827 | "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", |
1669 | "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", | 1828 | "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5", |
1670 | "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", | 1829 | "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", |
1671 | "symfony/mime": ">=4.3,<4.3.8", | 1830 | "symfony/mime": ">=4.3,<4.3.8", |
1672 | "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", | 1831 | "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", |
@@ -1681,12 +1840,13 @@ | |||
1681 | "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", | 1840 | "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", |
1682 | "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", | 1841 | "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", |
1683 | "symfony/serializer": ">=2,<2.0.11", | 1842 | "symfony/serializer": ">=2,<2.0.11", |
1684 | "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", | 1843 | "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5", |
1685 | "symfony/translation": ">=2,<2.0.17", | 1844 | "symfony/translation": ">=2,<2.0.17", |
1686 | "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", | 1845 | "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", |
1687 | "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", | 1846 | "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", |
1688 | "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", | 1847 | "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", |
1689 | "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", | 1848 | "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", |
1849 | "t3g/svg-sanitizer": "<1.0.3", | ||
1690 | "tecnickcom/tcpdf": "<6.2.22", | 1850 | "tecnickcom/tcpdf": "<6.2.22", |
1691 | "thelia/backoffice-default-template": ">=2.1,<2.1.2", | 1851 | "thelia/backoffice-default-template": ">=2.1,<2.1.2", |
1692 | "thelia/thelia": ">=2.1-beta.1,<2.1.3", | 1852 | "thelia/thelia": ">=2.1-beta.1,<2.1.3", |
@@ -1694,11 +1854,12 @@ | |||
1694 | "titon/framework": ">=0,<9.9.99", | 1854 | "titon/framework": ">=0,<9.9.99", |
1695 | "truckersmp/phpwhois": "<=4.3.1", | 1855 | "truckersmp/phpwhois": "<=4.3.1", |
1696 | "twig/twig": "<1.38|>=2,<2.7", | 1856 | "twig/twig": "<1.38|>=2,<2.7", |
1697 | "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.17|>=10,<10.4.2", | 1857 | "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.20|>=10,<10.4.6", |
1698 | "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.17|>=10,<10.4.2", | 1858 | "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.20|>=10,<10.4.6", |
1699 | "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", | 1859 | "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", |
1700 | "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", | 1860 | "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", |
1701 | "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", | 1861 | "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", |
1862 | "typo3fluid/fluid": ">=2,<2.0.5|>=2.1,<2.1.4|>=2.2,<2.2.1|>=2.3,<2.3.5|>=2.4,<2.4.1|>=2.5,<2.5.5|>=2.6,<2.6.1", | ||
1702 | "ua-parser/uap-php": "<3.8", | 1863 | "ua-parser/uap-php": "<3.8", |
1703 | "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", | 1864 | "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", |
1704 | "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", | 1865 | "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", |
@@ -1706,7 +1867,7 @@ | |||
1706 | "willdurand/js-translation-bundle": "<2.1.1", | 1867 | "willdurand/js-translation-bundle": "<2.1.1", |
1707 | "yii2mod/yii2-cms": "<1.9.2", | 1868 | "yii2mod/yii2-cms": "<1.9.2", |
1708 | "yiisoft/yii": ">=1.1.14,<1.1.15", | 1869 | "yiisoft/yii": ">=1.1.14,<1.1.15", |
1709 | "yiisoft/yii2": "<2.0.15", | 1870 | "yiisoft/yii2": "<2.0.38", |
1710 | "yiisoft/yii2-bootstrap": "<2.0.4", | 1871 | "yiisoft/yii2-bootstrap": "<2.0.4", |
1711 | "yiisoft/yii2-dev": "<2.0.15", | 1872 | "yiisoft/yii2-dev": "<2.0.15", |
1712 | "yiisoft/yii2-elasticsearch": "<2.0.5", | 1873 | "yiisoft/yii2-elasticsearch": "<2.0.5", |
@@ -1758,7 +1919,21 @@ | |||
1758 | } | 1919 | } |
1759 | ], | 1920 | ], |
1760 | "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", | 1921 | "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", |
1761 | "time": "2020-05-12T11:18:47+00:00" | 1922 | "support": { |
1923 | "issues": "https://github.com/Roave/SecurityAdvisories/issues", | ||
1924 | "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" | ||
1925 | }, | ||
1926 | "funding": [ | ||
1927 | { | ||
1928 | "url": "https://github.com/Ocramius", | ||
1929 | "type": "github" | ||
1930 | }, | ||
1931 | { | ||
1932 | "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", | ||
1933 | "type": "tidelift" | ||
1934 | } | ||
1935 | ], | ||
1936 | "time": "2020-10-08T21:02:27+00:00" | ||
1762 | }, | 1937 | }, |
1763 | { | 1938 | { |
1764 | "name": "sebastian/code-unit-reverse-lookup", | 1939 | "name": "sebastian/code-unit-reverse-lookup", |
@@ -1803,6 +1978,10 @@ | |||
1803 | ], | 1978 | ], |
1804 | "description": "Looks up which function or method a line of code belongs to", | 1979 | "description": "Looks up which function or method a line of code belongs to", |
1805 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", | 1980 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", |
1981 | "support": { | ||
1982 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", | ||
1983 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/master" | ||
1984 | }, | ||
1806 | "time": "2017-03-04T06:30:41+00:00" | 1985 | "time": "2017-03-04T06:30:41+00:00" |
1807 | }, | 1986 | }, |
1808 | { | 1987 | { |
@@ -1867,6 +2046,10 @@ | |||
1867 | "compare", | 2046 | "compare", |
1868 | "equality" | 2047 | "equality" |
1869 | ], | 2048 | ], |
2049 | "support": { | ||
2050 | "issues": "https://github.com/sebastianbergmann/comparator/issues", | ||
2051 | "source": "https://github.com/sebastianbergmann/comparator/tree/master" | ||
2052 | }, | ||
1870 | "time": "2018-07-12T15:12:46+00:00" | 2053 | "time": "2018-07-12T15:12:46+00:00" |
1871 | }, | 2054 | }, |
1872 | { | 2055 | { |
@@ -1923,6 +2106,10 @@ | |||
1923 | "unidiff", | 2106 | "unidiff", |
1924 | "unified diff" | 2107 | "unified diff" |
1925 | ], | 2108 | ], |
2109 | "support": { | ||
2110 | "issues": "https://github.com/sebastianbergmann/diff/issues", | ||
2111 | "source": "https://github.com/sebastianbergmann/diff/tree/master" | ||
2112 | }, | ||
1926 | "time": "2019-02-04T06:01:07+00:00" | 2113 | "time": "2019-02-04T06:01:07+00:00" |
1927 | }, | 2114 | }, |
1928 | { | 2115 | { |
@@ -1976,6 +2163,10 @@ | |||
1976 | "environment", | 2163 | "environment", |
1977 | "hhvm" | 2164 | "hhvm" |
1978 | ], | 2165 | ], |
2166 | "support": { | ||
2167 | "issues": "https://github.com/sebastianbergmann/environment/issues", | ||
2168 | "source": "https://github.com/sebastianbergmann/environment/tree/4.2.3" | ||
2169 | }, | ||
1979 | "time": "2019-11-20T08:46:58+00:00" | 2170 | "time": "2019-11-20T08:46:58+00:00" |
1980 | }, | 2171 | }, |
1981 | { | 2172 | { |
@@ -2043,50 +2234,11 @@ | |||
2043 | "export", | 2234 | "export", |
2044 | "exporter" | 2235 | "exporter" |
2045 | ], | 2236 | ], |
2046 | "time": "2019-09-14T09:02:43+00:00" | 2237 | "support": { |
2047 | }, | 2238 | "issues": "https://github.com/sebastianbergmann/exporter/issues", |
2048 | { | 2239 | "source": "https://github.com/sebastianbergmann/exporter/tree/master" |
2049 | "name": "sebastian/finder-facade", | ||
2050 | "version": "1.2.3", | ||
2051 | "source": { | ||
2052 | "type": "git", | ||
2053 | "url": "https://github.com/sebastianbergmann/finder-facade.git", | ||
2054 | "reference": "167c45d131f7fc3d159f56f191a0a22228765e16" | ||
2055 | }, | ||
2056 | "dist": { | ||
2057 | "type": "zip", | ||
2058 | "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/167c45d131f7fc3d159f56f191a0a22228765e16", | ||
2059 | "reference": "167c45d131f7fc3d159f56f191a0a22228765e16", | ||
2060 | "shasum": "" | ||
2061 | }, | ||
2062 | "require": { | ||
2063 | "php": "^7.1", | ||
2064 | "symfony/finder": "^2.3|^3.0|^4.0|^5.0", | ||
2065 | "theseer/fdomdocument": "^1.6" | ||
2066 | }, | ||
2067 | "type": "library", | ||
2068 | "extra": { | ||
2069 | "branch-alias": [] | ||
2070 | }, | ||
2071 | "autoload": { | ||
2072 | "classmap": [ | ||
2073 | "src/" | ||
2074 | ] | ||
2075 | }, | 2240 | }, |
2076 | "notification-url": "https://packagist.org/downloads/", | 2241 | "time": "2019-09-14T09:02:43+00:00" |
2077 | "license": [ | ||
2078 | "BSD-3-Clause" | ||
2079 | ], | ||
2080 | "authors": [ | ||
2081 | { | ||
2082 | "name": "Sebastian Bergmann", | ||
2083 | "email": "sebastian@phpunit.de", | ||
2084 | "role": "lead" | ||
2085 | } | ||
2086 | ], | ||
2087 | "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", | ||
2088 | "homepage": "https://github.com/sebastianbergmann/finder-facade", | ||
2089 | "time": "2020-01-16T08:08:45+00:00" | ||
2090 | }, | 2242 | }, |
2091 | { | 2243 | { |
2092 | "name": "sebastian/global-state", | 2244 | "name": "sebastian/global-state", |
@@ -2137,6 +2289,10 @@ | |||
2137 | "keywords": [ | 2289 | "keywords": [ |
2138 | "global state" | 2290 | "global state" |
2139 | ], | 2291 | ], |
2292 | "support": { | ||
2293 | "issues": "https://github.com/sebastianbergmann/global-state/issues", | ||
2294 | "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" | ||
2295 | }, | ||
2140 | "time": "2017-04-27T15:39:26+00:00" | 2296 | "time": "2017-04-27T15:39:26+00:00" |
2141 | }, | 2297 | }, |
2142 | { | 2298 | { |
@@ -2184,6 +2340,10 @@ | |||
2184 | ], | 2340 | ], |
2185 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", | 2341 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", |
2186 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", | 2342 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", |
2343 | "support": { | ||
2344 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", | ||
2345 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/master" | ||
2346 | }, | ||
2187 | "time": "2017-08-03T12:35:26+00:00" | 2347 | "time": "2017-08-03T12:35:26+00:00" |
2188 | }, | 2348 | }, |
2189 | { | 2349 | { |
@@ -2229,6 +2389,10 @@ | |||
2229 | ], | 2389 | ], |
2230 | "description": "Allows reflection of object attributes, including inherited and non-public ones", | 2390 | "description": "Allows reflection of object attributes, including inherited and non-public ones", |
2231 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", | 2391 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", |
2392 | "support": { | ||
2393 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", | ||
2394 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/master" | ||
2395 | }, | ||
2232 | "time": "2017-03-29T09:07:27+00:00" | 2396 | "time": "2017-03-29T09:07:27+00:00" |
2233 | }, | 2397 | }, |
2234 | { | 2398 | { |
@@ -2282,6 +2446,10 @@ | |||
2282 | ], | 2446 | ], |
2283 | "description": "Provides functionality to recursively process PHP variables", | 2447 | "description": "Provides functionality to recursively process PHP variables", |
2284 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", | 2448 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", |
2449 | "support": { | ||
2450 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", | ||
2451 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/master" | ||
2452 | }, | ||
2285 | "time": "2017-03-03T06:23:57+00:00" | 2453 | "time": "2017-03-03T06:23:57+00:00" |
2286 | }, | 2454 | }, |
2287 | { | 2455 | { |
@@ -2324,6 +2492,10 @@ | |||
2324 | ], | 2492 | ], |
2325 | "description": "Provides a list of PHP built-in functions that operate on resources", | 2493 | "description": "Provides a list of PHP built-in functions that operate on resources", |
2326 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", | 2494 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", |
2495 | "support": { | ||
2496 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", | ||
2497 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/master" | ||
2498 | }, | ||
2327 | "time": "2018-10-04T04:07:39+00:00" | 2499 | "time": "2018-10-04T04:07:39+00:00" |
2328 | }, | 2500 | }, |
2329 | { | 2501 | { |
@@ -2367,20 +2539,24 @@ | |||
2367 | ], | 2539 | ], |
2368 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", | 2540 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", |
2369 | "homepage": "https://github.com/sebastianbergmann/version", | 2541 | "homepage": "https://github.com/sebastianbergmann/version", |
2542 | "support": { | ||
2543 | "issues": "https://github.com/sebastianbergmann/version/issues", | ||
2544 | "source": "https://github.com/sebastianbergmann/version/tree/master" | ||
2545 | }, | ||
2370 | "time": "2016-10-03T07:35:21+00:00" | 2546 | "time": "2016-10-03T07:35:21+00:00" |
2371 | }, | 2547 | }, |
2372 | { | 2548 | { |
2373 | "name": "squizlabs/php_codesniffer", | 2549 | "name": "squizlabs/php_codesniffer", |
2374 | "version": "3.5.5", | 2550 | "version": "3.5.6", |
2375 | "source": { | 2551 | "source": { |
2376 | "type": "git", | 2552 | "type": "git", |
2377 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", | 2553 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", |
2378 | "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6" | 2554 | "reference": "e97627871a7eab2f70e59166072a6b767d5834e0" |
2379 | }, | 2555 | }, |
2380 | "dist": { | 2556 | "dist": { |
2381 | "type": "zip", | 2557 | "type": "zip", |
2382 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/73e2e7f57d958e7228fce50dc0c61f58f017f9f6", | 2558 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0", |
2383 | "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6", | 2559 | "reference": "e97627871a7eab2f70e59166072a6b767d5834e0", |
2384 | "shasum": "" | 2560 | "shasum": "" |
2385 | }, | 2561 | }, |
2386 | "require": { | 2562 | "require": { |
@@ -2418,145 +2594,25 @@ | |||
2418 | "phpcs", | 2594 | "phpcs", |
2419 | "standards" | 2595 | "standards" |
2420 | ], | 2596 | ], |
2421 | "time": "2020-04-17T01:09:41+00:00" | 2597 | "support": { |
2422 | }, | 2598 | "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", |
2423 | { | 2599 | "source": "https://github.com/squizlabs/PHP_CodeSniffer", |
2424 | "name": "symfony/console", | 2600 | "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" |
2425 | "version": "v4.4.8", | ||
2426 | "source": { | ||
2427 | "type": "git", | ||
2428 | "url": "https://github.com/symfony/console.git", | ||
2429 | "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7" | ||
2430 | }, | ||
2431 | "dist": { | ||
2432 | "type": "zip", | ||
2433 | "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", | ||
2434 | "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", | ||
2435 | "shasum": "" | ||
2436 | }, | ||
2437 | "require": { | ||
2438 | "php": "^7.1.3", | ||
2439 | "symfony/polyfill-mbstring": "~1.0", | ||
2440 | "symfony/polyfill-php73": "^1.8", | ||
2441 | "symfony/service-contracts": "^1.1|^2" | ||
2442 | }, | ||
2443 | "conflict": { | ||
2444 | "symfony/dependency-injection": "<3.4", | ||
2445 | "symfony/event-dispatcher": "<4.3|>=5", | ||
2446 | "symfony/lock": "<4.4", | ||
2447 | "symfony/process": "<3.3" | ||
2448 | }, | 2601 | }, |
2449 | "provide": { | 2602 | "time": "2020-08-10T04:50:15+00:00" |
2450 | "psr/log-implementation": "1.0" | ||
2451 | }, | ||
2452 | "require-dev": { | ||
2453 | "psr/log": "~1.0", | ||
2454 | "symfony/config": "^3.4|^4.0|^5.0", | ||
2455 | "symfony/dependency-injection": "^3.4|^4.0|^5.0", | ||
2456 | "symfony/event-dispatcher": "^4.3", | ||
2457 | "symfony/lock": "^4.4|^5.0", | ||
2458 | "symfony/process": "^3.4|^4.0|^5.0", | ||
2459 | "symfony/var-dumper": "^4.3|^5.0" | ||
2460 | }, | ||
2461 | "suggest": { | ||
2462 | "psr/log": "For using the console logger", | ||
2463 | "symfony/event-dispatcher": "", | ||
2464 | "symfony/lock": "", | ||
2465 | "symfony/process": "" | ||
2466 | }, | ||
2467 | "type": "library", | ||
2468 | "extra": { | ||
2469 | "branch-alias": { | ||
2470 | "dev-master": "4.4-dev" | ||
2471 | } | ||
2472 | }, | ||
2473 | "autoload": { | ||
2474 | "psr-4": { | ||
2475 | "Symfony\\Component\\Console\\": "" | ||
2476 | }, | ||
2477 | "exclude-from-classmap": [ | ||
2478 | "/Tests/" | ||
2479 | ] | ||
2480 | }, | ||
2481 | "notification-url": "https://packagist.org/downloads/", | ||
2482 | "license": [ | ||
2483 | "MIT" | ||
2484 | ], | ||
2485 | "authors": [ | ||
2486 | { | ||
2487 | "name": "Fabien Potencier", | ||
2488 | "email": "fabien@symfony.com" | ||
2489 | }, | ||
2490 | { | ||
2491 | "name": "Symfony Community", | ||
2492 | "homepage": "https://symfony.com/contributors" | ||
2493 | } | ||
2494 | ], | ||
2495 | "description": "Symfony Console Component", | ||
2496 | "homepage": "https://symfony.com", | ||
2497 | "time": "2020-03-30T11:41:10+00:00" | ||
2498 | }, | ||
2499 | { | ||
2500 | "name": "symfony/finder", | ||
2501 | "version": "v4.4.8", | ||
2502 | "source": { | ||
2503 | "type": "git", | ||
2504 | "url": "https://github.com/symfony/finder.git", | ||
2505 | "reference": "5729f943f9854c5781984ed4907bbb817735776b" | ||
2506 | }, | ||
2507 | "dist": { | ||
2508 | "type": "zip", | ||
2509 | "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b", | ||
2510 | "reference": "5729f943f9854c5781984ed4907bbb817735776b", | ||
2511 | "shasum": "" | ||
2512 | }, | ||
2513 | "require": { | ||
2514 | "php": "^7.1.3" | ||
2515 | }, | ||
2516 | "type": "library", | ||
2517 | "extra": { | ||
2518 | "branch-alias": { | ||
2519 | "dev-master": "4.4-dev" | ||
2520 | } | ||
2521 | }, | ||
2522 | "autoload": { | ||
2523 | "psr-4": { | ||
2524 | "Symfony\\Component\\Finder\\": "" | ||
2525 | }, | ||
2526 | "exclude-from-classmap": [ | ||
2527 | "/Tests/" | ||
2528 | ] | ||
2529 | }, | ||
2530 | "notification-url": "https://packagist.org/downloads/", | ||
2531 | "license": [ | ||
2532 | "MIT" | ||
2533 | ], | ||
2534 | "authors": [ | ||
2535 | { | ||
2536 | "name": "Fabien Potencier", | ||
2537 | "email": "fabien@symfony.com" | ||
2538 | }, | ||
2539 | { | ||
2540 | "name": "Symfony Community", | ||
2541 | "homepage": "https://symfony.com/contributors" | ||
2542 | } | ||
2543 | ], | ||
2544 | "description": "Symfony Finder Component", | ||
2545 | "homepage": "https://symfony.com", | ||
2546 | "time": "2020-03-27T16:54:36+00:00" | ||
2547 | }, | 2603 | }, |
2548 | { | 2604 | { |
2549 | "name": "symfony/polyfill-ctype", | 2605 | "name": "symfony/polyfill-ctype", |
2550 | "version": "v1.17.0", | 2606 | "version": "v1.18.1", |
2551 | "source": { | 2607 | "source": { |
2552 | "type": "git", | 2608 | "type": "git", |
2553 | "url": "https://github.com/symfony/polyfill-ctype.git", | 2609 | "url": "https://github.com/symfony/polyfill-ctype.git", |
2554 | "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" | 2610 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" |
2555 | }, | 2611 | }, |
2556 | "dist": { | 2612 | "dist": { |
2557 | "type": "zip", | 2613 | "type": "zip", |
2558 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", | 2614 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", |
2559 | "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", | 2615 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", |
2560 | "shasum": "" | 2616 | "shasum": "" |
2561 | }, | 2617 | }, |
2562 | "require": { | 2618 | "require": { |
@@ -2568,7 +2624,11 @@ | |||
2568 | "type": "library", | 2624 | "type": "library", |
2569 | "extra": { | 2625 | "extra": { |
2570 | "branch-alias": { | 2626 | "branch-alias": { |
2571 | "dev-master": "1.17-dev" | 2627 | "dev-master": "1.18-dev" |
2628 | }, | ||
2629 | "thanks": { | ||
2630 | "name": "symfony/polyfill", | ||
2631 | "url": "https://github.com/symfony/polyfill" | ||
2572 | } | 2632 | } |
2573 | }, | 2633 | }, |
2574 | "autoload": { | 2634 | "autoload": { |
@@ -2601,222 +2661,24 @@ | |||
2601 | "polyfill", | 2661 | "polyfill", |
2602 | "portable" | 2662 | "portable" |
2603 | ], | 2663 | ], |
2604 | "time": "2020-05-12T16:14:59+00:00" | 2664 | "support": { |
2605 | }, | 2665 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.18.0" |
2606 | { | ||
2607 | "name": "symfony/polyfill-mbstring", | ||
2608 | "version": "v1.17.0", | ||
2609 | "source": { | ||
2610 | "type": "git", | ||
2611 | "url": "https://github.com/symfony/polyfill-mbstring.git", | ||
2612 | "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" | ||
2613 | }, | ||
2614 | "dist": { | ||
2615 | "type": "zip", | ||
2616 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", | ||
2617 | "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", | ||
2618 | "shasum": "" | ||
2619 | }, | ||
2620 | "require": { | ||
2621 | "php": ">=5.3.3" | ||
2622 | }, | ||
2623 | "suggest": { | ||
2624 | "ext-mbstring": "For best performance" | ||
2625 | }, | ||
2626 | "type": "library", | ||
2627 | "extra": { | ||
2628 | "branch-alias": { | ||
2629 | "dev-master": "1.17-dev" | ||
2630 | } | ||
2631 | }, | ||
2632 | "autoload": { | ||
2633 | "psr-4": { | ||
2634 | "Symfony\\Polyfill\\Mbstring\\": "" | ||
2635 | }, | ||
2636 | "files": [ | ||
2637 | "bootstrap.php" | ||
2638 | ] | ||
2639 | }, | ||
2640 | "notification-url": "https://packagist.org/downloads/", | ||
2641 | "license": [ | ||
2642 | "MIT" | ||
2643 | ], | ||
2644 | "authors": [ | ||
2645 | { | ||
2646 | "name": "Nicolas Grekas", | ||
2647 | "email": "p@tchwork.com" | ||
2648 | }, | ||
2649 | { | ||
2650 | "name": "Symfony Community", | ||
2651 | "homepage": "https://symfony.com/contributors" | ||
2652 | } | ||
2653 | ], | ||
2654 | "description": "Symfony polyfill for the Mbstring extension", | ||
2655 | "homepage": "https://symfony.com", | ||
2656 | "keywords": [ | ||
2657 | "compatibility", | ||
2658 | "mbstring", | ||
2659 | "polyfill", | ||
2660 | "portable", | ||
2661 | "shim" | ||
2662 | ], | ||
2663 | "time": "2020-05-12T16:47:27+00:00" | ||
2664 | }, | ||
2665 | { | ||
2666 | "name": "symfony/polyfill-php73", | ||
2667 | "version": "v1.17.0", | ||
2668 | "source": { | ||
2669 | "type": "git", | ||
2670 | "url": "https://github.com/symfony/polyfill-php73.git", | ||
2671 | "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc" | ||
2672 | }, | ||
2673 | "dist": { | ||
2674 | "type": "zip", | ||
2675 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc", | ||
2676 | "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc", | ||
2677 | "shasum": "" | ||
2678 | }, | ||
2679 | "require": { | ||
2680 | "php": ">=5.3.3" | ||
2681 | }, | 2666 | }, |
2682 | "type": "library", | 2667 | "funding": [ |
2683 | "extra": { | ||
2684 | "branch-alias": { | ||
2685 | "dev-master": "1.17-dev" | ||
2686 | } | ||
2687 | }, | ||
2688 | "autoload": { | ||
2689 | "psr-4": { | ||
2690 | "Symfony\\Polyfill\\Php73\\": "" | ||
2691 | }, | ||
2692 | "files": [ | ||
2693 | "bootstrap.php" | ||
2694 | ], | ||
2695 | "classmap": [ | ||
2696 | "Resources/stubs" | ||
2697 | ] | ||
2698 | }, | ||
2699 | "notification-url": "https://packagist.org/downloads/", | ||
2700 | "license": [ | ||
2701 | "MIT" | ||
2702 | ], | ||
2703 | "authors": [ | ||
2704 | { | 2668 | { |
2705 | "name": "Nicolas Grekas", | 2669 | "url": "https://symfony.com/sponsor", |
2706 | "email": "p@tchwork.com" | 2670 | "type": "custom" |
2707 | }, | 2671 | }, |
2708 | { | 2672 | { |
2709 | "name": "Symfony Community", | 2673 | "url": "https://github.com/fabpot", |
2710 | "homepage": "https://symfony.com/contributors" | 2674 | "type": "github" |
2711 | } | ||
2712 | ], | ||
2713 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", | ||
2714 | "homepage": "https://symfony.com", | ||
2715 | "keywords": [ | ||
2716 | "compatibility", | ||
2717 | "polyfill", | ||
2718 | "portable", | ||
2719 | "shim" | ||
2720 | ], | ||
2721 | "time": "2020-05-12T16:47:27+00:00" | ||
2722 | }, | ||
2723 | { | ||
2724 | "name": "symfony/service-contracts", | ||
2725 | "version": "v1.1.8", | ||
2726 | "source": { | ||
2727 | "type": "git", | ||
2728 | "url": "https://github.com/symfony/service-contracts.git", | ||
2729 | "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf" | ||
2730 | }, | ||
2731 | "dist": { | ||
2732 | "type": "zip", | ||
2733 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf", | ||
2734 | "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf", | ||
2735 | "shasum": "" | ||
2736 | }, | ||
2737 | "require": { | ||
2738 | "php": "^7.1.3", | ||
2739 | "psr/container": "^1.0" | ||
2740 | }, | ||
2741 | "suggest": { | ||
2742 | "symfony/service-implementation": "" | ||
2743 | }, | ||
2744 | "type": "library", | ||
2745 | "extra": { | ||
2746 | "branch-alias": { | ||
2747 | "dev-master": "1.1-dev" | ||
2748 | } | ||
2749 | }, | ||
2750 | "autoload": { | ||
2751 | "psr-4": { | ||
2752 | "Symfony\\Contracts\\Service\\": "" | ||
2753 | } | ||
2754 | }, | ||
2755 | "notification-url": "https://packagist.org/downloads/", | ||
2756 | "license": [ | ||
2757 | "MIT" | ||
2758 | ], | ||
2759 | "authors": [ | ||
2760 | { | ||
2761 | "name": "Nicolas Grekas", | ||
2762 | "email": "p@tchwork.com" | ||
2763 | }, | 2675 | }, |
2764 | { | 2676 | { |
2765 | "name": "Symfony Community", | 2677 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", |
2766 | "homepage": "https://symfony.com/contributors" | 2678 | "type": "tidelift" |
2767 | } | ||
2768 | ], | ||
2769 | "description": "Generic abstractions related to writing services", | ||
2770 | "homepage": "https://symfony.com", | ||
2771 | "keywords": [ | ||
2772 | "abstractions", | ||
2773 | "contracts", | ||
2774 | "decoupling", | ||
2775 | "interfaces", | ||
2776 | "interoperability", | ||
2777 | "standards" | ||
2778 | ], | ||
2779 | "time": "2019-10-14T12:27:06+00:00" | ||
2780 | }, | ||
2781 | { | ||
2782 | "name": "theseer/fdomdocument", | ||
2783 | "version": "1.6.6", | ||
2784 | "source": { | ||
2785 | "type": "git", | ||
2786 | "url": "https://github.com/theseer/fDOMDocument.git", | ||
2787 | "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" | ||
2788 | }, | ||
2789 | "dist": { | ||
2790 | "type": "zip", | ||
2791 | "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", | ||
2792 | "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", | ||
2793 | "shasum": "" | ||
2794 | }, | ||
2795 | "require": { | ||
2796 | "ext-dom": "*", | ||
2797 | "lib-libxml": "*", | ||
2798 | "php": ">=5.3.3" | ||
2799 | }, | ||
2800 | "type": "library", | ||
2801 | "autoload": { | ||
2802 | "classmap": [ | ||
2803 | "src/" | ||
2804 | ] | ||
2805 | }, | ||
2806 | "notification-url": "https://packagist.org/downloads/", | ||
2807 | "license": [ | ||
2808 | "BSD-3-Clause" | ||
2809 | ], | ||
2810 | "authors": [ | ||
2811 | { | ||
2812 | "name": "Arne Blankerts", | ||
2813 | "email": "arne@blankerts.de", | ||
2814 | "role": "lead" | ||
2815 | } | 2679 | } |
2816 | ], | 2680 | ], |
2817 | "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", | 2681 | "time": "2020-07-14T12:35:20+00:00" |
2818 | "homepage": "https://github.com/theseer/fDOMDocument", | ||
2819 | "time": "2017-06-30T11:53:12+00:00" | ||
2820 | }, | 2682 | }, |
2821 | { | 2683 | { |
2822 | "name": "theseer/tokenizer", | 2684 | "name": "theseer/tokenizer", |
@@ -2856,27 +2718,32 @@ | |||
2856 | } | 2718 | } |
2857 | ], | 2719 | ], |
2858 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", | 2720 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", |
2721 | "support": { | ||
2722 | "issues": "https://github.com/theseer/tokenizer/issues", | ||
2723 | "source": "https://github.com/theseer/tokenizer/tree/master" | ||
2724 | }, | ||
2859 | "time": "2019-06-13T22:48:21+00:00" | 2725 | "time": "2019-06-13T22:48:21+00:00" |
2860 | }, | 2726 | }, |
2861 | { | 2727 | { |
2862 | "name": "webmozart/assert", | 2728 | "name": "webmozart/assert", |
2863 | "version": "1.8.0", | 2729 | "version": "1.9.1", |
2864 | "source": { | 2730 | "source": { |
2865 | "type": "git", | 2731 | "type": "git", |
2866 | "url": "https://github.com/webmozart/assert.git", | 2732 | "url": "https://github.com/webmozart/assert.git", |
2867 | "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" | 2733 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" |
2868 | }, | 2734 | }, |
2869 | "dist": { | 2735 | "dist": { |
2870 | "type": "zip", | 2736 | "type": "zip", |
2871 | "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", | 2737 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", |
2872 | "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", | 2738 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", |
2873 | "shasum": "" | 2739 | "shasum": "" |
2874 | }, | 2740 | }, |
2875 | "require": { | 2741 | "require": { |
2876 | "php": "^5.3.3 || ^7.0", | 2742 | "php": "^5.3.3 || ^7.0 || ^8.0", |
2877 | "symfony/polyfill-ctype": "^1.8" | 2743 | "symfony/polyfill-ctype": "^1.8" |
2878 | }, | 2744 | }, |
2879 | "conflict": { | 2745 | "conflict": { |
2746 | "phpstan/phpstan": "<0.12.20", | ||
2880 | "vimeo/psalm": "<3.9.1" | 2747 | "vimeo/psalm": "<3.9.1" |
2881 | }, | 2748 | }, |
2882 | "require-dev": { | 2749 | "require-dev": { |
@@ -2904,7 +2771,11 @@ | |||
2904 | "check", | 2771 | "check", |
2905 | "validate" | 2772 | "validate" |
2906 | ], | 2773 | ], |
2907 | "time": "2020-04-18T12:12:48+00:00" | 2774 | "support": { |
2775 | "issues": "https://github.com/webmozart/assert/issues", | ||
2776 | "source": "https://github.com/webmozart/assert/tree/master" | ||
2777 | }, | ||
2778 | "time": "2020-07-08T17:02:28+00:00" | ||
2908 | } | 2779 | } |
2909 | ], | 2780 | ], |
2910 | "aliases": [], | 2781 | "aliases": [], |
@@ -2923,5 +2794,6 @@ | |||
2923 | "platform-dev": [], | 2794 | "platform-dev": [], |
2924 | "platform-overrides": { | 2795 | "platform-overrides": { |
2925 | "php": "7.1.29" | 2796 | "php": "7.1.29" |
2926 | } | 2797 | }, |
2798 | "plugin-api-version": "2.0.0" | ||
2927 | } | 2799 | } |
diff --git a/doc/md/3rd-party-libraries.md b/doc/md/3rd-party-libraries.md deleted file mode 100644 index 7e7dd334..00000000 --- a/doc/md/3rd-party-libraries.md +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | ## CSS | ||
2 | |||
3 | - Yahoo UI [CSS Reset](http://yuilibrary.com/yui/docs/cssreset/) - standardize cross-browser rendering | ||
4 | |||
5 | ## Javascript | ||
6 | |||
7 | - [Awesomeplete](https://leaverou.github.io/awesomplete/) ([GitHub](https://github.com/LeaVerou/awesomplete)) - autocompletion in input forms | ||
8 | - [bLazy](http://dinbror.dk/blazy/) ([GitHub](https://github.com/dinbror/blazy)) - lazy loading for thumbnails | ||
9 | - [qr.js](http://neocotic.com/qr.js/) ([GitHub](https://github.com/neocotic/qr.js)) - QR code generation | ||
10 | |||
11 | ## PHP | ||
12 | |||
13 | - [RainTPL](https://github.com/rainphp/raintpl) - HTML templating for PHP | ||
14 | |||
15 | ### Composer | ||
16 | |||
17 | Library | Usage | ||
18 | ---|--- | ||
19 | [`shaarli/netscape-bookmark-parser`](https://packagist.org/packages/shaarli/netscape-bookmark-parser) | Import bookmarks from Netscape files | ||
20 | [`erusev/parsedown`](https://packagist.org/packages/erusev/parsedown) | Parse MarkDown syntax for the MarkDown plugin | ||
21 | [`slim/slim`](https://packagist.org/packages/slim/slim) | Handle routes and middleware for the REST API | ||
diff --git a/doc/md/Backup-and-restore.md b/doc/md/Backup-and-restore.md new file mode 100644 index 00000000..e7e2775c --- /dev/null +++ b/doc/md/Backup-and-restore.md | |||
@@ -0,0 +1,11 @@ | |||
1 | ## Backup and restore | ||
2 | |||
3 | All data and [configuration](Shaarli-configuration.md) is kept in the `data` directory. Backup this directory: | ||
4 | |||
5 | ```bash | ||
6 | rsync -avzP my.server.com:/var/www/shaarli.mydomain.org/data ~/backups/shaarli-data-$(date +%Y-%m-%d_%H%M) | ||
7 | ``` | ||
8 | |||
9 | It is strongly recommended to do periodic, automatic backups to a seperate machine. You can automate the command above using a cron job or full-featured backup solutions such as [rsnapshot](https://rsnapshot.org/) | ||
10 | |||
11 | To restore a backup, simply put back the `data/` directory in place, owerwriting any existing files. \ No newline at end of file | ||
diff --git a/doc/md/Browsing-and-searching.md b/doc/md/Browsing-and-searching.md deleted file mode 100644 index 16c69855..00000000 --- a/doc/md/Browsing-and-searching.md +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | ## Plain text search | ||
2 | |||
3 | Use the `Search text` field to search in _any_ of the fields of all links (Title, URL, Description...) | ||
4 | |||
5 | **Exclude text/tags:** Use the `-` operator before a word or tag (example `-uninteresting`) to prevent entries containing (or tagged) `uninteresting` from showing up in the search results. | ||
6 | |||
7 | **Exact text search:** Use double-quotes (example `"exact search"`) to search for the exact expression. | ||
8 | |||
9 | Both exclude patterns and exact searches can be combined with normal searches (example `"exact search" term otherterm -notthis "very exact" stuff -notagain`) | ||
10 | |||
11 | ## Tags search | ||
12 | |||
13 | Use the `Filter by tags` field to restrict displayed links to entries tagged with one or multiple tags (use space to separate tags). | ||
14 | |||
15 | **Hidden tags:** Tags starting with a dot `.` (example `.secret`) are private. They can only be seen and searched when logged in. | ||
16 | |||
17 | ### Tag cloud | ||
18 | |||
19 | The `Tag cloud` page diplays a "cloud" view of all tags in your Shaarli. | ||
20 | |||
21 | * The most frequently used tags are displayed with a bigger font size. | ||
22 | * When sorting by `Most used` or `Alphabetical`, tags are displayed as a _list_, along with counters and edit/delete buttons for each tag. | ||
23 | * Clicking on any tag will display a list of all Shaares matching this tag. | ||
24 | * Clicking on the counter next to a tag `example`, will filter the tag cloud to only display tags found in Shaares tagged `example`. Repeat this any number of times to further filter the tag cloud. Click `List all links with those tags` to display Shaares matching your current tag filter. | ||
25 | |||
26 | ## Filtering RSS feeds/Picture wall | ||
27 | |||
28 | RSS feeds can also be restricted to only return items matching a text/tag search: see [RSS feeds](RSS-feeds). | ||
29 | |||
30 | ## Filter buttons | ||
31 | |||
32 | Filter buttons can be found at the top left of the link list. They allow you to apply different filters to the list: | ||
33 | |||
34 | * **Private links:** When this toggle button is enabled, only shaares set to `private` will be shown. | ||
35 | * **Untagged links:** When the this toggle button is enabled (top left of the link list), only shaares _without any tags_ will be shown in the link list. | ||
36 | |||
37 | Filter buttons are only available when logged in. | ||
diff --git a/doc/md/Community-&-Related-software.md b/doc/md/Community-and-related-software.md index 54f18c8e..53a7555e 100644 --- a/doc/md/Community-&-Related-software.md +++ b/doc/md/Community-and-related-software.md | |||
@@ -1,66 +1,87 @@ | |||
1 | # Community & related software | ||
2 | |||
1 | _Unofficial but related work on Shaarli. If you maintain one of these, | 3 | _Unofficial but related work on Shaarli. If you maintain one of these, |
2 | please get in touch with us to help us find a way to adapt your work to our fork._ | 4 | please get in touch with us to help us find a way to adapt your work to our fork._ |
3 | 5 | ||
4 | ## Related software | ||
5 | 6 | ||
7 | ## Related software | ||
6 | 8 | ||
7 | ### REST API clients | 9 | ### REST API clients |
8 | See [REST API](REST-API) for a list of official and community clients. | 10 | See [REST API](REST-API) for a list of official and community clients. |
9 | 11 | ||
10 | 12 | ||
11 | ### Third party plugins | 13 | ### Third party plugins |
12 | - [autosave](https://github.com/kalvn/shaarli-plugin-autosave) by [@kalvn](https://github.com/kalvn): Automatically saves data when editing a link to avoid any loss in case of crash or unexpected shutdown. | 14 | |
13 | - [Code Coloration](https://github.com/ArthurHoaro/code-coloration) by [@ArthurHoaro](https://github.com/ArthurHoaro): client side code syntax highlighter. | 15 | - [autosave](https://github.com/kalvn/shaarli-plugin-autosave) by [@kalvn](https://github.com/kalvn): Automatically saves data when editing a Shaare to avoid any loss in case of crash or unexpected shutdown. |
14 | - [Disqus](https://github.com/kalvn/shaarli-plugin-disqus) by [@kalvn](https://github.com/kalvn): Adds Disqus comment system to your Shaarli. | 16 | - [code-coloration](https://github.com/ArthurHoaro/code-coloration) by [@ArthurHoaro](https://github.com/ArthurHoaro): client side code syntax highlighter. |
17 | - [custom-css](https://github.com/immanuelfodor/shaarli-custom-css) by [@immanuelfodor](https://github.com/immanuelfodor) - Customize the look and feel of the UI with custom CSS rules | ||
18 | - [disqus](https://github.com/kalvn/shaarli-plugin-disqus) by [@kalvn](https://github.com/kalvn): Adds Disqus comment system to your Shaarli. | ||
19 | - [emojione](https://github.com/immanuelfodor/emojione) by [@immanuelfodor](https://github.com/immanuelfodor) - Resurrected fork of the original emojione project | ||
20 | - [favicons](https://github.com/trailjeep/shaarli-favicons) by [@trailjeep](https://github.com/trailjeep) - Shaarli plugin to add favicon/filetype icons to Shaares. | ||
15 | - [google analytics](https://github.com/ericjuden/Shaarli-Google-Analytics-Plugin) by [@ericjuden](http://github.com/ericjuden): Adds Google Analytics tracking support | 21 | - [google analytics](https://github.com/ericjuden/Shaarli-Google-Analytics-Plugin) by [@ericjuden](http://github.com/ericjuden): Adds Google Analytics tracking support |
16 | - [launch](https://github.com/ArthurHoaro/launch-plugin) - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli. | 22 | - [launch](https://github.com/ArthurHoaro/launch-plugin) - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli. |
17 | - [markdown-toolbar](https://github.com/immanuelfodor/shaarli-markdown-toolbar) by [@immanuelfodor](https://github.com/immanuelfodor) - Easily insert markdown syntax into the Description field when editing a link. | 23 | - [markdown-toolbar](https://github.com/immanuelfodor/shaarli-markdown-toolbar) by [@immanuelfodor](https://github.com/immanuelfodor) - Easily insert markdown syntax into the Description field when editing a Shaare. |
18 | - [related](https://github.com/ilesinge/shaarli-related) by [@ilesinge](https://github.com/ilesinge) - Show related links based on the number of identical tags. | 24 | - [related](https://github.com/ilesinge/shaarli-related) by [@ilesinge](https://github.com/ilesinge) - Show related Shaares based on the number of identical tags. |
19 | - [social](https://github.com/alexisju/social) by [@alexisju](https://github.com/alexisju): share links to social networks. | 25 | - [shaarli-descriptor](https://github.com/immanuelfodor/shaarli-descriptor) by [@immanuelfodor](https://github.com/immanuelfodor) - Customize the default height/number of rows of the Description field when editing a Shaare. |
20 | - [shaarli2twitter](https://github.com/ArthurHoaro/shaarli2twitter) by [@ArthurHoaro](https://github.com/ArthurHoaro) - Automatically tweet your shared links from Shaarli | ||
21 | - [shaarli2mastodon](https://github.com/kalvn/shaarli2mastodon) by [@kalvn](https://github.com/kalvn) - This Shaarli plugin allows you to automatically publish links you post on your Mastodon timeline. | 26 | - [shaarli2mastodon](https://github.com/kalvn/shaarli2mastodon) by [@kalvn](https://github.com/kalvn) - This Shaarli plugin allows you to automatically publish links you post on your Mastodon timeline. |
22 | - [shaarli-descriptor](https://github.com/immanuelfodor/shaarli-descriptor) by [@immanuelfodor](https://github.com/immanuelfodor) - Customize the default height/number of rows of the Description field when editing a link. | 27 | - [shaarli2twitter](https://github.com/ArthurHoaro/shaarli2twitter) by [@ArthurHoaro](https://github.com/ArthurHoaro) - Automatically tweet your Shaares from Shaarli |
28 | - [social](https://github.com/alexisju/social) by [@alexisju](https://github.com/alexisju): share links to social networks. | ||
23 | - [urlextern](https://github.com/trailjeep/shaarli-urlextern) by [@trailjeep](https://github.com/trailjeep) - Shaarli plugin to open external links in a new tab/window. | 29 | - [urlextern](https://github.com/trailjeep/shaarli-urlextern) by [@trailjeep](https://github.com/trailjeep) - Shaarli plugin to open external links in a new tab/window. |
24 | - [favicons](https://github.com/trailjeep/shaarli-favicons) by [@trailjeep](https://github.com/trailjeep) - Shaarli plugin to add favicon/filetype icons to links. | 30 | - [webhooks](https://gitlab.com/flow.gunso/shaarli-webhooks) by [@flow.gunso](https://gitlab.com/flow.gunso) - Shaarli plugin that enables user-defined callback URL, i.e. webhooks, for specific Shaarli events (link saving, deletion...) |
31 | |||
25 | 32 | ||
26 | ### Third-party themes | 33 | ### Third-party themes |
34 | |||
27 | See [Theming](Theming) for a list of community-contributed themes, and an installation guide. | 35 | See [Theming](Theming) for a list of community-contributed themes, and an installation guide. |
28 | 36 | ||
29 | 37 | ||
30 | ### Integration with other platforms | 38 | ### Integration with other platforms |
39 | |||
31 | - [tt-rss-shaarli](https://github.com/jcsaaddupuy/tt-rss-shaarli) - [Tiny-Tiny RSS](http://tt-rss.org/) plugin that adds support for sharing articles with Shaarli | 40 | - [tt-rss-shaarli](https://github.com/jcsaaddupuy/tt-rss-shaarli) - [Tiny-Tiny RSS](http://tt-rss.org/) plugin that adds support for sharing articles with Shaarli |
32 | - [octopress-shaarli](https://github.com/ahmet2mir/octopress-shaarli) - Octopress plugin to retrieve Shaarli links on the sidebar | 41 | - [octopress-shaarli](https://github.com/ahmet2mir/octopress-shaarli) - Octopress plugin to retrieve Shaarli Shaares on the sidebar |
33 | - [Scuttle to Shaarli](https://github.com/q2apro/scuttle-to-shaarli) - Import bookmarks from Scuttle | 42 | - [Scuttle to Shaarli](https://github.com/q2apro/scuttle-to-shaarli) - Import bookmarks from Scuttle |
34 | - [Shaarli app for Cloudron](https://git.cloudron.io/cloudron/shaarli-app) - Effortlessly run Shaarli with the help of [Cloudron](https://cloudron.io/) [![Install](https://cloudron.io/img/button.svg)](https://cloudron.io/button.html?app=com.github.shaarli) | 43 | - [Shaarli app for Cloudron](https://git.cloudron.io/cloudron/shaarli-app) - Effortlessly run Shaarli with the help of [Cloudron](https://cloudron.io/) [![Install](https://cloudron.io/img/button.svg)](https://cloudron.io/button.html?app=com.github.shaarli) |
35 | - [Shaarli_ynh](https://github.com/YunoHost-Apps/shaarli_ynh) - Shaarli is available as a [Yunohost](https://yunohost.org) app [![Install Shaarli with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shaarli) | 44 | - [Shaarli_ynh](https://github.com/YunoHost-Apps/shaarli_ynh) - Shaarli is available as a [Yunohost](https://yunohost.org) app [![Install Shaarli with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shaarli) |
36 | - [pelican](https://blog.getpelican.com) static blog generator plugin to auto-post articles on a Shaarli instance: [shaarli_poster](https://github.com/getpelican/pelican-plugins/tree/master/shaarli_poster) | 45 | - [pelican](https://blog.getpelican.com) static blog generator plugin to auto-post articles on a Shaarli instance: [shaarli_poster](https://github.com/getpelican/pelican-plugins/tree/master/shaarli_poster) |
37 | 46 | ||
47 | |||
38 | ### Mobile Apps | 48 | ### Mobile Apps |
49 | |||
39 | - [ShaarliOS](https://github.com/mro/ShaarliOS) - Apple iOS share extension. | 50 | - [ShaarliOS](https://github.com/mro/ShaarliOS) - Apple iOS share extension. |
40 | - [Shaarli for Android](http://sebsauvage.net/links/?ZAyDzg) - Android application that adds Shaarli as a sharing provider | 51 | - [Shaarli for Android](http://sebsauvage.net/links/?ZAyDzg) - Android application that adds Shaarli as a sharing provider |
41 | - [Shaarlier for Android](https://github.com/dimtion/Shaarlier) - Android application to simply add links directly into your Shaarli | 52 | - [Shaarlier for Android](https://github.com/dimtion/Shaarlier) - Android application to simply add Shaares directly into your Shaarli |
42 | - [Stakali for Android](https://stakali.toneiv.eu) - Stakali is a personal bookmark manager which synchronizes with Shaarli | 53 | - [Stakali for Android](https://stakali.toneiv.eu) - Stakali is a personal bookmark manager which synchronizes with Shaarli |
43 | 54 | ||
55 | |||
44 | ### Desktop Apps | 56 | ### Desktop Apps |
57 | |||
45 | - [Ulauncher Extension](https://github.com/sebw/ulauncher-shaarli) - Ulauncher is an an application launcher for Linux, this extension allows research in your Shaarli | 58 | - [Ulauncher Extension](https://github.com/sebw/ulauncher-shaarli) - Ulauncher is an an application launcher for Linux, this extension allows research in your Shaarli |
46 | 59 | ||
60 | |||
47 | ### Browser addons | 61 | ### Browser addons |
62 | |||
48 | - [Shaarli Firefox Extension](https://github.com/ikipatang/shaarli-web-extension) - toolbar button to share your current tab with Shaarli. | 63 | - [Shaarli Firefox Extension](https://github.com/ikipatang/shaarli-web-extension) - toolbar button to share your current tab with Shaarli. |
49 | - [Shaarli Chrome Extension](https://github.com/octplane/Shiny-Shaarli) - toolbar button to share your current tab with Shaarli. | 64 | - [Shaarli Chrome Extension](https://github.com/octplane/Shiny-Shaarli) - toolbar button to share your current tab with Shaarli. |
50 | 65 | ||
66 | |||
51 | ### Server apps | 67 | ### Server apps |
68 | |||
52 | - [shaarchiver](https://github.com/nodiscc/shaarchiver) - Archive your Shaarli bookmarks and their content | 69 | - [shaarchiver](https://github.com/nodiscc/shaarchiver) - Archive your Shaarli bookmarks and their content |
53 | - [shaarli-river](https://github.com/mknexen/shaarli-river) - An aggregator for shaarlis with many features | 70 | - [shaarli-river](https://github.com/mknexen/shaarli-river) - An aggregator for shaarlis with many features |
54 | - [Shaarlo](https://github.com/DMeloni/shaarlo) - An aggregator for shaarlis with many features (a very popular running instance among French shaarliers: [shaarli.fr](http://shaarli.fr/)) | 71 | - [Shaarlo](https://github.com/DMeloni/shaarlo) - An aggregator for shaarlis with many features |
55 | - [Shaarlimages](https://github.com/BoboTiG/shaarlimages) - An image-oriented aggregator for Shaarlis | 72 | - [Shaarlimages](https://github.com/BoboTiG/shaarlimages) - An image-oriented aggregator for Shaarlis |
56 | - [mknexen/shaarli-api](https://github.com/mknexen/shaarli-api) - A REST API for Shaarli | 73 | - [mknexen/shaarli-api](https://github.com/mknexen/shaarli-api) - A REST API for Shaarli |
57 | - [Self dead link](https://framagit.org/qwertygc/shaarli-dev-code/blob/master/self-dead-link.php) - Detect dead links on shaarli. This version use the database of shaarli. [Another version](https://framagit.org/qwertygc/shaarli-dev-code/blob/master/dead-link.php), can be used for other shaarli instances (but is more resource consuming). | 74 | - [Self dead link](https://framagit.org/qwertygc/shaarli-dev-code/blob/master/self-dead-link.php) - Detect dead links on shaarli. This version use the database of shaarli. [Another version](https://framagit.org/qwertygc/shaarli-dev-code/blob/master/dead-link.php), can be used for other shaarli instances (but is more resource consuming). |
58 | - [Bookmark Archiver](https://github.com/pirate/bookmark-archiver) - Save an archived copy of all websites starred using browser bookmarks/Shaarli/Delicious/Instapaper/Unmark.it/Pocket/Pinboard. Outputs browseable html. | 75 | - [Bookmark Archiver](https://github.com/pirate/bookmark-archiver) - Save an archived copy of all websites starred using browser bookmarks/Shaarli/Delicious/Instapaper/Unmark.it/Pocket/Pinboard. Outputs browseable html. |
59 | 76 | ||
77 | |||
60 | ## Alternatives to Shaarli | 78 | ## Alternatives to Shaarli |
79 | |||
61 | See [awesome-selfhosted: bookmarks & link sharing](https://github.com/Kickball/awesome-selfhosted/#bookmarks--link-sharing). | 80 | See [awesome-selfhosted: bookmarks & link sharing](https://github.com/Kickball/awesome-selfhosted/#bookmarks--link-sharing). |
62 | 81 | ||
82 | |||
63 | ## Community | 83 | ## Community |
84 | |||
64 | - [Liens en vrac de sebsauvage](http://sebsauvage.net/links/) - the original Shaarli | 85 | - [Liens en vrac de sebsauvage](http://sebsauvage.net/links/) - the original Shaarli |
65 | - [A large list of Shaarlis](http://porneia.free.fr/pub/links/ou-est-shaarli.html) | 86 | - [A large list of Shaarlis](http://porneia.free.fr/pub/links/ou-est-shaarli.html) |
66 | - [A list of working Shaarli aggregators](https://raw.githubusercontent.com/Oros42/find_shaarlis/master/annuaires.json) | 87 | - [A list of working Shaarli aggregators](https://raw.githubusercontent.com/Oros42/find_shaarlis/master/annuaires.json) |
@@ -71,8 +92,17 @@ See [awesome-selfhosted: bookmarks & link sharing](https://github.com/Kickball/a | |||
71 | - [Original revisions history](http://sebsauvage.net/wiki/doku.php?id=php:shaarli:history) | 92 | - [Original revisions history](http://sebsauvage.net/wiki/doku.php?id=php:shaarli:history) |
72 | - [Shaarli.fr/my](https://www.shaarli.fr/my.php) - Unofficial, unsupported (old fork) hosted Shaarlis provider, courtesy of [DMeloni](https://github.com/DMeloni) | 93 | - [Shaarli.fr/my](https://www.shaarli.fr/my.php) - Unofficial, unsupported (old fork) hosted Shaarlis provider, courtesy of [DMeloni](https://github.com/DMeloni) |
73 | 94 | ||
95 | |||
74 | ### Articles and social media discussions | 96 | ### Articles and social media discussions |
75 | - 2016-09-22 - Hacker News - https://news.ycombinator.com/item?id=12552176 | 97 | - 2020-04-05 - Hacker News - [Self-hosted instance of Shaarli - it is simple, fast and reliable](https://news.ycombinator.com/item?id=22780219) |
98 | - 2016-10-10 - Framasoft - [MyFrama : vos favoris partout, avec vous, rien qu’à vous !](https://framablog.org/2016/10/10/myframa-vos-favoris-et-framasofteries-partout-avec-vous-rien-qua-vous/) | ||
99 | - 2016-09-22 - Hacker News - [Shaarli – Personal, minimalist, database-free, bookmarking service (github.com)](https://news.ycombinator.com/item?id=12552176) | ||
76 | - 2015-08-15 - Reddit - [Question about migrating from WordPress to Shaarli.](https://www.reddit.com/r/selfhosted/comments/3h3zwh/question_about_migrating_from_wordpress_to_shaarli/) | 100 | - 2015-08-15 - Reddit - [Question about migrating from WordPress to Shaarli.](https://www.reddit.com/r/selfhosted/comments/3h3zwh/question_about_migrating_from_wordpress_to_shaarli/) |
77 | - 2015-06-22 - Hacker News - https://news.ycombinator.com/item?id=9755366 | 101 | - 2015-06-22 - Hacker News - [Shaarli: Self-hosted del.icio.us alternative (sebsauvage.net)](https://news.ycombinator.com/item?id=9755366) |
78 | - 2015-05-12 - Reddit - [shaarli - Self hosted Bookmarking / Delicious (PHP, MySQL)](https://www.reddit.com/r/selfhosted/comments/35pkkc/shaarli_self_hosted_bookmarking_delicious_php/) | 102 | - 2015-05-12 - Reddit - [shaarli - Self hosted Bookmarking / Delicious (PHP, MySQL)](https://www.reddit.com/r/selfhosted/comments/35pkkc/shaarli_self_hosted_bookmarking_delicious_php/) |
103 | - 2014-10-15 - OpenSource.com - [Five open source alternatives to popular web apps](https://opensource.com/life/14/10/five-open-source-alternatives-popular-web-apps) | ||
104 | |||
105 | It also appears in the following recommendation lists: | ||
106 | - [AlternativeTo](https://alternativeto.net/software/shaarli/) | ||
107 | - [FramaLibre](https://framalibre.org/content/shaarli) | ||
108 | - [Project Awesome: Selfhosted Bookmarks and Link Sharing](https://project-awesome.org/Kickball/awesome-selfhosted) | ||
diff --git a/doc/md/Continuous-integration-tools.md b/doc/md/Continuous-integration-tools.md deleted file mode 100644 index f7819d5a..00000000 --- a/doc/md/Continuous-integration-tools.md +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | ## Local development | ||
2 | A [`Makefile`](https://github.com/shaarli/Shaarli/blob/master/Makefile) is available to perform project-related operations: | ||
3 | |||
4 | - Documentation - generate a local HTML copy of the GitHub wiki | ||
5 | - [Static analysis](Static-analysis) - check that the code is compliant to PHP conventions | ||
6 | - [Unit tests](Unit-tests) - ensure there are no regressions introduced by new commits | ||
7 | |||
8 | ## Automatic builds | ||
9 | [Travis CI](http://docs.travis-ci.com/) is a Continuous Integration build server, that runs a build: | ||
10 | |||
11 | - each time a commit is merged to the mainline (`master` branch) | ||
12 | - each time a Pull Request is submitted or updated | ||
13 | |||
14 | A build is composed of several jobs: one for each supported PHP version (see [Server requirements](Server requirements)). | ||
15 | |||
16 | Each build job: | ||
17 | |||
18 | - updates Composer | ||
19 | - installs 3rd-party test dependencies with Composer | ||
20 | - runs [Unit tests](Unit-tests) | ||
21 | - runs ESLint check | ||
22 | |||
23 | After all jobs have finished, Travis returns the results to GitHub: | ||
24 | |||
25 | - a status icon represents the result for the `master` branch: [![](https://api.travis-ci.org/shaarli/Shaarli.svg)](https://travis-ci.org/shaarli/Shaarli) | ||
26 | - Pull Requests are updated with the Travis result | ||
27 | - Green: all tests have passed | ||
28 | - Red: some tests failed | ||
29 | - Orange: tests are pending | ||
30 | |||
31 | ## Documentation | ||
32 | [mkdocs](https://www.mkdocs.org/) is used to convert markdown documentation to HTML pages. The [public documentation](https://shaarli.readthedocs.io/en/master/) website is rendered and hosted by [readthedocs.org](https://readthedocs.org/). A copy of the documentation is also included in prebuilt [release archives](https://github.com/shaarli/Shaarli/releases) (`doc/html/` path in your Shaarli installation). To generate the HTML documentation locally, install a recent version of Python `setuptools` and run `make doc`. | ||
diff --git a/doc/md/Development-guidelines.md b/doc/md/Development-guidelines.md deleted file mode 100644 index 46b7c6f8..00000000 --- a/doc/md/Development-guidelines.md +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | ## Development guidelines | ||
2 | |||
3 | Please have a look at the following pages: | ||
4 | |||
5 | - [Contributing to Shaarli](https://github.com/shaarli/Shaarli/tree/master/CONTRIBUTING.md) | ||
6 | - [Static analysis](Static-analysis) - patches should try to stick to the | ||
7 | [PHP Standard Recommendations](http://www.php-fig.org/psr/) (PSR), especially: | ||
8 | - [PSR-1](http://www.php-fig.org/psr/psr-1/) - Basic Coding Standard | ||
9 | - [PSR-2](http://www.php-fig.org/psr/psr-2/) - Coding Style Guide | ||
10 | - [Unit tests](Unit-tests) | ||
11 | - Javascript linting - Shaarli uses [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript). | ||
12 | Run `make eslint` to check JS style. | ||
13 | - [GnuPG signature](GnuPG-signature) for tags/releases | ||
diff --git a/doc/md/Directory-structure.md b/doc/md/Directory-structure.md deleted file mode 100644 index c0b49393..00000000 --- a/doc/md/Directory-structure.md +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | ## Directory structure | ||
2 | |||
3 | Here is the directory structure of Shaarli and the purpose of the different files: | ||
4 | |||
5 | ```bash | ||
6 | index.php # Main program | ||
7 | application/ # Shaarli classes | ||
8 | ├── LinkDB.php | ||
9 | |||
10 | ... | ||
11 | |||
12 | └── Utils.php | ||
13 | tests/ # Shaarli unitary & functional tests | ||
14 | ├── LinkDBTest.php | ||
15 | |||
16 | ... | ||
17 | |||
18 | ├── utils # utilities to ease testing | ||
19 | │ └── ReferenceLinkDB.php | ||
20 | └── UtilsTest.php | ||
21 | assets/ | ||
22 | ├── common/ # Assets shared by multiple themes | ||
23 | ├── ... | ||
24 | ├── default/ # Assets for the default template, before compilation | ||
25 | ├── fonts/ # Font files | ||
26 | ├── img/ # Images used by the default theme | ||
27 | ├── js/ # JavaScript files in ES6 syntax | ||
28 | ├── scss/ # SASS files | ||
29 | └── vintage/ # Assets for the vintage template, before compilation | ||
30 | └── ... | ||
31 | COPYING # Shaarli license | ||
32 | inc/ # static assets and 3rd party libraries | ||
33 | └── rain.tpl.class.php # RainTPL templating library | ||
34 | images/ # Images and icons used in Shaarli | ||
35 | data/ # data storage: bookmark database, configuration, logs, banlist... | ||
36 | ├── config.json.php # Shaarli configuration (login, password, timezone, title...) | ||
37 | ├── datastore.php # Your link database (compressed). | ||
38 | ├── ipban.php # IP address ban system data | ||
39 | ├── lastupdatecheck.txt # Update check timestamp file | ||
40 | └── log.txt # login/IPban log. | ||
41 | tpl/ # RainTPL templates for Shaarli. They are used to build the pages. | ||
42 | ├── default/ # Default Shaarli theme | ||
43 | ├── fonts/ # Font files | ||
44 | ├── img/ # Images | ||
45 | ├── js/ # JavaScript files compiled by Babel and compatible with all browsers | ||
46 | ├── css/ # CSS files compiled with SASS | ||
47 | └── vintage/ # Legacy Shaarli theme | ||
48 | └── ... | ||
49 | cache/ # thumbnails cache | ||
50 | # This directory is automatically created. You can erase it anytime you want. | ||
51 | tmp/ # Temporary directory for compiled RainTPL templates. | ||
52 | # This directory is automatically created. You can erase it anytime you want. | ||
53 | vendor/ # Third-party dependencies. This directory is created by Composer | ||
54 | ``` | ||
diff --git a/doc/md/Docker.md b/doc/md/Docker.md new file mode 100644 index 00000000..c152fe92 --- /dev/null +++ b/doc/md/Docker.md | |||
@@ -0,0 +1,227 @@ | |||
1 | # Docker | ||
2 | |||
3 | [Docker](https://docs.docker.com/get-started/overview/) is an open platform for developing, shipping, and running applications | ||
4 | |||
5 | ## Install Docker | ||
6 | |||
7 | Install [Docker](https://docs.docker.com/engine/install/), by following the instructions relevant to your OS / distribution, and start the service. For example on [Debian](https://docs.docker.com/engine/install/debian/): | ||
8 | |||
9 | ```bash | ||
10 | # update your package lists | ||
11 | sudo apt update | ||
12 | # remove old versions | ||
13 | sudo apt-get remove docker docker-engine docker.io containerd runc | ||
14 | # install requirements | ||
15 | sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common | ||
16 | # add docker's GPG signing key | ||
17 | curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - | ||
18 | # add the repository | ||
19 | sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | ||
20 | # install docker engine | ||
21 | sudo apt-get update | ||
22 | sudo apt-get install docker-ce docker-ce-cli containerd.io | ||
23 | # Start and enable Docker service | ||
24 | sudo systemctl enable docker && sudo systemctl start docker | ||
25 | # verify that Docker is properly configured | ||
26 | sudo docker run hello-world | ||
27 | ``` | ||
28 | |||
29 | In order to run Docker commands as a non-root user, you must add the `docker` group to this user: | ||
30 | |||
31 | ```bash | ||
32 | # Add docker group as secondary group | ||
33 | sudo usermod -aG docker your-user | ||
34 | # Reboot or logout | ||
35 | # Then verify that Docker is properly configured, as "your-user" | ||
36 | docker run hello-world | ||
37 | ``` | ||
38 | |||
39 | ## Get and run a Shaarli image | ||
40 | |||
41 | Shaarli images are available on [DockerHub](https://hub.docker.com/r/shaarli/shaarli/) `shaarli/shaarli`: | ||
42 | |||
43 | - `latest`: latest branch (last release) | ||
44 | - `stable`: stable branch (last release in previous major version) | ||
45 | - `master`: master branch (development branch) | ||
46 | |||
47 | These images are built automatically on DockerHub and rely on: | ||
48 | |||
49 | - [Alpine Linux](https://www.alpinelinux.org/) | ||
50 | - [PHP7-FPM](http://php-fpm.org/) | ||
51 | - [Nginx](http://nginx.org/) | ||
52 | |||
53 | Additional Dockerfiles are provided for the `arm32v7` platform, relying on [Linuxserver.io Alpine armhf images](https://hub.docker.com/r/lsiobase/alpine.armhf/). These images must be built using [`docker build`](https://docs.docker.com/engine/reference/commandline/build/) on an `arm32v7` machine or using an emulator such as [qemu](https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/). | ||
54 | |||
55 | Here is an example of how to run Shaarli latest image using Docker: | ||
56 | |||
57 | ```bash | ||
58 | # download the 'latest' image from dockerhub | ||
59 | docker pull shaarli/shaarli | ||
60 | |||
61 | # create persistent data volumes/directories on the host | ||
62 | docker volume create shaarli-data | ||
63 | docker volume create shaarli-cache | ||
64 | |||
65 | # create a new container using the Shaarli image | ||
66 | # --detach: run the container in background | ||
67 | # --name: name of the created container/instance | ||
68 | # --publish: map the host's :8000 port to the container's :80 port | ||
69 | # --rm: automatically remove the container when it exits | ||
70 | # --volume: mount persistent volumes in the container ($volume_name:$volume_mountpoint) | ||
71 | docker run --detach \ | ||
72 | --name myshaarli \ | ||
73 | --publish 8000:80 \ | ||
74 | --rm \ | ||
75 | --volume shaarli-data:/var/www/shaarli/data \ | ||
76 | --volume shaarli-cache:/var/www/shaarli/cache \ | ||
77 | shaarli/shaarli:latest | ||
78 | |||
79 | # verify that the container is running | ||
80 | docker ps | grep myshaarli | ||
81 | |||
82 | # to completely remove the container | ||
83 | docker stop myshaarli # stop the running container | ||
84 | docker ps | grep myshaarli # verify the container is no longer running | ||
85 | docker ps -a | grep myshaarli # verify the container is stopped | ||
86 | docker rm myshaarli # destroy the container | ||
87 | docker ps -a | grep myshaarli # verify th container has been destroyed | ||
88 | |||
89 | ``` | ||
90 | |||
91 | After running `docker run` command, your Shaarli instance should be available on the host machine at [localhost:8000](http://localhost:8000). In order to access your instance through a reverse proxy, we recommend using our [Docker Compose](#docker-compose) build. | ||
92 | |||
93 | ## Docker Compose | ||
94 | |||
95 | A [Compose file](https://docs.docker.com/compose/compose-file/) is a common format for defining and running multi-container Docker applications. | ||
96 | |||
97 | A `docker-compose.yml` file can be used to run a persistent/autostarted shaarli service using [Docker Compose](https://docs.docker.com/compose/) or in a [Docker stack](https://docs.docker.com/engine/reference/commandline/stack_deploy/). | ||
98 | |||
99 | Shaarli provides configuration file for Docker Compose, that will setup a Shaarli instance, a [Træfik](https://containo.us/traefik/) instance (reverse proxy) with [Let's Encrypt](https://letsencrypt.org/) certificates, a Docker network, and volumes for Shaarli data and Træfik TLS configuration and certificates. | ||
100 | |||
101 | Download docker-compose from the [release page](https://docs.docker.com/compose/install/): | ||
102 | |||
103 | ```bash | ||
104 | $ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | ||
105 | $ sudo chmod +x /usr/local/bin/docker-compose | ||
106 | ``` | ||
107 | |||
108 | To run Shaarli container and its reverse proxy, you can execute the following commands: | ||
109 | |||
110 | ```bash | ||
111 | # create a new directory to store the configuration: | ||
112 | $ mkdir shaarli && cd shaarli | ||
113 | # Download the latest version of Shaarli's docker-compose.yml | ||
114 | $ curl -L https://raw.githubusercontent.com/shaarli/Shaarli/latest/docker-compose.yml -o docker-compose.yml | ||
115 | # Create the .env file and fill in your VPS and domain information | ||
116 | # (replace <MY_SHAARLI_DOMAIN> and <MY_CONTACT_EMAIL> with your actual information) | ||
117 | $ echo 'SHAARLI_VIRTUAL_HOST=shaarli.mydomain.org' > .env | ||
118 | $ echo 'SHAARLI_LETSENCRYPT_EMAIL=admin@mydomain.org' >> .env | ||
119 | # Pull the Docker images | ||
120 | $ docker-compose pull | ||
121 | # Run! | ||
122 | $ docker-compose up -d | ||
123 | ``` | ||
124 | |||
125 | After a few seconds, you should be able to access your Shaarli instance at [https://shaarli.mydomain.org](https://shaarli.mydomain.org) (replace your own domain name). | ||
126 | |||
127 | ## Running dockerized Shaarli as a systemd service | ||
128 | |||
129 | It is possible to start a dockerized Shaarli instance as a systemd service (systemd is the service management tool on several distributions). After installing Docker, use the following steps to run your shaarli container Shaarli to run on system start. | ||
130 | |||
131 | As root, create `/etc/systemd/system/docker.shaarli.service`: | ||
132 | |||
133 | ```ini | ||
134 | [Unit] | ||
135 | Description=Shaarli Bookmark Manager Container | ||
136 | After=docker.service | ||
137 | Requires=docker.service | ||
138 | |||
139 | |||
140 | [Service] | ||
141 | Restart=always | ||
142 | |||
143 | # Put any environment you want in an included file, like $host- or $domainname in this example | ||
144 | EnvironmentFile=/etc/sysconfig/box-environment | ||
145 | |||
146 | # It's just an example.. | ||
147 | ExecStart=/usr/bin/docker run \ | ||
148 | -p 28010:80 \ | ||
149 | --name ${hostname}-shaarli \ | ||
150 | --hostname shaarli.${domainname} \ | ||
151 | -v /srv/docker-volumes-local/shaarli-data:/var/www/shaarli/data:rw \ | ||
152 | -v /etc/localtime:/etc/localtime:ro \ | ||
153 | shaarli/shaarli:latest | ||
154 | |||
155 | ExecStop=/usr/bin/docker rm -f ${hostname}-shaarli | ||
156 | |||
157 | [Install] | ||
158 | WantedBy=multi-user.target | ||
159 | ``` | ||
160 | |||
161 | ```bash | ||
162 | # reload systemd services definitions | ||
163 | systemctl daemon-reload | ||
164 | # start the servie and enable it a boot time | ||
165 | systemctl enable docker.shaarli.service --now | ||
166 | # verify that the service is running | ||
167 | systemctl status docker.* | ||
168 | # inspect system log if needed | ||
169 | journalctl -f | ||
170 | ``` | ||
171 | |||
172 | |||
173 | |||
174 | ## Docker cheatsheet | ||
175 | |||
176 | ```bash | ||
177 | # pull/update an image | ||
178 | $ docker pull shaarli/shaarli:release | ||
179 | # run a container from an image | ||
180 | $ docker run shaarli/shaarli:latest | ||
181 | # list available images | ||
182 | $ docker images ls | ||
183 | # list running containers | ||
184 | $ docker ps | ||
185 | # list running AND stopped containers | ||
186 | $ docker ps -a | ||
187 | # run a command in a running container | ||
188 | $ docker exec -ti <container-name-or-first-letters-of-id> bash | ||
189 | # follow logs of a running container | ||
190 | $ docker logs -f <container-name-or-first-letters-of-id> | ||
191 | # delete unused images to free up disk space | ||
192 | $ docker system prune --images | ||
193 | # delete unused volumes to free up disk space (CAUTION all data in unused volumes will be lost) | ||
194 | $ docker system prunt --volumes | ||
195 | # delete unused containers | ||
196 | $ docker system prune | ||
197 | ``` | ||
198 | |||
199 | |||
200 | ## References | ||
201 | |||
202 | - [Docker: using volumes](https://docs.docker.com/storage/volumes/) | ||
203 | - [Dockerfile best practices](https://docs.docker.com/articles/dockerfile_best-practices/) | ||
204 | - [Dockerfile reference](https://docs.docker.com/reference/builder/) | ||
205 | - [DockerHub: GitHub automated build](https://docs.docker.com/docker-hub/github/) | ||
206 | - [DockerHub: Repositories](https://docs.docker.com/userguide/dockerrepos/) | ||
207 | - [DockerHub: Teams and organizations](https://docs.docker.com/docker-hub/orgs/) | ||
208 | - [Get Docker CE for Debian](https://docs.docker.com/install/linux/docker-ce/debian/) | ||
209 | - [Install Docker Compose](https://docs.docker.com/compose/install/) | ||
210 | - [Interactive Docker training portal](https://www.katacoda.com/courses/docker/) on [Katakoda](https://www.katacoda.com/) | ||
211 | - [Service management: Nginx in the foreground](http://nginx.org/en/docs/ngx_core_module.html#daemon) | ||
212 | - [Service management: Using supervisord](https://docs.docker.com/articles/using_supervisord/) | ||
213 | - [Volumes](https://docs.docker.com/storage/volumes/) | ||
214 | - [Volumes](https://docs.docker.com/userguide/dockervolumes/) | ||
215 | - [Where are Docker images stored?](http://blog.thoward37.me/articles/where-are-docker-images-stored/) | ||
216 | - [docker create](https://docs.docker.com/engine/reference/commandline/create/) | ||
217 | - [Docker Documentation](https://docs.docker.com/) | ||
218 | - [docker exec](https://docs.docker.com/engine/reference/commandline/exec/) | ||
219 | - [docker images](https://docs.docker.com/engine/reference/commandline/images/) | ||
220 | - [docker logs](https://docs.docker.com/engine/reference/commandline/logs/) | ||
221 | - [docker logs](https://docs.docker.com/engine/reference/commandline/logs/) | ||
222 | - [Docker Overview](https://docs.docker.com/engine/docker-overview/) | ||
223 | - [docker ps](https://docs.docker.com/engine/reference/commandline/ps/) | ||
224 | - [docker pull](https://docs.docker.com/engine/reference/commandline/pull/) | ||
225 | - [docker run](https://docs.docker.com/engine/reference/commandline/run/) | ||
226 | - [docker-compose logs](https://docs.docker.com/compose/reference/logs/) | ||
227 | - Træfik: [Getting Started](https://docs.traefik.io/), [Docker backend](https://docs.traefik.io/configuration/backends/docker/), [Let's Encrypt](https://docs.traefik.io/user-guide/docker-and-lets-encrypt/), [Docker image](https://hub.docker.com/_/traefik/) \ No newline at end of file | ||
diff --git a/doc/md/Download-and-Installation.md b/doc/md/Download-and-Installation.md deleted file mode 100644 index ec68762e..00000000 --- a/doc/md/Download-and-Installation.md +++ /dev/null | |||
@@ -1,124 +0,0 @@ | |||
1 | To install Shaarli, simply place the files in a directory under your webserver's | ||
2 | Document Root (or directly at the document root). | ||
3 | |||
4 | Also, please make sure your server is properly [configured](Server-configuration.md). | ||
5 | |||
6 | Multiple releases branches are available: | ||
7 | |||
8 | - latest (last release) | ||
9 | - stable (previous major release) | ||
10 | - master (development) | ||
11 | |||
12 | Using one of the following methods: | ||
13 | |||
14 | - by downloading full release archives including all dependencies | ||
15 | - by downloading Github archives | ||
16 | - by cloning the Git repository | ||
17 | - using Docker: [see the documentation](docker/shaarli-images.md) | ||
18 | |||
19 | -------------------------------------------------------------------------------- | ||
20 | |||
21 | ## Latest release (recommended) | ||
22 | |||
23 | ### Download as an archive | ||
24 | |||
25 | In most cases, you should download the latest Shaarli release from the [releases](https://github.com/shaarli/Shaarli/releases) page. Download our **shaarli-full** archive to include dependencies. | ||
26 | |||
27 | The current latest released version is `v0.10.4` | ||
28 | |||
29 | ```bash | ||
30 | $ wget https://github.com/shaarli/Shaarli/releases/download/v0.10.4/shaarli-v0.10.4-full.zip | ||
31 | $ unzip shaarli-v0.10.4-full.zip | ||
32 | $ mv Shaarli /path/to/shaarli/ | ||
33 | ``` | ||
34 | |||
35 | ### Using git | ||
36 | |||
37 | Cloning using `git` or downloading Github branches as zip files requires additional steps: | ||
38 | |||
39 | * Install [Composer](Unit-tests.md#install_composer) to manage third-party [PHP dependencies](3rd-party-libraries.md#composer). | ||
40 | * Install [yarn](https://yarnpkg.com/lang/en/docs/install/) to build the frontend dependencies. | ||
41 | * Install [python3-virtualenv](https://pypi.python.org/pypi/virtualenv) to build the local HTML documentation. | ||
42 | |||
43 | ``` | ||
44 | $ mkdir -p /path/to/shaarli && cd /path/to/shaarli/ | ||
45 | $ git clone -b latest https://github.com/shaarli/Shaarli.git . | ||
46 | $ composer install --no-dev --prefer-dist | ||
47 | $ make build_frontend | ||
48 | $ make translate | ||
49 | $ make htmldoc | ||
50 | ``` | ||
51 | |||
52 | -------------------------------------------------------------------------------- | ||
53 | |||
54 | ## Stable version | ||
55 | |||
56 | The stable version has been experienced by Shaarli users, and will receive security updates. | ||
57 | |||
58 | |||
59 | ### Download as an archive | ||
60 | |||
61 | As a .zip archive: | ||
62 | |||
63 | ```bash | ||
64 | $ wget https://github.com/shaarli/Shaarli/archive/stable.zip | ||
65 | $ unzip stable.zip | ||
66 | $ mv Shaarli-stable /path/to/shaarli/ | ||
67 | ``` | ||
68 | |||
69 | As a .tar.gz archive : | ||
70 | |||
71 | ```bash | ||
72 | $ wget https://github.com/shaarli/Shaarli/archive/stable.tar.gz | ||
73 | $ tar xvf stable.tar.gz | ||
74 | $ mv Shaarli-stable /path/to/shaarli/ | ||
75 | ``` | ||
76 | |||
77 | ### Using git | ||
78 | |||
79 | Install [Composer](Unit-tests.md#install_composer) to manage Shaarli dependencies. | ||
80 | |||
81 | ```bash | ||
82 | $ git clone https://github.com/shaarli/Shaarli.git -b stable /path/to/shaarli/ | ||
83 | # install/update third-party dependencies | ||
84 | $ cd /path/to/shaarli/ | ||
85 | $ composer install --no-dev --prefer-dist | ||
86 | ``` | ||
87 | |||
88 | |||
89 | -------------------------------------------------------------------------------- | ||
90 | |||
91 | ## Development version (mainline) | ||
92 | |||
93 | _Use at your own risk!_ | ||
94 | |||
95 | Install [Composer](Unit-tests.md#install_composer) to manage Shaarli PHP dependencies, | ||
96 | and [yarn](https://yarnpkg.com/lang/en/docs/install/) | ||
97 | for front-end dependencies. | ||
98 | |||
99 | To get the latest changes from the `master` branch: | ||
100 | |||
101 | ```bash | ||
102 | # clone the repository | ||
103 | $ git clone https://github.com/shaarli/Shaarli.git -b master /path/to/shaarli/ | ||
104 | # install/update third-party dependencies | ||
105 | $ cd /path/to/shaarli | ||
106 | $ composer install --no-dev --prefer-dist | ||
107 | $ make build_frontend | ||
108 | $ make translate | ||
109 | $ make htmldoc | ||
110 | ``` | ||
111 | |||
112 | ------------------------------------------------------------------------------- | ||
113 | |||
114 | ## Finish Installation | ||
115 | |||
116 | Once Shaarli is downloaded and files have been placed at the correct location, open it this location your favorite browser. | ||
117 | |||
118 | ![install screenshot](images/install-shaarli.png) | ||
119 | |||
120 | Setup your Shaarli installation, and it's ready to use! | ||
121 | |||
122 | ## Updating Shaarli | ||
123 | |||
124 | See [Upgrade and Migration](Upgrade-and-migration) | ||
diff --git a/doc/md/FAQ.md b/doc/md/FAQ.md deleted file mode 100644 index a2ec7d57..00000000 --- a/doc/md/FAQ.md +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | ### Why did you create Shaarli ? | ||
2 | |||
3 | I was a StumbleUpon user. Then I got fed up with they big toolbar. I switched to delicious, which was lighter, faster and more beautiful. Until Yahoo bought it. Then the export API broke all the time, delicious became slow and was ditched by Yahoo. I switched to Diigo, which is not bad, but does too much. And Diigo is sslllooooowww and their Firefox extension a bit buggy. And… oh… **their Firefox addon sends to Diigo every single URL you visit** (Don't believe me ? Use [Tamper Data](https://addons.mozilla.org/en-US/firefox/addon/tamper-data/) and open any page). | ||
4 | |||
5 | Enough is enough. Saving simple links should not be a complicated heavy thing. I ditched them all and wrote my own: Shaarli. It's simple, but it does the job and does it well. And my data is not hosted on a foreign server, but on my server. | ||
6 | |||
7 | ### Why use Shaarli and not Delicious/Diigo ? | ||
8 | |||
9 | With Shaarli: | ||
10 | |||
11 | - The data is yours: It's hosted on your server. | ||
12 | - Never fear of having your data locked-in. | ||
13 | - Never fear to have your data sold to third party. | ||
14 | - Your private links are not hosted on a third party server. | ||
15 | - You are not tracked by browser addons (like Diigo does) | ||
16 | - You can change the look and feel of the pages if you want. | ||
17 | - You can change the behaviour of the program. | ||
18 | - It's magnitude faster than most bookmarking services. | ||
19 | |||
20 | ### What does Shaarli mean? | ||
21 | |||
22 | Shaarli stands for _shaaring_ your _links_. | ||
23 | |||
24 | ### My Shaarli is broken! | ||
25 | First of all, ensure that both the [web server](Server-configuration) and | ||
26 | [Shaarli](Shaarli-configuration) are correctly configured, and that your | ||
27 | installation is [supported](Server-configuration). | ||
28 | |||
29 | If everything looks right but the issue(s) remain(s), please: | ||
30 | |||
31 | - take a look at the [troubleshooting](Troubleshooting) section | ||
32 | - come [chat with us](https://gitter.im/shaarli/Shaarli) on Gitter, we'll be happy to help ;-) | ||
33 | - browse active [issues](https://github.com/shaarli/Shaarli/issues) and [Pull Requests](https://github.com/shaarli/Shaarli/pulls) | ||
34 | - if you find one that is related to the issue, feel free to comment and provide additional details (host/Shaarli setup) | ||
35 | - else, [open a new issue](https://github.com/shaarli/Shaarli/issues/new), and provide information about the problem: | ||
36 | - _what happens?_ - display glitches, invalid data, security flaws... | ||
37 | - _what is your configuration?_ - OS, server version, activated extensions, web browser... | ||
38 | - _is it reproducible?_ | ||
39 | |||
40 | ### Why not use a real database? Files are slow! | ||
41 | |||
42 | Does browsing [this page](http://sebsauvage.net/links/) feel slow? Try browsing older pages, too. | ||
43 | |||
44 | It's not slow at all, is it? And don't forget the database contains more than 16000 links, and it's on a shared host, with 32000 visitors/day for my website alone. And it's still damn fast. Why? | ||
45 | |||
46 | The data file is only 3.7 Mb. It's read 99% of the time, and is probably already in the operation system disk cache. So generating a page involves no I/O at all most of the time. | ||
diff --git a/doc/md/Installation.md b/doc/md/Installation.md new file mode 100644 index 00000000..11b5da85 --- /dev/null +++ b/doc/md/Installation.md | |||
@@ -0,0 +1,78 @@ | |||
1 | # Installation | ||
2 | |||
3 | Once your server is [configured](Server-configuration.md), install Shaarli: | ||
4 | |||
5 | ## From release ZIP | ||
6 | |||
7 | To install Shaarli, simply place the files from the latest [release .zip archive](https://github.com/shaarli/Shaarli/releases) under your webserver's document root (directly at the document root, or in a subdirectory). Download the **shaarli-vX.X.X-full** archive to include dependencies. | ||
8 | |||
9 | ```bash | ||
10 | wget https://github.com/shaarli/Shaarli/releases/download/v0.11.1/shaarli-v0.11.1-full.zip | ||
11 | unzip shaarli-v0.11.1-full.zip | ||
12 | sudo rsync -avP Shaarli/ /var/www/shaarli.mydomain.org/ | ||
13 | ``` | ||
14 | |||
15 | ## From sources | ||
16 | |||
17 | These components are required to build Shaarli: | ||
18 | |||
19 | - [Composer](dev/Development.md#install-composer) to manage third-party [PHP dependencies](dev/Development#third-party-libraries). | ||
20 | - [yarn](https://yarnpkg.com/lang/en/docs/install/) to build frontend dependencies. | ||
21 | - [python3-virtualenv](https://pypi.python.org/pypi/virtualenv) to build local HTML documentation. | ||
22 | |||
23 | Clone the repository, either pointing to: | ||
24 | |||
25 | - any [tagged release](https://github.com/shaarli/Shaarli/releases) | ||
26 | - `latest`: the latest tagged release | ||
27 | - `master`: development branch | ||
28 | |||
29 | ```bash | ||
30 | # clone the branch/tag of your choice | ||
31 | $ git clone -b latest https://github.com/shaarli/Shaarli.git /home/me/Shaarli | ||
32 | # OR download/extract the tar.gz/zip: wget https://github.com/shaarli/Shaarli/archive/latest.tar.gz... | ||
33 | |||
34 | # enter the directory | ||
35 | $ cd /home/me/Shaarli | ||
36 | # install 3rd-party PHP dependencies | ||
37 | $ composer install --no-dev --prefer-dist | ||
38 | # build frontend static assets | ||
39 | $ make build_frontend | ||
40 | # build translations | ||
41 | $ make translate | ||
42 | # build HTML documentation | ||
43 | $ make htmldoc | ||
44 | # copy the resulting shaarli directory under your webserver's document root | ||
45 | $ rsync -avP /home/me/Shaarli/ /var/www/shaarli.mydomain.org/ | ||
46 | ``` | ||
47 | |||
48 | ## Set file permissions | ||
49 | |||
50 | Regardless of the installation method, appropriate [file permissions](dev/Development.md#directory-structure) must be set: | ||
51 | |||
52 | ```bash | ||
53 | sudo chown -R root:www-data /var/www/shaarli.mydomain.org | ||
54 | sudo chmod -R g+rX /var/www/shaarli.mydomain.org | ||
55 | sudo chmod -R g+rwX /var/www/shaarli.mydomain.org/{cache/,data/,pagecache/,tmp/} | ||
56 | ``` | ||
57 | |||
58 | ## Using Docker | ||
59 | |||
60 | [See the documentation](Docker.md) | ||
61 | |||
62 | |||
63 | ## Finish Installation | ||
64 | |||
65 | Once Shaarli is downloaded and files have been placed at the correct location, open this location your web browser. | ||
66 | |||
67 | Enter basic settings for your Shaarli installation, and it's ready to use! | ||
68 | |||
69 | ![](images/07-installation.jpg) | ||
70 | |||
71 | Congratulations! Your Shaarli is now available at `https://shaarli.mydomain.org`. | ||
72 | |||
73 | You can further [configure Shaarli](Shaarli-configuration.md), setup [Plugins](Plugins.md) or [additional software](Community-and-related-software.md). | ||
74 | |||
75 | |||
76 | ## Upgrading Shaarli | ||
77 | |||
78 | See [Upgrade and Migration](Upgrade-and-migration) | ||
diff --git a/doc/md/Link-structure.md b/doc/md/Link-structure.md deleted file mode 100644 index 0a2d0f88..00000000 --- a/doc/md/Link-structure.md +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | ## Link structure | ||
2 | |||
3 | Every link available through the `LinkDB` object is represented as an array | ||
4 | containing the following fields: | ||
5 | |||
6 | * `id` (integer): Unique identifier. | ||
7 | * `title` (string): Title of the link. | ||
8 | * `url` (string): URL of the link. Used for displayable links (without redirector, url encoding, etc.). | ||
9 | Can be absolute or relative for Notes. | ||
10 | * `real_url` (string): Real destination URL, can be redirected, encoded, etc. | ||
11 | * `shorturl` (string): Permalink small hash. | ||
12 | * `description` (string): Link text description. | ||
13 | * `private` (boolean): whether the link is private or not. | ||
14 | * `tags` (string): all link tags separated by a single space | ||
15 | * `thumbnail` (string|boolean): relative path of the thumbnail cache file, or false if there isn't any. | ||
16 | * `created` (DateTime): link creation date time. | ||
17 | * `updated` (DateTime): last modification date time. | ||
18 | \ No newline at end of file | ||
diff --git a/doc/md/Plugins.md b/doc/md/Plugins.md index 3e261815..a9f5f1a8 100644 --- a/doc/md/Plugins.md +++ b/doc/md/Plugins.md | |||
@@ -1,14 +1,13 @@ | |||
1 | ## Plugin installation | 1 | # Plugins |
2 | 2 | ||
3 | There is a bunch of plugins shipped with Shaarli, where there is nothing to do to install them. | 3 | ## Installation |
4 | 4 | ||
5 | If you want to install a third party plugin: | 5 | For plugins shipped with Shaarli, no installation is required. |
6 | 6 | ||
7 | - Download it. | 7 | If you want to install a third party plugin, download it to the `plugins` directory in Shaarli's installation folder: |
8 | - Put it in the `plugins` directory in Shaarli's installation folder. | ||
9 | - Make sure you put it correctly: | ||
10 | 8 | ||
11 | ``` | 9 | ```bash |
10 | # example directory structure | ||
12 | | index.php | 11 | | index.php |
13 | | plugins/ | 12 | | plugins/ |
14 | |---| custom_plugin/ | 13 | |---| custom_plugin/ |
@@ -17,63 +16,47 @@ If you want to install a third party plugin: | |||
17 | 16 | ||
18 | ``` | 17 | ``` |
19 | 18 | ||
20 | * Make sure your webserver can read and write the files in your plugin folder. | 19 | Make sure your webserver can read and write the files in your plugin folder. |
21 | 20 | ||
22 | ## Plugin configuration | ||
23 | 21 | ||
24 | In Shaarli's administration page (`Tools` link), go to `Plugin administration`. | 22 | ## Configuration |
25 | 23 | ||
26 | Here you can enable and disable all plugins available, and configure them. | 24 | From Shaarli's administration page (`Tools` link), go to `Plugin administration`. Here you can enable and disable all plugins available, and configure them. |
27 | 25 | ||
28 | ![administration screenshot](https://camo.githubusercontent.com/5da68e191969007492ca0fbeb25f3b2357b748cc/687474703a2f2f692e696d6775722e636f6d2f766837544643712e706e67) | 26 | ![administration screenshot](https://camo.githubusercontent.com/5da68e191969007492ca0fbeb25f3b2357b748cc/687474703a2f2f692e696d6775722e636f6d2f766837544643712e706e67) |
29 | 27 | ||
30 | ## Plugin order | 28 | |
29 | ## Order | ||
31 | 30 | ||
32 | In the plugin administration page, you can move enabled plugins to the top or bottom of the list. The first plugins in the list will be processed first. | 31 | In the plugin administration page, you can move enabled plugins to the top or bottom of the list. The first plugins in the list will be processed first. |
33 | 32 | ||
34 | This is important in case plugins are depending on each other. Read plugins README details for more information. | 33 | This is important in case plugins depend on each other. Read plugins READMEs for more information. |
35 | 34 | ||
36 | **Use case**: The (non existent) plugin `shaares_footer` adds a footer to every shaare in Markdown syntax. It needs to be processed *before* (higher in the list) the Markdown plugin. Otherwise its syntax won't be translated in HTML. | 35 | **Use case**: The (non existent) plugin `shaares_footer` adds a footer to every shaare in Markdown syntax. It needs to be processed *before* (higher in the list) the Markdown plugin. Otherwise its syntax won't be translated in HTML. |
37 | 36 | ||
38 | ## File mode | ||
39 | 37 | ||
40 | Enabled plugin are stored in your `config.json.php` parameters file, under the `array`: | 38 | ## Configuration file |
41 | 39 | ||
42 | ```php | 40 | Enabled plugins are stored in your [Configuration file](Shaarli-configuration). |
43 | $GLOBALS['config']['ENABLED_PLUGINS'] | ||
44 | ``` | ||
45 | 41 | ||
46 | You can edit them manually here. | 42 | ## Usage |
47 | Example: | ||
48 | 43 | ||
49 | ```php | 44 | ### Official plugins |
50 | $GLOBALS['config']['ENABLED_PLUGINS'] = array( | ||
51 | 'qrcode', | ||
52 | 'archiveorg', | ||
53 | 'wallabag', | ||
54 | 'markdown', | ||
55 | ); | ||
56 | ``` | ||
57 | |||
58 | ### Plugin usage | ||
59 | |||
60 | #### Official plugins | ||
61 | 45 | ||
62 | Usage of each plugin is documented in it's README file: | 46 | Usage of each plugin is documented in it's README file: |
63 | 47 | ||
64 | * `addlink-toolbar`: Adds the addlink input on the linklist page | 48 | * `addlink-toolbar`: Adds the addlink input on the Shaares list page |
65 | * `archiveorg`: For each link, add an Archive.org icon | 49 | * `archiveorg`: For each Shaare, add a link to the archived page on Archive.org |
66 | * `default_colors`: Override default theme colors. | 50 | * `default_colors`: Override default theme colors. |
67 | * `isso`: Let visitor comment your shaares on permalinks with Isso. | 51 | * `isso`: Let visitor comment your shaares on permalinks with Isso. |
68 | * [`markdown`](https://github.com/shaarli/Shaarli/blob/master/plugins/markdown/README.md): Render shaare description with Markdown syntax. | 52 | * [`markdown`](https://github.com/shaarli/Shaarli/blob/master/plugins/markdown/README.md): Render shaare description with Markdown syntax. |
69 | * `piwik`: A plugin that adds Piwik tracking code to Shaarli pages. | 53 | * `piwik`: A plugin that adds Piwik tracking code to Shaarli pages. |
70 | * [`playvideos`](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md): Add a button in the toolbar allowing to watch all videos. | 54 | * [`playvideos`](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md): Add a button in the toolbar allowing to watch all videos. |
71 | * `pubsubhubbub`: Enable PubSubHubbub feed publishing | 55 | * `pubsubhubbub`: Enable PubSubHubbub feed publishing |
72 | * `qrcode`: For each link, add a QRCode icon. | 56 | * `qrcode`: For each Shaare, add a QRCode icon. |
73 | * [`wallabag`](https://github.com/shaarli/Shaarli/blob/master/plugins/wallabag/README.md): For each link, add a Wallabag icon to save it in your instance. | 57 | * [`wallabag`](https://github.com/shaarli/Shaarli/blob/master/plugins/wallabag/README.md): For each Shaare, add a Wallabag icon to save it in your instance. |
74 | |||
75 | 58 | ||
76 | 59 | ||
77 | #### Third party plugins | 60 | ### Third party plugins |
78 | 61 | ||
79 | See [Community & related software](https://shaarli.readthedocs.io/en/master/Community-&-Related-software/) | 62 | See [Community & related software](https://shaarli.readthedocs.io/en/master/Community-and-Related-software/) |
diff --git a/doc/md/REST-API.md b/doc/md/REST-API.md index 11bd1cd2..01071d8e 100644 --- a/doc/md/REST-API.md +++ b/doc/md/REST-API.md | |||
@@ -1,101 +1,24 @@ | |||
1 | ## Usage and Prerequisites | 1 | # REST API |
2 | 2 | ||
3 | See the [REST API documentation](http://shaarli.github.io/api-documentation/) | 3 | ## Server requirements |
4 | for a list of available endpoints and parameters. | ||
5 | 4 | ||
6 | Please ensure that your server meets the | 5 | See the **[REST API documentation](http://shaarli.github.io/api-documentation/)** for a list of available endpoints and parameters. |
7 | [requirements](Server-configuration#prerequisites) and is properly | 6 | |
8 | [configured](Server-configuration): | 7 | Please ensure that your server meets the requirements and is properly [configured](Server-configuration): |
9 | 8 | ||
10 | - URL rewriting is enabled (see specific Apache and Nginx sections) | 9 | - URL rewriting is enabled (see specific Apache and Nginx sections) |
11 | - the server's timezone is properly defined | 10 | - the server's timezone is properly defined |
12 | - the server's clock is synchronized with | 11 | - the server's clock is synchronized with [NTP](https://en.wikipedia.org/wiki/Network_Time_Protocol) |
13 | [NTP](https://en.wikipedia.org/wiki/Network_Time_Protocol) | ||
14 | |||
15 | The host where the API client is invoked should also be synchronized with NTP, | ||
16 | see [token expiration](#payload). | ||
17 | |||
18 | ## Authentication | ||
19 | |||
20 | All requests to Shaarli's API must include a JWT token to verify their authenticity. | ||
21 | |||
22 | This token has to be included as an HTTP header called `Authentication: Bearer <jwt token>`. | ||
23 | |||
24 | JWT resources : | ||
25 | |||
26 | - [jwt.io](https://jwt.io) (including a list of client per language). | ||
27 | - RFC : https://tools.ietf.org/html/rfc7519 | ||
28 | - https://float-middle.com/json-web-tokens-jwt-vs-sessions/ | ||
29 | - HackerNews thread: https://news.ycombinator.com/item?id=11929267 | ||
30 | |||
31 | |||
32 | ### Shaarli JWT Token | ||
33 | |||
34 | JWT tokens are composed by three parts, separated by a dot `.` and encoded in base64: | ||
35 | |||
36 | ``` | ||
37 | [header].[payload].[signature] | ||
38 | ``` | ||
39 | |||
40 | #### Header | ||
41 | |||
42 | Shaarli only allow one hash algorithm, so the header will always be the same: | ||
43 | |||
44 | ```json | ||
45 | { | ||
46 | "typ": "JWT", | ||
47 | "alg": "HS512" | ||
48 | } | ||
49 | ``` | ||
50 | |||
51 | Encoded in base64, it gives: | ||
52 | |||
53 | ``` | ||
54 | ewogICAgICAgICJ0eXAiOiAiSldUIiwKICAgICAgICAiYWxnIjogIkhTNTEyIgogICAgfQ== | ||
55 | ``` | ||
56 | |||
57 | #### Payload | ||
58 | |||
59 | **Token expiration** | ||
60 | |||
61 | To avoid infinite token validity, JWT tokens must include their creation date | ||
62 | in UNIX timestamp format (timezone independent - UTC) under the key `iat` (issued at). | ||
63 | This token will be valid during **9 minutes**. | ||
64 | |||
65 | ```json | ||
66 | { | ||
67 | "iat": 1468663519 | ||
68 | } | ||
69 | ``` | ||
70 | |||
71 | See [RFC reference](https://tools.ietf.org/html/rfc7519#section-4.1.6). | ||
72 | |||
73 | 12 | ||
74 | #### Signature | 13 | The host where the API client is invoked should also be synchronized with NTP, see _payload/token expiration_ |
75 | |||
76 | The signature authenticate the token validity. It contains the base64 of the header and the body, separated by a dot `.`, hashed in SHA512 with the API secret available in Shaarli administration page. | ||
77 | |||
78 | Signature example with PHP: | ||
79 | |||
80 | ```php | ||
81 | $content = base64_encode($header) . '.' . base64_encode($payload); | ||
82 | $signature = hash_hmac('sha512', $content, $secret); | ||
83 | ``` | ||
84 | 14 | ||
85 | 15 | ||
86 | ## Clients and examples | 16 | ## Clients and examples |
87 | ### Android, Java, Kotlin | ||
88 | |||
89 | - [Android client example with Kotlin](https://gitlab.com/snippets/1665808) | ||
90 | by [Braincoke](https://github.com/Braincoke) | ||
91 | |||
92 | ### Javascript, NodeJS | ||
93 | 17 | ||
94 | - [shaarli-client](https://www.npmjs.com/package/shaarli-client) | 18 | - **[python-shaarli-client](https://github.com/shaarli/python-shaarli-client)** - the reference API client ([Documentation](http://python-shaarli-client.readthedocs.io/en/latest/)) |
95 | ([source code](https://github.com/laBecasse/shaarli-client)) | 19 | - [shaarli-client](https://www.npmjs.com/package/shaarli-client) - NodeJs client ([source code](https://github.com/laBecasse/shaarli-client)) by [laBecasse](https://github.com/laBecasse) |
96 | by [laBecasse](https://github.com/laBecasse) | 20 | - [Android client example with Kotlin](https://gitlab.com/snippets/1665808) by [Braincoke](https://github.com/Braincoke) |
97 | 21 | ||
98 | ### PHP | ||
99 | 22 | ||
100 | This example uses the [PHP cURL](http://php.net/manual/en/book.curl.php) library. | 23 | This example uses the [PHP cURL](http://php.net/manual/en/book.curl.php) library. |
101 | 24 | ||
@@ -145,13 +68,57 @@ function getInfo($baseUrl, $secret) { | |||
145 | var_dump(getInfo($baseUrl, $secret)); | 68 | var_dump(getInfo($baseUrl, $secret)); |
146 | ``` | 69 | ``` |
147 | 70 | ||
71 | ## Implementation | ||
72 | |||
73 | ### Authentication | ||
74 | |||
75 | - All requests to Shaarli's API must include a **JWT token** to verify their authenticity. | ||
76 | - This token must be included as an HTTP header called `Authentication: Bearer <jwt token>`. | ||
77 | - JWT tokens are composed by three parts, separated by a dot `.` and encoded in base64: | ||
78 | |||
79 | ``` | ||
80 | [header].[payload].[signature] | ||
81 | ``` | ||
82 | |||
83 | ##### Header | ||
84 | |||
85 | Shaarli only allow one hash algorithm, so the header will always be the same: | ||
86 | |||
87 | ```json | ||
88 | { | ||
89 | "typ": "JWT", | ||
90 | "alg": "HS512" | ||
91 | } | ||
92 | ``` | ||
93 | |||
94 | Encoded in base64, it gives: | ||
148 | 95 | ||
149 | ### Python | 96 | ``` |
97 | ewogICAgICAgICJ0eXAiOiAiSldUIiwKICAgICAgICAiYWxnIjogIkhTNTEyIgogICAgfQ== | ||
98 | ``` | ||
99 | |||
100 | ##### Payload | ||
101 | |||
102 | Token expiration: To avoid infinite token validity, JWT tokens must include their creation date in UNIX timestamp format (timezone independent - UTC) under the key `iat` (issued at) field ([1](https://tools.ietf.org/html/rfc7519#section-4.1.6)). This token will be valid during **9 minutes**. | ||
103 | |||
104 | ```json | ||
105 | { | ||
106 | "iat": 1468663519 | ||
107 | } | ||
108 | ``` | ||
109 | |||
110 | ##### Signature | ||
111 | |||
112 | The signature authenticates the token validity. It contains the base64 of the header and the body, separated by a dot `.`, hashed in SHA512 with the API secret available in Shaarli administration page. | ||
113 | |||
114 | Example signature with PHP: | ||
115 | |||
116 | ```php | ||
117 | $content = base64_encode($header) . '.' . base64_encode($payload); | ||
118 | $signature = hash_hmac('sha512', $content, $secret); | ||
119 | ``` | ||
150 | 120 | ||
151 | See the reference API client: | ||
152 | 121 | ||
153 | - [Documentation](http://python-shaarli-client.readthedocs.io/en/latest/) on ReadTheDocs | ||
154 | - [python-shaarli-client](https://github.com/shaarli/python-shaarli-client) on Github | ||
155 | 122 | ||
156 | ## Troubleshooting | 123 | ## Troubleshooting |
157 | 124 | ||
@@ -171,3 +138,13 @@ to get the actual error message in the HTTP response body with: | |||
171 | } | 138 | } |
172 | } | 139 | } |
173 | ``` | 140 | ``` |
141 | |||
142 | ## References | ||
143 | |||
144 | - [jwt.io](https://jwt.io) (including a list of client per language). | ||
145 | - [RFC - JSON Web Token (JWT)](https://tools.ietf.org/html/rfc7519) | ||
146 | - [JSON Web Tokens (JWT) vs Sessions](https://float-middle.com/json-web-tokens-jwt-vs-sessions/), [HackerNews thread](https://news.ycombinator.com/item?id=11929267) | ||
147 | |||
148 | |||
149 | |||
150 | |||
diff --git a/doc/md/RSS-feeds.md b/doc/md/RSS-feeds.md deleted file mode 100644 index ecbff09a..00000000 --- a/doc/md/RSS-feeds.md +++ /dev/null | |||
@@ -1,28 +0,0 @@ | |||
1 | ### Feeds options | ||
2 | |||
3 | Feeds are available in ATOM with `/feed/atom` and RSS with `/feed/rss`. | ||
4 | |||
5 | Options: | ||
6 | |||
7 | - You can use `permalinks` in the feed URL to get permalink to Shaares instead of direct link to shaared URL. | ||
8 | - E.G. `https://my.shaarli.domain/feed/atom?permalinks`. | ||
9 | - You can use `nb` parameter in the feed URL to specify the number of Shaares you want in a feed (default if not specified: `50`). The keyword `all` is available if you want everything. | ||
10 | - `https://my.shaarli.domain/feed/atom?permalinks&nb=42` | ||
11 | - `https://my.shaarli.domain/feed/atom?permalinks&nb=all` | ||
12 | |||
13 | ### RSS Feeds or Picture Wall for a specific search/tag | ||
14 | |||
15 | It is possible to filter RSS/ATOM feeds and Picture Wall on a Shaarli to **only display results of a specific search, or for a specific tag**. | ||
16 | |||
17 | For example, if you want to subscribe only to links tagged `photography`: | ||
18 | |||
19 | - Go to the desired Shaarli instance. | ||
20 | - Search for the `photography` tag in the _Filter by tag_ box. Links tagged `photography` are displayed. | ||
21 | - Click on the `RSS Feed` button. | ||
22 | - You are presented with an RSS feed showing only these links. Subscribe to it to receive only updates with this tag. | ||
23 | - The same method **also works for a full-text search** (_Search_ box) **and for the Picture Wall** (want to only see pictures about `nature`?) | ||
24 | - You can also build the URLs manually: | ||
25 | - `https://my.shaarli.domain/?do=rss&searchtags=nature` | ||
26 | - `https://my.shaarli.domain/links/picture-wall?searchterm=poney` | ||
27 | |||
28 | ![](images/rss-filter-1.png) ![](images/rss-filter-2.png) | ||
diff --git a/doc/md/Release-Shaarli.md b/doc/md/Release-Shaarli.md deleted file mode 100644 index e22eabc9..00000000 --- a/doc/md/Release-Shaarli.md +++ /dev/null | |||
@@ -1,161 +0,0 @@ | |||
1 | See [Git - Maintaining a project - Tagging your | ||
2 | releases](http://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Tagging-Your-Releases). | ||
3 | |||
4 | ## Prerequisites | ||
5 | This guide assumes that you have: | ||
6 | |||
7 | - a GPG key matching your GitHub authentication credentials | ||
8 | - i.e., the email address identified by the GPG key is the same as the one in your `~/.gitconfig` | ||
9 | - a GitHub fork of Shaarli | ||
10 | - a local clone of your Shaarli fork, with the following remotes: | ||
11 | - `origin` pointing to your GitHub fork | ||
12 | - `upstream` pointing to the main Shaarli repository | ||
13 | - maintainer permissions on the main Shaarli repository, to: | ||
14 | - push the signed tag | ||
15 | - create a new release | ||
16 | - [Composer](https://getcomposer.org/) needs to be installed | ||
17 | - The [venv](https://docs.python.org/3/library/venv.html) Python 3 module needs to be installed for HTML documentation generation. | ||
18 | |||
19 | ## GitHub release draft and `CHANGELOG.md` | ||
20 | See http://keepachangelog.com/en/0.3.0/ for changelog formatting. | ||
21 | |||
22 | ### GitHub release draft | ||
23 | GitHub allows drafting the release note for the upcoming release, from the [Releases](https://github.com/shaarli/Shaarli/releases) page. This way, the release note can be drafted while contributions are merged to `master`. | ||
24 | |||
25 | ### `CHANGELOG.md` | ||
26 | This file should contain the same information as the release note draft for the upcoming version. | ||
27 | |||
28 | Update it to: | ||
29 | |||
30 | - add new entries (additions, fixes, etc.) | ||
31 | - mark the current version as released by setting its date and link | ||
32 | - add a new section for the future unreleased version | ||
33 | |||
34 | ```bash | ||
35 | $ cd /path/to/shaarli | ||
36 | |||
37 | $ nano CHANGELOG.md | ||
38 | |||
39 | [...] | ||
40 | ## vA.B.C - UNRELEASED | ||
41 | TBA | ||
42 | |||
43 | ## [vX.Y.Z](https://github.com/shaarli/Shaarli/releases/tag/vX.Y.Z) - YYYY-MM-DD | ||
44 | [...] | ||
45 | ``` | ||
46 | |||
47 | |||
48 | ## Increment the version code, update docs, create and push a signed tag | ||
49 | ### Update the list of Git contributors | ||
50 | ```bash | ||
51 | $ make authors | ||
52 | $ git commit -s -m "Update AUTHORS" | ||
53 | ``` | ||
54 | |||
55 | ### Create and merge a Pull Request | ||
56 | This one is pretty straightforward ;-) | ||
57 | |||
58 | ### Bump Shaarli version to v0.x branch | ||
59 | |||
60 | ```bash | ||
61 | $ git checkout master | ||
62 | $ git fetch upstream | ||
63 | $ git pull upstream master | ||
64 | |||
65 | # IF the branch doesn't exists | ||
66 | $ git checkout -b v0.5 | ||
67 | # OR if the branch already exists | ||
68 | $ git checkout v0.5 | ||
69 | $ git rebase upstream/master | ||
70 | |||
71 | # Bump shaarli version from dev to 0.5.0, **without the `v`** | ||
72 | $ vim shaarli_version.php | ||
73 | $ git add shaarli_version | ||
74 | $ git commit -s -m "Bump Shaarli version to v0.5.0" | ||
75 | $ git push upstream v0.5 | ||
76 | ``` | ||
77 | |||
78 | ### Create and push a signed tag | ||
79 | ```bash | ||
80 | # update your local copy | ||
81 | $ git checkout v0.5 | ||
82 | $ git fetch upstream | ||
83 | $ git pull upstream v0.5 | ||
84 | |||
85 | # create a signed tag | ||
86 | $ git tag -s -m "Release v0.5.0" v0.5.0 | ||
87 | |||
88 | # push it to "upstream" | ||
89 | $ git push --tags upstream | ||
90 | ``` | ||
91 | |||
92 | ### Verify a signed tag | ||
93 | [`v0.5.0`](https://github.com/shaarli/Shaarli/releases/tag/v0.5.0) is the first GPG-signed tag pushed on the Community Shaarli. | ||
94 | |||
95 | Let's have a look at its signature! | ||
96 | |||
97 | ```bash | ||
98 | $ cd /path/to/shaarli | ||
99 | $ git fetch upstream | ||
100 | |||
101 | # get the SHA1 reference of the tag | ||
102 | $ git show-ref tags/v0.5.0 | ||
103 | f7762cf803f03f5caf4b8078359a63783d0090c1 refs/tags/v0.5.0 | ||
104 | |||
105 | # verify the tag signature information | ||
106 | $ git verify-tag f7762cf803f03f5caf4b8078359a63783d0090c1 | ||
107 | gpg: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F | ||
108 | gpg: Good signature from "VirtualTam <virtualtam@flibidi.net>" [ultimate] | ||
109 | ``` | ||
110 | |||
111 | ## Publish the GitHub release | ||
112 | ### Update release badges | ||
113 | Update `README.md` so version badges display and point to the newly released Shaarli version(s), in the `master` branch. | ||
114 | |||
115 | ### Create a GitHub release from a Git tag | ||
116 | From the previously drafted release: | ||
117 | |||
118 | - edit the release notes (if needed) | ||
119 | - specify the appropriate Git tag | ||
120 | - publish the release | ||
121 | - profit! | ||
122 | |||
123 | ### Generate and upload all-in-one release archives | ||
124 | Users with a shared hosting may have: | ||
125 | |||
126 | - no SSH access | ||
127 | - no possibility to install PHP packages or server extensions | ||
128 | - no possibility to run scripts | ||
129 | |||
130 | To ease Shaarli installations, it is possible to generate and upload additional release archives, | ||
131 | that will contain Shaarli code plus all required third-party libraries. | ||
132 | |||
133 | **From the `v0.5` branch:** | ||
134 | |||
135 | ```bash | ||
136 | $ make release_archive | ||
137 | ``` | ||
138 | |||
139 | This will create the following archives: | ||
140 | |||
141 | - `shaarli-vX.Y.Z-full.tar` | ||
142 | - `shaarli-vX.Y.Z-full.zip` | ||
143 | |||
144 | The archives need to be manually uploaded on the previously created GitHub release. | ||
145 | |||
146 | ### Update `stable` and `latest` branches | ||
147 | |||
148 | ``` | ||
149 | $ git checkout latest | ||
150 | # latest release | ||
151 | $ git merge v0.5.0 | ||
152 | # fix eventual conflicts | ||
153 | $ make test | ||
154 | $ git push upstream latest | ||
155 | $ git checkout stable | ||
156 | # latest previous major | ||
157 | $ git merge v0.4.5 | ||
158 | # fix eventual conflicts | ||
159 | $ make test | ||
160 | $ git push upstream stable | ||
161 | ``` | ||
diff --git a/doc/md/Reverse-proxy.md b/doc/md/Reverse-proxy.md new file mode 100644 index 00000000..b7e347d5 --- /dev/null +++ b/doc/md/Reverse-proxy.md | |||
@@ -0,0 +1,141 @@ | |||
1 | # Reverse proxy | ||
2 | |||
3 | If Shaarli is hosted on a server behind a [reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) (i.e. there is a proxy server between clients and the web server hosting Shaarli), configure it accordingly. See [Reverse proxy](Reverse-proxy.md) configuration. In this example: | ||
4 | |||
5 | - The Shaarli application server exposes port `10080` to the proxy (for example docker container started with `--publish 127.0.0.1:10080:80`). | ||
6 | - The Shaarli application server runs at `127.0.0.1` (container). Replace with the server's IP address if running on a different machine. | ||
7 | - Shaarli's Fully Qualified Domain Name (FQDN) is `shaarli.mydomain.org`. | ||
8 | - No HTTPS is setup on the application server, SSL termination is done at the reverse proxy. | ||
9 | |||
10 | In your [Shaarli configuration](Shaarli-configuration) `data/config.json.php`, add the public IP of your proxy under `security.trusted_proxies`. | ||
11 | |||
12 | See also [proxy-related](https://github.com/shaarli/Shaarli/issues?utf8=%E2%9C%93&q=label%3Aproxy+) issues. | ||
13 | |||
14 | |||
15 | ## Apache | ||
16 | |||
17 | ```apache | ||
18 | <VirtualHost *:80> | ||
19 | ServerName shaarli.mydomain.org | ||
20 | |||
21 | # For SSL/TLS certificates acquired with certbot or self-signed certificates | ||
22 | # Redirect HTTP requests to HTTPS, except Let's Encrypt ACME challenge requests | ||
23 | RewriteEngine on | ||
24 | RewriteRule ^.well-known/acme-challenge/ - [L] | ||
25 | RewriteCond %{HTTP_HOST} =shaarli.mydomain.org | ||
26 | RewriteRule ^ https://shaarli.mydomain.org%{REQUEST_URI} [END,NE,R=permanent] | ||
27 | </VirtualHost> | ||
28 | |||
29 | # SSL/TLS configuration for Let's Encrypt certificates managed with mod_md | ||
30 | #MDomain shaarli.mydomain.org | ||
31 | #MDCertificateAgreement accepted | ||
32 | #MDContactEmail admin@shaarli.mydomain.org | ||
33 | #MDPrivateKeys RSA 4096 | ||
34 | |||
35 | <VirtualHost *:443> | ||
36 | ServerName shaarli.mydomain.org | ||
37 | |||
38 | # SSL/TLS configuration for Let's Encrypt certificates acquired with certbot standalone | ||
39 | SSLEngine on | ||
40 | SSLCertificateFile /etc/letsencrypt/live/shaarli.mydomain.org/fullchain.pem | ||
41 | SSLCertificateKeyFile /etc/letsencrypt/live/shaarli.mydomain.org/privkey.pem | ||
42 | # Let's Encrypt settings from https://github.com/certbot/certbot/blob/master/certbot-apache/certbot_apache/_internal/tls_configs/current-options-ssl-apache.conf | ||
43 | SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 | ||
44 | SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 | ||
45 | SSLHonorCipherOrder off | ||
46 | SSLSessionTickets off | ||
47 | SSLOptions +StrictRequire | ||
48 | |||
49 | # SSL/TLS configuration for self-signed certificates | ||
50 | #SSLEngine on | ||
51 | #SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem | ||
52 | #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key | ||
53 | |||
54 | # let the proxied shaarli server/container know HTTPS URLs should be served | ||
55 | RequestHeader set X-Forwarded-Proto "https" | ||
56 | |||
57 | # send the original SERVER_NAME to the proxied host | ||
58 | ProxyPreserveHost On | ||
59 | |||
60 | # pass requests to the proxied host | ||
61 | # sets X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server headers | ||
62 | ProxyPass / http://127.0.0.1:10080/ | ||
63 | ProxyPassReverse / http://127.0.0.1:10080/ | ||
64 | </VirtualHost> | ||
65 | ``` | ||
66 | |||
67 | |||
68 | ## HAProxy | ||
69 | |||
70 | |||
71 | ```conf | ||
72 | global | ||
73 | [...] | ||
74 | |||
75 | defaults | ||
76 | [...] | ||
77 | |||
78 | frontend http-in | ||
79 | bind :80 | ||
80 | redirect scheme https code 301 if !{ ssl_fc } | ||
81 | bind :443 ssl crt /path/to/cert.pem | ||
82 | default_backend shaarli | ||
83 | |||
84 | backend shaarli | ||
85 | mode http | ||
86 | option http-server-close | ||
87 | option forwardfor | ||
88 | reqadd X-Forwarded-Proto: https | ||
89 | server shaarli1 127.0.0.1:10080 | ||
90 | ``` | ||
91 | |||
92 | - [HAProxy documentation](https://cbonte.github.io/haproxy-dconv/) | ||
93 | |||
94 | ## Nginx | ||
95 | |||
96 | |||
97 | ```nginx | ||
98 | http { | ||
99 | [...] | ||
100 | |||
101 | index index.html index.php; | ||
102 | |||
103 | root /home/john/web; | ||
104 | access_log /var/log/nginx/access.log combined; | ||
105 | error_log /var/log/nginx/error.log; | ||
106 | |||
107 | server { | ||
108 | listen 80; | ||
109 | server_name shaarli.mydomain.org; | ||
110 | # redirect HTTP to HTTPS | ||
111 | return 301 https://shaarli.mydomain.org$request_uri; | ||
112 | } | ||
113 | |||
114 | server { | ||
115 | listen 443 ssl http2; | ||
116 | server_name shaarli.mydomain.org; | ||
117 | |||
118 | ssl_certificate /path/to/certificate | ||
119 | ssl_certificate_key /path/to/private/key | ||
120 | |||
121 | location / { | ||
122 | proxy_set_header X-Real-IP $remote_addr; | ||
123 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
124 | proxy_set_header X-Forwarded-Proto $scheme; | ||
125 | proxy_set_header X-Forwarded-Host $host; | ||
126 | |||
127 | # pass requests to the proxied host | ||
128 | proxy_pass http://localhost:10080/; | ||
129 | proxy_set_header Host $host; | ||
130 | proxy_connect_timeout 30s; | ||
131 | proxy_read_timeout 120s; | ||
132 | } | ||
133 | } | ||
134 | } | ||
135 | ``` | ||
136 | |||
137 | ## References | ||
138 | |||
139 | - [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto) | ||
140 | - [`X-Forwarded-Host`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host) | ||
141 | - [`X-Forwarded-For`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For) | ||
diff --git a/doc/md/Security.md b/doc/md/Security.md deleted file mode 100644 index 65db4225..00000000 --- a/doc/md/Security.md +++ /dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | ## Client browser | ||
2 | - Shaarli relies on `HTTP_REFERER` for some functions (like redirects and clicking on tags). If you have disabled or masqueraded `HTTP_REFERER` in your browser, some features of Shaarli may not work | ||
3 | |||
4 | ## Server and sessions | ||
5 | - Directories are protected using `.htaccess` files | ||
6 | - Forms are protected against XSRF (Cross-site requests forgery): | ||
7 | - Forms which act on data (save,delete…) contain a token generated by the server. | ||
8 | - Any posted form which does not contain a valid token is rejected. | ||
9 | - Any token can only be used once. | ||
10 | - Tokens are attached to the session and cannot be reused in another session. | ||
11 | - Sessions automatically expire after 60 minutes. | ||
12 | - Sessions are protected against hijacking: the session ID cannot be used from a different IP address. | ||
13 | |||
14 | ## Shaarli datastore and configuration | ||
15 | - The password is salted, hashed and stored in the data subdirectory, in a PHP file, and protected by htaccess. Even if the webserver does not support htaccess, the hash is not readable by URL. Even if the .php file is stolen, the password cannot deduced from the hash. The salt prevents rainbow-tables attacks. | ||
16 | - Links are stored as an associative array which is serialized, compressed (with deflate), base64-encoded and saved as a comment in a `.php` file. | ||
17 | - Even if the server does not support `.htaccess` files, the data file will still not be readable by URL. | ||
18 | - The database looks like this: | ||
19 | |||
20 | ```php | ||
21 | <?php /* zP1ZjxxJtiYIvvevEPJ2lDOaLrZv7o... | ||
22 | ...ka7gaco/Z+TFXM2i7BlfMf8qxpaSSYfKlvqv/x8= */ ?> | ||
23 | ``` | ||
24 | |||
25 | - Small hashes are used to make a link to an entry in Shaarli. They are unique. In fact, the date of the items (eg. `20110923_150523`) is hashed with CRC32, then converted to base64 and some characters are replaced. They are always 6 characters longs and use only `A-Z a-z 0-9 - _` and `@`. | ||
diff --git a/doc/md/Server-configuration.md b/doc/md/Server-configuration.md index f9ea2ed2..297d7c29 100644 --- a/doc/md/Server-configuration.md +++ b/doc/md/Server-configuration.md | |||
@@ -1,20 +1,46 @@ | |||
1 | # Server configuration | ||
1 | 2 | ||
2 | - [Prerequisites](#prerequisistes) | 3 | ## Requirements |
3 | - [Apache](#apache) | ||
4 | - [Nginx](#nginx) | ||
5 | - [Proxies](#proxies) | ||
6 | - [See also](#see-also) | ||
7 | 4 | ||
8 | ## Prerequisites | 5 | ### Operating system and web server |
9 | ### Shaarli | ||
10 | 6 | ||
11 | - A web server and PHP interpreter module/service have been installed. | 7 | Shaarli can be hosted on dedicated/virtual servers, or shared hosting. |
12 | - You have write access to the Shaarli installation directory. | 8 | |
13 | - The correct read/write permissions have been granted to the web server user and group. | 9 | You need write access to the Shaarli installation directory - you should have received instructions from your hosting provider on how to connect to the server using SSH (or FTP for shared hosts). |
14 | - Your PHP interpreter is compatible with supported PHP versions: | 10 | |
11 | Examples in this documentation are given for [Debian](https://www.debian.org/), a GNU/Linux distribution widely used in server environments. Please adapt them to your specific Linux distribution. | ||
12 | |||
13 | A $5/month VPS (1 CPU, 1 GiB RAM and 25 GiB SSD) will run any Shaarli installation without problems. Some hosting providers: [DigitalOcean](https://www.digitalocean.com/) ([1](https://www.digitalocean.com/docs/droplets/overview/), [2](https://www.digitalocean.com/pricing/), [3](https://www.digitalocean.com/docs/droplets/how-to/create/), [4](https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/), [5](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8), [6](https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps)), [Gandi](https://www.gandi.net/en), [OVH](https://www.ovh.co.uk/), [RackSpace](https://www.rackspace.com/), etc. | ||
14 | |||
15 | |||
16 | ### Network and domain name | ||
17 | |||
18 | Try to host the server in a region that is geographically close to your users. | ||
19 | |||
20 | A **domain name** ([DNS record](https://opensource.com/article/17/4/introduction-domain-name-system-dns)) pointing to the server's public IP address is required to obtain a SSL/TLS certificate and setup HTTPS to secure client traffic to your Shaarli instance. | ||
21 | |||
22 | You can obtain a domain name from a [registrar](https://en.wikipedia.org/wiki/Domain_name_registrar) ([1](https://www.ovh.co.uk/domains), [2](https://www.gandi.net/en/domain)), or from free subdomain providers ([1](https://freedns.afraid.org/)). If you don't have a domain name, please set up a private domain name ([FQDN](ttps://en.wikipedia.org/wiki/Fully_qualified_domain_name)) in your clients' [hosts files](https://en.wikipedia.org/wiki/Hosts_(file)) to access the server (direct access by IP address can result in unexpected behavior). | ||
23 | |||
24 | Setup a **firewall** (using `iptables`, [ufw](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian-10), [fireHOL](https://firehol.org/) or any frontend of your choice) to deny all incoming traffic except `tcp/80` and `tcp/443`, which are needed to access the web server (and any other posrts you might need, like SSH). If the server is in a private network behind a NAT, ensure these **ports are forwarded** to the server. | ||
25 | |||
26 | Shaarli makes outbound HTTP/HTTPS connections to websites you bookmark to fetch page information (title, thumbnails), the server must then have access to the Internet as well, and a working DNS resolver. | ||
27 | |||
28 | |||
29 | ### Screencast | ||
30 | |||
31 | Here is a screencast of the installation procedure | ||
32 | |||
33 | [![asciicast](https://asciinema.org/a/z3RXxcJIRgWk0jM2ws6EnUFgO.svg)](https://asciinema.org/a/z3RXxcJIRgWk0jM2ws6EnUFgO) | ||
34 | |||
35 | -------------------------------------------------------------------------------- | ||
36 | |||
37 | ### PHP | ||
38 | |||
39 | Supported PHP versions: | ||
15 | 40 | ||
16 | Version | Status | Shaarli compatibility | 41 | Version | Status | Shaarli compatibility |
17 | :---:|:---:|:---: | 42 | :---:|:---:|:---: |
43 | 7.3 | Supported | Yes | ||
18 | 7.2 | Supported | Yes | 44 | 7.2 | Supported | Yes |
19 | 7.1 | Supported | Yes | 45 | 7.1 | Supported | Yes |
20 | 7.0 | EOL: 2018-12-03 | Yes (up to Shaarli 0.10.x) | 46 | 7.0 | EOL: 2018-12-03 | Yes (up to Shaarli 0.10.x) |
@@ -23,420 +49,398 @@ Version | Status | Shaarli compatibility | |||
23 | 5.4 | EOL: 2015-09-14 | Yes (up to Shaarli 0.8.x) | 49 | 5.4 | EOL: 2015-09-14 | Yes (up to Shaarli 0.8.x) |
24 | 5.3 | EOL: 2014-08-14 | Yes (up to Shaarli 0.8.x) | 50 | 5.3 | EOL: 2014-08-14 | Yes (up to Shaarli 0.8.x) |
25 | 51 | ||
26 | - The following PHP extensions are installed on the server: | 52 | Required PHP extensions: |
27 | 53 | ||
28 | Extension | Required? | Usage | 54 | Extension | Required? | Usage |
29 | ---|:---:|--- | 55 | ---|:---:|--- |
30 | [`openssl`](http://php.net/manual/en/book.openssl.php) | All | OpenSSL, HTTPS | 56 | [`openssl`](http://php.net/manual/en/book.openssl.php) | requires | OpenSSL, HTTPS |
31 | [`php-json`](http://php.net/manual/en/book.json.php) | required | configuration parsing | 57 | [`php-json`](http://php.net/manual/en/book.json.php) | required | configuration parsing |
58 | [`php-simplexml`](https://www.php.net/manual/en/book.simplexml.php) | required | REST API (Slim framework) | ||
32 | [`php-mbstring`](http://php.net/manual/en/book.mbstring.php) | CentOS, Fedora, RHEL, Windows, some hosting providers | multibyte (Unicode) string support | 59 | [`php-mbstring`](http://php.net/manual/en/book.mbstring.php) | CentOS, Fedora, RHEL, Windows, some hosting providers | multibyte (Unicode) string support |
33 | [`php-gd`](http://php.net/manual/en/book.image.php) | optional | required to use thumbnails | 60 | [`php-gd`](http://php.net/manual/en/book.image.php) | optional | required to use thumbnails |
34 | [`php-intl`](http://php.net/manual/en/book.intl.php) | optional | localized text sorting (e.g. `e->è->f`) | 61 | [`php-intl`](http://php.net/manual/en/book.intl.php) | optional | localized text sorting (e.g. `e->è->f`) |
35 | [`php-curl`](http://php.net/manual/en/book.curl.php) | optional | using cURL for fetching webpages and thumbnails in a more robust way | 62 | [`php-curl`](http://php.net/manual/en/book.curl.php) | optional | using cURL for fetching webpages and thumbnails in a more robust way |
36 | [`php-gettext`](http://php.net/manual/en/book.gettext.php) | optional | Use the translation system in gettext mode (faster) | 63 | [`php-gettext`](http://php.net/manual/en/book.gettext.php) | optional | Use the translation system in gettext mode (faster) |
37 | -------------------------------------------------------------------------------- | ||
38 | |||
39 | ### SSL/TLS configuration | ||
40 | 64 | ||
41 | To setup HTTPS / SSL on your webserver (recommended), you must generate a public/private **key pair** and a **certificate**, and install, configure and activate the appropriate **webserver SSL extension**. | 65 | Some [plugins](Plugins.md) may require additional configuration. |
42 | 66 | ||
43 | #### Let's Encrypt | 67 | - [PHP: Supported versions](http://php.net/supported-versions.php) |
68 | - [PHP: Unsupported versions (EOL/End-of-life)](http://php.net/eol.php) | ||
69 | - [PHP 7 Changelog](http://php.net/ChangeLog-7.php) | ||
70 | - [PHP 5 Changelog](http://php.net/ChangeLog-5.php) | ||
71 | - [PHP: Bugs](https://bugs.php.net/) | ||
44 | 72 | ||
45 | [Let's Encrypt](https://en.wikipedia.org/wiki/Let%27s_Encrypt) is a certificate authority that provides free TLS/X.509 certificates via an automated process. | ||
46 | 73 | ||
47 | * Install `certbot` using the appropriate method described on https://certbot.eff.org/. | 74 | ## SSL/TLS (HTTPS) |
48 | |||
49 | Location of the `certbot` program and template configuration files may vary depending on which installation method was used. Change the file paths below accordingly. Here is an easy way to create a signed certificate using `certbot`, it assumes `certbot` was installed through APT on a Debian-based distribution: | ||
50 | 75 | ||
51 | * Stop the apache2/nginx service. | 76 | We recommend setting up [HTTPS](https://en.wikipedia.org/wiki/HTTPS) (SSL/[TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security)) on your webserver for secure communication between clients and the server. |
52 | * Run `certbot --agree-tos --standalone --preferred-challenges tls-sni --email "youremail@example.com" --domain yourdomain.example.com` | ||
53 | * For the Apache webserver, copy `/usr/lib/python2.7/dist-packages/certbot_apache/options-ssl-apache.conf` to `/etc/letsencrypt/options-ssl-apache.conf` (paths may vary depending on installation method) | ||
54 | * For Nginx: TODO | ||
55 | * Setup your webserver as described below | ||
56 | * Restart the apache2/nginx service. | ||
57 | 77 | ||
58 | #### Self-signed certificates | 78 | ### Let's Encrypt |
59 | 79 | ||
60 | If you don't want to request a certificate from Let's Encrypt, or are unable to (for example, webserver on a LAN, or domain name not registered in the public DNS system), you can generate a self-signed certificate. This certificate will trigger security warnings in web browsers, unless you add it to the browser's SSL store manually. | 80 | For public-facing web servers this can be done using free SSL/TLS certificates from [Let's Encrypt](https://en.wikipedia.org/wiki/Let's_Encrypt), a non-profit certificate authority provididing free certificates. |
61 | 81 | ||
62 | * Apache: run `make-ssl-cert generate-default-snakeoil --force-overwrite` | 82 | - [How to secure Apache with Let's Encrypt](https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-10) |
63 | * Nginx: TODO | 83 | - [How to secure Nginx with Let's Encrypt](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-10) |
84 | - [How To Use Certbot Standalone Mode to Retrieve Let's Encrypt SSL Certificates](https://www.digitalocean.com/community/tutorials/how-to-use-certbot-standalone-mode-to-retrieve-let-s-encrypt-ssl-certificates-on-debian-10). | ||
64 | 85 | ||
65 | -------------------------------------------------------------------------------- | 86 | In short: |
66 | 87 | ||
67 | ## Apache | 88 | ```bash |
89 | # install certbot | ||
90 | sudo apt install certbot | ||
68 | 91 | ||
69 | Here is a basic configuration example for the Apache web server with `mod_php`. | 92 | # stop your webserver if you already have one running |
93 | # certbot in standalone mode needs to bind to port 80 (only needed on initial generation) | ||
94 | sudo systemctl stop apache2 | ||
95 | sudo systemctl stop nginx | ||
70 | 96 | ||
71 | In `/etc/apache2/sites-available/shaarli.conf`: | 97 | # generate initial certificates |
98 | # Let's Encrypt ACME servers must be able to access your server! port forwarding and firewall must be properly configured | ||
99 | sudo certbot certonly --standalone --noninteractive --agree-tos --email "admin@shaarli.mydomain.org" -d shaarli.mydomain.org | ||
100 | # this will generate a private key and certificate at /etc/letsencrypt/live/shaarli.mydomain.org/{privkey,fullchain}.pem | ||
72 | 101 | ||
73 | ```apache | 102 | # restart the web server |
74 | <VirtualHost *:443> | 103 | sudo systemctl start apache2 |
75 | ServerName shaarli.my-domain.org | 104 | sudo systemctl start nginx |
76 | DocumentRoot /absolute/path/to/shaarli/ | 105 | ``` |
77 | 106 | ||
78 | # Logging | 107 | On apache `2.4.43+`, you can also delegate LE certificate management to [mod_md](https://httpd.apache.org/docs/2.4/mod/mod_md.html) [[1](https://www.cyberciti.biz/faq/how-to-secure-apache-with-mod_md-lets-encrypt-on-ubuntu-20-04-lts/)] in which case you don't need certbot and manual SSL configuration in virtualhosts. |
79 | # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. | ||
80 | LogLevel warn | ||
81 | ErrorLog /var/log/apache2/shaarli-error.log | ||
82 | CustomLog /var/log/apache2/shaarli-access.log combined | ||
83 | 108 | ||
84 | # Let's Encrypt SSL configuration (recommended) | 109 | ### Self-signed |
85 | SSLEngine on | ||
86 | SSLCertificateFile /etc/letsencrypt/live/yourdomain.example.com/fullchain.pem | ||
87 | SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.example.com/privkey.pem | ||
88 | Include /etc/letsencrypt/options-ssl-apache.conf | ||
89 | 110 | ||
90 | # Self-signed SSL cert configuration | 111 | If you don't want to rely on a certificate authority, or the server can only be accessed from your own network, you can also generate self-signed certificates. Not that this will generate security warnings in web browsers/clients trying to access Shaarli: |
91 | #SSLEngine on | ||
92 | #SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem | ||
93 | #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key | ||
94 | 112 | ||
95 | # Optional, log PHP errors, useful for debugging | 113 | - [How To Create a Self-Signed SSL Certificate for Apache](https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-on-debian-10) |
96 | #php_flag log_errors on | 114 | - [How To Create a Self-Signed SSL Certificate for Nginx](https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-on-debian-10) |
97 | #php_flag display_errors on | 115 | - [How to Create Self-Signed SSL Certificates with OpenSSL](http://www.xenocafe.com/tutorials/linux/centos/openssl/self_signed_certificates/index.php) |
98 | #php_value error_reporting 2147483647 | 116 | - [How do I create my own Certificate Authority?](https://workaround.org/certificate-authority) |
99 | #php_value error_log /var/log/apache2/shaarli-php-error.log | ||
100 | 117 | ||
101 | <Directory /absolute/path/to/shaarli/> | 118 | -------------------------------------------------------------------------------- |
102 | #Required for .htaccess support | ||
103 | AllowOverride All | ||
104 | Order allow,deny | ||
105 | Allow from all | ||
106 | 119 | ||
107 | Options Indexes FollowSymLinks MultiViews #TODO is Indexes/Multiviews required? | 120 | ## Examples |
108 | 121 | ||
109 | # Optional - required for playvideos plugin | 122 | The following examples assume a Debian-based operating system is installed. On other distributions you may have to adapt details such as package installation procedures, configuration file locations, and webserver username/group (`www-data` or `httpd` are common values). In these examples we assume the document root for your web server/virtualhost is at `/var/www/shaarli.mydomain.org/`: |
110 | #Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' https://www.youtube.com https://s.ytimg.com 'unsafe-eval'" | ||
111 | </Directory> | ||
112 | 123 | ||
113 | </VirtualHost> | 124 | ```bash |
125 | # create the document root (replace with your own domain name) | ||
126 | sudo mkdir -p /var/www/shaarli.mydomain.org/ | ||
114 | ``` | 127 | ``` |
115 | 128 | ||
116 | Enable this configuration with `sudo a2ensite shaarli` | 129 | You can install Shaarli at the root of your virtualhost, or in a subdirectory as well. See [Directory structure](Directory-structure) |
117 | 130 | ||
118 | _Note: If you use Apache 2.2 or lower, you need [mod_version](https://httpd.apache.org/docs/current/mod/mod_version.html) to be installed and enabled._ | ||
119 | 131 | ||
120 | _Note: Apache module `mod_rewrite` must be enabled to use the REST API._ | 132 | ### Apache |
121 | 133 | ||
134 | ```bash | ||
135 | # Install apache + mod_php and PHP modules | ||
136 | sudo apt update | ||
137 | sudo apt install apache2 libapache2-mod-php php-json php-mbstring php-gd php-intl php-curl php-gettext | ||
122 | 138 | ||
123 | ## Nginx | 139 | # Edit the virtualhost configuration file with your favorite editor (replace the example domain name) |
140 | sudo nano /etc/apache2/sites-available/shaarli.mydomain.org.conf | ||
141 | ``` | ||
124 | 142 | ||
125 | Here is a basic configuration example for the Nginx web server, using the [php-fpm](http://php-fpm.org) PHP FastCGI Process Manager, and Nginx's [FastCGI](https://en.wikipedia.org/wiki/FastCGI) module. | 143 | ```apache |
144 | <VirtualHost *:80> | ||
145 | ServerName shaarli.mydomain.org | ||
146 | DocumentRoot /var/www/shaarli.mydomain.org/ | ||
147 | |||
148 | # For SSL/TLS certificates acquired with certbot or self-signed certificates | ||
149 | # Redirect HTTP requests to HTTPS, except Let's Encrypt ACME challenge requests | ||
150 | RewriteEngine on | ||
151 | RewriteRule ^.well-known/acme-challenge/ - [L] | ||
152 | RewriteCond %{HTTP_HOST} =shaarli.mydomain.org | ||
153 | RewriteRule ^ https://shaarli.mydomain.org%{REQUEST_URI} [END,NE,R=permanent] | ||
154 | </VirtualHost> | ||
126 | 155 | ||
127 | <!--- TODO refactor everything below this point ---> | 156 | # SSL/TLS configuration for Let's Encrypt certificates managed with mod_md |
157 | #MDomain shaarli.mydomain.org | ||
158 | #MDCertificateAgreement accepted | ||
159 | #MDContactEmail admin@shaarli.mydomain.org | ||
160 | #MDPrivateKeys RSA 4096 | ||
161 | |||
162 | <VirtualHost *:443> | ||
163 | ServerName shaarli.mydomain.org | ||
164 | DocumentRoot /var/www/shaarli.mydomain.org/ | ||
128 | 165 | ||
129 | ### Common setup | 166 | # SSL/TLS configuration for Let's Encrypt certificates acquired with certbot standalone |
130 | Once Nginx and PHP-FPM are installed, we need to ensure: | 167 | SSLEngine on |
168 | SSLCertificateFile /etc/letsencrypt/live/shaarli.mydomain.org/fullchain.pem | ||
169 | SSLCertificateKeyFile /etc/letsencrypt/live/shaarli.mydomain.org/privkey.pem | ||
170 | # Let's Encrypt settings from https://github.com/certbot/certbot/blob/master/certbot-apache/certbot_apache/_internal/tls_configs/current-options-ssl-apache.conf | ||
171 | SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 | ||
172 | SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 | ||
173 | SSLHonorCipherOrder off | ||
174 | SSLSessionTickets off | ||
175 | SSLOptions +StrictRequire | ||
176 | |||
177 | # SSL/TLS configuration for self-signed certificates | ||
178 | #SSLEngine on | ||
179 | #SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem | ||
180 | #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key | ||
131 | 181 | ||
132 | - Nginx and PHP-FPM are running using the _same user and group_ | 182 | # Optional, log PHP errors, useful for debugging |
133 | - both these user and group have | 183 | #php_flag log_errors on |
134 | - `read` permissions for Shaarli resources | 184 | #php_flag display_errors on |
135 | - `execute` permissions for Shaarli directories _AND_ their parent directories | 185 | #php_value error_reporting 2147483647 |
186 | #php_value error_log /var/log/apache2/shaarli-php-error.log | ||
136 | 187 | ||
137 | On a production server: | 188 | <Directory /var/www/shaarli.mydomain.org/> |
189 | # Required for .htaccess support | ||
190 | AllowOverride All | ||
191 | Require all granted | ||
192 | </Directory> | ||
138 | 193 | ||
139 | - `user:group` will likely be `http:http`, `www:www` or `www-data:www-data` | 194 | <LocationMatch "/\."> |
140 | - files will be located under `/var/www`, `/var/http` or `/usr/share/nginx` | 195 | # Prevent accessing dotfiles |
196 | RedirectMatch 404 ".*" | ||
197 | </LocationMatch> | ||
141 | 198 | ||
142 | On a development server: | 199 | <LocationMatch "\.(?:ico|css|js|gif|jpe?g|png)$"> |
200 | # allow client-side caching of static files | ||
201 | Header set Cache-Control "max-age=2628000, public, must-revalidate, proxy-revalidate" | ||
202 | </LocationMatch> | ||
143 | 203 | ||
144 | - files may be located in a user's home directory | 204 | # serve the Shaarli favicon from its custom location |
145 | - in this case, make sure both Nginx and PHP-FPM are running as the local user/group! | 205 | Alias favicon.ico /var/www/shaarli.mydomain.org/images/favicon.ico |
146 | 206 | ||
147 | For all following configuration examples, this user/group pair will be used: | 207 | </VirtualHost> |
208 | ``` | ||
148 | 209 | ||
149 | - `user:group = john:users`, | 210 | ```bash |
211 | # Enable the virtualhost | ||
212 | sudo a2ensite shaarli.mydomain.org | ||
150 | 213 | ||
151 | which corresponds to the following service configuration: | 214 | # mod_ssl must be enabled to use TLS/SSL certificates |
215 | # https://httpd.apache.org/docs/current/mod/mod_ssl.html | ||
216 | sudo a2enmod ssl | ||
152 | 217 | ||
153 | ```ini | 218 | # mod_rewrite must be enabled to use the REST API |
154 | ; /etc/php/php-fpm.conf | 219 | # https://httpd.apache.org/docs/current/mod/mod_rewrite.html |
155 | user = john | 220 | sudo a2enmod rewrite |
156 | group = users | ||
157 | 221 | ||
158 | [...] | 222 | # mod_headers must be enabled to set custom headers from the server config |
159 | listen.owner = john | 223 | sudo a2enmod headers |
160 | listen.group = users | ||
161 | ``` | ||
162 | 224 | ||
163 | ```nginx | 225 | # mod_version must only be enabled if you use Apache 2.2 or lower |
164 | # /etc/nginx/nginx.conf | 226 | # https://httpd.apache.org/docs/current/mod/mod_version.html |
165 | user john users; | 227 | # sudo a2enmod version |
166 | 228 | ||
167 | http { | 229 | # restart the apache service |
168 | [...] | 230 | sudo systemctl restart apache2 |
169 | } | ||
170 | ``` | 231 | ``` |
171 | 232 | ||
172 | ### (Optional) Increase the maximum file upload size | 233 | - [How to install the Apache web server](https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-10) |
173 | Some bookmark dumps generated by web browsers can be _huge_ due to the presence of Base64-encoded images and favicons, as well as extra verbosity when nesting links in (sub-)folders. | 234 | - [Apache/PHP - error log per VirtualHost - StackOverflow](http://stackoverflow.com/q/176) |
235 | - [Apache - PHP: php_value vs php_admin_value and the use of php_flag explained](https://ma.ttias.be/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/) | ||
236 | - [Server-side TLS (Apache) - Mozilla](https://wiki.mozilla.org/Security/Server_Side_TLS#Apache) | ||
237 | - [Apache 2.4 documentation](https://httpd.apache.org/docs/2.4/) | ||
238 | - [Apache mod_proxy](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html) | ||
239 | - [Apache Reverse Proxy Request Headers](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers) | ||
174 | 240 | ||
175 | To increase upload size, you will need to modify both nginx and PHP configuration: | ||
176 | 241 | ||
177 | ```nginx | 242 | ### Nginx |
178 | # /etc/nginx/nginx.conf | ||
179 | 243 | ||
180 | http { | 244 | This examples uses nginx and the [PHP-FPM](https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mariadb-php-lemp-stack-on-debian-10#step-3-%E2%80%94-installing-php-for-processing) PHP interpreter. Nginx and PHP-FPM must be running using the same user and group, here we assume the user/group to be `www-data:www-data`. |
181 | [...] | ||
182 | 245 | ||
183 | client_max_body_size 10m; | ||
184 | 246 | ||
185 | [...] | 247 | ```bash |
186 | } | 248 | # install nginx and php-fpm |
187 | ``` | 249 | sudo apt update |
188 | 250 | sudo apt install nginx php-fpm | |
189 | ```ini | ||
190 | # /etc/php/<PHP_VERSION>/fpm/php.ini | ||
191 | 251 | ||
192 | [...] | 252 | # Edit the virtualhost configuration file with your favorite editor |
193 | post_max_size = 10M | 253 | sudo nano /etc/nginx/sites-available/shaarli.mydomain.org |
194 | [...] | ||
195 | upload_max_filesize = 10M | ||
196 | ``` | 254 | ``` |
197 | 255 | ||
198 | ### Minimal | ||
199 | _WARNING: Use for development only!_ | ||
200 | |||
201 | ```nginx | 256 | ```nginx |
202 | user john users; | 257 | server { |
203 | worker_processes 1; | 258 | listen 80; |
204 | events { | 259 | server_name shaarli.mydomain.org; |
205 | worker_connections 1024; | 260 | |
261 | # redirect all plain HTTP requests to HTTPS | ||
262 | return 301 https://shaarli.mydomain.org$request_uri; | ||
206 | } | 263 | } |
207 | 264 | ||
208 | http { | 265 | server { |
209 | include mime.types; | 266 | # ipv4 listening port/protocol |
210 | default_type application/octet-stream; | 267 | listen 443 ssl http2; |
211 | keepalive_timeout 20; | 268 | # ipv6 listening port/protocol |
212 | 269 | listen [::]:443 ssl http2; | |
213 | index index.html index.php; | 270 | server_name shaarli.mydomain.org; |
214 | 271 | root /var/www/shaarli.mydomain.org; | |
215 | server { | 272 | |
216 | listen 80; | 273 | # log file locations |
217 | server_name localhost; | 274 | # combined log format prepends the virtualhost/domain name to log entries |
218 | root /home/john/web; | 275 | access_log /var/log/nginx/access.log combined; |
219 | 276 | error_log /var/log/nginx/error.log; | |
220 | access_log /var/log/nginx/access.log; | 277 | |
221 | error_log /var/log/nginx/error.log; | 278 | # paths to private key and certificates for SSL/TLS |
222 | 279 | ssl_certificate /etc/ssl/shaarli.mydomain.org.crt; | |
223 | location /shaarli/ { | 280 | ssl_certificate_key /etc/ssl/private/shaarli.mydomain.org.key; |
224 | try_files $uri /shaarli/index.php$is_args$args; | 281 | |
225 | access_log /var/log/nginx/shaarli.access.log; | 282 | # Let's Encrypt SSL settings from https://github.com/certbot/certbot/blob/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf |
226 | error_log /var/log/nginx/shaarli.error.log; | 283 | ssl_session_cache shared:le_nginx_SSL:10m; |
227 | } | 284 | ssl_session_timeout 1440m; |
228 | 285 | ssl_session_tickets off; | |
229 | location ~ (index)\.php$ { | 286 | ssl_protocols TLSv1.2 TLSv1.3; |
230 | try_files $uri =404; | 287 | ssl_prefer_server_ciphers off; |
231 | fastcgi_split_path_info ^(.+\.php)(/.+)$; | 288 | ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"; |
232 | fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; | 289 | |
233 | fastcgi_index index.php; | 290 | # increase the maximum file upload size if needed: by default nginx limits file upload to 1MB (413 Entity Too Large error) |
234 | include fastcgi.conf; | 291 | client_max_body_size 100m; |
235 | } | 292 | |
293 | # relative path to shaarli from the root of the webserver | ||
294 | location / { | ||
295 | # default index file when no file URI is requested | ||
296 | index index.php; | ||
297 | try_files $uri /index.php$is_args$args; | ||
236 | } | 298 | } |
237 | } | ||
238 | ``` | ||
239 | 299 | ||
240 | ### Modular | 300 | location ~ (index)\.php$ { |
241 | The previous setup is sufficient for development purposes, but has several major caveats: | 301 | try_files $uri =404; |
302 | # slim API - split URL path into (script_filename, path_info) | ||
303 | fastcgi_split_path_info ^(.+\.php)(/.+)$; | ||
304 | # pass PHP requests to PHP-FPM | ||
305 | fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; | ||
306 | fastcgi_index index.php; | ||
307 | include fastcgi.conf; | ||
308 | } | ||
242 | 309 | ||
243 | - every content that does not match the PHP rule will be sent to client browsers: | 310 | location ~ \.php$ { |
244 | - dotfiles - in our case, `.htaccess` | 311 | # deny access to all other PHP scripts |
245 | - temporary files, e.g. Vim or Emacs files: `index.php~` | 312 | # disable this if you host other PHP applications on the same virtualhost |
246 | - asset / static resource caching is not optimized | 313 | deny all; |
247 | - if serving several PHP sites, there will be a lot of duplication: `location /shaarli/`, `location /mysite/`, etc. | 314 | } |
248 | 315 | ||
249 | To solve this, we will split Nginx configuration in several parts, that will be included when needed: | 316 | location ~ /\. { |
317 | # deny access to dotfiles | ||
318 | deny all; | ||
319 | } | ||
250 | 320 | ||
251 | ```nginx | 321 | location ~ ~$ { |
252 | # /etc/nginx/deny.conf | 322 | # deny access to temp editor files, e.g. "script.php~" |
253 | location ~ /\. { | 323 | deny all; |
254 | # deny access to dotfiles | 324 | } |
255 | access_log off; | ||
256 | log_not_found off; | ||
257 | deny all; | ||
258 | } | ||
259 | 325 | ||
260 | location ~ ~$ { | 326 | location = /favicon.ico { |
261 | # deny access to temp editor files, e.g. "script.php~" | 327 | # serve the Shaarli favicon from its custom location |
262 | access_log off; | 328 | alias /var/www/shaarli/images/favicon.ico; |
263 | log_not_found off; | 329 | } |
264 | deny all; | ||
265 | } | ||
266 | ``` | ||
267 | 330 | ||
268 | ```nginx | 331 | # allow client-side caching of static files |
269 | # /etc/nginx/php.conf | 332 | location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { |
270 | location ~ (index)\.php$ { | 333 | expires max; |
271 | # Slim - split URL path into (script_filename, path_info) | 334 | add_header Cache-Control "public, must-revalidate, proxy-revalidate"; |
272 | try_files $uri =404; | 335 | # HTTP 1.0 compatibility |
273 | fastcgi_split_path_info ^(.+\.php)(/.+)$; | 336 | add_header Pragma public; |
274 | 337 | } | |
275 | # filter and proxy PHP requests to PHP-FPM | ||
276 | fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; | ||
277 | fastcgi_index index.php; | ||
278 | include fastcgi.conf; | ||
279 | } | ||
280 | 338 | ||
281 | location ~ \.php$ { | ||
282 | # deny access to all other PHP scripts | ||
283 | deny all; | ||
284 | } | 339 | } |
285 | ``` | 340 | ``` |
286 | 341 | ||
287 | ```nginx | 342 | ```bash |
288 | # /etc/nginx/static_assets.conf | 343 | # enable the configuration/virtualhost |
289 | location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { | 344 | sudo ln -s /etc/nginx/sites-available/shaarli.mydomain.org /etc/nginx/sites-enabled/shaarli.mydomain.org |
290 | expires max; | 345 | # reload nginx configuration |
291 | add_header Pragma public; | 346 | sudo systemctl reload nginx |
292 | add_header Cache-Control "public, must-revalidate, proxy-revalidate"; | ||
293 | } | ||
294 | ``` | 347 | ``` |
295 | 348 | ||
296 | ```nginx | 349 | - [How to install the Nginx web server](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-debian-10) |
297 | # /etc/nginx/nginx.conf | 350 | - [Nginx Beginner's guide](http://nginx.org/en/docs/beginners_guide.html) |
298 | [...] | 351 | - [Nginx documentation](https://nginx.org/en/docs/) |
299 | 352 | - [Nginx ngx_http_fastcgi_module](http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html) | |
300 | http { | 353 | - [Nginx Pitfalls](http://wiki.nginx.org/Pitfalls) |
301 | [...] | 354 | - [Nginx PHP configuration examples - Karl Blessing](http://kbeezie.com/nginx-configuration-examples/) |
302 | 355 | - [Server-side TLS (Nginx) - Mozilla](https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx) | |
303 | root /home/john/web; | ||
304 | access_log /var/log/nginx/access.log; | ||
305 | error_log /var/log/nginx/error.log; | ||
306 | 356 | ||
307 | server { | ||
308 | # virtual host for a first domain | ||
309 | listen 80; | ||
310 | server_name my.first.domain.org; | ||
311 | 357 | ||
312 | location /shaarli/ { | ||
313 | # Slim - rewrite URLs | ||
314 | try_files $uri /shaarli/index.php$is_args$args; | ||
315 | 358 | ||
316 | access_log /var/log/nginx/shaarli.access.log; | 359 | ## Reverse proxies |
317 | error_log /var/log/nginx/shaarli.error.log; | ||
318 | } | ||
319 | 360 | ||
320 | location = /shaarli/favicon.ico { | 361 | If Shaarli is hosted on a server behind a [reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) (i.e. there is a proxy server between clients and the web server hosting Shaarli), configure it accordingly. See [Reverse proxy](Reverse-proxy.md) configuration. |
321 | # serve the Shaarli favicon from its custom location | ||
322 | alias /var/www/shaarli/images/favicon.ico; | ||
323 | } | ||
324 | 362 | ||
325 | include deny.conf; | ||
326 | include static_assets.conf; | ||
327 | include php.conf; | ||
328 | } | ||
329 | 363 | ||
330 | server { | ||
331 | # virtual host for a second domain | ||
332 | listen 80; | ||
333 | server_name second.domain.com; | ||
334 | 364 | ||
335 | location /minigal/ { | 365 | ## Allow import of large browser bookmarks export |
336 | access_log /var/log/nginx/minigal.access.log; | ||
337 | error_log /var/log/nginx/minigal.error.log; | ||
338 | } | ||
339 | 366 | ||
340 | include deny.conf; | 367 | Web browser bookmark exports can be large due to the presence of base64-encoded images and favicons/long subfolder names. Edit the PHP configuration file. |
341 | include static_assets.conf; | ||
342 | include php.conf; | ||
343 | } | ||
344 | } | ||
345 | ``` | ||
346 | 368 | ||
347 | ### Redirect HTTP to HTTPS | 369 | - Apache: `/etc/php/<PHP_VERSION>/apache2/php.ini` |
348 | Assuming you have generated a (self-signed) key and certificate, and they are | 370 | - Nginx + PHP-FPM: `/etc/php/<PHP_VERSION>/fpm/php.ini` (in addition to `client_max_body_size` in the [Nginx configuration](#nginx)) |
349 | located under `/home/john/ssl/localhost.{key,crt}`, it is pretty straightforward | ||
350 | to set an HTTP (:80) to HTTPS (:443) redirection to force SSL/TLS usage. | ||
351 | 371 | ||
352 | ```nginx | 372 | ```ini |
353 | # /etc/nginx/nginx.conf | ||
354 | [...] | 373 | [...] |
374 | # (optional) increase the maximum file upload size: | ||
375 | post_max_size = 100M | ||
376 | [...] | ||
377 | # (optional) increase the maximum file upload size: | ||
378 | upload_max_filesize = 100M | ||
379 | ``` | ||
355 | 380 | ||
356 | http { | 381 | To verify PHP settings currently set on the server, create a `phpinfo.php` in your webserver's document root |
357 | [...] | ||
358 | |||
359 | index index.html index.php; | ||
360 | |||
361 | root /home/john/web; | ||
362 | access_log /var/log/nginx/access.log; | ||
363 | error_log /var/log/nginx/error.log; | ||
364 | |||
365 | server { | ||
366 | listen 80; | ||
367 | server_name localhost; | ||
368 | 382 | ||
369 | return 301 https://localhost$request_uri; | 383 | ```bash |
370 | } | 384 | # example |
385 | echo '<?php phpinfo(); ?>' | sudo tee /var/www/shaarli.mydomain.org/phpinfo.php | ||
386 | #give read-only access to this file to the webserver user | ||
387 | sudo chown www-data:root /var/www/shaarli.mydomain.org/phpinfo.php | ||
388 | sudo chmod 0400 /var/www/shaarli.mydomain.org/phpinfo.php | ||
389 | ``` | ||
371 | 390 | ||
372 | server { | 391 | Access the file from a web browser (eg. <https://shaarli.mydomain.org/phpinfo.php> and look at the _Loaded Configuration File_ and _Scan this dir for additional .ini files_ entries |
373 | listen 443 ssl; | ||
374 | server_name localhost; | ||
375 | 392 | ||
376 | ssl_certificate /home/john/ssl/localhost.crt; | 393 | It is recommended to remove the `phpinfo.php` when no longer needed as it publicly discloses details about your webserver configuration. |
377 | ssl_certificate_key /home/john/ssl/localhost.key; | ||
378 | 394 | ||
379 | location /shaarli/ { | ||
380 | # Slim - rewrite URLs | ||
381 | try_files $uri /index.php$is_args$args; | ||
382 | 395 | ||
383 | access_log /var/log/nginx/shaarli.access.log; | 396 | ## Robots and crawlers |
384 | error_log /var/log/nginx/shaarli.error.log; | ||
385 | } | ||
386 | 397 | ||
387 | location = /shaarli/favicon.ico { | 398 | To opt-out of indexing your Shaarli instance by search engines, create a `robots.txt` file at the root of your virtualhost: |
388 | # serve the Shaarli favicon from its custom location | ||
389 | alias /var/www/shaarli/images/favicon.ico; | ||
390 | } | ||
391 | 399 | ||
392 | include deny.conf; | 400 | ``` |
393 | include static_assets.conf; | 401 | User-agent: * |
394 | include php.conf; | 402 | Disallow: / |
395 | } | ||
396 | } | ||
397 | ``` | 403 | ``` |
398 | 404 | ||
399 | ## Proxies | 405 | By default Shaarli already disallows indexing of your local copy of the documentation by default, using `<meta name="robots">` HTML tags. Your Shaarli instance may still be indexed by various robots on the public Internet, that do not respect this header or the robots standard. |
400 | |||
401 | If Shaarli is served behind a proxy (i.e. there is a proxy server between clients and the web server hosting Shaarli), please refer to the proxy server documentation for proper configuration. In particular, you have to ensure that the following server variables are properly set: | ||
402 | 406 | ||
403 | - `X-Forwarded-Proto` | 407 | - [Robots exclusion standard](https://en.wikipedia.org/wiki/Robots_exclusion_standard) |
404 | - `X-Forwarded-Host` | 408 | - [Introduction to robots.txt](https://support.google.com/webmasters/answer/6062608?hl=en) |
405 | - `X-Forwarded-For` | 409 | - [Robots meta tag, data-nosnippet, and X-Robots-Tag specifications](https://developers.google.com/search/reference/robots_meta_tag) |
410 | - [About robots.txt](http://www.robotstxt.org) | ||
411 | - [About the robots META tag](https://www.robotstxt.org/meta.html) | ||
406 | 412 | ||
407 | In you [Shaarli configuration](Shaarli-configuration) `data/config.json.php`, add the public IP of your proxy under `security.trusted_proxies`. | ||
408 | 413 | ||
409 | See also [proxy-related](https://github.com/shaarli/Shaarli/issues?utf8=%E2%9C%93&q=label%3Aproxy+) issues. | 414 | ## Fail2ban |
410 | 415 | ||
411 | ## Robots and crawlers | 416 | [fail2ban](http://www.fail2ban.org/wiki/index.php/Main_Page) is an intrusion prevention framework that reads server (Apache, SSH, etc.) and uses `iptables` profiles to block brute-force attempts. You need to create a filter to detect shaarli login failures in logs, and a jail configuation to configure the behavior when failed login attempts are detected: |
412 | 417 | ||
413 | Shaarli disallows indexing and crawling of your local documentation pages by search engines, using `<meta name="robots">` HTML tags. | 418 | ```ini |
414 | Your Shaarli instance and other pages you host may still be indexed by various robots on the public Internet. | 419 | # /etc/fail2ban/filter.d/shaarli-auth.conf |
415 | You may want to setup a robots.txt file or other crawler control mechanism on your server. | 420 | [INCLUDES] |
416 | See [[1]](https://en.wikipedia.org/wiki/Robots_exclusion_standard), [[2]](https://support.google.com/webmasters/answer/6062608?hl=en) and [[3]](https://developers.google.com/search/reference/robots_meta_tag) | 421 | before = common.conf |
422 | [Definition] | ||
423 | failregex = \s-\s<HOST>\s-\sLogin failed for user.*$ | ||
424 | ignoreregex = | ||
425 | ``` | ||
417 | 426 | ||
418 | ## See also | 427 | ```ini |
428 | # /etc/fail2ban/jail.local | ||
429 | [shaarli-auth] | ||
430 | enabled = true | ||
431 | port = https,http | ||
432 | filter = shaarli-auth | ||
433 | logpath = /var/www/shaarli.mydomain.org/data/log.txt | ||
434 | # allow 3 login attempts per IP address | ||
435 | # (over a period specified by findtime = in /etc/fail2ban/jail.conf) | ||
436 | maxretry = 3 | ||
437 | # permanently ban the IP address after reaching the limit | ||
438 | bantime = -1 | ||
439 | ``` | ||
419 | 440 | ||
420 | * [Server security](Server-security.md) | 441 | Then restart the service: `sudo systemctl restart fail2ban` |
421 | 442 | ||
422 | #### Webservers | ||
423 | 443 | ||
424 | - [Apache/PHP - error log per VirtualHost](http://stackoverflow.com/q/176) (StackOverflow) | 444 | ## What next? |
425 | - [Apache - PHP: php_value vs php_admin_value and the use of php_flag explained](https://ma.ttias.be/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/) | ||
426 | - [Server-side TLS (Apache)](https://wiki.mozilla.org/Security/Server_Side_TLS#Apache) (Mozilla) | ||
427 | - [Nginx Beginner's guide](http://nginx.org/en/docs/beginners_guide.html) | ||
428 | - [Nginx ngx_http_fastcgi_module](http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html) | ||
429 | - [Nginx Pitfalls](http://wiki.nginx.org/Pitfalls) | ||
430 | - [Nginx PHP configuration examples](http://kbeezie.com/nginx-configuration-examples/) (Karl Blessing) | ||
431 | - [Server-side TLS (Nginx)](https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx) (Mozilla) | ||
432 | - [How to Create Self-Signed SSL Certificates with OpenSSL](http://www.xenocafe.com/tutorials/linux/centos/openssl/self_signed_certificates/index.php) | ||
433 | - [How do I create my own Certificate Authority?](https://workaround.org/certificate-authority) | ||
434 | |||
435 | #### PHP | ||
436 | 445 | ||
437 | - [Travis configuration](https://github.com/shaarli/Shaarli/blob/master/.travis.yml) | 446 | [Shaarli installation](Installation.md) |
438 | - [PHP: Supported versions](http://php.net/supported-versions.php) | ||
439 | - [PHP: Unsupported versions](http://php.net/eol.php) _(EOL - End Of Life)_ | ||
440 | - [PHP 7 Changelog](http://php.net/ChangeLog-7.php) | ||
441 | - [PHP 5 Changelog](http://php.net/ChangeLog-5.php) | ||
442 | - [PHP: Bugs](https://bugs.php.net/) | ||
diff --git a/doc/md/Server-security.md b/doc/md/Server-security.md deleted file mode 100644 index ea1b637d..00000000 --- a/doc/md/Server-security.md +++ /dev/null | |||
@@ -1,76 +0,0 @@ | |||
1 | ## php.ini | ||
2 | PHP settings are defined in: | ||
3 | |||
4 | - a main configuration file, usually found under `/etc/php/$php_version/php.ini`; some distributions provide different configuration environments, e.g. | ||
5 | - `/etc/php/$php_version/cli/php.ini` - used when running console scripts | ||
6 | - `/etc/php/$php_version/apache2/php.ini` - used when a client requests PHP resources from Apache | ||
7 | - `/etc/php/$php_version/php-fpm.conf` - used when PHP requests are proxied to PHP-FPM | ||
8 | - additional configuration files/entries, depending on the installed/enabled extensions: | ||
9 | - `/etc/php/conf.d/xdebug.ini` | ||
10 | |||
11 | ### Locate .ini files | ||
12 | #### Console environment | ||
13 | ```bash | ||
14 | $ php --ini | ||
15 | Configuration File (php.ini) Path: /etc/php | ||
16 | Loaded Configuration File: /etc/php/php.ini | ||
17 | Scan for additional .ini files in: /etc/php/conf.d | ||
18 | Additional .ini files parsed: /etc/php/conf.d/xdebug.ini | ||
19 | ``` | ||
20 | |||
21 | #### Server environment | ||
22 | - create a `phpinfo.php` script located in a path supported by the web server, e.g. | ||
23 | - Apache (with user dirs enabled): `/home/myself/public_html/phpinfo.php` | ||
24 | - `/var/www/test/phpinfo.php` | ||
25 | - make sure the script is readable by the web server user/group (usually, `www`, `www-data` or `httpd`) | ||
26 | - access the script from a web browser | ||
27 | - look at the _Loaded Configuration File_ and _Scan this dir for additional .ini files_ entries | ||
28 | ```php | ||
29 | <?php phpinfo(); ?> | ||
30 | ``` | ||
31 | |||
32 | ## fail2ban | ||
33 | `fail2ban` is an intrusion prevention framework that reads server (Apache, SSH, etc.) and uses `iptables` profiles to block brute-force attempts: | ||
34 | |||
35 | - [Official website](http://www.fail2ban.org/wiki/index.php/Main_Page) | ||
36 | - [Source code](https://github.com/fail2ban/fail2ban) | ||
37 | |||
38 | ### Read Shaarli logs to ban IPs | ||
39 | Example configuration: | ||
40 | - allow 3 login attempts per IP address | ||
41 | - after 3 failures, permanently ban the corresponding IP adddress | ||
42 | |||
43 | `/etc/fail2ban/jail.local` | ||
44 | ```ini | ||
45 | [shaarli-auth] | ||
46 | enabled = true | ||
47 | port = https,http | ||
48 | filter = shaarli-auth | ||
49 | logpath = /var/www/path/to/shaarli/data/log.txt | ||
50 | maxretry = 3 | ||
51 | bantime = -1 | ||
52 | ``` | ||
53 | |||
54 | `/etc/fail2ban/filter.d/shaarli-auth.conf` | ||
55 | ```ini | ||
56 | [INCLUDES] | ||
57 | before = common.conf | ||
58 | [Definition] | ||
59 | failregex = \s-\s<HOST>\s-\sLogin failed for user.*$ | ||
60 | ignoreregex = | ||
61 | ``` | ||
62 | |||
63 | ## Robots - Restricting search engines and web crawler traffic | ||
64 | |||
65 | Creating a `robots.txt` with the following contents at the root of your Shaarli installation will prevent _honest_ web crawlers from indexing each and every link and Daily page from a Shaarli instance, thus getting rid of a certain amount of unsollicited network traffic. | ||
66 | |||
67 | ``` | ||
68 | User-agent: * | ||
69 | Disallow: / | ||
70 | ``` | ||
71 | |||
72 | See: | ||
73 | |||
74 | - http://www.robotstxt.org | ||
75 | - http://www.robotstxt.org/robotstxt.html | ||
76 | - http://www.robotstxt.org/meta.html | ||
diff --git a/doc/md/Shaarli-configuration.md b/doc/md/Shaarli-configuration.md index 2462e20e..263fb761 100644 --- a/doc/md/Shaarli-configuration.md +++ b/doc/md/Shaarli-configuration.md | |||
@@ -1,126 +1,19 @@ | |||
1 | ## Foreword | 1 | # Shaarli configuration |
2 | |||
3 | **Do not edit configuration options in index.php! Your changes would be lost.** | ||
4 | 2 | ||
5 | Once your Shaarli instance is installed, the file `data/config.json.php` is generated: | 3 | Once your Shaarli instance is installed, the file `data/config.json.php` is generated: |
6 | * it contains all settings in JSON format, and can be edited to customize values | ||
7 | * it defines which [plugins](Plugin-System) are enabled | ||
8 | * its values override those defined in `index.php` | ||
9 | * it is wrap in a PHP comment to prevent anyone accessing it, regardless of server configuration | ||
10 | |||
11 | ## File and directory permissions | ||
12 | |||
13 | The server process running Shaarli must have: | ||
14 | |||
15 | - `read` access to the following resources: | ||
16 | - PHP scripts: `index.php`, `application/*.php`, `plugins/*.php` | ||
17 | - 3rd party PHP and Javascript libraries: `inc/*.php`, `inc/*.js` | ||
18 | - static assets: | ||
19 | - CSS stylesheets: `inc/*.css` | ||
20 | - `images/*` | ||
21 | - RainTPL templates: `tpl/*.html` | ||
22 | - `read`, `write` and `execution` access to the following directories: | ||
23 | - `cache` - thumbnail cache | ||
24 | - `data` - link data store, configuration options | ||
25 | - `pagecache` - Atom/RSS feed cache | ||
26 | - `tmp` - RainTPL page cache | ||
27 | |||
28 | On a Linux distribution: | ||
29 | |||
30 | - the web server user will likely be `www` or `http` (for Apache2) | ||
31 | - it will be a member of a group of the same name: `www:www`, `http:http` | ||
32 | - to give it access to Shaarli, either: | ||
33 | - unzip Shaarli in the default web server location (usually `/var/www/`) and set the web server user as the owner | ||
34 | - put users in the same group as the web server, and set the appropriate access rights | ||
35 | - if you have a domain / subdomain to serve Shaarli, [configure the server](Server-configuration) accordingly | ||
36 | |||
37 | ## Configuration | ||
38 | |||
39 | In `data/config.json.php`. | ||
40 | |||
41 | See also [Plugin System](Plugin-System). | ||
42 | |||
43 | ### Credentials | ||
44 | |||
45 | _These settings should not be edited_ | ||
46 | |||
47 | - **login**: Login username. | ||
48 | - **hash**: Generated password hash. | ||
49 | - **salt**: Password salt. | ||
50 | |||
51 | ### General | ||
52 | |||
53 | - **title**: Shaarli's instance title. | ||
54 | - **header_link**: Link to the homepage. | ||
55 | - **links_per_page**: Number of shaares displayed per page. | ||
56 | - **timezone**: See [the list of supported timezones](http://php.net/manual/en/timezones.php). | ||
57 | - **enabled_plugins**: List of enabled plugins. | ||
58 | - **default_note_title**: Default title of a new note. | ||
59 | - **retrieve_description** (boolean): If set to true, for every new links Shaarli will try | ||
60 | to retrieve the description and keywords from the HTML meta tags. | ||
61 | |||
62 | ### Security | ||
63 | |||
64 | - **session_protection_disabled**: Disable session cookie hijacking protection (not recommended). | ||
65 | It might be useful if your IP adress often changes. | ||
66 | - **ban_after**: Failed login attempts before being IP banned. | ||
67 | - **ban_duration**: IP ban duration in seconds. | ||
68 | - **open_shaarli**: Anyone can add a new link while logged out if enabled. | ||
69 | - **trusted_proxies**: List of trusted IP which won't be banned after failed login attemps. Useful if Shaarli is behind a reverse proxy. | ||
70 | - **allowed_protocols**: List of allowed protocols in shaare URLs or markdown-rendered descriptions. Useful if you want to store `javascript:` links (bookmarklets) in Shaarli (default: `["ftp", "ftps", "magnet"]`). | ||
71 | |||
72 | ### Resources | ||
73 | 4 | ||
74 | - **data_dir**: Data directory. | 5 | - it contains all settings in JSON format, and can be edited to customize values |
75 | - **datastore**: Shaarli's links database file path. | 6 | - it defines which [plugins](Plugins.md) are enabled |
76 | - **history**: Shaarli's operation history file path. | 7 | - its values override those defined in `index.php` |
77 | - **updates**: File path for the ran updates file. | 8 | - it is wrapped in a PHP comment so that its contents are never served by the web server, regardless of configuration |
78 | - **log**: Log file path. | ||
79 | - **update_check**: Last update check file path. | ||
80 | - **raintpl_tpl**: Templates directory. | ||
81 | - **raintpl_tmp**: Template engine cache directory. | ||
82 | - **thumbnails_cache**: Thumbnails cache directory. | ||
83 | - **page_cache**: Shaarli's internal cache directory. | ||
84 | - **ban_file**: Banned IP file path. | ||
85 | 9 | ||
86 | ### Translation | 10 | **Do not edit configuration options in index.php! Your changes would be lost.** |
87 | 11 | ||
88 | - **language**: translation language (also see [Translations](Translations)) | 12 | ## Tools menu |
89 | - **auto** (default): The translation language is chosen from the browser locale. | ||
90 | It means that the language can be different for 2 different visitors depending on their locale. | ||
91 | - **en**: Use the English translation. | ||
92 | - **fr**: Use the French translation. | ||
93 | - **mode**: | ||
94 | - **auto** or **php** (default): Use the PHP implementation of gettext (slower) | ||
95 | - **gettext**: Use PHP builtin gettext extension | ||
96 | (faster, but requires `php-gettext` to be installed and to reload the web server on update) | ||
97 | - **extension**: Translation extensions for custom themes or plugins. | ||
98 | Must be an associative array: `translation domain => translation path`. | ||
99 | |||
100 | ### Updates | ||
101 | |||
102 | - **check_updates**: Enable or disable update check to the git repository. | ||
103 | - **check_updates_branch**: Git branch used to check updates (e.g. `stable` or `master`). | ||
104 | - **check_updates_interval**: Look for new version every N seconds (default: every day). | ||
105 | 13 | ||
106 | ### Privacy | 14 | Some settings can be configured directly from a web browser by accesing the `Tools` menu. Values are read/written to/from the configuration file. |
107 | |||
108 | - **default_private_links**: Check the private checkbox by default for every new link. | ||
109 | - **hide_public_links**: All links are hidden while logged out. | ||
110 | - **force_login**: if **hide_public_links** and this are set to `true`, all anonymous users are redirected to the login page. | ||
111 | - **hide_timestamps**: Timestamps are hidden. | ||
112 | - **remember_user_default**: Default state of the login page's *remember me* checkbox | ||
113 | - `true`: checked by default, `false`: unchecked by default | ||
114 | |||
115 | ### Feed | ||
116 | |||
117 | - **rss_permalinks**: Enable this to redirect RSS links to Shaarli's permalinks instead of shaared URL. | ||
118 | - **show_atom**: Display ATOM feed button. | ||
119 | |||
120 | ### Thumbnail | ||
121 | 15 | ||
122 | - **enable_thumbnails**: Enable or disable thumbnail display. | 16 | ![](https://i.imgur.com/boaaibC.png) |
123 | - **enable_localcache**: Enable or disable local cache. | ||
124 | 17 | ||
125 | ### LDAP | 18 | ### LDAP |
126 | 19 | ||
@@ -182,6 +75,9 @@ Must be an associative array: `translation domain => translation path`. | |||
182 | "title": "My Shaarli", | 75 | "title": "My Shaarli", |
183 | "header_link": "?" | 76 | "header_link": "?" |
184 | }, | 77 | }, |
78 | "dev": { | ||
79 | "debug": false, | ||
80 | } | ||
185 | "extras": { | 81 | "extras": { |
186 | "show_atom": false, | 82 | "show_atom": false, |
187 | "hide_public_links": false, | 83 | "hide_public_links": false, |
@@ -236,9 +132,90 @@ Must be an associative array: `translation domain => translation path`. | |||
236 | } ?> | 132 | } ?> |
237 | ``` | 133 | ``` |
238 | 134 | ||
239 | ## Additional configuration | 135 | ## Settings |
136 | |||
137 | ### Credentials | ||
138 | |||
139 | _These settings should not be edited_ | ||
140 | |||
141 | - **login**: Login username. | ||
142 | - **hash**: Generated password hash. | ||
143 | - **salt**: Password salt. | ||
144 | |||
145 | ### General | ||
146 | |||
147 | - **title**: Shaarli's instance title. | ||
148 | - **header_link**: Link to the homepage. | ||
149 | - **links_per_page**: Number of Shaares displayed per page. | ||
150 | - **timezone**: See [the list of supported timezones](http://php.net/manual/en/timezones.php). | ||
151 | - **enabled_plugins**: List of enabled plugins. | ||
152 | - **default_note_title**: Default title of a new note. | ||
153 | - **retrieve_description** (boolean): If set to true, for every new Shaare Shaarli will try to retrieve the description and keywords from the HTML meta tags. | ||
154 | - **root_url**: Overrides automatic discovery of Shaarli instance's URL (e.g.) `https://sub.domain.tld/shaarli-folder/`. | ||
155 | |||
156 | ### Security | ||
157 | |||
158 | - **session_protection_disabled**: Disable session cookie hijacking protection (not recommended). | ||
159 | It might be useful if your IP adress often changes. | ||
160 | - **ban_after**: Failed login attempts before being IP banned. | ||
161 | - **ban_duration**: IP ban duration in seconds. | ||
162 | - **open_shaarli**: Anyone can add a new Shaare while logged out if enabled. | ||
163 | - **trusted_proxies**: List of trusted IP which won't be banned after failed login attemps. Useful if Shaarli is behind a reverse proxy. | ||
164 | - **allowed_protocols**: List of allowed protocols in shaare URLs or markdown-rendered descriptions. Useful if you want to store `javascript:` links (bookmarklets) in Shaarli (default: `["ftp", "ftps", "magnet"]`). | ||
165 | |||
166 | ### Resources | ||
167 | |||
168 | - **data_dir**: Data directory. | ||
169 | - **datastore**: Shaarli's Shaares database file path. | ||
170 | - **history**: Shaarli's operation history file path. | ||
171 | - **updates**: File path for the ran updates file. | ||
172 | - **log**: Log file path. | ||
173 | - **update_check**: Last update check file path. | ||
174 | - **raintpl_tpl**: Templates directory. | ||
175 | - **raintpl_tmp**: Template engine cache directory. | ||
176 | - **thumbnails_cache**: Thumbnails cache directory. | ||
177 | - **page_cache**: Shaarli's internal cache directory. | ||
178 | - **ban_file**: Banned IP file path. | ||
179 | |||
180 | ### Translation | ||
181 | |||
182 | - **language**: translation language (also see [Translations](Translations)) | ||
183 | - **auto** (default): The translation language is chosen from the browser locale. | ||
184 | It means that the language can be different for 2 different visitors depending on their locale. | ||
185 | - **en**: Use the English translation. | ||
186 | - **fr**: Use the French translation. | ||
187 | - **mode**: | ||
188 | - **auto** or **php** (default): Use the PHP implementation of gettext (slower) | ||
189 | - **gettext**: Use PHP builtin gettext extension | ||
190 | (faster, but requires `php-gettext` to be installed and to reload the web server on update) | ||
191 | - **extension**: Translation extensions for custom themes or plugins. | ||
192 | Must be an associative array: `translation domain => translation path`. | ||
193 | |||
194 | ### Updates | ||
195 | |||
196 | - **check_updates**: Enable or disable update check to the git repository. | ||
197 | - **check_updates_branch**: Git branch used to check updates (e.g. `stable` or `master`). | ||
198 | - **check_updates_interval**: Look for new version every N seconds (default: every day). | ||
199 | |||
200 | ### Privacy | ||
201 | |||
202 | - **default_private_links**: Check the private checkbox by default for every new Shaare. | ||
203 | - **hide_public_links**: All Shaares are hidden while logged out. | ||
204 | - **force_login**: if **hide_public_links** and this are set to `true`, all anonymous users are redirected to the login page. | ||
205 | - **hide_timestamps**: Timestamps are hidden. | ||
206 | - **remember_user_default**: Default state of the login page's *remember me* checkbox | ||
207 | - `true`: checked by default, `false`: unchecked by default | ||
208 | |||
209 | ### Feed | ||
210 | |||
211 | - **rss_permalinks**: Enable this to redirect RSS links to Shaarli's permalinks instead of shaared URL. | ||
212 | - **show_atom**: Display ATOM feed button. | ||
213 | |||
214 | ### Thumbnail | ||
215 | |||
216 | - **enable_thumbnails**: Enable or disable thumbnail display. | ||
217 | - **enable_localcache**: Enable or disable local cache. | ||
240 | 218 | ||
241 | The `playvideos` plugin may require that you adapt your server's | 219 | ## Plugins configuration |
242 | [Content Security Policy](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md#troubleshooting) | ||
243 | configuration to work properly. | ||
244 | 220 | ||
221 | See [Plugins](Plugins.md) | ||
diff --git a/doc/md/Sharing-content.md b/doc/md/Sharing-content.md deleted file mode 100644 index 9a16fc62..00000000 --- a/doc/md/Sharing-content.md +++ /dev/null | |||
@@ -1,71 +0,0 @@ | |||
1 | Content posted to Shaarli is separated in items called _Shaares_. For each Shaare, | ||
2 | you can customize the following aspects: | ||
3 | |||
4 | * URL to link to | ||
5 | * Title | ||
6 | * Free-text description | ||
7 | * Tags | ||
8 | * Public/private status | ||
9 | |||
10 | -------------------------------------------------------------------------------- | ||
11 | |||
12 | ## Adding new Shaares | ||
13 | |||
14 | While logged in to your Shaarli, you can add new Shaares in several ways: | ||
15 | |||
16 | * [+Shaare button](#shaare-button) | ||
17 | * [Bookmarklet](#bookmarklet) | ||
18 | * Third-party [apps and browser addons](Community-&-Related-software.md#mobile-apps) | ||
19 | * [REST API](https://shaarli.github.io/api-documentation/) | ||
20 | |||
21 | ### +Shaare button | ||
22 | |||
23 | * While logged in to your Shaarli, click the **`+Shaare`** button located in the toolbar. | ||
24 | * Enter the URL of a link you want to share. | ||
25 | * Click `Add link` | ||
26 | * The `New Shaare` dialog appears, allowing you to fill in the details of your Shaare. | ||
27 | * The Description, Title, and Tags will help you find your Shaare later using tags or full-text search. | ||
28 | * You can also check the “Private” box so that the link is saved but only visible to you (the logged-in user). | ||
29 | * Click `Save`. | ||
30 | |||
31 | <!-- TODO Add screenshot of add/edit link dialog --> | ||
32 | |||
33 | ### Bookmarklet | ||
34 | |||
35 | The _Bookmarklet_ \[[1](https://en.wikipedia.org/wiki/Bookmarklet)\] is a special | ||
36 | browser bookmark you can use to add new content to your Shaarli. This bookmarklet is | ||
37 | compatible with Firefox, Opera, Chrome and Safari. To set it up: | ||
38 | |||
39 | * Access the `Tools` page from the button in the toolbar. | ||
40 | * Drag the **`✚Shaare link` button** to your browser's bookmarks bar. | ||
41 | |||
42 | Once this is done, you can shaare any URL you are visiting simply by clicking the | ||
43 | bookmarklet in your browser! The same `New Shaare` dialog as above is displayed. | ||
44 | |||
45 | | Note | Websites which enforce Content Security Policy (CSP), such as github.com, disallow usage of bookmarklets. Unfortunately, there is nothing Shaarli can do about it. \[[1](https://github.com/shaarli/Shaarli/issues/196)]\ \[[2](https://bugzilla.mozilla.org/show_bug.cgi?id=866522)]\ \[[3](https://code.google.com/p/chromium/issues/detail?id=233903)]\ | | ||
46 | |---------|---------| | ||
47 | |||
48 | | Note | Under Opera, you can't drag'n drop the button: You have to right-click on it and add a bookmark to your personal toolbar. | | ||
49 | |---------|---------| | ||
50 | |||
51 | ![](images/bookmarklet.png) | ||
52 | |||
53 | |||
54 | -------------------------------------------------------------------------------- | ||
55 | |||
56 | ## Editing Shaares | ||
57 | |||
58 | Any Shaare can edited by clicking its ![](images/edit_icon.png) `Edit` button. | ||
59 | |||
60 | Editing a Shaare will not change it's permalink, each permalink always points to the | ||
61 | latest revision of a Shaare. | ||
62 | |||
63 | -------------------------------------------------------------------------------- | ||
64 | |||
65 | ## Using shaarli as a blog, notepad, pastebin... | ||
66 | |||
67 | While adding or editing a link, leave the URL field blank to create a text-only | ||
68 | ("note") post. This allows you to post any kind of text content, such as blog | ||
69 | articles, private or public notes, snippets... There is no character limit! You can | ||
70 | access your Shaare from its permalink. | ||
71 | |||
diff --git a/doc/md/Static-analysis.md b/doc/md/Static-analysis.md deleted file mode 100644 index 29d98362..00000000 --- a/doc/md/Static-analysis.md +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | ## WIP | ||
2 | This topic is currently being discussed here: | ||
3 | |||
4 | - [Fix coding style (static analysis)](https://github.com/shaarli/Shaarli/issues/95) (#95) | ||
5 | - [Continuous Integration tools & features](https://github.com/shaarli/Shaarli/issues/130) (#130) | ||
6 | |||
7 | ### Usage | ||
8 | Static analysis tools can be installed with Composer, and used through Shaarli's [Makefile](https://github.com/shaarli/Shaarli/blob/master/Makefile). | ||
9 | |||
10 | For an overview of the available features, see: | ||
11 | |||
12 | - [Code quality: Makefile to run static code checkers](https://github.com/shaarli/Shaarli/pull/124) (#124) | ||
13 | - [Run PHPCS against different coding standards](https://github.com/shaarli/Shaarli/pull/276) (#276) | ||
diff --git a/doc/md/Troubleshooting.md b/doc/md/Troubleshooting.md index 01fd9840..e1ed5e00 100644 --- a/doc/md/Troubleshooting.md +++ b/doc/md/Troubleshooting.md | |||
@@ -1,5 +1,8 @@ | |||
1 | # Troubleshooting | 1 | # Troubleshooting |
2 | 2 | ||
3 | First of all, ensure that both the [web server](Server-configuration.md) and [Shaarli](Shaarli-configuration.md) are correctly configured. | ||
4 | |||
5 | |||
3 | ## Login | 6 | ## Login |
4 | 7 | ||
5 | ### I forgot my password! | 8 | ### I forgot my password! |
@@ -8,38 +11,48 @@ Delete the file `data/config.json.php` and display the page again. You will be a | |||
8 | 11 | ||
9 | ### I'm locked out - Login bruteforce protection | 12 | ### I'm locked out - Login bruteforce protection |
10 | 13 | ||
11 | Login form is protected against brute force attacks: 4 failed logins will ban the IP address from login for 30 minutes. Banned IPs can still browse links. | 14 | Login form is protected against brute force attacks: 4 failed logins will ban the IP address from login for 30 minutes. Banned IPs can still browse Shaares. |
12 | 15 | ||
13 | - To remove the current IP bans, delete the file `data/ipbans.php` | 16 | - To remove the current IP bans, delete the file `data/ipbans.php` |
14 | - To list all login attempts, see `data/log.txt` (succesful/failed logins, bans/lifted bans) | 17 | - To list all login attempts, see `data/log.txt` (succesful/failed logins, bans/lifted bans) |
15 | 18 | ||
19 | -------------------------------------- | ||
20 | |||
16 | ## Browser issues | 21 | ## Browser issues |
17 | 22 | ||
18 | ### Redirection issues (HTTP Referer) | 23 | ### Redirection issues (HTTP Referer) |
19 | 24 | ||
20 | Depending on its configuration and installed plugins, the browser may remove or alter (spoof) [HTTP referers](https://en.wikipedia.org/wiki/HTTP_referer), thus preventing Shaarli from properly redirecting between pages. Referer settings are available by browsing `about:config` and are documented [here](https://wiki.mozilla.org/Security/Referrer). `network.http.referer.spoofSource = true` in particular is known to break some functionality in Shaarli. | 25 | Shaarli relies on `HTTP_REFERER` for some functions (like redirects and clicking on tags). If you have disabled or altered/spoofed [HTTP referers](https://en.wikipedia.org/wiki/HTTP_referer) in your browser, some features of Shaarli may not work as expected (depending on configuration and installed plugins), notably redirections between pages. |
26 | |||
27 | Firefox Referer settings are available by browsing `about:config` and are documented [here](https://wiki.mozilla.org/Security/Referrer). `network.http.referer.spoofSource = true` in particular is known to break some functionality in Shaarli. | ||
28 | |||
21 | 29 | ||
22 | ### Firefox, localhost and redirections | 30 | ### Firefox, localhost and redirections |
23 | 31 | ||
24 | `localhost` is not a proper Fully Qualified Domain Name (FQDN); if Firefox has been set up to spoof referers, or only accept requests from the same base domain/host, | 32 | `localhost` is not a proper Fully Qualified Domain Name (FQDN); if Firefox has been set up to spoof referers, or only accept requests from the same base domain/host, |
25 | Shaarli redirections will not work properly. To solve this, assign a local domain to your host, e.g. `localhost.lan` in your [hosts file](https://en.wikipedia.org/wiki/Hosts_(file)) and browse Shaarli at http://localhost.lan/. | 33 | Shaarli redirections will not work properly. To solve this, assign a local domain to your host, e.g. `localhost.lan` in your [hosts file](https://en.wikipedia.org/wiki/Hosts_(file)) and browse Shaarli at http://localhost.lan/. |
26 | 34 | ||
35 | ----------------------------------------- | ||
36 | |||
27 | ## Hosting problems | 37 | ## Hosting problems |
28 | 38 | ||
29 | ### Old PHP versions | 39 | ### Old PHP versions |
30 | 40 | ||
31 | On **free.fr**: free.fr now supports php 5.6.x([link](http://les.pages.perso.chez.free.fr/migrations/php5v6.io)) | 41 | - On hosts (such as **free.fr**) which only support PHP 5.6, Shaarli [v0.10.4](https://github.com/shaarli/Shaarli/releases/tag/v0.10.4) is the maximum supported version. At the root of your webspace create a `sessions` directory and a `.htaccess` file containing: |
32 | and so support now the tag autocompletion but you have to do the following. | ||
33 | |||
34 | At the root of your webspace create a `sessions` directory and a `.htaccess` file containing: | ||
35 | 42 | ||
36 | ```xml | 43 | ```xml |
37 | <IfDefine Free> | 44 | <IfDefine Free> |
38 | php56 1 | 45 | php56 1 |
39 | </IfDefine> | 46 | </IfDefine> |
47 | <Files ".ht*"> | ||
48 | Order allow,deny | ||
49 | Deny from all | ||
50 | Satisfy all | ||
51 | </Files> | ||
52 | Options -Indexes | ||
40 | ``` | 53 | ``` |
41 | 54 | ||
42 | - If you have an error such as: `Parse error: syntax error, unexpected '=', expecting '(' in /links/index.php on line xxx`, it means that your host is using php4, not php5. Shaarli requires php 5.1. Try changing the file extension to `.php5` | 55 | - If you have an error such as: `Parse error: syntax error, unexpected '=', expecting '(' in /links/index.php on line xxx`, it means that your host is using PHP 4, not PHP 5. Shaarli requires PHP 5.1. Try changing the file extension to `.php5` |
43 | - On **1and1** : If you add the link from the page (and not from the bookmarklet), Shaarli will no be able to get the title of the page. You will have to enter it manually. (Because they have disabled the ability to download a file through HTTP). | 56 | - On **1and1** : If you add the link from the page (and not from the bookmarklet), Shaarli will no be able to get the title of the page. You will have to enter it manually. (Because they have disabled the ability to download a file through HTTP). |
44 | - If you have the error `Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /…/index.php on line xxx`, it means that your host has disabled the ability to fetch a file by HTTP in the php config (Typically in 1and1 hosting). Bad host. Change host. Or comment the following lines: | 57 | - If you have the error `Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /…/index.php on line xxx`, it means that your host has disabled the ability to fetch a file by HTTP in the php config (Typically in 1and1 hosting). Bad host. Change host. Or comment the following lines: |
45 | 58 | ||
@@ -49,9 +62,11 @@ php56 1 | |||
49 | //if (strpos($status,'200 OK')) $title=html_extract_title($data); | 62 | //if (strpos($status,'200 OK')) $title=html_extract_title($data); |
50 | ``` | 63 | ``` |
51 | 64 | ||
52 | - On hosts which forbid outgoing HTTP requests (such as free.fr), some thumbnails will not work. | 65 | - On hosts (such as **free.fr**) which forbid outgoing HTTP requests, some thumbnails will not work. |
66 | - On hosts (such as **free.fr**) which limit the number of FTP connections, setup your FTP client accordingly (else some files may be missing after upload). | ||
53 | - On **lost-oasis**, RSS doesn't work correctly, because of this message at the begining of the RSS/ATOM feed : `<? // tout ce qui est charge ici (generalement des includes et require) est charge en permanence. ?>`. To fix this, remove this message from `php-include/prepend.php` | 67 | - On **lost-oasis**, RSS doesn't work correctly, because of this message at the begining of the RSS/ATOM feed : `<? // tout ce qui est charge ici (generalement des includes et require) est charge en permanence. ?>`. To fix this, remove this message from `php-include/prepend.php` |
54 | 68 | ||
69 | |||
55 | ### Dates are not properly formatted | 70 | ### Dates are not properly formatted |
56 | 71 | ||
57 | Shaarli tries to sniff the language of the browser (using `HTTP_ACCEPT_LANGUAGE` headers) | 72 | Shaarli tries to sniff the language of the browser (using `HTTP_ACCEPT_LANGUAGE` headers) |
@@ -71,11 +86,118 @@ This can be caused by several things: | |||
71 | - You may be using OperaTurbo or OperaMini, which use their own proxies which may change from time to time. | 86 | - You may be using OperaTurbo or OperaMini, which use their own proxies which may change from time to time. |
72 | - If you have another application on the same webserver where Shaarli is installed, these application may forcefully expire php sessions. | 87 | - If you have another application on the same webserver where Shaarli is installed, these application may forcefully expire php sessions. |
73 | 88 | ||
89 | |||
74 | ### Old apache versions, Internal Server Error | 90 | ### Old apache versions, Internal Server Error |
75 | 91 | ||
76 | If you hosting provider only provides apache 2.2 and no support for `mod_version`, `.htaccess` files may cause 500 errors (Internal Server Error). See [this workaround](https://github.com/shaarli/Shaarli/issues/1196#issuecomment-412271085). | 92 | If you hosting provider only provides apache 2.2 and no support for `mod_version`, `.htaccess` files may cause 500 errors (Internal Server Error). See [this workaround](https://github.com/shaarli/Shaarli/issues/1196#issuecomment-412271085). |
77 | 93 | ||
78 | ## Sessions do not seem to work correctly on your server | 94 | |
95 | ### Sessions do not seem to work correctly on your server | ||
79 | 96 | ||
80 | Follow the instructions in the error message. Make sure you are accessing shaarli via a direct IP address or a proper hostname. If you have **no dots** in the hostname (e.g. `localhost` or `http://my-webserver/shaarli/`), some browsers will not store cookies at all (this respects the [HTTP cookie specification](http://curl.haxx.se/rfc/cookie_spec.html)). | 97 | Follow the instructions in the error message. Make sure you are accessing shaarli via a direct IP address or a proper hostname. If you have **no dots** in the hostname (e.g. `localhost` or `http://my-webserver/shaarli/`), some browsers will not store cookies at all (this respects the [HTTP cookie specification](http://curl.haxx.se/rfc/cookie_spec.html)). |
81 | 98 | ||
99 | ---------------------------------------------------------- | ||
100 | |||
101 | ## Upgrades | ||
102 | |||
103 | ### You must specify an integer as a key | ||
104 | |||
105 | In `v0.8.1` we changed how Shaare keys are handled (from timestamps to incremental integers). Take a look at `data/updates.txt` content. | ||
106 | |||
107 | |||
108 | ### `updates.txt` contains `updateMethodDatastoreIds` | ||
109 | |||
110 | Try to delete it and refresh your page while being logged in. | ||
111 | |||
112 | ### `updates.txt` doesn't exist or doesn't contain `updateMethodDatastoreIds` | ||
113 | |||
114 | 1. Create `data/updates.txt` if it doesn't exist | ||
115 | 2. Paste this string in the update file `;updateMethodRenameDashTags;` | ||
116 | 3. Login to Shaarli | ||
117 | 4. Delete the update file | ||
118 | 5. Refresh | ||
119 | |||
120 | |||
121 | |||
122 | -------------------------------------------------------- | ||
123 | |||
124 | ## Import/export | ||
125 | |||
126 | ### Importing shaarli data to Firefox | ||
127 | |||
128 | - In Firefox, open the bookmark manager (`Bookmarks menu > Show all bookmarks` or `Ctrl+Shift+B`), select `Import and Backup > Import bookmarks in HTML format` | ||
129 | - Make sure the `Prepend note permalinks with this Shaarli instance's URL` box is checked when exporting, so that text-only/notes Shaares still point to the Shaarli instance you exported them from. | ||
130 | - Depending on the number of bookmarks, the import can take some time. | ||
131 | |||
132 | You may be interested in these Firefox addons to manage bookmarks imported from Shaarli | ||
133 | |||
134 | - [Bookmark Deduplicator](https://addons.mozilla.org/en-US/firefox/addon/bookmark-deduplicator/) - provides an easy way to deduplicate your bookmarks | ||
135 | - [TagSieve](https://addons.mozilla.org/en-US/firefox/addon/tagsieve/) - browse your bookmarks by their tags | ||
136 | |||
137 | ### Diigo | ||
138 | |||
139 | If you export your bookmark from Diigo, make sure you use the Delicious export, not the Netscape export. (Their Netscape export is broken, and they don't seem to be interested in fixing it.) | ||
140 | |||
141 | ### Mister Wong | ||
142 | |||
143 | See [this issue](https://github.com/sebsauvage/Shaarli/issues/146) for import tweaks. | ||
144 | |||
145 | ### SemanticScuttle | ||
146 | |||
147 | To correctly import the tags from a [SemanticScuttle](http://semanticscuttle.sourceforge.net/) HTML export, edit the HTML file before importing and replace all occurences of `tags=` (lowercase) to `TAGS=` (uppercase). | ||
148 | |||
149 | ### Scuttle | ||
150 | |||
151 | Shaarli cannot import data directly from [Scuttle](https://github.com/scronide/scuttle). | ||
152 | |||
153 | However, you can use the third-party [scuttle-to-shaarli](https://github.com/q2apro/scuttle-to-shaarli) | ||
154 | tool to export the Scuttle database to the Netscape HTML format compatible with the Shaarli importer. | ||
155 | |||
156 | ### Refind.com | ||
157 | |||
158 | You can use the third-party tool [Derefind](https://github.com/ShawnPConroy/Derefind) to convert refind.com bookmark exports to a format that can be imported into Shaarli. | ||
159 | |||
160 | |||
161 | ------------------------------------------------------- | ||
162 | |||
163 | ## Other | ||
164 | |||
165 | ### The bookmarklet doesn't work | ||
166 | |||
167 | Websites which enforce Content Security Policy (CSP), such as github.com, disallow usage of bookmarklets. Unfortunately, there is nothing Shaarli can do about it ([1](https://github.com/shaarli/Shaarli/issues/196), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=866522), [3](https://code.google.com/p/chromium/issues/detail?id=233903). | ||
168 | |||
169 | Under Opera, you can't drag'n drop the button: You have to right-click on it and add a bookmark to your personal toolbar. | ||
170 | |||
171 | |||
172 | ### Changing the timestamp for a shaare | ||
173 | |||
174 | - Look for `<input type="hidden" name="lf_linkdate" value="{$link.linkdate}">` in `tpl/editlink.tpl` (line 14) | ||
175 | - Replace `type="hidden"` with `type="text"` from this line | ||
176 | - A new date/time field becomes available in the edit/new Shaare dialog. | ||
177 | - You can set the timestamp manually by entering it in the format `YYYMMDD_HHMMS`. | ||
178 | |||
179 | ### Clearing Shaarli caches | ||
180 | |||
181 | For debugging purposes: | ||
182 | |||
183 | ```bash | ||
184 | # clear raintpl cache and temporary files | ||
185 | find /var/www/links/cache/ /var/www/links/pagecache/ /var/www/links/tmp/ -type f -exec rm -v '{}' \; | ||
186 | # if you have a php accelerator such as php-apcu, restart the webserver | ||
187 | sudo systemctl restart apache2 | ||
188 | ``` | ||
189 | |||
190 | ------------------------------------------------------- | ||
191 | |||
192 | ## Support | ||
193 | |||
194 | If the solutions above did not help, please: | ||
195 | |||
196 | - Come and ask question on the [Gitter chat](https://gitter.im/shaarli/Shaarli) (also reachable via [IRC](https://irc.gitter.im/)) | ||
197 | - Search for [issues](https://github.com/shaarli/Shaarli/issues) and [Pull Requests](https://github.com/shaarli/Shaarli/pulls) | ||
198 | - if you find one that is related to the issue, feel free to comment and provide additional details (host/Shaarli setup...) | ||
199 | - check issues labeled [`feature`](https://github.com/shaarli/Shaarli/labels/feature), [`enhancement`](https://github.com/shaarli/Shaarli/labels/enhancement), and [`plugin`](https://github.com/shaarli/Shaarli/labels/plugin) if you would like a feature added to Shaarli. | ||
200 | - else, [open a new issue](https://github.com/shaarli/Shaarli/issues/new), and provide information about the problem: | ||
201 | - _what happens?_ - display glitches, invalid data, security flaws... | ||
202 | - _what is your configuration?_ - OS, server version, activated extensions, web browser... | ||
203 | - _is it reproducible?_ \ No newline at end of file | ||
diff --git a/doc/md/Unit-tests.md b/doc/md/Unit-tests.md deleted file mode 100644 index a9544656..00000000 --- a/doc/md/Unit-tests.md +++ /dev/null | |||
@@ -1,119 +0,0 @@ | |||
1 | The testing framework used is [PHPUnit](https://phpunit.de/); it can be installed with [Composer](https://getcomposer.org/), which is a dependency management tool. | ||
2 | |||
3 | ## Setup a testing environment | ||
4 | |||
5 | ### Install composer | ||
6 | |||
7 | You can either use: | ||
8 | |||
9 | - a system-wide version, e.g. installed through your distro's package manager (eg. `sudo apt install composer`) | ||
10 | - a local version, downloadable [here](https://getcomposer.org/download/). To update a local composer installation, run `php composer.phar self-update` | ||
11 | |||
12 | |||
13 | ### Install Shaarli development dependencies | ||
14 | |||
15 | ```bash | ||
16 | $ cd /path/to/shaarli | ||
17 | $ composer install | ||
18 | ``` | ||
19 | |||
20 | ### Install Xdebug | ||
21 | |||
22 | Xdebug must be installed and enable for PHPUnit to generate coverage reports. See http://xdebug.org/docs/install. | ||
23 | |||
24 | ```bash | ||
25 | # for Debian-based distributions | ||
26 | $ aptitude install php-xdebug | ||
27 | |||
28 | # for ArchLinux: | ||
29 | $ pacman -S xdebug | ||
30 | ``` | ||
31 | |||
32 | Then add the following line to `/etc/php/<PHP_VERSION>/cli/php.ini`: | ||
33 | |||
34 | ```ini | ||
35 | zend_extension=xdebug.so | ||
36 | ``` | ||
37 | |||
38 | ## Run unit tests | ||
39 | |||
40 | Run `make test` and ensure tests return `OK`. If tests return failures, refer to PHPUnit messages and fix your code/tests accordingly. | ||
41 | |||
42 | By default, PHPUnit will run all suitable tests found under the `tests` directory. Each test has 3 possible outcomes: | ||
43 | |||
44 | - `.` - success | ||
45 | - `F` - failure: the test was run but its results are invalid | ||
46 | - the code does not behave as expected | ||
47 | - dependencies to external elements: globals, session, cache... | ||
48 | - `E` - error: something went wrong and the tested code has crashed | ||
49 | - typos in the code, or in the test code | ||
50 | - dependencies to missing external elements | ||
51 | |||
52 | If Xdebug has been installed and activated, two coverage reports will be generated: | ||
53 | |||
54 | - a summary in the console | ||
55 | - a detailed HTML report with metrics for tested code | ||
56 | - to open it in a web browser: `firefox coverage/index.html &` | ||
57 | |||
58 | ### Executing specific tests | ||
59 | |||
60 | Add a [`@group`](https://phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group) annotation in a test class or method comment: | ||
61 | |||
62 | ```php | ||
63 | /** | ||
64 | * Netscape bookmark import | ||
65 | * @group WIP | ||
66 | */ | ||
67 | class BookmarkImportTest extends PHPUnit_Framework_TestCase | ||
68 | { | ||
69 | [...] | ||
70 | } | ||
71 | ``` | ||
72 | |||
73 | To run all tests annotated with `@group WIP`: | ||
74 | ```bash | ||
75 | $ vendor/bin/phpunit --group WIP tests/ | ||
76 | ``` | ||
77 | |||
78 | ### Running tests inside Docker containers | ||
79 | |||
80 | Test Dockerfiles are located under `tests/docker/<distribution>/Dockerfile`, | ||
81 | and can be used to build Docker images to run Shaarli test suites under common | ||
82 | Linux environments. | ||
83 | |||
84 | Dockerfiles are provided for the following environments: | ||
85 | |||
86 | - `alpine36` - [Alpine 3.6](https://www.alpinelinux.org/downloads/) | ||
87 | - `debian8` - [Debian 8 Jessie](https://www.debian.org/DebianJessie) (oldstable) | ||
88 | - `debian9` - [Debian 9 Stretch](https://wiki.debian.org/DebianStretch) (stable) | ||
89 | - `ubuntu16` - [Ubuntu 16.04 Xenial Xerus](http://releases.ubuntu.com/16.04/) (LTS) | ||
90 | |||
91 | What's behind the curtains: | ||
92 | |||
93 | - each image provides: | ||
94 | - a base Linux OS | ||
95 | - Shaarli PHP dependencies (OS packages) | ||
96 | - test PHP dependencies (OS packages) | ||
97 | - Composer | ||
98 | - the local workspace is mapped to the container's `/shaarli/` directory, | ||
99 | - the files are rsync'd so tests are run using a standard Linux user account | ||
100 | (running tests as `root` would bypass permission checks and may hide issues) | ||
101 | - the tests are run inside the container. | ||
102 | |||
103 | To run tests inside a Docker container: | ||
104 | |||
105 | ```bash | ||
106 | # build the Debian 9 Docker image for unit tests | ||
107 | $ cd /path/to/shaarli | ||
108 | $ cd tests/docker/debian9 | ||
109 | $ docker build -t shaarli-test:debian9 . | ||
110 | |||
111 | # install/update 3rd-party test dependencies | ||
112 | $ composer install --prefer-dist | ||
113 | |||
114 | # run tests using the freshly built image | ||
115 | $ docker run -v $PWD:/shaarli shaarli-test:debian9 docker_test | ||
116 | |||
117 | # run the full test campaign | ||
118 | $ docker run -v $PWD:/shaarli shaarli-test:debian9 docker_all_tests | ||
119 | ``` | ||
diff --git a/doc/md/Upgrade-and-migration.md b/doc/md/Upgrade-and-migration.md index d5682a34..bfef3e8c 100644 --- a/doc/md/Upgrade-and-migration.md +++ b/doc/md/Upgrade-and-migration.md | |||
@@ -1,96 +1,83 @@ | |||
1 | ## Preparation | 1 | # Upgrade and migration |
2 | 2 | ||
3 | ### Note your current version | 3 | ## Note your current version |
4 | 4 | ||
5 | If anything goes wrong, it's important for us to know which version you're upgrading from. | 5 | If anything goes wrong, it's important for us to know which version you're upgrading from. |
6 | The current version is present in the `shaarli_version.php` file. | 6 | The current version is present in the `shaarli_version.php` file. |
7 | 7 | ||
8 | ### Backup your data | ||
9 | 8 | ||
10 | Shaarli stores all user data under the `data` directory: | 9 | ## Backup your data |
11 | 10 | ||
12 | - `data/config.json.php` (or `data/config.php` for older Shaarli versions) - main configuration file | 11 | Shaarli stores all user data and [configuration](Shaarli-configuration.md) under the `data` directory. [Backup](Backup-and-restore.md) this repository _before_ upgrading Shaarli. You will need to restore it after the following upgrade steps. |
13 | - `data/datastore.php` - bookmarked links | ||
14 | - `data/ipbans.php` - banned IP addresses | ||
15 | - `data/updates.txt` - contains all automatic update to the configuration and datastore files already run | ||
16 | 12 | ||
17 | See [Shaarli configuration](Shaarli-configuration) for more information about Shaarli resources. | 13 | ```bash |
18 | 14 | sudo cp -r /var/www/shaarli.mydomain.org/data ~/shaarli-data-backup | |
19 | It is recommended to backup this repository _before_ starting updating/upgrading Shaarli: | 15 | ``` |
20 | |||
21 | - users with SSH access: copy or archive the directory to a temporary location | ||
22 | - users with FTP access: download a local copy of your Shaarli installation using your favourite client | ||
23 | 16 | ||
24 | ### Migrating data from a previous installation | 17 | ## Upgrading from ZIP archives |
25 | 18 | ||
26 | As all user data is kept under `data`, this is the only directory you need to worry about when migrating to a new installation, which corresponds to the following steps: | 19 | If you installed Shaarli from a [release ZIP archive](Installation.md#from-release-zip): |
27 | 20 | ||
28 | - backup the `data` directory | 21 | ```bash |
29 | - install or update Shaarli: | 22 | # Download the archive to the server, and extract it |
30 | - fresh installation - see [Download and Installation](Download-and-Installation) | 23 | cd ~ |
31 | - update - see the following sections | 24 | wget https://github.com/shaarli/Shaarli/releases/download/v0.X.Y/shaarli-v0.X.Y-full.zip |
32 | - check or restore the `data` directory | 25 | unzip shaarli-v0.X.Y-full.zip |
33 | 26 | ||
34 | ## Recommended : Upgrading from release archives | 27 | # overwrite your Shaarli installation with the new release **All data will be lost, see _Backup your data_ above.** |
28 | sudo rsync -avP --delete Shaarli/ /var/www/shaarli.mydomain.org/ | ||
35 | 29 | ||
36 | All tagged revisions can be downloaded as tarballs or ZIP archives from the [releases](https://github.com/shaarli/Shaarli/releases) page. | 30 | # restore file permissions as described on the installation page |
31 | sudo chown -R root:www-data /var/www/shaarli.mydomain.org | ||
32 | sudo chmod -R g+rX /var/www/shaarli.mydomain.org | ||
33 | sudo chmod -R g+rwX /var/www/shaarli.mydomain.org/{cache/,data/,pagecache/,tmp/} | ||
37 | 34 | ||
38 | We recommend that you use the latest release tarball with the `-full` suffix. It contains the dependencies, please read [Download and Installation](Download-and-Installation) for `git` complete instructions. | 35 | # restore backups of the data directory |
36 | sudo cp -r ~/shaarli-data-backup/* /var/www/shaarli.mydomain.org/data/ | ||
39 | 37 | ||
40 | Once downloaded, extract the archive locally and update your remote installation (e.g. via FTP) -be sure you keep the content of the `data` directory! | 38 | # If you use gettext mode for translations (not the default), reload your web server. |
39 | sudo systemctl restart apache2 | ||
40 | sudo systemctl restart nginx | ||
41 | ``` | ||
41 | 42 | ||
42 | If you use translations in gettext mode - meaning you manually changed the default mode -, | 43 | If you don't have shell access (eg. on shared hosting), backup the shaarli data directory, download the ZIP archive locally, extract it, upload it to the server using file transfer, and restore the data directory backup. |
43 | reload your web server. | ||
44 | 44 | ||
45 | After upgrading, access your fresh Shaarli installation from a web browser; the configuration and data store will then be automatically updated, and new settings added to `data/config.json.php` (see [Shaarli configuration](Shaarli configuration) for more details). | 45 | Access your fresh Shaarli installation from a web browser; the configuration and data store will then be automatically updated, and new settings added to `data/config.json.php` (see [Shaarli configuration](Shaarli-configuration.md) for more details). |
46 | 46 | ||
47 | ## Upgrading with Git | ||
48 | 47 | ||
49 | ### Updating a community Shaarli | 48 | ## Upgrading from Git |
50 | 49 | ||
51 | If you have installed Shaarli from the [community Git repository](Download#clone-with-git-recommended), simply [pull new changes](https://www.git-scm.com/docs/git-pull) from your local clone: | 50 | If you have installed Shaarli [from sources](Installation.md#from-sources): |
52 | 51 | ||
53 | ```bash | 52 | ```bash |
54 | $ cd /path/to/shaarli | 53 | # pull new changes from your local clone |
55 | $ git pull | 54 | cd /var/www/shaarli.mydomain.org/ |
56 | 55 | sudo git pull | |
57 | From github.com:shaarli/Shaarli | ||
58 | * branch master -> FETCH_HEAD | ||
59 | Updating ebd67c6..521f0e6 | ||
60 | Fast-forward | ||
61 | application/Url.php | 1 + | ||
62 | shaarli_version.php | 2 +- | ||
63 | tests/Url/UrlTest.php | 1 + | ||
64 | 3 files changed, 3 insertions(+), 1 deletion(-) | ||
65 | ``` | ||
66 | 56 | ||
67 | Shaarli >= `v0.8.x`: install/update third-party PHP dependencies using [Composer](https://getcomposer.org/): | 57 | # update PHP dependencies (Shaarli >= v0.8) |
58 | sudo composer install --no-dev | ||
68 | 59 | ||
69 | ```bash | 60 | # update translations (Shaarli >= v0.9.2) |
70 | $ composer install --no-dev | 61 | sudo make translate |
71 | 62 | ||
72 | Loading composer repositories with package information | 63 | # If you use translations in gettext mode (not the default), reload your web server. |
73 | Updating dependencies | 64 | sudo systemctl reload apache |
74 | - Installing shaarli/netscape-bookmark-parser (v1.0.1) | 65 | sudo systemctl reload nginx |
75 | Downloading: 100% | ||
76 | ``` | ||
77 | 66 | ||
78 | Shaarli >= `v0.9.2` supports translations: | 67 | # update front-end dependencies (Shaarli >= v0.10.0) |
68 | sudo make build_frontend | ||
79 | 69 | ||
80 | ```bash | 70 | # restore file permissions as described on the installation page |
81 | $ make translate | 71 | sudo chown -R root:www-data /var/www/shaarli.mydomain.org |
82 | ``` | 72 | sudo chmod -R g+rX /var/www/shaarli.mydomain.org |
73 | sudo chmod -R g+rwX /var/www/shaarli.mydomain.org/{cache/,data/,pagecache/,tmp/} | ||
74 | ``` | ||
83 | 75 | ||
84 | If you use translations in gettext mode, reload your web server. | 76 | Access your fresh Shaarli installation from a web browser; the configuration and data store will then be automatically updated, and new settings added to `data/config.json.php` (see [Shaarli configuration](Shaarli-configuration.md) for more details). |
85 | 77 | ||
86 | Shaarli >= `v0.10.0` manages its front-end dependencies with nodejs. You need to install | 78 | --------------------------------------------------------------- |
87 | [yarn](https://yarnpkg.com/lang/en/docs/install/): | ||
88 | 79 | ||
89 | ```bash | 80 | ## Migrating and upgrading from Sebsauvage's repository |
90 | $ make build_frontend | ||
91 | ``` | ||
92 | |||
93 | ### Migrating and upgrading from Sebsauvage's repository | ||
94 | 81 | ||
95 | If you have installed Shaarli from [Sebsauvage's original Git repository](https://github.com/sebsauvage/Shaarli), you can use [Git remotes](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes) to update your working copy. | 82 | If you have installed Shaarli from [Sebsauvage's original Git repository](https://github.com/sebsauvage/Shaarli), you can use [Git remotes](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes) to update your working copy. |
96 | 83 | ||
@@ -104,7 +91,7 @@ The following guide assumes that: | |||
104 | - no versioned file has been locally modified | 91 | - no versioned file has been locally modified |
105 | - no untracked files are present | 92 | - no untracked files are present |
106 | 93 | ||
107 | #### Step 0: show repository information | 94 | ### Step 0: show repository information |
108 | 95 | ||
109 | ```bash | 96 | ```bash |
110 | $ cd /path/to/shaarli | 97 | $ cd /path/to/shaarli |
@@ -122,7 +109,7 @@ Your branch is up-to-date with 'origin/master'. | |||
122 | nothing to commit, working directory clean | 109 | nothing to commit, working directory clean |
123 | ``` | 110 | ``` |
124 | 111 | ||
125 | #### Step 1: update Git remotes | 112 | ### Step 1: update Git remotes |
126 | 113 | ||
127 | ``` | 114 | ``` |
128 | $ git remote rename origin sebsauvage | 115 | $ git remote rename origin sebsauvage |
@@ -146,7 +133,7 @@ From https://github.com/shaarli/Shaarli | |||
146 | * [new tag] v0.7.0 -> v0.7.0 | 133 | * [new tag] v0.7.0 -> v0.7.0 |
147 | ``` | 134 | ``` |
148 | 135 | ||
149 | #### Step 2: use the stable community branch | 136 | ### Step 2: use the stable community branch |
150 | 137 | ||
151 | ```bash | 138 | ```bash |
152 | $ git checkout origin/stable -b stable | 139 | $ git checkout origin/stable -b stable |
@@ -177,8 +164,7 @@ $ make translate | |||
177 | 164 | ||
178 | If you use translations in gettext mode, reload your web server. | 165 | If you use translations in gettext mode, reload your web server. |
179 | 166 | ||
180 | Shaarli >= `v0.10.0` manages its front-end dependencies with nodejs. You need to install | 167 | Shaarli >= `v0.10.0` manages its front-end dependencies with nodejs. You need to install [yarn](https://yarnpkg.com/lang/en/docs/install/): |
181 | [yarn](https://yarnpkg.com/lang/en/docs/install/): | ||
182 | 168 | ||
183 | ```bash | 169 | ```bash |
184 | $ make build_frontend | 170 | $ make build_frontend |
@@ -204,30 +190,14 @@ Writing objects: 100% (3317/3317), done. | |||
204 | Total 3317 (delta 2050), reused 3301 (delta 2034)to | 190 | Total 3317 (delta 2050), reused 3301 (delta 2034)to |
205 | ``` | 191 | ``` |
206 | 192 | ||
207 | #### Step 3: configuration | 193 | ### Step 3: configuration |
208 | 194 | ||
209 | After migrating, access your fresh Shaarli installation from a web browser; the | 195 | After migrating, access your fresh Shaarli installation from a web browser; the |
210 | configuration will then be automatically updated, and new settings added to | 196 | configuration will then be automatically updated, and new settings added to |
211 | `data/config.json.php` (see [Shaarli configuration](Shaarli-configuration) for more | 197 | `data/config.json.php` (see [Shaarli configuration](Shaarli-configuration.md) for more |
212 | details). | 198 | details). |
213 | 199 | ||
214 | ## Troubleshooting | 200 | ## Troubleshooting |
215 | 201 | ||
216 | If the solutions provided here don't work, please open an issue specifying which version you're upgrading from and to. | 202 | If the solutions provided here don't work, see [Troubleshooting](Troubleshooting.md) and/or open an issue specifying which version you're upgrading from and to. |
217 | |||
218 | ### You must specify an integer as a key | ||
219 | |||
220 | In `v0.8.1` we changed how link keys are handled (from timestamps to incremental integers). | ||
221 | Take a look at `data/updates.txt` content. | ||
222 | |||
223 | #### `updates.txt` contains `updateMethodDatastoreIds` | ||
224 | |||
225 | Try to delete it and refresh your page while being logged in. | ||
226 | |||
227 | #### `updates.txt` doesn't exist or doesn't contain `updateMethodDatastoreIds` | ||
228 | 203 | ||
229 | 1. Create `data/updates.txt` if it doesn't exist | ||
230 | 2. Paste this string in the update file `;updateMethodRenameDashTags;` | ||
231 | 3. Login to Shaarli | ||
232 | 4. Delete the update file | ||
233 | 5. Refresh | ||
diff --git a/doc/md/Usage.md b/doc/md/Usage.md new file mode 100644 index 00000000..6dadde0a --- /dev/null +++ b/doc/md/Usage.md | |||
@@ -0,0 +1,111 @@ | |||
1 | ## Features | ||
2 | |||
3 | For any item posted to Shaarli (called a _Shaare_), you can customize the following aspects: | ||
4 | |||
5 | - URL to link to | ||
6 | - Title | ||
7 | - Free-text description | ||
8 | - Tags | ||
9 | - Public/private status | ||
10 | |||
11 | |||
12 | ### Adding/editing Shaares | ||
13 | |||
14 | While logged in to your Shaarli, you can add, edit or delete Shaares: | ||
15 | |||
16 | - Using the **+Shaare** button: enter the URL you want to share, click `Add link`, fill in the details of your Shaare, and `Save` | ||
17 | - Using the [Bookmarklet](https://en.wikipedia.org/wiki/Bookmarklet): drag the `✚Shaare link` button from the `Tools` page to your browser's bookmarks bar, click it to share the current page. | ||
18 | - Using [apps and browser addons](Community-and-related-software.md#mobile-apps) | ||
19 | - Using the [REST API](https://shaarli.github.io/api-documentation/) | ||
20 | - Any Shaare can edited by clicking its ![](images/edit_icon.png) `Edit` button. | ||
21 | |||
22 | |||
23 | ### Tags | ||
24 | |||
25 | Tags can be be used to organize and categorize your Shaares: | ||
26 | |||
27 | - You can rename, merge and delete tags from the _Tools_ menu or the [tag cloud/list](#tag-cloud) | ||
28 | - Tags are auto-completed (from the list of existing tags) in all dialogs | ||
29 | - Tags can be combined with text in [search](#search) queries | ||
30 | |||
31 | |||
32 | ### Public/private Shaares | ||
33 | |||
34 | Additional filter buttons can be found at the top left of the Shaare list **only when logged in**: | ||
35 | |||
36 | - **Only show private Shaares:** Private shares can be searched by clicking the `only show private links` toggle button top left of the Shaares list (only when logged in) | ||
37 | |||
38 | |||
39 | ### Permalinks | ||
40 | |||
41 | Permalinks are fixed, short links attached to each Shaare. Editing a Shaare will not change it's permalink, each permalink always points to the latest revision of a Shaare. | ||
42 | |||
43 | |||
44 | ### Text-only (note) Shaares | ||
45 | |||
46 | Shaarli can be used as a minimal blog, notepad, pastebin...: While adding or editing a Shaare, leave the URL field blank to create a text-only ("note") post. This allows you to post any kind of text content, such as blog articles, private or public notes, snippets... There is no character limit! You can access your post from its permalink. | ||
47 | |||
48 | |||
49 | ### Search | ||
50 | |||
51 | - **Plain text search:** Use `Search text` to search in all fields of all Shaares (Title, URL, Description...). Use double-quotes (example `"exact search"`) to search for the exact expression. | ||
52 | - **Tags search:** `Filter by tags` allow only displaying Shaares tagged with one or multiple tags (use space to separate tags). | ||
53 | - **Hidden tags:** tags starting with a dot `.` (example `.secret`) are private. They can only be seen and searched when logged in. | ||
54 | - **Exclude text/tags:** Use the `-` operator before a word or tag to exclude Shaares matching this word from search results (`NOT` operator). | ||
55 | - **Untagged links:** Shaares without tags can be searched by clicking the `untagged` toggle button top left of the Shaares list (only when logged in). | ||
56 | |||
57 | Both exclude patterns and exact searches can be combined with normal searches (example `"exact search" term otherterm -notthis "very exact" stuff -notagain`). Only AND (and NOT) search is currrently supported. | ||
58 | |||
59 | Active search terms are displayed on top of the link list. To remove terms/tags from the curent search, click the `x` next to any of them, or simply clear text/tag search fields. | ||
60 | |||
61 | |||
62 | ### Tag cloud | ||
63 | |||
64 | The `Tag cloud` page diplays a "cloud" or list view of all tags in your Shaarli (most frequently used tags are displayed with a bigger font size) | ||
65 | |||
66 | |||
67 | - **Tags list:** click on `Most used` or `Alphabetical` to display tags as a list. You can also edit/delete tags for this page. | ||
68 | - Click on any tag to search all Shaares matching this tag. | ||
69 | - **Filtering the tag cloud/list:** Click on the counter next to a tag to show other tags of Shaares with this tag. Repeat this any number of times to further filter the tag cloud. Click `List all links with those tags` to display Shaares matching your current tag filter set. | ||
70 | |||
71 | |||
72 | |||
73 | ### RSS feeds | ||
74 | |||
75 | RSS/ATOM feeds feeds are available (in ATOM with `/feed/atom` and RSS with `/feed/rss`) | ||
76 | |||
77 | - **Filtering RSS feeds:** RSS feeds and picture wall can also be restricted to only return items matching a text/tag search. For example, search for `photography` (text or tags) in Shaarli, then click the `RSS Feed` button. A feed with only matching results is displayed. | ||
78 | - Add the `&nb` parameter in feed URLs to specify the number of Shaares you want in a feed (default if not specified: `50`). The keyword `all` is available if you want everything. | ||
79 | - Add the `&permalinks` parameter in feed URLs to point permalinks to the corresponding shaarly entry/link instead of the direct, Shaare URL attribute | ||
80 | |||
81 | ![](images/rss-filter-1.png) ![](images/rss-filter-2.png) | ||
82 | |||
83 | ```bash | ||
84 | # examples | ||
85 | https://shaarli.mydomain.org/feed/atom?permalinks | ||
86 | https://shaarli.mydomain.org/feed/atom?permalinks&nb=42 | ||
87 | https://shaarli.mydomain.org/feed/atom?permalinks&nb=all | ||
88 | https://shaarli.mydomain.org/feed/rss?searchtags=nature | ||
89 | https://shaarli.mydomain.org/links/picture-wall?searchterm=poney | ||
90 | ``` | ||
91 | |||
92 | |||
93 | ### Picture wall | ||
94 | |||
95 | - The picture wall can be filtered by text or tags search in the same way as [RSS feeds](#rss-feeds) | ||
96 | |||
97 | |||
98 | ### Import/export | ||
99 | |||
100 | To **export Shaares as a HTML file**, under _Tools > Export_, choose: | ||
101 | |||
102 | - `Export all` to export both public and private Shaares | ||
103 | - `Export public` to export public Shaares only | ||
104 | - `Export private` to export private Shaares only | ||
105 | |||
106 | Restore by using the `Import` feature. | ||
107 | |||
108 | - These exports contain the full data (URL, title, tags, date, description, public/private status of your Shaares) | ||
109 | - They can also be imported to your web browser bookmarks. | ||
110 | |||
111 | To **import a HTML bookmarks file** exported from your browser, just use the `Import` feature. For each "folder" in the bookmarks you imported, a new tag will be created (for example a bookmark in `Movies > Sci-fi` folder will be tagged `Movies` `Sci-fi`). | ||
diff --git a/doc/md/dev/Development.md b/doc/md/dev/Development.md new file mode 100644 index 00000000..5c085e03 --- /dev/null +++ b/doc/md/dev/Development.md | |||
@@ -0,0 +1,179 @@ | |||
1 | # Development | ||
2 | |||
3 | Please read [Contributing to Shaarli](https://github.com/shaarli/Shaarli/tree/master/CONTRIBUTING.md) | ||
4 | |||
5 | ## Guidelines | ||
6 | |||
7 | |||
8 | - [Unit tests](Unit-tests) | ||
9 | - Javascript linting - Shaarli uses [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript). | ||
10 | Run `make eslint` to check JS style. | ||
11 | - [GnuPG signature](GnuPG-signature) for tags/releases | ||
12 | |||
13 | |||
14 | ## Third-party libraries | ||
15 | |||
16 | CSS: | ||
17 | |||
18 | - Yahoo UI [CSS Reset](http://yuilibrary.com/yui/docs/cssreset/) - standardize cross-browser rendering | ||
19 | |||
20 | Javascript: | ||
21 | |||
22 | - [Awesomeplete](https://leaverou.github.io/awesomplete/) ([GitHub](https://github.com/LeaVerou/awesomplete)) - autocompletion in input forms | ||
23 | - [bLazy](http://dinbror.dk/blazy/) ([GitHub](https://github.com/dinbror/blazy)) - lazy loading for thumbnails | ||
24 | - [qr.js](http://neocotic.com/qr.js/) ([GitHub](https://github.com/neocotic/qr.js)) - QR code generation | ||
25 | |||
26 | PHP (managed through [`composer.json`](https://github.com/shaarli/Shaarli/blob/master/composer.json)): | ||
27 | |||
28 | - [RainTPL](https://github.com/rainphp/raintpl) - HTML templating for PHP | ||
29 | - [`shaarli/netscape-bookmark-parser`](https://packagist.org/packages/shaarli/netscape-bookmark-parser) - Import bookmarks from Netscape files | ||
30 | - [`erusev/parsedown`](https://packagist.org/packages/erusev/parsedown) - Parse MarkDown syntax for the MarkDown plugin | ||
31 | - [`slim/slim`](https://packagist.org/packages/slim/slim) - Handle routes and middleware for the REST API | ||
32 | - [`ArthurHoaro/web-thumbnailer`](https://github.com/ArthurHoaro/web-thumbnailer) - PHP library which will retrieve a thumbnail for any given URL | ||
33 | - [`pubsubhubbub/publisher`](https://github.com/pubsubhubbub/php-publisher) - A PubSubHubbub publisher module for PHP. | ||
34 | - [`gettext/gettext`](https://github.com/php-gettext/Gettext) - PHP library to collect and manipulate gettext (.po, .mo, .php, .json, etc) | ||
35 | |||
36 | |||
37 | ## Security | ||
38 | |||
39 | - The password is salted, hashed and stored in the data subdirectory, in a PHP file, and protected by htaccess. Even if the webserver does not support htaccess, the hash is not readable by URL. Even if the .php file is stolen, the password cannot deduced from the hash. The salt prevents rainbow-tables attacks. | ||
40 | - Directories are protected using `.htaccess` files | ||
41 | - Forms are protected against [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery): | ||
42 | - Forms which act on data (save,delete…) contain a token generated by the server. | ||
43 | - Any posted form which does not contain a valid token is rejected. | ||
44 | - Any token can only be used once. | ||
45 | - Tokens are attached to the session and cannot be reused in another session. | ||
46 | - Sessions automatically expire after 60 minutes. | ||
47 | - Sessions are protected against hijacking: the session ID cannot be used from a different IP address. | ||
48 | - Links are stored as an associative array which is serialized, compressed (with deflate), base64-encoded and saved as a comment in a `.php` file - even if the server does not support `.htaccess` files, the data file will still not be readable by URL. | ||
49 | - Bruteforce protection: Successful and failed login attempts are logged - IP bans are enforced after a configurable amount of failures. Logs can also be used consumed by [fail2ban](../Server-configuration.md#fail2ban) | ||
50 | - A pop-up notification is shown when a new release is available. | ||
51 | |||
52 | ## Link structure | ||
53 | |||
54 | Every link available through the `LinkDB` object is represented as an array | ||
55 | containing the following fields: | ||
56 | |||
57 | * `id` (integer): Unique identifier. | ||
58 | * `title` (string): Title of the link. | ||
59 | * `url` (string): URL of the link. Used for displayable links (without redirector, url encoding, etc.). | ||
60 | Can be absolute or relative for Notes. | ||
61 | * `real_url` (string): Real destination URL, can be redirected, encoded, etc. | ||
62 | * `shorturl` (string): Permalink small hash. | ||
63 | * `description` (string): Link text description. | ||
64 | * `private` (boolean): whether the link is private or not. | ||
65 | * `tags` (string): all link tags separated by a single space | ||
66 | * `thumbnail` (string|boolean): relative path of the thumbnail cache file, or false if there isn't any. | ||
67 | * `created` (DateTime): link creation date time. | ||
68 | * `updated` (DateTime): last modification date time. | ||
69 | |||
70 | Small hashes are used to make a link to an entry in Shaarli. They are unique: the date of the item (eg. `20110923_150523`) is hashed with CRC32, then converted to base64 and some characters are replaced. They are always 6 characters longs and use only `A-Z a-z 0-9 - _` and `@`. | ||
71 | |||
72 | |||
73 | ## Directory structure | ||
74 | |||
75 | Here is the directory structure of Shaarli and the purpose of the different files: | ||
76 | |||
77 | ```bash | ||
78 | index.php # Main program | ||
79 | application/ # Shaarli classes | ||
80 | ├── LinkDB.php | ||
81 | |||
82 | ... | ||
83 | |||
84 | └── Utils.php | ||
85 | tests/ # Shaarli unitary & functional tests | ||
86 | ├── LinkDBTest.php | ||
87 | |||
88 | ... | ||
89 | |||
90 | ├── utils # utilities to ease testing | ||
91 | │ └── ReferenceLinkDB.php | ||
92 | └── UtilsTest.php | ||
93 | assets/ | ||
94 | ├── common/ # Assets shared by multiple themes | ||
95 | ├── ... | ||
96 | ├── default/ # Assets for the default template, before compilation | ||
97 | ├── fonts/ # Font files | ||
98 | ├── img/ # Images used by the default theme | ||
99 | ├── js/ # JavaScript files in ES6 syntax | ||
100 | ├── scss/ # SASS files | ||
101 | └── vintage/ # Assets for the vintage template, before compilation | ||
102 | └── ... | ||
103 | COPYING # Shaarli license | ||
104 | inc/ # static assets and 3rd party libraries | ||
105 | └── rain.tpl.class.php # RainTPL templating library | ||
106 | images/ # Images and icons used in Shaarli | ||
107 | data/ # data storage: bookmark database, configuration, logs, banlist... | ||
108 | ├── config.json.php # Shaarli configuration (login, password, timezone, title...) | ||
109 | ├── datastore.php # Your link database (compressed). | ||
110 | ├── ipban.php # IP address ban system data | ||
111 | ├── lastupdatecheck.txt # Update check timestamp file | ||
112 | └── log.txt # login/IPban log. | ||
113 | tpl/ # RainTPL templates for Shaarli. They are used to build the pages. | ||
114 | ├── default/ # Default Shaarli theme | ||
115 | ├── fonts/ # Font files | ||
116 | ├── img/ # Images | ||
117 | ├── js/ # JavaScript files compiled by Babel and compatible with all browsers | ||
118 | ├── css/ # CSS files compiled with SASS | ||
119 | └── vintage/ # Legacy Shaarli theme | ||
120 | └── ... | ||
121 | cache/ # thumbnails cache | ||
122 | # This directory is automatically created. You can erase it anytime you want. | ||
123 | tmp/ # Temporary directory for compiled RainTPL templates. | ||
124 | # This directory is automatically created. You can erase it anytime you want. | ||
125 | vendor/ # Third-party dependencies. This directory is created by Composer | ||
126 | ``` | ||
127 | |||
128 | Shaarli needs read access to: | ||
129 | |||
130 | - the root index.php file | ||
131 | - the `application/`, `plugins/` and `inc/` directories (recursively) | ||
132 | |||
133 | Shaarli needs read/write access to the `cache/`, `data/`, `pagecache/`, and `tmp/` directories | ||
134 | |||
135 | |||
136 | ## Automation | ||
137 | |||
138 | A [`Makefile`](https://github.com/shaarli/Shaarli/blob/master/Makefile) is available to perform project-related operations: | ||
139 | |||
140 | - [Static analysis](#Static-analysis) - check that the code is compliant to PHP conventions | ||
141 | - [Unit tests](#Unit-tests) - ensure there are no regressions introduced by new commits | ||
142 | - Documentation - generate a local HTML copy of the markdown documentation | ||
143 | |||
144 | ### Continuous Integration | ||
145 | |||
146 | [Travis CI](http://docs.travis-ci.com/) is a Continuous Integration build server, that runs a build: | ||
147 | |||
148 | - each time a commit is merged to the mainline (`master` branch) | ||
149 | - each time a Pull Request is submitted or updated | ||
150 | |||
151 | After all jobs have finished, Travis returns the results to GitHub: | ||
152 | |||
153 | - a status icon represents the result for the `master` branch: [![](https://api.travis-ci.org/shaarli/Shaarli.svg)](https://travis-ci.org/shaarli/Shaarli) | ||
154 | - Pull Requests are updated with the Travis build result. | ||
155 | |||
156 | See [`.travis.yml`](https://github.com/shaarli/Shaarli/blob/master/.travis.yml). | ||
157 | |||
158 | |||
159 | ### Documentation | ||
160 | |||
161 | [mkdocs](https://www.mkdocs.org/) is used to convert markdown documentation to HTML pages. The [public documentation](https://shaarli.readthedocs.io/en/master/) website is rendered and hosted by [readthedocs.org](https://readthedocs.org/). A copy of the documentation is also included in prebuilt [release archives](https://github.com/shaarli/Shaarli/releases) (`doc/html/` path in your Shaarli installation). To generate the HTML documentation locally, install a recent version of Python `setuptools` and run `make doc`. | ||
162 | |||
163 | |||
164 | ## Static analysis | ||
165 | |||
166 | Patches should try to stick to the [PHP Standard Recommendations](http://www.php-fig.org/psr/) (PSR), especially: | ||
167 | |||
168 | - [PSR-1](http://www.php-fig.org/psr/psr-1/) - Basic Coding Standard | ||
169 | - [PSR-2](http://www.php-fig.org/psr/psr-2/) - Coding Style Guide | ||
170 | |||
171 | |||
172 | **Work in progress:** Static analysis is currently being discussed here: in [#95 - Fix coding style (static analysis)](https://github.com/shaarli/Shaarli/issues/95), [#130 - Continuous Integration tools & features](https://github.com/shaarli/Shaarli/issues/130) | ||
173 | |||
174 | Static analysis tools can be installed with Composer, and used through Shaarli's [Makefile](https://github.com/shaarli/Shaarli/blob/master/Makefile). | ||
175 | |||
176 | For an overview of the available features, see: | ||
177 | |||
178 | - [Code quality: Makefile to run static code checkers](https://github.com/shaarli/Shaarli/pull/124) (#124) | ||
179 | - [Run PHPCS against different coding standards](https://github.com/shaarli/Shaarli/pull/276) (#276) | ||
diff --git a/doc/md/GnuPG-signature.md b/doc/md/dev/GnuPG-signature.md index d1fc10a5..25578001 100644 --- a/doc/md/GnuPG-signature.md +++ b/doc/md/dev/GnuPG-signature.md | |||
@@ -1,24 +1,16 @@ | |||
1 | ## Introduction | 1 | ## Introduction |
2 | ### PGP and GPG | 2 | ### PGP and GPG |
3 | [Gnu Privacy Guard](https://gnupg.org/) (GnuPG) is an Open Source implementation of the | 3 | [Gnu Privacy Guard](https://gnupg.org/) (GnuPG) is an Open Source implementation of the [Pretty Good Privacy](https://en.wikipedia.org/wiki/Pretty_Good_Privacy#OpenPGP) (OpenPGP) specification. Its main purposes are digital authentication, signature and encryption. It is often used by the [FLOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) community to verify: |
4 | [Pretty Good Privacy](https://en.wikipedia.org/wiki/Pretty_Good_Privacy#OpenPGP) | ||
5 | (OpenPGP) specification. Its main purposes are digital authentication, signature and encryption. | ||
6 | 4 | ||
7 | It is often used by the [FLOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) community to verify: | 5 | - Linux package signatures: Debian [SecureApt](https://wiki.debian.org/SecureApt), ArchLinux [Master Keys](https://www.archlinux.org/master-keys/) |
6 | - [Version control](https://en.wikipedia.org/wiki/Revision_control) releases & maintainer identity | ||
8 | 7 | ||
9 | - Linux package signatures: Debian [SecureApt](https://wiki.debian.org/SecureApt), ArchLinux [Master | 8 | > You MUST understand that presence of data in the keyserver (pools) in no way connotes trust. Anyone can generate a key, with any name or email address, and upload it. All security and trust comes from evaluating security at the “object level”, via PGP [Web of trust](https://en.wikipedia.org/wiki/Web_of_trust) signatures. This keyserver makes it possible to retrieve keys, looking them up via various indices, but the collection of keys in this public pool is KNOWN to contain malicious and fraudulent keys. It is the common expectation of server operators that users understand this and use software which, like all known common OpenPGP implementations, evaluates trust accordingly. This expectation is so common that it is not normally explicitly stated. |
10 | Keys](https://www.archlinux.org/master-keys/) | ||
11 | - [SCM](https://en.wikipedia.org/wiki/Revision_control) releases & maintainer identity | ||
12 | 9 | ||
13 | ### Trust | 10 | -- Phil Pennock (author of the [SKS](https://bitbucket.org/skskeyserver/sks-keyserver/wiki/Home) key server - http://sks.spodhuis.org/) |
14 | To quote Phil Pennock (the author of the [SKS](https://bitbucket.org/skskeyserver/sks-keyserver/wiki/Home) key server - http://sks.spodhuis.org/): | ||
15 | 11 | ||
16 | > You MUST understand that presence of data in the keyserver (pools) in no way connotes trust. Anyone can generate a key, with any name or email address, and upload it. All security and trust comes from evaluating security at the “object level”, via PGP Web-Of-Trust signatures. This keyserver makes it possible to retrieve keys, looking them up via various indices, but the collection of keys in this public pool is KNOWN to contain malicious and fraudulent keys. It is the common expectation of server operators that users understand this and use software which, like all known common OpenPGP implementations, evaluates trust accordingly. This expectation is so common that it is not normally explicitly stated. | 12 | Trust can be gained by having your key signed by other people (and signing their key back, too :) ), for instance during [key signing parties](https://en.wikipedia.org/wiki/Key_signing_party): [Keysigning party HOWTO](http://www.cryptnet.net/fdp/crypto/keysigning_party/en/keysigning_party.html), |
17 | 13 | ||
18 | Trust can be gained by having your key signed by other people (and signing their key back, too :) ), for instance during [key signing parties](https://en.wikipedia.org/wiki/Key_signing_party), see: | ||
19 | |||
20 | - [The Keysigning party HOWTO](http://www.cryptnet.net/fdp/crypto/keysigning_party/en/keysigning_party.html) | ||
21 | - [Web of trust](https://en.wikipedia.org/wiki/Web_of_trust) | ||
22 | 14 | ||
23 | ## Generate a GPG key | 15 | ## Generate a GPG key |
24 | - [Generating a GPG key for Git tagging](http://stackoverflow.com/a/16725717) (StackOverflow) | 16 | - [Generating a GPG key for Git tagging](http://stackoverflow.com/a/16725717) (StackOverflow) |
diff --git a/doc/md/Plugin-System.md b/doc/md/dev/Plugin-system.md index f264e873..c29774de 100644 --- a/doc/md/Plugin-System.md +++ b/doc/md/dev/Plugin-system.md | |||
@@ -1,19 +1,16 @@ | |||
1 | [**I am a developer: ** Developer API](#developer-api) | 1 | # Plugin system |
2 | |||
3 | [**I am a template designer: ** Guide for template designers](#guide-for-template-designer) | ||
4 | |||
5 | --- | ||
6 | 2 | ||
7 | ## Developer API | 3 | ## Developer API |
8 | 4 | ||
9 | ### What can I do with plugins? | 5 | ### What can I do with plugins? |
10 | 6 | ||
11 | The plugin system let you: | 7 | The plugin system lets you: |
12 | 8 | ||
13 | - insert content into specific places across templates. | 9 | - insert content into specific places across templates. |
14 | - alter data before templates rendering. | 10 | - alter data before templates rendering. |
15 | - alter data before saving new links. | 11 | - alter data before saving new links. |
16 | 12 | ||
13 | |||
17 | ### How can I create a plugin for Shaarli? | 14 | ### How can I create a plugin for Shaarli? |
18 | 15 | ||
19 | First, chose a plugin name, such as `demo_plugin`. | 16 | First, chose a plugin name, such as `demo_plugin`. |
@@ -30,6 +27,7 @@ You should have the following tree view: | |||
30 | | |---| demo_plugin.php | 27 | | |---| demo_plugin.php |
31 | ``` | 28 | ``` |
32 | 29 | ||
30 | |||
33 | ### Plugin initialization | 31 | ### Plugin initialization |
34 | 32 | ||
35 | At the beginning of Shaarli execution, all enabled plugins are loaded. At this point, the plugin system looks for an `init()` function in the <plugin_name>.php to execute and run it if it exists. This function must be named this way, and takes the `ConfigManager` as parameter. | 33 | At the beginning of Shaarli execution, all enabled plugins are loaded. At this point, the plugin system looks for an `init()` function in the <plugin_name>.php to execute and run it if it exists. This function must be named this way, and takes the `ConfigManager` as parameter. |
@@ -63,6 +61,7 @@ For example, if my plugin want to add data to the header, this function is neede | |||
63 | 61 | ||
64 | If this function is declared, and the plugin enabled, it will be called every time Shaarli is rendering the header. | 62 | If this function is declared, and the plugin enabled, it will be called every time Shaarli is rendering the header. |
65 | 63 | ||
64 | |||
66 | ### Plugin's data | 65 | ### Plugin's data |
67 | 66 | ||
68 | #### Parameters | 67 | #### Parameters |
@@ -73,6 +72,26 @@ Every hook function has a `$data` parameter. Its content differs for each hooks. | |||
73 | 72 | ||
74 | return $data; | 73 | return $data; |
75 | 74 | ||
75 | #### Special data | ||
76 | |||
77 | Special additional data are passed to every hook through the | ||
78 | `$data` parameter to give you access to additional context, and services. | ||
79 | |||
80 | Complete list: | ||
81 | |||
82 | * `_PAGE_` (string): if the current hook is used to render a template, its name is passed through this additional parameter. | ||
83 | * `_LOGGEDIN_` (bool): whether the user is logged in or not. | ||
84 | * `_BASE_PATH_` (string): if Shaarli instance is hosted under a subfolder, contains the subfolder path to `index.php` (e.g. `https://domain.tld/shaarli/` -> `/shaarli/`). | ||
85 | * `_BOOKMARK_SERVICE_` (`BookmarkServiceInterface`): bookmark service instance, for advanced usage. | ||
86 | |||
87 | Example: | ||
88 | |||
89 | ```php | ||
90 | if ($data['_PAGE_'] === TemplatePage::LINKLIST && $data['LOGGEDIN'] === true) { | ||
91 | // Do something for logged in users when the link list is rendered | ||
92 | } | ||
93 | ``` | ||
94 | |||
76 | #### Filling templates placeholder | 95 | #### Filling templates placeholder |
77 | 96 | ||
78 | Template placeholders are displayed in template in specific places. | 97 | Template placeholders are displayed in template in specific places. |
@@ -89,13 +108,14 @@ array_push($data['top_placeholder'], 'My', 'content'); | |||
89 | return $data; | 108 | return $data; |
90 | ``` | 109 | ``` |
91 | 110 | ||
111 | |||
92 | #### Data manipulation | 112 | #### Data manipulation |
93 | 113 | ||
94 | When a page is displayed, every variable send to the template engine is passed to plugins before that in `$data`. | 114 | When a page is displayed, every variable send to the template engine is passed to plugins before that in `$data`. |
95 | 115 | ||
96 | The data contained by this array can be altered before template rendering. | 116 | The data contained by this array can be altered before template rendering. |
97 | 117 | ||
98 | For exemple, in linklist, it is possible to alter every title: | 118 | For example, in linklist, it is possible to alter every title: |
99 | 119 | ||
100 | ```php | 120 | ```php |
101 | // mind the reference if you want $data to be altered | 121 | // mind the reference if you want $data to be altered |
@@ -119,12 +139,28 @@ Each file contain two keys: | |||
119 | 139 | ||
120 | > Note: In PHP, `parse_ini_file()` seems to want strings to be between by quotes `"` in the ini file. | 140 | > Note: In PHP, `parse_ini_file()` seems to want strings to be between by quotes `"` in the ini file. |
121 | 141 | ||
142 | ### Understanding relative paths | ||
143 | |||
144 | Because Shaarli is a self-hosted tool, an instance can either be installed at the root directory, or under a subfolder. | ||
145 | This means that you can *never* use absolute paths (eg `/plugins/mything/file.png`). | ||
146 | |||
147 | If a file needs to be included in server end, use simple relative path: | ||
148 | `PluginManager::$PLUGINS_PATH . '/mything/template.html'`. | ||
149 | |||
150 | If it needs to be included in front end side (e.g. an image), | ||
151 | the relative path must be prefixed with special data `_BASE_PATH_`: | ||
152 | `($data['_BASE_PATH_'] ?? '') . '/' . PluginManager::$PLUGINS_PATH . '/mything/picture.png`. | ||
153 | |||
154 | Note that special placeholders for CSS and JS files (respectively `css_files` and `js_files`) are already prefixed | ||
155 | with the base path in template files. | ||
156 | |||
122 | ### It's not working! | 157 | ### It's not working! |
123 | 158 | ||
124 | Use `demo_plugin` as a functional example. It covers most of the plugin system features. | 159 | Use `demo_plugin` as a functional example. It covers most of the plugin system features. |
125 | 160 | ||
126 | If it's still not working, please [open an issue](https://github.com/shaarli/Shaarli/issues/new). | 161 | If it's still not working, please [open an issue](https://github.com/shaarli/Shaarli/issues/new). |
127 | 162 | ||
163 | |||
128 | ### Hooks | 164 | ### Hooks |
129 | 165 | ||
130 | | Hooks | Description | | 166 | | Hooks | Description | |
@@ -145,19 +181,16 @@ If it's still not working, please [open an issue](https://github.com/shaarli/Sha | |||
145 | | [save_plugin_parameters](#save_plugin_parameters) | Allow to manipulate plugin parameters before they're saved. | | 181 | | [save_plugin_parameters](#save_plugin_parameters) | Allow to manipulate plugin parameters before they're saved. | |
146 | 182 | ||
147 | 183 | ||
148 | |||
149 | #### render_header | 184 | #### render_header |
150 | 185 | ||
151 | Triggered on every page. | 186 | Triggered on every page - allows plugins to add content in page headers. |
152 | 187 | ||
153 | Allow plugin to add content in page headers. | ||
154 | 188 | ||
155 | ##### Data | 189 | ##### Data |
156 | 190 | ||
157 | `$data` is an array containing: | 191 | `$data` is an array containing: |
158 | 192 | ||
159 | - `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.). | 193 | - [Special data](#special-data) |
160 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | ||
161 | 194 | ||
162 | ##### Template placeholders | 195 | ##### Template placeholders |
163 | 196 | ||
@@ -175,18 +208,16 @@ List of placeholders: | |||
175 | 208 | ||
176 | ![fields_toolbar_example](http://i.imgur.com/3GMifI2.png) | 209 | ![fields_toolbar_example](http://i.imgur.com/3GMifI2.png) |
177 | 210 | ||
178 | #### render_includes | ||
179 | 211 | ||
180 | Triggered on every page. | 212 | #### render_includes |
181 | 213 | ||
182 | Allow plugin to include their own CSS files. | 214 | Triggered on every page - allows plugins to include their own CSS files. |
183 | 215 | ||
184 | ##### Data | 216 | ##### data |
185 | 217 | ||
186 | `$data` is an array containing: | 218 | `$data` is an array containing: |
187 | 219 | ||
188 | - `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.). | 220 | - [Special data](#special-data) |
189 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | ||
190 | 221 | ||
191 | ##### Template placeholders | 222 | ##### Template placeholders |
192 | 223 | ||
@@ -198,18 +229,18 @@ List of placeholders: | |||
198 | 229 | ||
199 | > Note: only add the path of the CSS file. E.g: `plugins/demo_plugin/custom_demo.css`. | 230 | > Note: only add the path of the CSS file. E.g: `plugins/demo_plugin/custom_demo.css`. |
200 | 231 | ||
232 | |||
201 | #### render_footer | 233 | #### render_footer |
202 | 234 | ||
203 | Triggered on every page. | 235 | Triggered on every page. |
204 | 236 | ||
205 | Allow plugin to add content in page footer and include their own JS files. | 237 | Allow plugin to add content in page footer and include their own JS files. |
206 | 238 | ||
207 | ##### Data | 239 | ##### data |
208 | 240 | ||
209 | `$data` is an array containing: | 241 | `$data` is an array containing: |
210 | 242 | ||
211 | - `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.). | 243 | - [Special data](#special-data) |
212 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | ||
213 | 244 | ||
214 | ##### Template placeholders | 245 | ##### Template placeholders |
215 | 246 | ||
@@ -226,20 +257,21 @@ List of placeholders: | |||
226 | 257 | ||
227 | > Note: only add the path of the JS file. E.g: `plugins/demo_plugin/custom_demo.js`. | 258 | > Note: only add the path of the JS file. E.g: `plugins/demo_plugin/custom_demo.js`. |
228 | 259 | ||
260 | |||
229 | #### render_linklist | 261 | #### render_linklist |
230 | 262 | ||
231 | Triggered when `linklist` is displayed (list of links, permalink, search, tag filtered, etc.). | 263 | Triggered when `linklist` is displayed (list of links, permalink, search, tag filtered, etc.). |
232 | 264 | ||
233 | It allows to add content at the begining and end of the page, after every link displayed and to alter link data. | 265 | It allows to add content at the begining and end of the page, after every link displayed and to alter link data. |
234 | 266 | ||
235 | ##### Data | 267 | ##### data |
236 | 268 | ||
237 | `$data` is an array containing: | 269 | `$data` is an array containing: |
238 | 270 | ||
239 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | 271 | - All templates data, including links. |
240 | - All templates data, including links. | 272 | - [Special data](#special-data) |
241 | 273 | ||
242 | ##### Template placeholders | 274 | ##### template placeholders |
243 | 275 | ||
244 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. | 276 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. |
245 | 277 | ||
@@ -261,19 +293,21 @@ List of placeholders: | |||
261 | 293 | ||
262 | ![plugin_end_zone_example](http://i.imgur.com/6IoRuop.png) | 294 | ![plugin_end_zone_example](http://i.imgur.com/6IoRuop.png) |
263 | 295 | ||
296 | |||
264 | #### render_editlink | 297 | #### render_editlink |
265 | 298 | ||
266 | Triggered when the link edition form is displayed. | 299 | Triggered when the link edition form is displayed. |
267 | 300 | ||
268 | Allow to add fields in the form, or display elements. | 301 | Allow to add fields in the form, or display elements. |
269 | 302 | ||
270 | ##### Data | 303 | ##### data |
271 | 304 | ||
272 | `$data` is an array containing: | 305 | `$data` is an array containing: |
273 | 306 | ||
274 | - All templates data. | 307 | - All templates data. |
308 | - [Special data](#special-data) | ||
275 | 309 | ||
276 | ##### Template placeholders | 310 | ##### template placeholders |
277 | 311 | ||
278 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. | 312 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. |
279 | 313 | ||
@@ -283,19 +317,21 @@ List of placeholders: | |||
283 | 317 | ||
284 | ![edit_link_plugin_example](http://i.imgur.com/5u17Ens.png) | 318 | ![edit_link_plugin_example](http://i.imgur.com/5u17Ens.png) |
285 | 319 | ||
320 | |||
286 | #### render_tools | 321 | #### render_tools |
287 | 322 | ||
288 | Triggered when the "tools" page is displayed. | 323 | Triggered when the "tools" page is displayed. |
289 | 324 | ||
290 | Allow to add content at the end of the page. | 325 | Allow to add content at the end of the page. |
291 | 326 | ||
292 | ##### Data | 327 | ##### data |
293 | 328 | ||
294 | `$data` is an array containing: | 329 | `$data` is an array containing: |
295 | 330 | ||
296 | - All templates data. | 331 | - All templates data. |
332 | - [Special data](#special-data) | ||
297 | 333 | ||
298 | ##### Template placeholders | 334 | ##### template placeholders |
299 | 335 | ||
300 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. | 336 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. |
301 | 337 | ||
@@ -305,20 +341,21 @@ List of placeholders: | |||
305 | 341 | ||
306 | ![tools_plugin_example](http://i.imgur.com/Bqhu9oQ.png) | 342 | ![tools_plugin_example](http://i.imgur.com/Bqhu9oQ.png) |
307 | 343 | ||
344 | |||
308 | #### render_picwall | 345 | #### render_picwall |
309 | 346 | ||
310 | Triggered when picwall is displayed. | 347 | Triggered when picwall is displayed. |
311 | 348 | ||
312 | Allow to add content at the top and bottom of the page. | 349 | Allow to add content at the top and bottom of the page. |
313 | 350 | ||
314 | ##### Data | 351 | ##### data |
315 | 352 | ||
316 | `$data` is an array containing: | 353 | `$data` is an array containing: |
317 | 354 | ||
318 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | 355 | - All templates data. |
319 | - All templates data. | 356 | - [Special data](#special-data) |
320 | 357 | ||
321 | ##### Template placeholders | 358 | ##### template placeholders |
322 | 359 | ||
323 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. | 360 | Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array. |
324 | 361 | ||
@@ -329,18 +366,19 @@ List of placeholders: | |||
329 | 366 | ||
330 | ![plugin_start_end_zone_example](http://i.imgur.com/tVTQFER.png) | 367 | ![plugin_start_end_zone_example](http://i.imgur.com/tVTQFER.png) |
331 | 368 | ||
369 | |||
332 | #### render_tagcloud | 370 | #### render_tagcloud |
333 | 371 | ||
334 | Triggered when tagcloud is displayed. | 372 | Triggered when tagcloud is displayed. |
335 | 373 | ||
336 | Allow to add content at the top and bottom of the page. | 374 | Allow to add content at the top and bottom of the page. |
337 | 375 | ||
338 | ##### Data | 376 | ##### data |
339 | 377 | ||
340 | `$data` is an array containing: | 378 | `$data` is an array containing: |
341 | 379 | ||
342 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | 380 | - All templates data. |
343 | - All templates data. | 381 | - [Special data](#special-data) |
344 | 382 | ||
345 | ##### Template placeholders | 383 | ##### Template placeholders |
346 | 384 | ||
@@ -360,16 +398,14 @@ For each tag, the following placeholder can be used: | |||
360 | 398 | ||
361 | #### render_taglist | 399 | #### render_taglist |
362 | 400 | ||
363 | Triggered when taglist is displayed. | 401 | Triggered when taglist is displayed - allows to add content at the top and bottom of the page. |
364 | |||
365 | Allow to add content at the top and bottom of the page. | ||
366 | 402 | ||
367 | ##### Data | 403 | ##### data |
368 | 404 | ||
369 | `$data` is an array containing: | 405 | `$data` is an array containing: |
370 | 406 | ||
371 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | 407 | - All templates data. |
372 | - All templates data. | 408 | - [Special data](#special-data) |
373 | 409 | ||
374 | ##### Template placeholders | 410 | ##### Template placeholders |
375 | 411 | ||
@@ -390,12 +426,13 @@ Triggered when tagcloud is displayed. | |||
390 | 426 | ||
391 | Allow to add content at the top and bottom of the page, the bottom of each link and to alter data. | 427 | Allow to add content at the top and bottom of the page, the bottom of each link and to alter data. |
392 | 428 | ||
393 | ##### Data | 429 | |
430 | ##### data | ||
394 | 431 | ||
395 | `$data` is an array containing: | 432 | `$data` is an array containing: |
396 | 433 | ||
397 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | 434 | - All templates data, including links. |
398 | - All templates data, including links. | 435 | - [Special data](#special-data) |
399 | 436 | ||
400 | ##### Template placeholders | 437 | ##### Template placeholders |
401 | 438 | ||
@@ -410,19 +447,19 @@ List of placeholders: | |||
410 | - `plugin_start_zone`: before displaying the template content. | 447 | - `plugin_start_zone`: before displaying the template content. |
411 | - `plugin_end_zone`: after displaying the template content. | 448 | - `plugin_end_zone`: after displaying the template content. |
412 | 449 | ||
450 | |||
413 | #### render_feed | 451 | #### render_feed |
414 | 452 | ||
415 | Triggered when the ATOM or RSS feed is displayed. | 453 | Triggered when the ATOM or RSS feed is displayed. |
416 | 454 | ||
417 | Allow to add tags in the feed, either in the header or for each items. Items (links) can also be altered before being rendered. | 455 | Allow to add tags in the feed, either in the header or for each items. Items (links) can also be altered before being rendered. |
418 | 456 | ||
419 | ##### Data | 457 | ##### data |
420 | 458 | ||
421 | `$data` is an array containing: | 459 | `$data` is an array containing: |
422 | 460 | ||
423 | - `_LOGGEDIN_`: true if user is logged in, false otherwise. | 461 | - All templates data, including links. |
424 | - `_PAGE_`: containing either `rss` or `atom`. | 462 | - [Special data](#special-data) |
425 | - All templates data, including links. | ||
426 | 463 | ||
427 | ##### Template placeholders | 464 | ##### Template placeholders |
428 | 465 | ||
@@ -436,13 +473,14 @@ For each links: | |||
436 | 473 | ||
437 | - `feed_plugins`: additional tag for every link entry. | 474 | - `feed_plugins`: additional tag for every link entry. |
438 | 475 | ||
476 | |||
439 | #### save_link | 477 | #### save_link |
440 | 478 | ||
441 | Triggered when a link is save (new link or edit). | 479 | Triggered when a link is save (new link or edit). |
442 | 480 | ||
443 | Allow to alter the link being saved in the datastore. | 481 | Allow to alter the link being saved in the datastore. |
444 | 482 | ||
445 | ##### Data | 483 | ##### data |
446 | 484 | ||
447 | `$data` is an array containing the link being saved: | 485 | `$data` is an array containing the link being saved: |
448 | 486 | ||
@@ -456,6 +494,8 @@ Allow to alter the link being saved in the datastore. | |||
456 | - created | 494 | - created |
457 | - updated | 495 | - updated |
458 | 496 | ||
497 | Also [special data](#special-data). | ||
498 | |||
459 | 499 | ||
460 | #### delete_link | 500 | #### delete_link |
461 | 501 | ||
@@ -463,9 +503,9 @@ Triggered when a link is deleted. | |||
463 | 503 | ||
464 | Allow to execute any action before the link is actually removed from the datastore | 504 | Allow to execute any action before the link is actually removed from the datastore |
465 | 505 | ||
466 | ##### Data | 506 | ##### data |
467 | 507 | ||
468 | `$data` is an array containing the link being saved: | 508 | `$data` is an array containing the link being deleted: |
469 | 509 | ||
470 | - id | 510 | - id |
471 | - title | 511 | - title |
@@ -477,6 +517,7 @@ Allow to execute any action before the link is actually removed from the datasto | |||
477 | - created | 517 | - created |
478 | - updated | 518 | - updated |
479 | 519 | ||
520 | Also [special data](#special-data). | ||
480 | 521 | ||
481 | #### save_plugin_parameters | 522 | #### save_plugin_parameters |
482 | 523 | ||
@@ -485,15 +526,16 @@ Triggered when the plugin parameters are saved from the plugin administration pa | |||
485 | Plugins can perform an action every times their settings are updated. | 526 | Plugins can perform an action every times their settings are updated. |
486 | For example it is used to update the CSS file of the `default_colors` plugins. | 527 | For example it is used to update the CSS file of the `default_colors` plugins. |
487 | 528 | ||
488 | ##### Data | 529 | ##### data |
489 | 530 | ||
490 | `$data` input contains the `$_POST` array. | 531 | `$data` input contains the `$_POST` array. |
491 | 532 | ||
492 | So if the plugin has a parameter called `MYPLUGIN_PARAMETER`, | 533 | So if the plugin has a parameter called `MYPLUGIN_PARAMETER`, |
493 | the array will contain an entry with `MYPLUGIN_PARAMETER` as a key. | 534 | the array will contain an entry with `MYPLUGIN_PARAMETER` as a key. |
494 | 535 | ||
536 | Also [special data](#special-data). | ||
495 | 537 | ||
496 | ## Guide for template designer | 538 | ## Guide for template designers |
497 | 539 | ||
498 | ### Plugin administration | 540 | ### Plugin administration |
499 | 541 | ||
diff --git a/doc/md/dev/Release-Shaarli.md b/doc/md/dev/Release-Shaarli.md new file mode 100644 index 00000000..2c772406 --- /dev/null +++ b/doc/md/dev/Release-Shaarli.md | |||
@@ -0,0 +1,145 @@ | |||
1 | # Release Shaarli | ||
2 | |||
3 | ## Requirements | ||
4 | |||
5 | This guide assumes that you have: | ||
6 | |||
7 | - a GPG key matching your GitHub authentication credentials/email (the email address identified by the GPG key is the same as the one in your `~/.gitconfig`) | ||
8 | - a GitHub fork of Shaarli | ||
9 | - a local clone of your Shaarli fork, with the following remotes: | ||
10 | - `origin` pointing to your GitHub fork | ||
11 | - `upstream` pointing to the main Shaarli repository | ||
12 | - maintainer permissions on the main Shaarli repository, to: | ||
13 | - push the signed tag | ||
14 | - create a new release | ||
15 | - [Composer](https://getcomposer.org/) needs to be installed | ||
16 | - The [venv](https://docs.python.org/3/library/venv.html) Python 3 module needs to be installed for HTML documentation generation. | ||
17 | |||
18 | ## Release notes and `CHANGELOG.md` | ||
19 | |||
20 | GitHub allows drafting the release notes for the upcoming release, from the [Releases](https://github.com/shaarli/Shaarli/releases) page. This way, the release note can be drafted while contributions are merged to `master`. See http://keepachangelog.com/en/0.3.0/ for changelog formatting. | ||
21 | |||
22 | `CHANGELOG.md` should contain the same information as the release note draft for the upcoming version. Update it to: | ||
23 | |||
24 | - add new entries (additions, fixes, etc.) | ||
25 | - mark the current version as released by setting its date and link | ||
26 | - add a new section for the future unreleased version | ||
27 | |||
28 | ```bash | ||
29 | ## [v0.x.y](https://github.com/shaarli/Shaarli/releases/tag/v0.x.y) - UNRELEASES | ||
30 | |||
31 | ### Added | ||
32 | |||
33 | ### Changed | ||
34 | |||
35 | ### Fixed | ||
36 | |||
37 | ### Removed | ||
38 | |||
39 | ### Deprecated | ||
40 | |||
41 | ### Security | ||
42 | |||
43 | ``` | ||
44 | |||
45 | |||
46 | ## Update the list of Git contributors | ||
47 | |||
48 | ```bash | ||
49 | $ make authors | ||
50 | $ git commit -s -m "Update AUTHORS" | ||
51 | ``` | ||
52 | |||
53 | ## Create and merge a Pull Request | ||
54 | |||
55 | Create a Pull Request to marge changes from your remote, into `master` in the community Shaarli repository, and have it merged. | ||
56 | |||
57 | |||
58 | ## Create the release branch and update shaarli_version.php | ||
59 | |||
60 | ```bash | ||
61 | # fetch latest changes from master to your local copy | ||
62 | git checkout master | ||
63 | git pull upstream master | ||
64 | |||
65 | # If releasing a new minor version, create a release branch | ||
66 | $ git checkout -b v0.x | ||
67 | |||
68 | # Bump shaarli_version.php from dev to 0.x.0, **without the v** | ||
69 | $ vim shaarli_version.php | ||
70 | $ git add shaarli_version | ||
71 | $ git commit -s -m "Bump Shaarli version to v0.x.0" | ||
72 | $ git push upstream v0.x | ||
73 | ``` | ||
74 | |||
75 | ## Create and push a signed tag | ||
76 | |||
77 | Git [tags](http://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Tagging-Your-Releases) are used to identify specific revisions with a unique version number that follows [semantic versioning](https://semver.org/) | ||
78 | |||
79 | ```bash | ||
80 | # update your local copy | ||
81 | git checkout v0.5 | ||
82 | git pull upstream v0.5 | ||
83 | |||
84 | # create a signed tag | ||
85 | git tag -s -m "Release v0.5.0" v0.5.0 | ||
86 | |||
87 | # push the tag to upstream | ||
88 | git push --tags upstream | ||
89 | ``` | ||
90 | |||
91 | Here is how to verify a signed tag. [`v0.5.0`](https://github.com/shaarli/Shaarli/releases/tag/v0.5.0) is the first GPG-signed tag pushed on the Community Shaarli. Let's have a look at its signature! | ||
92 | |||
93 | ```bash | ||
94 | # update the list of available tags | ||
95 | git fetch upstream | ||
96 | |||
97 | # get the SHA1 reference of the tag | ||
98 | git show-ref tags/v0.5.0 | ||
99 | # gives: f7762cf803f03f5caf4b8078359a63783d0090c1 refs/tags/v0.5.0 | ||
100 | |||
101 | # verify the tag signature information | ||
102 | git verify-tag f7762cf803f03f5caf4b8078359a63783d0090c1 | ||
103 | # gpg: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F | ||
104 | # gpg: Good signature from "VirtualTam <virtualtam@flibidi.net>" [ultimate] | ||
105 | ``` | ||
106 | |||
107 | ## Publish the GitHub release | ||
108 | |||
109 | - In the `master` banch, update version badges in `README.md` to point to the newly released Shaarli version | ||
110 | - Update the previously drafted [release](https://github.com/shaarli/Shaarli/releases) (notes, tag) and publish it | ||
111 | - Profit! | ||
112 | |||
113 | |||
114 | ## Generate full release zip archives | ||
115 | |||
116 | Release archives will contain Shaarli code plus all required third-party libraries. They are useful for users who: | ||
117 | |||
118 | - have no SSH access, no possibility to install PHP packages/server extensions, no possibility to run scripts (shared hosting) | ||
119 | - do not want to install build/dev dependencies on their server | ||
120 | |||
121 | `git checkout` the appropriate branch, then: | ||
122 | |||
123 | ```bash | ||
124 | # checkout the appropriate branch | ||
125 | git checkout 0.x.y | ||
126 | # generate zip archives | ||
127 | make release_archive | ||
128 | ``` | ||
129 | |||
130 | This will create `shaarli-v0.x.y-full.tar`, `shaarli-v0.x.y-full.zip`. These archives need to be manually uploaded on the previously created GitHub [release](https://github.com/shaarli/Shaarli/releases). | ||
131 | |||
132 | |||
133 | ### Update the `latest` branch | ||
134 | |||
135 | ```bash | ||
136 | # checkout the 'latest' branch | ||
137 | git checkout latest | ||
138 | # merge changes from your newly published release branch | ||
139 | git merge v0.x.y | ||
140 | # fix eventual conflicts with git mergetool... | ||
141 | # run tests | ||
142 | make test | ||
143 | # push the latest branch | ||
144 | git push upstream latest | ||
145 | ``` | ||
diff --git a/doc/md/Theming.md b/doc/md/dev/Theming.md index eb84e11c..1ad30465 100644 --- a/doc/md/Theming.md +++ b/doc/md/dev/Theming.md | |||
@@ -1,3 +1,5 @@ | |||
1 | # Theming | ||
2 | |||
1 | ## Foreword | 3 | ## Foreword |
2 | 4 | ||
3 | There are two ways of customizing how Shaarli looks: | 5 | There are two ways of customizing how Shaarli looks: |
@@ -43,6 +45,7 @@ Installation: | |||
43 | - [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli | 45 | - [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli |
44 | - [kalvn/Shaarli-Material](https://github.com/kalvn/Shaarli-Material) - A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone | 46 | - [kalvn/Shaarli-Material](https://github.com/kalvn/Shaarli-Material) - A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone |
45 | - [ManufacturaInd/shaarli-2004licious-theme](https://github.com/ManufacturaInd/shaarli-2004licious-theme) - A template/theme as a humble homage to the early looks of the del.icio.us site | 47 | - [ManufacturaInd/shaarli-2004licious-theme](https://github.com/ManufacturaInd/shaarli-2004licious-theme) - A template/theme as a humble homage to the early looks of the del.icio.us site |
48 | - [xfnw/shaarli-default-dark](https://github.com/xfnw/shaarli-default-dark) - The default theme but nice and dark for your eyeballs | ||
46 | 49 | ||
47 | ### Shaarli forks | 50 | ### Shaarli forks |
48 | 51 | ||
diff --git a/doc/md/Translations.md b/doc/md/dev/Translations.md index c23ec962..8f3b8f10 100644 --- a/doc/md/Translations.md +++ b/doc/md/dev/Translations.md | |||
@@ -7,87 +7,80 @@ Note that only the `default` theme supports translations. | |||
7 | 7 | ||
8 | ### Contributing | 8 | ### Contributing |
9 | 9 | ||
10 | We encourage the community to contribute to Shaarli's translation either by improving existing | 10 | We encourage the community to contribute to Shaarli translations, either by improving existing translations or submitting a new language. |
11 | translations or submitting a new language. | ||
12 | 11 | ||
13 | Contributing to the translation does not require development skill. | 12 | Contributing to the translation does not require software development knowledge. |
14 | 13 | ||
15 | Please submit a pull request with the `.po` file updated/created. Note that the compiled file (`.mo`) | 14 | Please submit a pull request with the `.po` file updated/created. Note that the compiled file (`.mo`) is not stored on the repository, and is generated during the release process. |
16 | is not stored on the repository, and is generated during the release process. | ||
17 | 15 | ||
18 | ### How to | ||
19 | |||
20 | First, install [Poedit](https://poedit.net/) tool. | ||
21 | |||
22 | Poedit will extract strings to translate from the PHP source code. | ||
23 | 16 | ||
24 | **Important**: due to the usage of a template engine, it's important to generate PHP cache files to extract | 17 | ### How to |
25 | every translatable string. | ||
26 | 18 | ||
27 | You can either use [this script](https://gist.github.com/ArthurHoaro/5d0323f758ab2401ef444a53f54e9a07) (recommended) | 19 | Install [Poedit](https://poedit.net/) (used to extract strings to translate from the PHP source code, and generate `.po` files). |
28 | or visit every template page in your browser to generate cache files, while logged in. | ||
29 | 20 | ||
30 | Here is a list : | 21 | Due to the usage of a template engine, it's important to generate PHP cache files to extract every translatable string. You can either use [this script](https://gist.github.com/ArthurHoaro/5d0323f758ab2401ef444a53f54e9a07) (recommended) or visit every template page in your browser to generate cache files, while logged in. Here is a list : |
31 | 22 | ||
32 | ``` | 23 | ``` |
33 | http://<replace_domain>/ | 24 | http://<replace_domain>/ |
25 | http://<replace_domain>/login | ||
26 | http://<replace_domain>/daily | ||
27 | http://<replace_domain>/tags/cloud | ||
28 | http://<replace_domain>/tags/list | ||
29 | http://<replace_domain>/picture-wall | ||
34 | http://<replace_domain>/?nonope | 30 | http://<replace_domain>/?nonope |
35 | http://<replace_domain>/admin/add-shaare | 31 | http://<replace_domain>/admin/add-shaare |
36 | http://<replace_domain>/admin/password | 32 | http://<replace_domain>/admin/password |
37 | http://<replace_domain>/admin/tags | 33 | http://<replace_domain>/admin/tags |
38 | http://<replace_domain>/admin/configure | 34 | http://<replace_domain>/admin/configure |
39 | http://<replace_domain>/admin/tools | 35 | http://<replace_domain>/admin/tools |
40 | http://<replace_domain>/daily | ||
41 | http://<replace_domain>/admin/shaare | 36 | http://<replace_domain>/admin/shaare |
42 | http://<replace_domain>/admin/export | 37 | http://<replace_domain>/admin/export |
43 | http://<replace_domain>/admin/import | 38 | http://<replace_domain>/admin/import |
44 | http://<replace_domain>/login | ||
45 | http://<replace_domain>/picture-wall | ||
46 | http://<replace_domain>/admin/plugins | 39 | http://<replace_domain>/admin/plugins |
47 | http://<replace_domain>/tags/cloud | ||
48 | http://<replace_domain>/tags/list | ||
49 | ``` | 40 | ``` |
50 | 41 | ||
51 | #### Improve existing translation | ||
52 | |||
53 | In Poedit, click on "Edit a Translation", and from Shaarli's directory open | ||
54 | `inc/languages/<lang>/LC_MESSAGES/shaarli.po`. | ||
55 | 42 | ||
56 | The existing list of translatable strings should have been loaded, then click on the "Update" button. | 43 | #### Improve existing translations |
57 | 44 | ||
58 | You can start editing the translation. | 45 | - In Poedit, click on "Edit a Translation |
46 | - Open `inc/languages/<lang>/LC_MESSAGES/shaarli.po` under Shaarli's directory | ||
47 | - The existing list of translatable strings should load | ||
48 | - Click on the "Update" button. | ||
49 | - Start editing translations. | ||
59 | 50 | ||
60 | ![poedit-screenshot](images/poedit-1.jpg) | 51 | ![poedit-screenshot](images/poedit-1.jpg) |
61 | 52 | ||
62 | Save when you're done, then you can submit a pull request containing the updated `shaarli.po`. | 53 | Save when you're done, then you can submit a pull request containing the updated `shaarli.po`. |
63 | 54 | ||
64 | #### Add a new language | ||
65 | |||
66 | Open Poedit and select "Create New Translation", then from Shaarli's directory open | ||
67 | `inc/languages/<lang>/LC_MESSAGES/shaarli.po`. | ||
68 | |||
69 | Then select the language you want to create. | ||
70 | 55 | ||
71 | Click on `File > Save as...`, and save your file in `<shaarli directory>/inc/language/<new language>/LC_MESSAGES/shaarli.po`. | 56 | #### Add a new language |
72 | `<new language>` here should be the language code respecting the [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-2) | ||
73 | format in lowercase (e.g. `de` for German). | ||
74 | 57 | ||
75 | Then click on the "Update" button, and you can start to translate every available string. | 58 | - In Poedit select "Create New Translation" |
59 | - Open `inc/languages/<lang>/LC_MESSAGES/shaarli.po` under Shaarli's directory | ||
60 | - Select the language you want to create. | ||
61 | - Click on `File > Save as...`, save your file in `<shaarli directory>/inc/language/<new language>/LC_MESSAGES/shaarli.po` (`<new language>` here should be the language code respecting the [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-2) format in lowercase - e.g. `de` for German) | ||
62 | - Click on the "Update" button | ||
63 | - Start editing translations. | ||
76 | 64 | ||
77 | Save when you're done, then you can submit a pull request containing the new `shaarli.po`. | 65 | Save when you're done, then you can submit a pull request containing the new `shaarli.po`. |
78 | 66 | ||
67 | |||
79 | ### Theme translations | 68 | ### Theme translations |
80 | 69 | ||
81 | Theme translation extensions are loaded automatically if they're present. | 70 | [Theme](Theming) translation extensions are loaded automatically if they're present. |
82 | 71 | ||
83 | As a theme developer, all you have to do is to add the `.po` and `.mo` compiled file like this: | 72 | As a theme developer, all you have to do is to add the `.po` and `.mo` compiled file like this: |
84 | 73 | ||
85 | tpl/<theme name>/language/<lang>/LC_MESSAGES/<theme name>.po | 74 | ``` |
86 | tpl/<theme name>/language/<lang>/LC_MESSAGES/<theme name>.mo | 75 | tpl/<theme name>/language/<lang>/LC_MESSAGES/<theme name>.po |
76 | tpl/<theme name>/language/<lang>/LC_MESSAGES/<theme name>.mo | ||
77 | ``` | ||
87 | 78 | ||
88 | Where `<lang>` is the ISO 3166-1 alpha-2 language code. | 79 | Where `<lang>` is the ISO 3166-1 alpha-2 language code. |
80 | |||
89 | Read the following section "Extend Shaarli's translation" to learn how to generate those files. | 81 | Read the following section "Extend Shaarli's translation" to learn how to generate those files. |
90 | 82 | ||
83 | |||
91 | ### Extend Shaarli's translation | 84 | ### Extend Shaarli's translation |
92 | 85 | ||
93 | If you're writing a custom theme, or a non official plugin, you might want to use the translation system, | 86 | If you're writing a custom theme, or a non official plugin, you might want to use the translation system, |
diff --git a/doc/md/dev/Unit-tests.md b/doc/md/dev/Unit-tests.md new file mode 100644 index 00000000..fd286bf0 --- /dev/null +++ b/doc/md/dev/Unit-tests.md | |||
@@ -0,0 +1,133 @@ | |||
1 | # Unit tests | ||
2 | |||
3 | Shaarli uses the [PHPUnit](https://phpunit.de/) test framework; it can be installed with [Composer](https://getcomposer.org/), which is a dependency management tool. | ||
4 | |||
5 | ## Install composer | ||
6 | |||
7 | You can either use: | ||
8 | |||
9 | - a system-wide version, e.g. installed through your distro's package manager | ||
10 | - a local version, downloadable [here](https://getcomposer.org/download/). | ||
11 | |||
12 | ```bash | ||
13 | # for Debian-based distros | ||
14 | sudo apt install composer | ||
15 | ``` | ||
16 | |||
17 | |||
18 | ## Install Shaarli dev dependencies | ||
19 | |||
20 | ```bash | ||
21 | $ cd /path/to/shaarli | ||
22 | $ make composer_dependencies_dev | ||
23 | ``` | ||
24 | |||
25 | ## Install and enable Xdebug to generate PHPUnit coverage reports | ||
26 | |||
27 | |||
28 | [Xdebug](http://xdebug.org/docs/install) is a PHP extension which provides debugging and profiling capabilities. Install Xdebug: | ||
29 | |||
30 | ```bash | ||
31 | # for Debian-based distros: | ||
32 | sudo apt install php-xdebug | ||
33 | |||
34 | # for ArchLinux: | ||
35 | pacman -S xdebug | ||
36 | |||
37 | # then add the following line to /etc/php/php.ini | ||
38 | zend_extension=xdebug.so | ||
39 | ``` | ||
40 | |||
41 | ## Run unit tests | ||
42 | |||
43 | Ensure tests pass successuflly: | ||
44 | |||
45 | ```bash | ||
46 | make test | ||
47 | # ... | ||
48 | # OK (36 tests, 65 assertions) | ||
49 | ``` | ||
50 | |||
51 | In case of failure the test suite will point you to actual errors and output a summary: | ||
52 | |||
53 | ```bash | ||
54 | make test | ||
55 | # ... | ||
56 | # FAILURES! | ||
57 | # Tests: 36, Assertions: 63, Errors: 1, Failures: 2. | ||
58 | ``` | ||
59 | |||
60 | By default, PHPUnit will run all suitable tests found under the `tests` directory. Each test has 3 possible outcomes: | ||
61 | |||
62 | - `.` - success | ||
63 | - `F` - failure: the test was run but its results are invalid | ||
64 | - the code does not behave as expected | ||
65 | - dependencies to external elements: globals, session, cache... | ||
66 | - `E` - error: something went wrong and the tested code has crashed | ||
67 | - typos in the code, or in the test code | ||
68 | - dependencies to missing external elements | ||
69 | |||
70 | If Xdebug has been installed and activated, two coverage reports will be generated: | ||
71 | |||
72 | - a summary in the console | ||
73 | - a detailed HTML report with metrics for tested code | ||
74 | - to open it in a web browser: `firefox coverage/index.html &` | ||
75 | |||
76 | |||
77 | ### Executing specific tests | ||
78 | |||
79 | Add a [`@group`](https://phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group) annotation in a test class or method comment: | ||
80 | |||
81 | ```php | ||
82 | /** | ||
83 | * Netscape bookmark import | ||
84 | * @group WIP | ||
85 | */ | ||
86 | class BookmarkImportTest extends PHPUnit_Framework_TestCase | ||
87 | { | ||
88 | [...] | ||
89 | } | ||
90 | ``` | ||
91 | |||
92 | To run all tests annotated with `@group WIP`: | ||
93 | ```bash | ||
94 | $ vendor/bin/phpunit --group WIP tests/ | ||
95 | ``` | ||
96 | |||
97 | ## Running tests inside Docker containers | ||
98 | |||
99 | Unit tests can be run inside [Docker](../Docker.md) containers. | ||
100 | |||
101 | Test Dockerfiles are located under `tests/docker/<distribution>/Dockerfile`, and can be used to build Docker images to run Shaarli test suites under commonLinux environments. Dockerfiles are provided for the following environments: | ||
102 | |||
103 | - [`alpine36`](https://github.com/shaarli/Shaarli/blob/master/tests/docker/alpine36/Dockerfile) - [Alpine Linux 3.6](https://www.alpinelinux.org/downloads/) | ||
104 | - [`debian8`](https://github.com/shaarli/Shaarli/blob/master/tests/docker/debian8/Dockerfile) - [Debian 8 Jessie](https://www.debian.org/DebianJessie) (oldoldstable) | ||
105 | - [`debian9`](https://github.com/shaarli/Shaarli/blob/master/tests/docker/debian9/Dockerfile) - [Debian 9 Stretch](https://wiki.debian.org/DebianStretch) (oldstable) | ||
106 | - [`ubuntu16`](https://github.com/shaarli/Shaarli/blob/master/tests/docker/ubuntu16/Dockerfile) - [Ubuntu 16.04 Xenial Xerus](http://releases.ubuntu.com/16.04/) (old LTS) | ||
107 | |||
108 | Each image provides: | ||
109 | - a base Linux OS | ||
110 | - Shaarli PHP dependencies (OS packages) | ||
111 | - test PHP dependencies (OS packages) | ||
112 | - Composer | ||
113 | - Tests that run inside the conatiner using a standard Linux user account (running tests as `root` would bypass permission checks and may hide issues) | ||
114 | |||
115 | Build a test image: | ||
116 | |||
117 | ```bash | ||
118 | # build the Debian 9 Docker image | ||
119 | cd /path/to/shaarli/tests/docker/debian9 | ||
120 | docker build -t shaarli-test:debian9 . | ||
121 | ``` | ||
122 | |||
123 | Run unit tests in a container: | ||
124 | |||
125 | ```bash | ||
126 | cd /path/to/shaarli | ||
127 | # install/update 3rd-party test dependencies | ||
128 | composer install --prefer-dist | ||
129 | # run tests using the freshly built image | ||
130 | docker run -v $PWD:/shaarli shaarli-test:debian9 docker_test | ||
131 | # run the full test campaign | ||
132 | docker run -v $PWD:/shaarli shaarli-test:debian9 docker_all_tests | ||
133 | ``` | ||
diff --git a/doc/md/Versioning-and-Branches.md b/doc/md/dev/Versioning.md index 7097ca0a..32c80a5c 100644 --- a/doc/md/Versioning-and-Branches.md +++ b/doc/md/dev/Versioning.md | |||
@@ -1,6 +1,7 @@ | |||
1 | **WORK IN PROGRESS** | 1 | # Versioning |
2 | |||
3 | If you're maintaining a 3rd party tool for Shaarli (theme, plugin, etc.), It's important to understand how Shaarli branches work ensure your tool stays compatible. | ||
2 | 4 | ||
3 | It's important to understand how Shaarli branches work, especially if you're maintaining a 3rd party tools for Shaarli (theme, plugin, etc.), to be sure stay compatible. | ||
4 | 5 | ||
5 | ## `master` branch | 6 | ## `master` branch |
6 | 7 | ||
@@ -11,39 +12,26 @@ Remarks: | |||
11 | - This branch shouldn't be used for production as it isn't necessary stable. | 12 | - This branch shouldn't be used for production as it isn't necessary stable. |
12 | - 3rd party aren't required to be compatible with the latest changes. | 13 | - 3rd party aren't required to be compatible with the latest changes. |
13 | - Official plugins, themes and libraries (contained within Shaarli organization repos) must be compatible with the master branch. | 14 | - Official plugins, themes and libraries (contained within Shaarli organization repos) must be compatible with the master branch. |
14 | - The version in this branch is always `dev`. | ||
15 | 15 | ||
16 | ## `v0.x` branch | ||
17 | 16 | ||
18 | This `v0.x` branch, points to the latest `v0.x.y` release. | 17 | ## `v0.x` branch |
19 | 18 | ||
20 | Explanation: | 19 | The `v0.x` branch points to the latest `v0.x.y` release. |
21 | 20 | ||
22 | When a new version is released, it might contains a major bug which isn't detected right away. For example, a new PHP version is released, containing backward compatibility issue which doesn't work with Shaarli. | 21 | If a major bug affects the original `v0.x.0` release, we may [backport](https://en.wikipedia.org/wiki/Backporting) a fix for this bug from master, to the `v0.x` branch, and create a new bugfix release (eg. `v0.x.1`) from this branch. |
23 | 22 | ||
24 | In this case, the issue is fixed in the `master` branch, and the fix is backported the to the `v0.x` branch. Then a new release is made from the `v0.x` branch. | 23 | This allows users of the original release to upgrade to the fixed version, without having to upgrade to a completely new minor/major release. |
25 | 24 | ||
26 | This workflow allow us to fix any major bug detected, without having to release bleeding edge feature too soon. | ||
27 | 25 | ||
28 | ## `latest` branch | 26 | ## `latest` branch |
29 | 27 | ||
30 | This branch point the latest release. It recommended to use it to get the latest tested changes. | 28 | This branch point the latest release. It recommended to use it to get the latest tested changes. |
31 | 29 | ||
32 | ## `stable` branch | ||
33 | |||
34 | The `stable` branch doesn't contain any major bug, and is one major digit version behind the latest release. | ||
35 | |||
36 | For example, the current latest release is `v0.8.3`, the stable branch is an alias to the latest `v0.7.x` release. When the `v0.9.0` version will be released, the stable will move to the latest `v0.8.x` release. | ||
37 | |||
38 | Remarks: | ||
39 | |||
40 | - Shaarli release pace isn't fast, and the stable branch might be a few months behind the latest release. | ||
41 | 30 | ||
42 | ## Releases | 31 | ## Releases |
43 | 32 | ||
44 | Releases are always made from the latest `v0.x` branch. | 33 | For every release, we manually generate a .zip file which contains all Shaarli dependencies, making Shaarli's installation only one step. |
45 | 34 | ||
46 | Note that for every release, we manually generate a tarball which contains all Shaarli dependencies, making Shaarli's installation only one step. | ||
47 | 35 | ||
48 | ## Advices on 3rd party git repos workflow | 36 | ## Advices on 3rd party git repos workflow |
49 | 37 | ||
diff --git a/doc/md/images/poedit-1.jpg b/doc/md/dev/images/poedit-1.jpg index 673ae6d6..673ae6d6 100644 --- a/doc/md/images/poedit-1.jpg +++ b/doc/md/dev/images/poedit-1.jpg | |||
Binary files differ | |||
diff --git a/doc/md/docker/docker-101.md b/doc/md/docker/docker-101.md deleted file mode 100644 index a9c00b85..00000000 --- a/doc/md/docker/docker-101.md +++ /dev/null | |||
@@ -1,140 +0,0 @@ | |||
1 | ## Basics | ||
2 | Install [Docker](https://www.docker.com/), by following the instructions relevant | ||
3 | to your OS / distribution, and start the service. | ||
4 | |||
5 | ### Search an image on [DockerHub](https://hub.docker.com/) | ||
6 | |||
7 | ```bash | ||
8 | $ docker search debian | ||
9 | |||
10 | NAME DESCRIPTION STARS OFFICIAL AUTOMATED | ||
11 | ubuntu Ubuntu is a Debian-based Linux operating s... 2065 [OK] | ||
12 | debian Debian is a Linux distribution that's comp... 603 [OK] | ||
13 | google/debian 47 [OK] | ||
14 | ``` | ||
15 | |||
16 | ### Show available tags for a repository | ||
17 | ```bash | ||
18 | $ curl https://index.docker.io/v1/repositories/debian/tags | python -m json.tool | ||
19 | |||
20 | % Total % Received % Xferd Average Speed Time Time Time Current | ||
21 | Dload Upload Total Spent Left Speed | ||
22 | 100 1283 0 1283 0 0 433 0 --:--:-- 0:00:02 --:--:-- 433 | ||
23 | ``` | ||
24 | |||
25 | Sample output: | ||
26 | ```json | ||
27 | [ | ||
28 | { | ||
29 | "layer": "85a02782", | ||
30 | "name": "stretch" | ||
31 | }, | ||
32 | { | ||
33 | "layer": "59abecbc", | ||
34 | "name": "testing" | ||
35 | }, | ||
36 | { | ||
37 | "layer": "bf0fd686", | ||
38 | "name": "unstable" | ||
39 | }, | ||
40 | { | ||
41 | "layer": "60c52dbe", | ||
42 | "name": "wheezy" | ||
43 | }, | ||
44 | { | ||
45 | "layer": "c5b806fe", | ||
46 | "name": "wheezy-backports" | ||
47 | } | ||
48 | ] | ||
49 | |||
50 | ``` | ||
51 | |||
52 | ### Pull an image from DockerHub | ||
53 | ```bash | ||
54 | $ docker pull repository[:tag] | ||
55 | |||
56 | $ docker pull debian:wheezy | ||
57 | wheezy: Pulling from debian | ||
58 | 4c8cbfd2973e: Pull complete | ||
59 | 60c52dbe9d91: Pull complete | ||
60 | Digest: sha256:c584131da2ac1948aa3e66468a4424b6aea2f33acba7cec0b631bdb56254c4fe | ||
61 | Status: Downloaded newer image for debian:wheezy | ||
62 | ``` | ||
63 | |||
64 | Docker re-uses layers already downloaded. In other words if you have images based on Alpine or some Ubuntu version for example, those can share disk space. | ||
65 | |||
66 | ### Start a container | ||
67 | A container is an instance created from an image, that can be run and that keeps running until its main process exits. Or until the user stops the container. | ||
68 | |||
69 | The simplest way to start a container from image is ``docker run``. It also pulls the image for you if it is not locally available. For more advanced use, refer to ``docker create``. | ||
70 | |||
71 | Stopped containers are not destroyed, unless you specify ``--rm``. To view all created, running and stopped containers, enter: | ||
72 | ```bash | ||
73 | $ docker ps -a | ||
74 | ``` | ||
75 | |||
76 | Some containers may be designed or configured to be restarted, others are not. Also remember both network ports and volumes of a container are created on start, and not editable later. | ||
77 | |||
78 | ### Access a running container | ||
79 | A running container is accessible using ``docker exec``, or ``docker copy``. You can use ``exec`` to start a root shell in the Shaarli container: | ||
80 | ```bash | ||
81 | $ docker exec -ti <container-name-or-id> bash | ||
82 | ``` | ||
83 | Note the names and ID's of containers are listed in ``docker ps``. You can even type only one or two letters of the ID, given they are unique. | ||
84 | |||
85 | Access can also be through one or more network ports, or disk volumes. Both are specified on and fixed on ``docker create`` or ``run``. | ||
86 | |||
87 | You can view the console output of the main container process too: | ||
88 | ```bash | ||
89 | $ docker logs -f <container-name-or-id> | ||
90 | ``` | ||
91 | |||
92 | ### Docker disk use | ||
93 | Trying out different images can fill some gigabytes of disk quickly. Besides images, the docker volumes usually take up most disk space. | ||
94 | |||
95 | If you care only about trying out docker and not about what is running or saved, the following commands should help you out quickly if you run low on disk space: | ||
96 | |||
97 | ```bash | ||
98 | $ docker rmi -f $(docker images -aq) # remove or mark all images for disposal | ||
99 | $ docker volume rm $(docker volume ls -q) # remove all volumes | ||
100 | ``` | ||
101 | |||
102 | ### Systemd config | ||
103 | Systemd is the process manager of choice on Debian-based distributions. Once you have a ``docker`` service installed, you can use the following steps to set up Shaarli to run on system start. | ||
104 | |||
105 | ```bash | ||
106 | systemctl enable /etc/systemd/system/docker.shaarli.service | ||
107 | systemctl start docker.shaarli | ||
108 | systemctl status docker.* | ||
109 | journalctl -f # inspect system log if needed | ||
110 | ``` | ||
111 | |||
112 | You will need sudo or a root terminal to perform some or all of the steps above. Here are the contents for the service file: | ||
113 | ``` | ||
114 | [Unit] | ||
115 | Description=Shaarli Bookmark Manager Container | ||
116 | After=docker.service | ||
117 | Requires=docker.service | ||
118 | |||
119 | |||
120 | [Service] | ||
121 | Restart=always | ||
122 | |||
123 | # Put any environment you want in an included file, like $host- or $domainname in this example | ||
124 | EnvironmentFile=/etc/sysconfig/box-environment | ||
125 | |||
126 | # It's just an example.. | ||
127 | ExecStart=/usr/bin/docker run \ | ||
128 | -p 28010:80 \ | ||
129 | --name ${hostname}-shaarli \ | ||
130 | --hostname shaarli.${domainname} \ | ||
131 | -v /srv/docker-volumes-local/shaarli-data:/var/www/shaarli/data:rw \ | ||
132 | -v /etc/localtime:/etc/localtime:ro \ | ||
133 | shaarli/shaarli:latest | ||
134 | |||
135 | ExecStop=/usr/bin/docker rm -f ${hostname}-shaarli | ||
136 | |||
137 | |||
138 | [Install] | ||
139 | WantedBy=multi-user.target | ||
140 | ``` | ||
diff --git a/doc/md/docker/resources.md b/doc/md/docker/resources.md deleted file mode 100644 index 082d4a46..00000000 --- a/doc/md/docker/resources.md +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | ### Docker | ||
2 | |||
3 | - [Interactive Docker training portal](https://www.katacoda.com/courses/docker/) on [Katakoda](https://www.katacoda.com/) | ||
4 | - [Where are Docker images stored?](http://blog.thoward37.me/articles/where-are-docker-images-stored/) | ||
5 | - [Dockerfile reference](https://docs.docker.com/reference/builder/) | ||
6 | - [Dockerfile best practices](https://docs.docker.com/articles/dockerfile_best-practices/) | ||
7 | - [Volumes](https://docs.docker.com/userguide/dockervolumes/) | ||
8 | |||
9 | ### DockerHub | ||
10 | |||
11 | - [Repositories](https://docs.docker.com/userguide/dockerrepos/) | ||
12 | - [Teams and organizations](https://docs.docker.com/docker-hub/orgs/) | ||
13 | - [GitHub automated build](https://docs.docker.com/docker-hub/github/) | ||
14 | |||
15 | ### Service management | ||
16 | |||
17 | - [Using supervisord](https://docs.docker.com/articles/using_supervisord/) | ||
18 | - [Nginx in the foreground](http://nginx.org/en/docs/ngx_core_module.html#daemon) | ||
19 | - [supervisord](http://supervisord.org/) | ||
diff --git a/doc/md/docker/reverse-proxy-configuration.md b/doc/md/docker/reverse-proxy-configuration.md deleted file mode 100644 index e53c9422..00000000 --- a/doc/md/docker/reverse-proxy-configuration.md +++ /dev/null | |||
@@ -1,123 +0,0 @@ | |||
1 | ## Foreword | ||
2 | |||
3 | This guide assumes that: | ||
4 | |||
5 | - Shaarli runs in a Docker container | ||
6 | - The host's `10080` port is mapped to the container's `80` port | ||
7 | - Shaarli's Fully Qualified Domain Name (FQDN) is `shaarli.domain.tld` | ||
8 | - HTTP traffic is redirected to HTTPS | ||
9 | |||
10 | ## Apache | ||
11 | |||
12 | - [Apache 2.4 documentation](https://httpd.apache.org/docs/2.4/) | ||
13 | - [mod_proxy](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html) | ||
14 | - [Reverse Proxy Request Headers](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers) | ||
15 | |||
16 | The following HTTP headers are set when the `ProxyPass` directive is set: | ||
17 | |||
18 | - `X-Forwarded-For` | ||
19 | - `X-Forwarded-Host` | ||
20 | - `X-Forwarded-Server` | ||
21 | |||
22 | The original `SERVER_NAME` can be sent to the proxied host by setting the [`ProxyPreserveHost`](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#ProxyPreserveHost) directive to `On`. | ||
23 | |||
24 | ```apache | ||
25 | <VirtualHost *:80> | ||
26 | ServerName shaarli.domain.tld | ||
27 | Redirect permanent / https://shaarli.domain.tld | ||
28 | </VirtualHost> | ||
29 | |||
30 | <VirtualHost *:443> | ||
31 | ServerName shaarli.domain.tld | ||
32 | |||
33 | SSLEngine on | ||
34 | SSLCertificateFile /path/to/cert | ||
35 | SSLCertificateKeyFile /path/to/certkey | ||
36 | |||
37 | LogLevel warn | ||
38 | ErrorLog /var/log/apache2/shaarli-error.log | ||
39 | CustomLog /var/log/apache2/shaarli-access.log combined | ||
40 | |||
41 | RequestHeader set X-Forwarded-Proto "https" | ||
42 | ProxyPreserveHost On | ||
43 | |||
44 | ProxyPass / http://127.0.0.1:10080/ | ||
45 | ProxyPassReverse / http://127.0.0.1:10080/ | ||
46 | </VirtualHost> | ||
47 | ``` | ||
48 | |||
49 | |||
50 | ## HAProxy | ||
51 | |||
52 | - [HAProxy documentation](https://cbonte.github.io/haproxy-dconv/) | ||
53 | |||
54 | ```conf | ||
55 | global | ||
56 | [...] | ||
57 | |||
58 | defaults | ||
59 | [...] | ||
60 | |||
61 | frontend http-in | ||
62 | bind :80 | ||
63 | redirect scheme https code 301 if !{ ssl_fc } | ||
64 | |||
65 | bind :443 ssl crt /path/to/cert.pem | ||
66 | |||
67 | default_backend shaarli | ||
68 | |||
69 | |||
70 | backend shaarli | ||
71 | mode http | ||
72 | option http-server-close | ||
73 | option forwardfor | ||
74 | reqadd X-Forwarded-Proto: https | ||
75 | |||
76 | server shaarli1 127.0.0.1:10080 | ||
77 | ``` | ||
78 | |||
79 | |||
80 | ## Nginx | ||
81 | |||
82 | - [Nginx documentation](https://nginx.org/en/docs/) | ||
83 | |||
84 | ```nginx | ||
85 | http { | ||
86 | [...] | ||
87 | |||
88 | index index.html index.php; | ||
89 | |||
90 | root /home/john/web; | ||
91 | access_log /var/log/nginx/access.log; | ||
92 | error_log /var/log/nginx/error.log; | ||
93 | |||
94 | server { | ||
95 | listen 80; | ||
96 | server_name shaarli.domain.tld; | ||
97 | return 301 https://shaarli.domain.tld$request_uri; | ||
98 | } | ||
99 | |||
100 | server { | ||
101 | listen 443 ssl http2; | ||
102 | server_name shaarli.domain.tld; | ||
103 | |||
104 | ssl_certificate /path/to/cert | ||
105 | ssl_certificate_key /path/to/certkey | ||
106 | |||
107 | location / { | ||
108 | proxy_set_header X-Real-IP $remote_addr; | ||
109 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
110 | proxy_set_header X-Forwarded-Proto $scheme; | ||
111 | proxy_set_header X-Forwarded-Host $host; | ||
112 | |||
113 | proxy_pass http://localhost:10080/; | ||
114 | proxy_set_header Host $host; | ||
115 | proxy_connect_timeout 30s; | ||
116 | proxy_read_timeout 120s; | ||
117 | |||
118 | access_log /var/log/nginx/shaarli.access.log; | ||
119 | error_log /var/log/nginx/shaarli.error.log; | ||
120 | } | ||
121 | } | ||
122 | } | ||
123 | ``` | ||
diff --git a/doc/md/docker/shaarli-images.md b/doc/md/docker/shaarli-images.md deleted file mode 100644 index 14971d54..00000000 --- a/doc/md/docker/shaarli-images.md +++ /dev/null | |||
@@ -1,118 +0,0 @@ | |||
1 | A brief guide on getting starting using docker is given in [Docker 101](docker-101.md). | ||
2 | To learn more about user data and how to keep it across versions, please see [Upgrade and Migration](../Upgrade-and-migration.md). | ||
3 | |||
4 | ## Get and run a Shaarli image | ||
5 | |||
6 | ### DockerHub repository | ||
7 | The images can be found in the [`shaarli/shaarli`](https://hub.docker.com/r/shaarli/shaarli/) | ||
8 | repository. | ||
9 | |||
10 | ### Available image tags | ||
11 | - `latest`: latest branch | ||
12 | - `master`: master branch | ||
13 | - `stable`: stable branch | ||
14 | |||
15 | The `latest`, `master` and `stable` images rely on: | ||
16 | |||
17 | - [Alpine Linux](https://www.alpinelinux.org/) | ||
18 | - [PHP7-FPM](http://php-fpm.org/) | ||
19 | - [Nginx](http://nginx.org/) | ||
20 | |||
21 | Additional Dockerfiles are provided for the `arm32v7` platform, relying on | ||
22 | [Linuxserver.io Alpine armhf | ||
23 | images](https://hub.docker.com/r/lsiobase/alpine.armhf/). These images must be | ||
24 | built using [`docker | ||
25 | build`](https://docs.docker.com/engine/reference/commandline/build/) on an | ||
26 | `arm32v7` machine or using an emulator such as | ||
27 | [qemu](https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/). | ||
28 | |||
29 | ### Download from Docker Hub | ||
30 | ```shell | ||
31 | $ docker pull shaarli/shaarli | ||
32 | |||
33 | latest: Pulling from shaarli/shaarli | ||
34 | 32716d9fcddb: Pull complete | ||
35 | 84899d045435: Pull complete | ||
36 | 4b6ad7444763: Pull complete | ||
37 | e0345ef7a3e0: Pull complete | ||
38 | 5c1dd344094f: Pull complete | ||
39 | 6422305a200b: Pull complete | ||
40 | 7d63f861dbef: Pull complete | ||
41 | 3eb97210645c: Pull complete | ||
42 | 869319d746ff: Already exists | ||
43 | 869319d746ff: Pulling fs layer | ||
44 | 902b87aaaec9: Already exists | ||
45 | Digest: sha256:f836b4627b958b3f83f59c332f22f02fcd495ace3056f2be2c4912bd8704cc98 | ||
46 | Status: Downloaded newer image for shaarli/shaarli:latest | ||
47 | ``` | ||
48 | |||
49 | ### Create and start a new container from the image | ||
50 | ```shell | ||
51 | # map the host's :8000 port to the container's :80 port | ||
52 | $ docker create -p 8000:80 shaarli/shaarli | ||
53 | d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101 | ||
54 | |||
55 | # launch the container in the background | ||
56 | $ docker start d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101 | ||
57 | d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101 | ||
58 | |||
59 | # list active containers | ||
60 | $ docker ps | ||
61 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | ||
62 | d40b7af693d6 shaarli/shaarli /usr/bin/supervisor 15 seconds ago Up 4 seconds 0.0.0.0:8000->80/tcp backstabbing_galileo | ||
63 | ``` | ||
64 | |||
65 | ### Stop and destroy a container | ||
66 | ```shell | ||
67 | $ docker stop backstabbing_galileo # those docker guys are really rude to physicists! | ||
68 | backstabbing_galileo | ||
69 | |||
70 | # check the container is stopped | ||
71 | $ docker ps | ||
72 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | ||
73 | |||
74 | # list ALL containers | ||
75 | $ docker ps -a | ||
76 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | ||
77 | d40b7af693d6 shaarli/shaarli /usr/bin/supervisor 5 minutes ago Exited (0) 48 seconds ago backstabbing_galileo | ||
78 | |||
79 | # destroy the container | ||
80 | $ docker rm backstabbing_galileo # let's put an end to these barbarian practices | ||
81 | backstabbing_galileo | ||
82 | |||
83 | $ docker ps -a | ||
84 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | ||
85 | ``` | ||
86 | |||
87 | ### Automatic builds | ||
88 | Docker users can start a personal instance from an | ||
89 | [autobuild image](https://hub.docker.com/r/shaarli/shaarli/). | ||
90 | For example to start a temporary Shaarli at ``localhost:8000``, and keep session | ||
91 | data (config, storage): | ||
92 | |||
93 | ```shell | ||
94 | MY_SHAARLI_VOLUME=$(cd /path/to/shaarli/data/ && pwd -P) | ||
95 | docker run -ti --rm \ | ||
96 | -p 8000:80 \ | ||
97 | -v $MY_SHAARLI_VOLUME:/var/www/shaarli/data \ | ||
98 | shaarli/shaarli | ||
99 | ``` | ||
100 | |||
101 | ### Volumes and data persistence | ||
102 | Data can be persisted by [using volumes](https://docs.docker.com/storage/volumes/). | ||
103 | Volumes allow to keep your data when renewing and/or updating container images: | ||
104 | |||
105 | ```shell | ||
106 | # Create data volumes | ||
107 | $ docker volume create shaarli-data | ||
108 | $ docker volume create shaarli-cache | ||
109 | |||
110 | # Create and start a Shaarli container using these volumes to persist data | ||
111 | $ docker create \ | ||
112 | --name shaarli \ | ||
113 | -v shaarli-cache:/var/www/shaarli/cache \ | ||
114 | -v shaarli-data:/var/www/shaarli/data \ | ||
115 | -p 8000:80 \ | ||
116 | shaarli/shaarli:master | ||
117 | $ docker start shaarli | ||
118 | ``` | ||
diff --git a/doc/md/guides/backup-restore-import-export.md b/doc/md/guides/backup-restore-import-export.md deleted file mode 100644 index bb790074..00000000 --- a/doc/md/guides/backup-restore-import-export.md +++ /dev/null | |||
@@ -1,64 +0,0 @@ | |||
1 | ## Backup and restore the datastore file | ||
2 | |||
3 | Backup the file `data/datastore.php` (by FTP or SSH). Restore by putting the file back in place. | ||
4 | |||
5 | Example command: | ||
6 | ```bash | ||
7 | rsync -avzP my.server.com:/var/www/shaarli/data/datastore.php datastore-$(date +%Y-%m-%d_%H%M).php | ||
8 | ``` | ||
9 | |||
10 | ## Export links as... | ||
11 | |||
12 | To export links as an HTML file, under _Tools > Export_, choose: | ||
13 | |||
14 | - _Export all_ to export both public and private links | ||
15 | - _Export public_ to export public links only | ||
16 | - _Export private_ to export private links only | ||
17 | |||
18 | Restore by using the `Import` feature. | ||
19 | |||
20 | - This can be done using the [shaarchiver](https://github.com/nodiscc/shaarchiver) tool. | ||
21 | |||
22 | Example command: | ||
23 | ```bash | ||
24 | ./export-bookmarks.py --url=https://my.server.com/shaarli --username=myusername --password=mysupersecretpassword --download-dir=./ --type=all | ||
25 | ``` | ||
26 | |||
27 | ## Import links from... | ||
28 | |||
29 | ### Diigo | ||
30 | |||
31 | If you export your bookmark from Diigo, make sure you use the Delicious export, not the Netscape export. (Their Netscape export is broken, and they don't seem to be interested in fixing it.) | ||
32 | |||
33 | ### Mister Wong | ||
34 | |||
35 | See [this issue](https://github.com/sebsauvage/Shaarli/issues/146) for import tweaks. | ||
36 | |||
37 | ### SemanticScuttle | ||
38 | |||
39 | To correctly import the tags from a [SemanticScuttle](http://semanticscuttle.sourceforge.net/) HTML export, edit the HTML file before importing and replace all occurences of `tags=` (lowercase) to `TAGS=` (uppercase). | ||
40 | |||
41 | ### Scuttle | ||
42 | |||
43 | Shaarli cannot import data directly from [Scuttle](https://github.com/scronide/scuttle). | ||
44 | |||
45 | However, you can use the third-party [scuttle-to-shaarli](https://github.com/q2apro/scuttle-to-shaarli) | ||
46 | tool to export the Scuttle database to the Netscape HTML format compatible with the Shaarli importer. | ||
47 | |||
48 | ### Refind | ||
49 | |||
50 | You can use the third-party tool [Derefind](https://github.com/ShawnPConroy/Derefind) to convert refind.com bookmark exports to a format that can be imported into Shaarli. | ||
51 | |||
52 | ## Import Shaarli links to Firefox | ||
53 | |||
54 | - Export your Shaarli links as described above. | ||
55 | - For compatibility reasons, check `Prepend note permalinks with this Shaarli instance's URL (useful to import bookmarks in a web browser)` | ||
56 | - In Firefox, open the bookmark manager (not the sidebar! `Bookmarks menu > Show all bookmarks` or `Ctrl+Shift+B`) | ||
57 | - Select `Import and Backup > Import bookmarks in HTML format` | ||
58 | |||
59 | Your bookmarks will be imported in Firefox, ready to use, with tags and descriptions retained. "Self" (notes) shaares will still point to the Shaarli instance you exported them from, but the note text can be viewed directly in the bookmark properties inside your browser. Depending on the number of bookmarks, the import can take some time. | ||
60 | |||
61 | You may be interested in these Firefox addons to manage links imported from Shaarli | ||
62 | |||
63 | - [Bookmark Deduplicator](https://addons.mozilla.org/en-US/firefox/addon/bookmark-deduplicator/) - provides an easy way to deduplicate your bookmarks | ||
64 | - [TagSieve](https://addons.mozilla.org/en-US/firefox/addon/tagsieve/) - browse your bookmarks by their tags | ||
diff --git a/doc/md/guides/images/01-create-droplet-distro.jpg b/doc/md/guides/images/01-create-droplet-distro.jpg deleted file mode 100644 index 63682ba8..00000000 --- a/doc/md/guides/images/01-create-droplet-distro.jpg +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/guides/images/02-create-droplet-region.jpg b/doc/md/guides/images/02-create-droplet-region.jpg deleted file mode 100644 index 135a78be..00000000 --- a/doc/md/guides/images/02-create-droplet-region.jpg +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/guides/images/03-create-droplet-size.jpg b/doc/md/guides/images/03-create-droplet-size.jpg deleted file mode 100644 index aa5b2fd2..00000000 --- a/doc/md/guides/images/03-create-droplet-size.jpg +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/guides/images/04-finalize.jpg b/doc/md/guides/images/04-finalize.jpg deleted file mode 100644 index 68ec0dc5..00000000 --- a/doc/md/guides/images/04-finalize.jpg +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/guides/images/05-droplet.jpg b/doc/md/guides/images/05-droplet.jpg deleted file mode 100644 index 44e93a1e..00000000 --- a/doc/md/guides/images/05-droplet.jpg +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/guides/images/06-domain.jpg b/doc/md/guides/images/06-domain.jpg deleted file mode 100644 index 5827dd93..00000000 --- a/doc/md/guides/images/06-domain.jpg +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/guides/install-shaarli-with-debian9-and-docker.md b/doc/md/guides/install-shaarli-with-debian9-and-docker.md deleted file mode 100644 index f1b26d47..00000000 --- a/doc/md/guides/install-shaarli-with-debian9-and-docker.md +++ /dev/null | |||
@@ -1,257 +0,0 @@ | |||
1 | _Last updated on 2018-07-01._ | ||
2 | |||
3 | ## Goals | ||
4 | - Getting a Virtual Private Server (VPS) | ||
5 | - Running Shaarli: | ||
6 | - as a Docker container, | ||
7 | - using the Træfik reverse proxy, | ||
8 | - securized with TLS certificates from Let's Encrypt. | ||
9 | |||
10 | |||
11 | The following components and tools will be used: | ||
12 | |||
13 | - [Debian](https://www.debian.org/), a GNU/Linux distribution widely used in | ||
14 | server environments; | ||
15 | - [Docker](https://docs.docker.com/engine/docker-overview/), an open platform | ||
16 | for developing, shipping, and running applications; | ||
17 | - [Docker Compose](https://docs.docker.com/compose/), a tool for defining and | ||
18 | running multi-container Docker applications. | ||
19 | |||
20 | |||
21 | More information can be found in the [Resources](#resources) section at the | ||
22 | bottom of the guide. | ||
23 | |||
24 | ## Getting a Virtual Private Server | ||
25 | For this guide, I went for the smallest VPS available from DigitalOcean, | ||
26 | a Droplet with 1 CPU, 1 GiB RAM and 25 GiB SSD storage, which costs | ||
27 | $5/month ($0.007/hour): | ||
28 | |||
29 | - [Droplets Overview](https://www.digitalocean.com/docs/droplets/overview/) | ||
30 | - [Pricing](https://www.digitalocean.com/pricing/) | ||
31 | - [How to Create a Droplet from the DigitalOcean Control Panel](https://www.digitalocean.com/docs/droplets/how-to/create/) | ||
32 | - [How to Add SSH Keys to Droplets](https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/) | ||
33 | - [Initial Server Setup with Debian 8](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8) (also applies to Debian 9) | ||
34 | - [An Introduction to Securing your Linux VPS](https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps) | ||
35 | |||
36 | ### Creating a Droplet | ||
37 | Select `Debian 9` as the Droplet distribution: | ||
38 | |||
39 | <img src="../images/01-create-droplet-distro.jpg" | ||
40 | width="500px" | ||
41 | alt="Droplet distribution" /> | ||
42 | |||
43 | Choose a region that is geographically close to you: | ||
44 | |||
45 | <img src="../images/02-create-droplet-region.jpg" | ||
46 | width="500px" | ||
47 | alt="Droplet region" /> | ||
48 | |||
49 | Choose a Droplet size that corresponds to your usage and budget: | ||
50 | |||
51 | <img src="../images/03-create-droplet-size.jpg" | ||
52 | width="500px" | ||
53 | alt="Droplet size" /> | ||
54 | |||
55 | Finalize the Droplet creation: | ||
56 | |||
57 | <img src="../images/04-finalize.jpg" | ||
58 | width="500px" | ||
59 | alt="Droplet finalization" /> | ||
60 | |||
61 | Droplet information is displayed on the Control Panel: | ||
62 | |||
63 | <img src="../images/05-droplet.jpg" | ||
64 | width="500px" | ||
65 | alt="Droplet summary" /> | ||
66 | |||
67 | Once your VPS has been created, you will receive an e-mail with connection | ||
68 | instructions. | ||
69 | |||
70 | ## Obtaining a domain name | ||
71 | After creating your VPS, it will be reachable using its IP address; some hosting | ||
72 | providers also create a DNS record, e.g. `ns4853142.ip-01-47-127.eu`. | ||
73 | |||
74 | A domain name (DNS record) is required to obtain a certificate and setup HTTPS | ||
75 | (HTTP with TLS encryption). | ||
76 | |||
77 | Domain names can be obtained from registrars through hosting providers such as | ||
78 | [Gandi](https://www.gandi.net/en/domain). | ||
79 | |||
80 | Once you have your own domain, you need to create a new DNS record that points | ||
81 | to your VPS' IP address: | ||
82 | |||
83 | <img src="../images/06-domain.jpg" | ||
84 | width="650px" | ||
85 | alt="Domain configuration" /> | ||
86 | |||
87 | ## Host setup | ||
88 | Now's the time to connect to your freshly created VPS! | ||
89 | |||
90 | ```shell | ||
91 | $ ssh root@188.166.85.8 | ||
92 | |||
93 | Linux stretch-shaarli-02 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 | ||
94 | |||
95 | The programs included with the Debian GNU/Linux system are free software; | ||
96 | the exact distribution terms for each program are described in the | ||
97 | individual files in /usr/share/doc/*/copyright. | ||
98 | |||
99 | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
100 | permitted by applicable law. | ||
101 | Last login: Sun Jul 1 11:20:18 2018 from <REDACTED> | ||
102 | |||
103 | root@stretch-shaarli-02:~$ | ||
104 | ``` | ||
105 | |||
106 | ### Updating the system | ||
107 | ```shell | ||
108 | root@stretch-shaarli-02:~$ apt update && apt upgrade -y | ||
109 | ``` | ||
110 | |||
111 | ### Setting up Docker | ||
112 | _The following instructions are from the | ||
113 | [Get Docker CE for Debian](https://docs.docker.com/install/linux/docker-ce/debian/) | ||
114 | guide._ | ||
115 | |||
116 | Install package dependencies: | ||
117 | |||
118 | ```shell | ||
119 | root@stretch-shaarli-02:~$ apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common | ||
120 | ``` | ||
121 | |||
122 | Add Docker's package repository GPG key: | ||
123 | |||
124 | ```shell | ||
125 | root@stretch-shaarli-02:~$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - | ||
126 | ``` | ||
127 | |||
128 | Add Docker's package repository: | ||
129 | |||
130 | ```shell | ||
131 | root@stretch-shaarli-02:~$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable" | ||
132 | ``` | ||
133 | |||
134 | Update package lists and install Docker: | ||
135 | |||
136 | ```shell | ||
137 | root@stretch-shaarli-02:~$ apt update && apt install -y docker-ce | ||
138 | ``` | ||
139 | |||
140 | Verify Docker is properly configured by running the `hello-world` image: | ||
141 | |||
142 | ```shell | ||
143 | root@stretch-shaarli-02:~$ docker run hello-world | ||
144 | ``` | ||
145 | |||
146 | ### Setting up Docker Compose | ||
147 | _The following instructions are from the | ||
148 | [Install Docker Compose](https://docs.docker.com/compose/install/) | ||
149 | guide._ | ||
150 | |||
151 | Download the current version from the release page: | ||
152 | |||
153 | ```shell | ||
154 | root@stretch-shaarli-02:~$ curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose | ||
155 | root@stretch-shaarli-02:~$ chmod +x /usr/local/bin/docker-compose | ||
156 | ``` | ||
157 | |||
158 | ## Running Shaarli | ||
159 | Shaarli comes with a configuration file for Docker Compose, that will setup: | ||
160 | |||
161 | - a local Docker network | ||
162 | - a Docker [volume](https://docs.docker.com/storage/volumes/) to store Shaarli data | ||
163 | - a Docker [volume](https://docs.docker.com/storage/volumes/) to store Træfik TLS configuration and certificates | ||
164 | - a [Shaarli](https://hub.docker.com/r/shaarli/shaarli/) instance | ||
165 | - a [Træfik](https://hub.docker.com/_/traefik/) instance | ||
166 | |||
167 | [Træfik](https://docs.traefik.io/) is a modern HTTP reverse proxy, with native | ||
168 | support for Docker and [Let's Encrypt](https://letsencrypt.org/). | ||
169 | |||
170 | ### Compose configuration | ||
171 | Create a new directory to store the configuration: | ||
172 | |||
173 | ```shell | ||
174 | root@stretch-shaarli-02:~$ mkdir shaarli && cd shaarli | ||
175 | root@stretch-shaarli-02:~/shaarli$ | ||
176 | ``` | ||
177 | |||
178 | Download the current version of Shaarli's `docker-compose.yml`: | ||
179 | |||
180 | ```shell | ||
181 | root@stretch-shaarli-02:~/shaarli$ curl -L https://raw.githubusercontent.com/shaarli/Shaarli/master/docker-compose.yml -o docker-compose.yml | ||
182 | ``` | ||
183 | |||
184 | Create the `.env` file and fill in your VPS and domain information (replace | ||
185 | `<MY_SHAARLI_DOMAIN>` and `<MY_CONTACT_EMAIL>` with your actual information): | ||
186 | |||
187 | ```shell | ||
188 | root@stretch-shaarli-02:~/shaarli$ vim .env | ||
189 | ``` | ||
190 | |||
191 | ```shell | ||
192 | SHAARLI_VIRTUAL_HOST=<MY_SHAARLI_DOMAIN> | ||
193 | SHAARLI_LETSENCRYPT_EMAIL=<MY_CONTACT_EMAIL> | ||
194 | ``` | ||
195 | |||
196 | ### Pull the Docker images | ||
197 | ```shell | ||
198 | root@stretch-shaarli-02:~/shaarli$ docker-compose pull | ||
199 | Pulling shaarli ... done | ||
200 | Pulling traefik ... done | ||
201 | ``` | ||
202 | |||
203 | ### Run! | ||
204 | ```shell | ||
205 | root@stretch-shaarli-02:~/shaarli$ docker-compose up -d | ||
206 | Creating network "shaarli_http-proxy" with the default driver | ||
207 | Creating volume "shaarli_traefik-acme" with default driver | ||
208 | Creating volume "shaarli_shaarli-data" with default driver | ||
209 | Creating shaarli_shaarli_1 ... done | ||
210 | Creating shaarli_traefik_1 ... done | ||
211 | ``` | ||
212 | |||
213 | ## Conclusion | ||
214 | Congratulations! Your Shaarli instance should be up and running, and available | ||
215 | at `https://<MY_SHAARLI_DOMAIN>`. | ||
216 | |||
217 | <img src="../images/07-installation.jpg" | ||
218 | width="500px" | ||
219 | alt="Shaarli installation page" /> | ||
220 | |||
221 | ## Resources | ||
222 | ### Related Shaarli documentation | ||
223 | - [Docker 101](../docker/docker-101.md) | ||
224 | - [Shaarli images](../docker/shaarli-images.md) | ||
225 | |||
226 | ### Hosting providers | ||
227 | - [DigitalOcean](https://www.digitalocean.com/) | ||
228 | - [Gandi](https://www.gandi.net/en) | ||
229 | - [OVH](https://www.ovh.co.uk/) | ||
230 | - [RackSpace](https://www.rackspace.com/) | ||
231 | - etc. | ||
232 | |||
233 | ### Domain Names and Registrars | ||
234 | - [Introduction to the Domain Name System (DNS)](https://opensource.com/article/17/4/introduction-domain-name-system-dns) | ||
235 | - [ICANN](https://www.icann.org/) | ||
236 | - [Domain name registrar](https://en.wikipedia.org/wiki/Domain_name_registrar) | ||
237 | - [OVH Domain Registration](https://www.ovh.co.uk/domains/) | ||
238 | - [Gandi Domain Registration](https://www.gandi.net/en/domain) | ||
239 | |||
240 | ### HTTPS and Security | ||
241 | - [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) | ||
242 | - [Let's Encrypt](https://letsencrypt.org/) | ||
243 | |||
244 | ### Docker | ||
245 | - [Docker Overview](https://docs.docker.com/engine/docker-overview/) | ||
246 | - [Docker Documentation](https://docs.docker.com/) | ||
247 | - [Get Docker CE for Debian](https://docs.docker.com/install/linux/docker-ce/debian/) | ||
248 | - [docker logs](https://docs.docker.com/engine/reference/commandline/logs/) | ||
249 | - [Volumes](https://docs.docker.com/storage/volumes/) | ||
250 | - [Install Docker Compose](https://docs.docker.com/compose/install/) | ||
251 | - [docker-compose logs](https://docs.docker.com/compose/reference/logs/) | ||
252 | |||
253 | ### Træfik | ||
254 | - [Getting Started](https://docs.traefik.io/) | ||
255 | - [Docker backend](https://docs.traefik.io/configuration/backends/docker/) | ||
256 | - [Let's Encrypt and Docker](https://docs.traefik.io/user-guide/docker-and-lets-encrypt/) | ||
257 | - [traefik](https://hub.docker.com/_/traefik/) Docker image | ||
diff --git a/doc/md/guides/various-hacks.md b/doc/md/guides/various-hacks.md deleted file mode 100644 index 0cef99df..00000000 --- a/doc/md/guides/various-hacks.md +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | ### Decode datastore content | ||
2 | |||
3 | To display the array representing the data saved in `data/datastore.php`, use the following snippet: | ||
4 | |||
5 | ```php | ||
6 | $data = "tZNdb9MwFIb... <Commented content inside datastore.php>"; | ||
7 | $out = unserialize(gzinflate(base64_decode($data))); | ||
8 | echo "<pre>"; // Pretty printing is love, pretty printing is life | ||
9 | print_r($out); | ||
10 | echo "</pre>"; | ||
11 | exit; | ||
12 | ``` | ||
13 | This will output the internal representation of the datastore, "unobfuscated" (if this can really be considered obfuscation). | ||
14 | |||
15 | Alternatively, you can transform to JSON format (and pretty-print if you have `jq` installed): | ||
16 | ``` | ||
17 | php -r 'print(json_encode(unserialize(gzinflate(base64_decode(preg_replace("!.*/\* (.+) \*/.*!", "$1", file_get_contents("data/datastore.php")))))));' | jq . | ||
18 | ``` | ||
19 | |||
20 | ### See also | ||
21 | |||
22 | - [Add a new custom field to shaares (example patch)](https://gist.github.com/nodiscc/8b0194921f059d7b9ad89a581ecd482c) | ||
23 | - [Copy an existing Shaarli installation over SSH, and serve it locally](https://gist.github.com/nodiscc/ed161c66e5b028b5299b0a3733d01c77) | ||
24 | - [Create multiple Shaarli instances, generate an HTML index of them](https://gist.github.com/nodiscc/52e711cda3bc47717c16065231cf6b20) | ||
diff --git a/doc/md/guides/images/07-installation.jpg b/doc/md/images/07-installation.jpg index 42cc9f10..42cc9f10 100644 --- a/doc/md/guides/images/07-installation.jpg +++ b/doc/md/images/07-installation.jpg | |||
Binary files differ | |||
diff --git a/doc/md/images/bookmarklet.png b/doc/md/images/bookmarklet.png deleted file mode 100644 index 0262578e..00000000 --- a/doc/md/images/bookmarklet.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/images/firefoxshare.png b/doc/md/images/firefoxshare.png deleted file mode 100644 index 8f8fdba4..00000000 --- a/doc/md/images/firefoxshare.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/images/install-shaarli.png b/doc/md/images/install-shaarli.png deleted file mode 100644 index d5d5baa7..00000000 --- a/doc/md/images/install-shaarli.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/doc/md/index.md b/doc/md/index.md index 1431f9e1..2c4995f8 100644 --- a/doc/md/index.md +++ b/doc/md/index.md | |||
@@ -2,21 +2,19 @@ | |||
2 | 2 | ||
3 | The personal, minimalist, super-fast, database free, bookmarking service. | 3 | The personal, minimalist, super-fast, database free, bookmarking service. |
4 | 4 | ||
5 | Do you want to share the links you discover? | 5 | Do you want to share the links you discover? Shaarli is a minimalist bookmark manager and link sharing service that you can install on your own server. It is designed to be personal (single-user), fast and handy. |
6 | Shaarli is a minimalist bookmark manager and link sharing service that you can install on your own server. | ||
7 | It is designed to be personal (single-user), fast and handy. | ||
8 | |||
9 | <!-- TODO screenshots --> | ||
10 | 6 | ||
11 | Visit the pages in the sidebar to find information on how to setup, use, configure, tweak and troubleshoot Shaarli. | 7 | Visit the pages in the sidebar to find information on how to setup, use, configure, tweak and troubleshoot Shaarli. |
12 | 8 | ||
13 | |||
14 | * [GitHub project page](https://github.com/shaarli/Shaarli) | 9 | * [GitHub project page](https://github.com/shaarli/Shaarli) |
15 | * [Online documentation](https://shaarli.readthedocs.io/) | 10 | * [Documentation](https://shaarli.readthedocs.io/) |
16 | * [Latest releases](https://github.com/shaarli/Shaarli/releases) | ||
17 | * [Changelog](https://github.com/shaarli/Shaarli/blob/master/CHANGELOG.md) | 11 | * [Changelog](https://github.com/shaarli/Shaarli/blob/master/CHANGELOG.md) |
18 | 12 | ||
19 | 13 | ||
14 | [![](https://i.imgur.com/8wEBRSG.png)](https://i.imgur.com/WWPfSj0.png) [![](https://i.imgur.com/93PpLLs.png)](https://i.imgur.com/V09kAQt.png) [![](https://i.imgur.com/rrsjWYy.png)](https://i.imgur.com/TZzGHMs.png) [![](https://i.imgur.com/8iRzHfe.png)](https://i.imgur.com/sfJJ6NT.png) [![](https://i.imgur.com/GjZGvIh.png)](https://i.imgur.com/QsedIuJ.png) [![](https://i.imgur.com/TFZ9PEq.png)](https://i.imgur.com/KdtF8Ll.png) [![](https://i.imgur.com/uICDOle.png)](https://i.imgur.com/27wYsbC.png) [![](https://i.imgur.com/tVvD3gH.png)](https://i.imgur.com/zGF4d6L.jpg) | ||
15 | |||
16 | |||
17 | |||
20 | ## Demo | 18 | ## Demo |
21 | 19 | ||
22 | You can use this [public demo instance of Shaarli](https://demo.shaarli.org). | 20 | You can use this [public demo instance of Shaarli](https://demo.shaarli.org). |
@@ -25,101 +23,80 @@ It runs the latest development version of Shaarli and is updated/reset daily. | |||
25 | Login: `demo`; Password: `demo` | 23 | Login: `demo`; Password: `demo` |
26 | 24 | ||
27 | 25 | ||
26 | ## Getting started | ||
27 | |||
28 | - [Configure your server](Server-configuration.md) | ||
29 | - [Install Shaarli](Installation.md) | ||
30 | - Or install Shaarli using [Docker](Docker.md) | ||
31 | |||
32 | |||
28 | ## Features | 33 | ## Features |
29 | 34 | ||
30 | Shaarli can be used: | 35 | Shaarli can be used: |
31 | 36 | ||
32 | - to share, comment and save interesting links and news | 37 | - to share, comment and save interesting links |
33 | - to bookmark useful/frequent links and share them between computers | 38 | - to bookmark useful/frequent links and share them between computers |
34 | - as a minimal blog/microblog/writing platform | 39 | - as a minimal blog/microblog/writing platform |
35 | - as a read-it-later list | 40 | - as a read-it-later/todo list |
36 | - to draft and save articles/posts/ideas | 41 | - as a notepad to draft and save articles/posts/ideas |
37 | - to keep notes, documentation and code snippets | 42 | - as a knowledge base to keep notes, documentation and code snippets |
38 | - as a shared clipboard/notepad/pastebin between machines | 43 | - as a shared clipboard/notepad/pastebin between computers |
39 | - as a todo list | 44 | - as playlist manager for online media |
40 | - to store media playlists | 45 | - to feed other blogs, aggregators, social networks... |
41 | - to keep extracts/comments from webpages that may disappear. | ||
42 | - to keep track of ongoing discussions | ||
43 | - to feed other blogs, aggregators, social networks... using RSS feeds | ||
44 | 46 | ||
45 | ### Edit, view and search your links | 47 | ### Edit, view and search your links |
46 | 48 | ||
47 | - Minimalist design | 49 | - Editable URL, title, description, tags, private/public status for all your [Shaares](Usage.md) |
48 | - FAST | 50 | - [Tags](Usage.md#tags) to organize your Shaares |
49 | - Customizable link titles and descriptions | 51 | - [Search](Usage.md#search) in all fields |
50 | - Tags to organize your links (features tag autocompletion, renaming, merging and deletion) | 52 | - Unique [permalinks](Usage.md#permalinks) for easy reference |
51 | - Search by tag or using the full-text search | 53 | - Paginated Shaares list view (with image and video thumbnails) |
52 | - Public and private links (visible only to logged-in users) | 54 | - [Tag cloud/list](Usage#tag-cloud) views |
53 | - Unique permalinks for easy reference | 55 | - [Picture wall](Usage#picture-wall)/thumbnails view (with lazy loading) |
54 | - Paginated link list (with image and video thumbnails) | 56 | - [ATOM and RSS feeds](Usage.md#rss-feeds) (can also be filtered using tags or text search) |
55 | - Tag cloud and list views | 57 | - [Daily](Usage.md#daily): newspaper-like daily digest (and daily RSS feed) |
56 | - Picture wall: image and video thumbnails view (with lazy loading) | 58 | - URL cleanup: automatic removal of `?utm_source=...`, `fb=...` tracking parameters |
57 | - ATOM and RSS feeds (can also be filtered using tags or text search) | 59 | - Extensible through [plugins](Plugins.md) |
58 | - Daily: newspaper-like daily digest (and daily RSS feed) | 60 | - Easily extensible by any client using the [REST API](REST-API.md) exposed by Shaarli |
59 | - URL cleanup: automatic removal of `?utm_source=...`, `fb=...` | 61 | - Bookmarklet and [other tools](Community-and-related-software.md) to share links in one click |
60 | - Extensible through [plugins](https://shaarli.readthedocs.io/en/master/Plugins/#plugin-usage) | 62 | - Responsive/support for mobile browsers, degrades gracefully with Javascript disabled |
61 | |||
62 | ### Easy setup | ||
63 | |||
64 | - Dead-simple installation: drop the files, open the page | ||
65 | - Links are stored in a file (no database required, easy backup: simply copy the datastore file) | ||
66 | - Import and export links as Netscape bookmarks compatible with most Web browsers | ||
67 | |||
68 | ### Accessibility | ||
69 | |||
70 | - Bookmarklet and other tools to share links in one click | ||
71 | - Support for mobile browsers | ||
72 | - Degrades gracefully with Javascript disabled | ||
73 | - Easy page customization through HTML/CSS/RainTPL | ||
74 | |||
75 | ### Security | ||
76 | |||
77 | - Discreet pop-up notification when a new release is available | ||
78 | - Bruteforce protection on the login form | ||
79 | - Protected against [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) and session cookie hijacking | ||
80 | 63 | ||
81 | <!-- TODO Limitations --> | ||
82 | 64 | ||
83 | ### REST API | 65 | ### Easy setup |
84 | |||
85 | - Easily extensible by any client using the REST API exposed by Shaarli ([API documentation](http://shaarli.github.io/api-documentation/)). | ||
86 | 66 | ||
67 | - Dead-simple [installation](Installation.md): drop the files on your server, open the page | ||
68 | - Shaares are stored in a file (no database required, easy [backup](Backup-and-restore.md)) | ||
69 | - [Configurable](Shaarli-configuration.md) from dialog and configuration file | ||
70 | - Extensible through third-party [plugins and themes](Community-and-related-software.md) | ||
87 | 71 | ||
88 | 72 | ||
89 | ## Screenshots | 73 | ### Fast |
90 | 74 | ||
91 | [![](https://i.imgur.com/8wEBRSG.png)](https://i.imgur.com/WWPfSj0.png) [![](https://i.imgur.com/rrsjWYy.png)](https://i.imgur.com/TZzGHMs.png) [![](https://i.imgur.com/uICDOle.png)](https://i.imgur.com/27wYsbC.png) [![](https://i.imgur.com/KNvFGVB.png)](https://i.imgur.com/0f5faqw.png) [![](https://i.imgur.com/tVvD3gH.png)](https://i.imgur.com/zGF4d6L.jpg) [![](https://i.imgur.com/8iRzHfe.png)](https://i.imgur.com/sfJJ6NT.png) [![](https://i.imgur.com/GjZGvIh.png)](https://i.imgur.com/QsedIuJ.png) [![](https://i.imgur.com/TFZ9PEq.png)](https://i.imgur.com/KdtF8Ll.png) [![](https://i.imgur.com/IvlqXXK.png)](https://i.imgur.com/boaaibC.png) [![](https://i.imgur.com/nlETouG.png)](https://i.imgur.com/Ib9O7n3.png) | 75 | - Fast! Small datastore file, write-once/read-many, served most of the time from OS disk caches (no disk I/O) |
76 | - Stays fast with even tens of thousands shaares! | ||
92 | 77 | ||
93 | 78 | ||
79 | ### Self-hosted | ||
94 | 80 | ||
81 | - Shaarli is an alternative to commercial services such as StumbleUpon, Delicio.us, Diigo... | ||
82 | - The data is yours, [import and export](Usage#import-export) it to HTML bookmarksformat compatible with most web browser, and from a variety of formats | ||
83 | - Shaarli does not send any telemetry/metrics/private information to developers | ||
84 | - Shaarli is Free and Open-Source software, inspect and change how the program works in the [source code](https://github.com/shaarli/Shaarli) | ||
85 | - Built-in [Security](dev/Development.md#security) features to help you protect your Shaarli instance | ||
95 | 86 | ||
96 | 87 | ||
97 | ## About | 88 | ## About |
98 | 89 | ||
99 | ### Shaarli community fork | 90 | This [community fork](https://github.com/shaarli/Shaarli) of the original [Shaarli](https://github.com/sebsauvage/Shaarli/) project by [Sébastien Sauvage](http://sebsauvage.net/) (now [unmaintained](https://github.com/sebsauvage/Shaarli/issues/191)) has carried on the work to provide [many patches](https://github.com/shaarli/Shaarli/compare/sebsauvage:master...master) for [bug fixes and enhancements](https://github.com/shaarli/Shaarli/issues?q=is%3Aclosed+) in this repository, and will keep maintaining the project for the foreseeable future, while keeping Shaarli simple and efficient. |
100 | |||
101 | This friendly fork is maintained by the Shaarli community at <https://github.com/shaarli/Shaarli> | ||
102 | |||
103 | This is a community fork of the original [Shaarli](https://github.com/sebsauvage/Shaarli/) project by [Sébastien Sauvage](http://sebsauvage.net/). | ||
104 | |||
105 | The original project is currently unmaintained, and the developer [has informed us](https://github.com/sebsauvage/Shaarli/issues/191) that he would have no time to work on Shaarli in the near future. | ||
106 | 91 | ||
107 | The Shaarli community has carried on the work to provide [many | 92 | The original Shaarli instance is still available [here](https://sebsauvage.net/links/) (+25000 shaares!) |
108 | patches](https://github.com/shaarli/Shaarli/compare/sebsauvage:master...master) for | ||
109 | [bug fixes and enhancements](https://github.com/shaarli/Shaarli/issues?q=is%3Aclosed+) | ||
110 | in this repository, and will keep maintaining the project for the foreseeable | ||
111 | future, while keeping Shaarli simple and efficient. | ||
112 | 93 | ||
113 | 94 | ||
114 | ### Contributing and getting help | 95 | ### Contributing and getting help |
115 | 96 | ||
116 | Feedback is very appreciated! | 97 | Feedback is very appreciated! Feel free to propose solutions to existing problems, help us improve the documentation and translations, and submit pull requests :-) |
117 | 98 | ||
118 | - If you have any questions or ideas, please join the [chat](https://gitter.im/shaarli/Shaarli) (also reachable via [IRC](https://irc.gitter.im/)), post them in our [general discussion](https://github.com/shaarli/Shaarli/issues/308) or read the current [issues](https://github.com/shaarli/Shaarli/issues). | 99 | See [Support](Troubleshooting.md#support) to get in touch with the Shaarli community. |
119 | - Have a look at the open [issues](https://github.com/shaarli/Shaarli/issues) and [pull requests](https://github.com/shaarli/Shaarli/pulls) | ||
120 | - If you would like a feature added to Shaarli, check the issues labeled [`feature`](https://github.com/shaarli/Shaarli/labels/feature), [`enhancement`](https://github.com/shaarli/Shaarli/labels/enhancement), and [`plugin`](https://github.com/shaarli/Shaarli/labels/plugin). | ||
121 | - If you've found a bug, please create a [new issue](https://github.com/shaarli/Shaarli/issues/new). | ||
122 | - Feel free to propose solutions to existing problems, help us improve the documentation and translations, and submit pull requests :-) | ||
123 | 100 | ||
124 | 101 | ||
125 | ### License | 102 | ### License |
diff --git a/docker-compose.yml b/docker-compose.yml index e8ea4271..a3de4b1c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml | |||
@@ -33,7 +33,7 @@ services: | |||
33 | traefik.frontend.rule: "Host:${SHAARLI_VIRTUAL_HOST}" | 33 | traefik.frontend.rule: "Host:${SHAARLI_VIRTUAL_HOST}" |
34 | 34 | ||
35 | traefik: | 35 | traefik: |
36 | image: traefik | 36 | image: traefik:1.7-alpine |
37 | command: | 37 | command: |
38 | - "--defaultentrypoints=http,https" | 38 | - "--defaultentrypoints=http,https" |
39 | - "--entrypoints=Name:http Address::80 Redirect.EntryPoint:https" | 39 | - "--entrypoints=Name:http Address::80 Redirect.EntryPoint:https" |
diff --git a/inc/languages/fr/LC_MESSAGES/shaarli.po b/inc/languages/fr/LC_MESSAGES/shaarli.po index fbb2fe64..9a6e3958 100644 --- a/inc/languages/fr/LC_MESSAGES/shaarli.po +++ b/inc/languages/fr/LC_MESSAGES/shaarli.po | |||
@@ -1,8 +1,8 @@ | |||
1 | msgid "" | 1 | msgid "" |
2 | msgstr "" | 2 | msgstr "" |
3 | "Project-Id-Version: Shaarli\n" | 3 | "Project-Id-Version: Shaarli\n" |
4 | "POT-Creation-Date: 2020-08-27 12:01+0200\n" | 4 | "POT-Creation-Date: 2020-09-10 16:06+0200\n" |
5 | "PO-Revision-Date: 2020-08-27 12:02+0200\n" | 5 | "PO-Revision-Date: 2020-09-10 16:07+0200\n" |
6 | "Last-Translator: \n" | 6 | "Last-Translator: \n" |
7 | "Language-Team: Shaarli\n" | 7 | "Language-Team: Shaarli\n" |
8 | "Language: fr_FR\n" | 8 | "Language: fr_FR\n" |
@@ -60,16 +60,20 @@ msgid "Automatic" | |||
60 | msgstr "Automatique" | 60 | msgstr "Automatique" |
61 | 61 | ||
62 | #: application/Languages.php:182 | 62 | #: application/Languages.php:182 |
63 | msgid "German" | ||
64 | msgstr "Allemand" | ||
65 | |||
66 | #: application/Languages.php:183 | ||
63 | msgid "English" | 67 | msgid "English" |
64 | msgstr "Anglais" | 68 | msgstr "Anglais" |
65 | 69 | ||
66 | #: application/Languages.php:183 | 70 | #: application/Languages.php:184 |
67 | msgid "French" | 71 | msgid "French" |
68 | msgstr "Français" | 72 | msgstr "Français" |
69 | 73 | ||
70 | #: application/Languages.php:184 | 74 | #: application/Languages.php:185 |
71 | msgid "German" | 75 | msgid "Japanese" |
72 | msgstr "Allemand" | 76 | msgstr "Japonais" |
73 | 77 | ||
74 | #: application/Thumbnailer.php:62 | 78 | #: application/Thumbnailer.php:62 |
75 | msgid "" | 79 | msgid "" |
@@ -103,36 +107,119 @@ msgstr "Mo" | |||
103 | msgid "GiB" | 107 | msgid "GiB" |
104 | msgstr "Go" | 108 | msgstr "Go" |
105 | 109 | ||
106 | #: application/bookmark/BookmarkFileService.php:165 | 110 | #: application/bookmark/BookmarkFileService.php:174 |
107 | #: application/bookmark/BookmarkFileService.php:190 | 111 | #: application/bookmark/BookmarkFileService.php:199 |
108 | #: application/bookmark/BookmarkFileService.php:215 | 112 | #: application/bookmark/BookmarkFileService.php:224 |
109 | #: application/bookmark/BookmarkFileService.php:232 | 113 | #: application/bookmark/BookmarkFileService.php:241 |
110 | msgid "You're not authorized to alter the datastore" | 114 | msgid "You're not authorized to alter the datastore" |
111 | msgstr "Vous n'êtes pas autorisé à modifier les données" | 115 | msgstr "Vous n'êtes pas autorisé à modifier les données" |
112 | 116 | ||
113 | #: application/bookmark/BookmarkFileService.php:168 | 117 | #: application/bookmark/BookmarkFileService.php:177 |
114 | #: application/bookmark/BookmarkFileService.php:193 | 118 | #: application/bookmark/BookmarkFileService.php:202 |
115 | #: application/bookmark/BookmarkFileService.php:235 | 119 | #: application/bookmark/BookmarkFileService.php:244 |
116 | msgid "Provided data is invalid" | 120 | msgid "Provided data is invalid" |
117 | msgstr "Les informations fournies ne sont pas valides" | 121 | msgstr "Les informations fournies ne sont pas valides" |
118 | 122 | ||
119 | #: application/bookmark/BookmarkFileService.php:196 | 123 | #: application/bookmark/BookmarkFileService.php:205 |
120 | msgid "This bookmarks already exists" | 124 | msgid "This bookmarks already exists" |
121 | msgstr "Ce marque-page existe déjà." | 125 | msgstr "Ce marque-page existe déjà." |
122 | 126 | ||
123 | #: application/bookmark/BookmarkInitializer.php:37 | 127 | #: application/bookmark/BookmarkInitializer.php:37 |
124 | #: application/legacy/LegacyLinkDB.php:266 | 128 | msgid "(private bookmark with thumbnail demo)" |
125 | msgid "My secret stuff... - Pastebin.com" | 129 | msgstr "(marque page privé avec une miniature)" |
126 | msgstr "Mes trucs secrets... - Pastebin.com" | ||
127 | 130 | ||
128 | #: application/bookmark/BookmarkInitializer.php:39 | 131 | #: application/bookmark/BookmarkInitializer.php:40 |
129 | #: application/legacy/LegacyLinkDB.php:268 | 132 | msgid "" |
130 | msgid "Shhhh! I'm a private link only YOU can see. You can delete me too." | 133 | "Shaarli will automatically pick up the thumbnail for links to a variety of " |
134 | "websites.\n" | ||
135 | "\n" | ||
136 | "Explore your new Shaarli instance by trying out controls and menus.\n" | ||
137 | "Visit the project on [Github](https://github.com/shaarli/Shaarli) or [the " | ||
138 | "documentation](https://shaarli.readthedocs.io/en/master/) to learn more " | ||
139 | "about Shaarli.\n" | ||
140 | "\n" | ||
141 | "Now you can edit or delete the default shaares.\n" | ||
131 | msgstr "" | 142 | msgstr "" |
132 | "Pssst ! Je suis un lien privé que VOUS êtes le seul à voir. Vous pouvez me " | 143 | "Shaarli récupérera automatiquement la miniature associée au liens pour de " |
133 | "supprimer aussi." | 144 | "nombreux sites web.\n" |
145 | "\n" | ||
146 | "Explorez votre nouvelle instance de Shaarli en essayant les différents " | ||
147 | "contrôles et menus.\n" | ||
148 | "Visitez le projet sur [Github](https://github.com/shaarli/Shaarli) ou [la " | ||
149 | "documentation](https://shaarli.readthedocs.io/en/master/) pour en apprendre " | ||
150 | "plus sur Shaarli.\n" | ||
151 | "\n" | ||
152 | "Maintenant, vous pouvez modifier ou supprimer les shaares créés par défaut.\n" | ||
153 | |||
154 | #: application/bookmark/BookmarkInitializer.php:53 | ||
155 | msgid "Note: Shaare descriptions" | ||
156 | msgstr "Note : Description des Shaares" | ||
134 | 157 | ||
135 | #: application/bookmark/BookmarkInitializer.php:45 | 158 | #: application/bookmark/BookmarkInitializer.php:55 |
159 | msgid "" | ||
160 | "Adding a shaare without entering a URL creates a text-only \"note\" post " | ||
161 | "such as this one.\n" | ||
162 | "This note is private, so you are the only one able to see it while logged " | ||
163 | "in.\n" | ||
164 | "\n" | ||
165 | "You can use this to keep notes, post articles, code snippets, and much " | ||
166 | "more.\n" | ||
167 | "\n" | ||
168 | "The Markdown formatting setting allows you to format your notes and bookmark " | ||
169 | "description:\n" | ||
170 | "\n" | ||
171 | "### Title headings\n" | ||
172 | "\n" | ||
173 | "#### Multiple headings levels\n" | ||
174 | " * bullet lists\n" | ||
175 | " * _italic_ text\n" | ||
176 | " * **bold** text\n" | ||
177 | " * ~~strike through~~ text\n" | ||
178 | " * `code` blocks\n" | ||
179 | " * images\n" | ||
180 | " * [links](https://en.wikipedia.org/wiki/Markdown)\n" | ||
181 | "\n" | ||
182 | "Markdown also supports tables:\n" | ||
183 | "\n" | ||
184 | "| Name | Type | Color | Qty |\n" | ||
185 | "| ------- | --------- | ------ | ----- |\n" | ||
186 | "| Orange | Fruit | Orange | 126 |\n" | ||
187 | "| Apple | Fruit | Any | 62 |\n" | ||
188 | "| Lemon | Fruit | Yellow | 30 |\n" | ||
189 | "| Carrot | Vegetable | Red | 14 |\n" | ||
190 | msgstr "" | ||
191 | "Ajouter un shaare sans préciser d'URL créé une « note » textuelle, telle que " | ||
192 | "celle-ci.\n" | ||
193 | "Cette note est privée, donc vous êtes seul à pouvoir la voir lorsque vous " | ||
194 | "êtes connecté.\n" | ||
195 | "\n" | ||
196 | "Vous pouvez utiliser cette fonctionnalité pour prendre des notes, publier " | ||
197 | "des articles, des extraits de code, et bien plus.\n" | ||
198 | "\n" | ||
199 | "L'option du formatage par Markdown vous permet de formater vos description " | ||
200 | "de notes et marque-pages :\n" | ||
201 | "\n" | ||
202 | "### Titre d'en-tête\n" | ||
203 | "\n" | ||
204 | "#### Sur plusieurs niveaux\n" | ||
205 | " * liste à puce\n" | ||
206 | " * texte en _italique_\n" | ||
207 | " * texte en **gras**\n" | ||
208 | " * texte ~~barré~~\n" | ||
209 | " * blocs de `code`\n" | ||
210 | " * images\n" | ||
211 | " * [liens](https://en.wikipedia.org/wiki/Markdown)\n" | ||
212 | "\n" | ||
213 | "Markdown supporte aussi les tableaux :\n" | ||
214 | "\n" | ||
215 | "| Nom | Type | Couleur | Qte |\n" | ||
216 | "| ------- | --------- | ------ | ----- |\n" | ||
217 | "| Orange | Fruit | Orange | 126 |\n" | ||
218 | "| Pomme | Fruit | Multiple | 62 |\n" | ||
219 | "| Citron | Fruit | Jaune | 30 |\n" | ||
220 | "| Carotte | Légume | Orange | 14 |\n" | ||
221 | |||
222 | #: application/bookmark/BookmarkInitializer.php:89 | ||
136 | #: application/legacy/LegacyLinkDB.php:246 | 223 | #: application/legacy/LegacyLinkDB.php:246 |
137 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | 224 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 |
138 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:49 | 225 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:49 |
@@ -144,26 +231,54 @@ msgstr "" | |||
144 | "Le gestionnaire de marque-pages personnel, minimaliste, et sans base de " | 231 | "Le gestionnaire de marque-pages personnel, minimaliste, et sans base de " |
145 | "données" | 232 | "données" |
146 | 233 | ||
147 | #: application/bookmark/BookmarkInitializer.php:48 | 234 | #: application/bookmark/BookmarkInitializer.php:92 |
148 | #: application/legacy/LegacyLinkDB.php:249 | ||
149 | msgid "" | 235 | msgid "" |
150 | "Welcome to Shaarli! This is your first public bookmark. To edit or delete " | 236 | "Welcome to Shaarli!\n" |
151 | "me, you must first login.\n" | ||
152 | "\n" | 237 | "\n" |
153 | "To learn how to use Shaarli, consult the link \"Documentation\" at the " | 238 | "Shaarli allows you to bookmark your favorite pages, and share them with " |
154 | "bottom of this page.\n" | 239 | "others or store them privately.\n" |
240 | "You can add a description to your bookmarks, such as this one, and tag " | ||
241 | "them.\n" | ||
155 | "\n" | 242 | "\n" |
156 | "You use the community supported version of the original Shaarli project, by " | 243 | "Create a new shaare by clicking the `+Shaare` button, or using any of the " |
157 | "Sebastien Sauvage." | 244 | "recommended tools (browser extension, mobile app, bookmarklet, REST API, " |
245 | "etc.).\n" | ||
246 | "\n" | ||
247 | "You can easily retrieve your links, even with thousands of them, using the " | ||
248 | "internal search engine, or search through tags (e.g. this Shaare is tagged " | ||
249 | "with `shaarli` and `help`).\n" | ||
250 | "Hashtags such as #shaarli #help are also supported.\n" | ||
251 | "You can also filter the available [RSS feed](/feed/atom) and picture wall by " | ||
252 | "tag or plaintext search.\n" | ||
253 | "\n" | ||
254 | "We hope that you will enjoy using Shaarli, maintained with ❤️ by the " | ||
255 | "community!\n" | ||
256 | "Feel free to open [an issue](https://github.com/shaarli/Shaarli/issues) if " | ||
257 | "you have a suggestion or encounter an issue.\n" | ||
158 | msgstr "" | 258 | msgstr "" |
159 | "Bienvenue sur Shaarli ! Ceci est votre premier marque-page public. Pour me " | 259 | "Bienvenue sur Shaarli !\n" |
160 | "modifier ou me supprimer, vous devez d'abord vous connecter.\n" | ||
161 | "\n" | 260 | "\n" |
162 | "Pour apprendre à utiliser Shaarli, consultez le lien « Documentation » en " | 261 | "Shaarli vous permet de sauvegarder des marque-pages de vos pages favorites, " |
163 | "bas de page.\n" | 262 | "et de les partager avec d'autres, ou de les enregistrer en privé.\n" |
263 | "Vous pouvez ajouter une description à vos marque-pages, comme celle-ci, et y " | ||
264 | "ajouter des tags.\n" | ||
164 | "\n" | 265 | "\n" |
165 | "Vous utilisez la version supportée par la communauté du projet original " | 266 | "Créez un nouveau shaare en cliquant sur le bouton `+Shaare`, ou en utilisant " |
166 | "Shaarli de Sébastien Sauvage." | 267 | "l'un des outils recommandés (extension de navigateur, application mobile, " |
268 | "bookmarklet, REST API, etc.).\n" | ||
269 | "\n" | ||
270 | "Vous pouvez facilement retrouver vos liens, même parmi des milliers, en " | ||
271 | "utilisant le moteur de recherche interne, ou en filtrant par tags (par " | ||
272 | "exemple ce Shaare est taggé avec `shaarli` et `help`).\n" | ||
273 | "Les hashtags comme #shaarli #help sont aussi supportés.\n" | ||
274 | "Vous pouvez aussi filtrer les [flux RSS](/feed/atom) et [mur d'images]() par " | ||
275 | "tag ou par texte brut.\n" | ||
276 | "\n" | ||
277 | "Nous espérons que vous apprécierez utiliser Shaarli, maintenu avec ❤️ par la " | ||
278 | "communauté !\n" | ||
279 | "N'hésitez pas à ouvrir [un ticket (en)](https://github.com/shaarli/Shaarli/" | ||
280 | "issues) si vous avez une suggestion ou si vous rencontrez un problème.\n" | ||
281 | " \n" | ||
167 | 282 | ||
168 | #: application/bookmark/exception/BookmarkNotFoundException.php:13 | 283 | #: application/bookmark/exception/BookmarkNotFoundException.php:13 |
169 | msgid "The link you are trying to reach does not exist or has been deleted." | 284 | msgid "The link you are trying to reach does not exist or has been deleted." |
@@ -489,6 +604,36 @@ msgstr "Vous devez utiliser un entier comme clé." | |||
489 | msgid "Array offset and link ID must be equal." | 604 | msgid "Array offset and link ID must be equal." |
490 | msgstr "La clé du tableau et l'ID du lien doivent être identiques." | 605 | msgstr "La clé du tableau et l'ID du lien doivent être identiques." |
491 | 606 | ||
607 | #: application/legacy/LegacyLinkDB.php:249 | ||
608 | msgid "" | ||
609 | "Welcome to Shaarli! This is your first public bookmark. To edit or delete " | ||
610 | "me, you must first login.\n" | ||
611 | "\n" | ||
612 | "To learn how to use Shaarli, consult the link \"Documentation\" at the " | ||
613 | "bottom of this page.\n" | ||
614 | "\n" | ||
615 | "You use the community supported version of the original Shaarli project, by " | ||
616 | "Sebastien Sauvage." | ||
617 | msgstr "" | ||
618 | "Bienvenue sur Shaarli ! Ceci est votre premier marque-page public. Pour me " | ||
619 | "modifier ou me supprimer, vous devez d'abord vous connecter.\n" | ||
620 | "\n" | ||
621 | "Pour apprendre à utiliser Shaarli, consultez le lien « Documentation » en " | ||
622 | "bas de page.\n" | ||
623 | "\n" | ||
624 | "Vous utilisez la version supportée par la communauté du projet original " | ||
625 | "Shaarli de Sébastien Sauvage." | ||
626 | |||
627 | #: application/legacy/LegacyLinkDB.php:266 | ||
628 | msgid "My secret stuff... - Pastebin.com" | ||
629 | msgstr "Mes trucs secrets... - Pastebin.com" | ||
630 | |||
631 | #: application/legacy/LegacyLinkDB.php:268 | ||
632 | msgid "Shhhh! I'm a private link only YOU can see. You can delete me too." | ||
633 | msgstr "" | ||
634 | "Pssst ! Je suis un lien privé que VOUS êtes le seul à voir. Vous pouvez me " | ||
635 | "supprimer aussi." | ||
636 | |||
492 | #: application/legacy/LegacyUpdater.php:104 | 637 | #: application/legacy/LegacyUpdater.php:104 |
493 | msgid "Couldn't retrieve updater class methods." | 638 | msgid "Couldn't retrieve updater class methods." |
494 | msgstr "Impossible de récupérer les méthodes de la classe Updater." | 639 | msgstr "Impossible de récupérer les méthodes de la classe Updater." |
@@ -562,7 +707,7 @@ msgstr "Voir sur archive.org" | |||
562 | msgid "For each link, add an Archive.org icon." | 707 | msgid "For each link, add an Archive.org icon." |
563 | msgstr "Pour chaque lien, ajoute une icône pour Archive.org." | 708 | msgstr "Pour chaque lien, ajoute une icône pour Archive.org." |
564 | 709 | ||
565 | #: plugins/default_colors/default_colors.php:33 | 710 | #: plugins/default_colors/default_colors.php:38 |
566 | msgid "" | 711 | msgid "" |
567 | "Default colors plugin error: This plugin is active and no custom color is " | 712 | "Default colors plugin error: This plugin is active and no custom color is " |
568 | "configured." | 713 | "configured." |
@@ -570,21 +715,21 @@ msgstr "" | |||
570 | "Erreur du plugin default colors : ce plugin est actif et aucune couleur " | 715 | "Erreur du plugin default colors : ce plugin est actif et aucune couleur " |
571 | "n'est configurée." | 716 | "n'est configurée." |
572 | 717 | ||
573 | #: plugins/default_colors/default_colors.php:107 | 718 | #: plugins/default_colors/default_colors.php:113 |
574 | msgid "Override default theme colors. Use any CSS valid color." | 719 | msgid "Override default theme colors. Use any CSS valid color." |
575 | msgstr "" | 720 | msgstr "" |
576 | "Remplacer les couleurs du thème par défaut. Utiliser n'importe quelle " | 721 | "Remplacer les couleurs du thème par défaut. Utiliser n'importe quelle " |
577 | "couleur CSS valide." | 722 | "couleur CSS valide." |
578 | 723 | ||
579 | #: plugins/default_colors/default_colors.php:108 | 724 | #: plugins/default_colors/default_colors.php:114 |
580 | msgid "Main color (navbar green)" | 725 | msgid "Main color (navbar green)" |
581 | msgstr "Couleur principale (vert de la barre de navigation)" | 726 | msgstr "Couleur principale (vert de la barre de navigation)" |
582 | 727 | ||
583 | #: plugins/default_colors/default_colors.php:109 | 728 | #: plugins/default_colors/default_colors.php:115 |
584 | msgid "Background color (light grey)" | 729 | msgid "Background color (light grey)" |
585 | msgstr "Couleur de fond (gris léger)" | 730 | msgstr "Couleur de fond (gris léger)" |
586 | 731 | ||
587 | #: plugins/default_colors/default_colors.php:110 | 732 | #: plugins/default_colors/default_colors.php:116 |
588 | msgid "Dark main color (e.g. visited links)" | 733 | msgid "Dark main color (e.g. visited links)" |
589 | msgstr "Couleur principale sombre (ex : les liens visités)" | 734 | msgstr "Couleur principale sombre (ex : les liens visités)" |
590 | 735 | ||
@@ -1168,23 +1313,23 @@ msgstr "Changer statut épinglé" | |||
1168 | msgid "Sticky" | 1313 | msgid "Sticky" |
1169 | msgstr "Épinglé" | 1314 | msgstr "Épinglé" |
1170 | 1315 | ||
1171 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:7 | 1316 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:5 |
1172 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:7 | 1317 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:5 |
1173 | msgid "Filters" | 1318 | msgid "Filters" |
1174 | msgstr "Filtres" | 1319 | msgstr "Filtres" |
1175 | 1320 | ||
1176 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:12 | 1321 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:10 |
1177 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:12 | 1322 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:10 |
1178 | msgid "Only display private links" | 1323 | msgid "Only display private links" |
1179 | msgstr "Afficher uniquement les liens privés" | 1324 | msgstr "Afficher uniquement les liens privés" |
1180 | 1325 | ||
1181 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | 1326 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 |
1182 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:15 | 1327 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:13 |
1183 | msgid "Only display public links" | 1328 | msgid "Only display public links" |
1184 | msgstr "Afficher uniquement les liens publics" | 1329 | msgstr "Afficher uniquement les liens publics" |
1185 | 1330 | ||
1186 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:20 | 1331 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:18 |
1187 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:20 | 1332 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:18 |
1188 | msgid "Filter untagged links" | 1333 | msgid "Filter untagged links" |
1189 | msgstr "Filtrer par liens privés" | 1334 | msgstr "Filtrer par liens privés" |
1190 | 1335 | ||
@@ -1193,17 +1338,17 @@ msgstr "Filtrer par liens privés" | |||
1193 | msgid "Select all" | 1338 | msgid "Select all" |
1194 | msgstr "Tout sélectionner" | 1339 | msgstr "Tout sélectionner" |
1195 | 1340 | ||
1196 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:27 | 1341 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 |
1197 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:79 | 1342 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:89 |
1198 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:27 | 1343 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:29 |
1199 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:79 | 1344 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:89 |
1200 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 | 1345 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 |
1201 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:44 | 1346 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:44 |
1202 | msgid "Fold all" | 1347 | msgid "Fold all" |
1203 | msgstr "Replier tout" | 1348 | msgstr "Replier tout" |
1204 | 1349 | ||
1205 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 | 1350 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:76 |
1206 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:72 | 1351 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:76 |
1207 | msgid "Links per page" | 1352 | msgid "Links per page" |
1208 | msgstr "Liens par page" | 1353 | msgstr "Liens par page" |
1209 | 1354 | ||
@@ -1429,32 +1574,24 @@ msgid "Rename or delete a tag in all links" | |||
1429 | msgstr "Renommer ou supprimer un tag dans tous les liens" | 1574 | msgstr "Renommer ou supprimer un tag dans tous les liens" |
1430 | 1575 | ||
1431 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | 1576 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 |
1432 | #, fuzzy | ||
1433 | #| msgid "" | ||
1434 | #| "Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, " | ||
1435 | #| "delicious…)" | ||
1436 | msgid "" | 1577 | msgid "" |
1437 | "Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, " | 1578 | "Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, " |
1438 | "delicious...)" | 1579 | "delicious...)" |
1439 | msgstr "" | 1580 | msgstr "" |
1440 | "Importer des marques pages au format Netscape HTML (comme exportés depuis " | 1581 | "Importer des marques pages au format Netscape HTML (comme exportés depuis " |
1441 | "Firefox, Chrome, Opera, delicious…)" | 1582 | "Firefox, Chrome, Opera, delicious...)" |
1442 | 1583 | ||
1443 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 | 1584 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 |
1444 | msgid "Import links" | 1585 | msgid "Import links" |
1445 | msgstr "Importer des liens" | 1586 | msgstr "Importer des liens" |
1446 | 1587 | ||
1447 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 | 1588 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 |
1448 | #, fuzzy | ||
1449 | #| msgid "" | ||
1450 | #| "Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, " | ||
1451 | #| "Opera, delicious…)" | ||
1452 | msgid "" | 1589 | msgid "" |
1453 | "Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, " | 1590 | "Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, " |
1454 | "Opera, delicious...)" | 1591 | "Opera, delicious...)" |
1455 | msgstr "" | 1592 | msgstr "" |
1456 | "Exporter les marques pages au format Netscape HTML (comme exportés depuis " | 1593 | "Exporter les marques pages au format Netscape HTML (comme exportés depuis " |
1457 | "Firefox, Chrome, Opera, delicious…)" | 1594 | "Firefox, Chrome, Opera, delicious...)" |
1458 | 1595 | ||
1459 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | 1596 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 |
1460 | msgid "Export database" | 1597 | msgid "Export database" |
diff --git a/inc/languages/ja/LC_MESSAGES/shaarli.po b/inc/languages/jp/LC_MESSAGES/shaarli.po index b420bb51..b420bb51 100644 --- a/inc/languages/ja/LC_MESSAGES/shaarli.po +++ b/inc/languages/jp/LC_MESSAGES/shaarli.po | |||
@@ -35,6 +35,9 @@ use Slim\App; | |||
35 | 35 | ||
36 | $conf = new ConfigManager(); | 36 | $conf = new ConfigManager(); |
37 | 37 | ||
38 | // Manually override root URL for complex server configurations | ||
39 | define('SHAARLI_ROOT_URL', $conf->get('general.root_url', null)); | ||
40 | |||
38 | // In dev mode, throw exception on any warning | 41 | // In dev mode, throw exception on any warning |
39 | if ($conf->get('dev.debug', false)) { | 42 | if ($conf->get('dev.debug', false)) { |
40 | // See all errors (for debugging only) | 43 | // See all errors (for debugging only) |
@@ -95,7 +98,7 @@ $app->group('', function () { | |||
95 | $this->get('/add-tag/{newTag}', '\Shaarli\Front\Controller\Visitor\TagController:addTag'); | 98 | $this->get('/add-tag/{newTag}', '\Shaarli\Front\Controller\Visitor\TagController:addTag'); |
96 | $this->get('/remove-tag/{tag}', '\Shaarli\Front\Controller\Visitor\TagController:removeTag'); | 99 | $this->get('/remove-tag/{tag}', '\Shaarli\Front\Controller\Visitor\TagController:removeTag'); |
97 | $this->get('/links-per-page', '\Shaarli\Front\Controller\Visitor\PublicSessionFilterController:linksPerPage'); | 100 | $this->get('/links-per-page', '\Shaarli\Front\Controller\Visitor\PublicSessionFilterController:linksPerPage'); |
98 | $this->get('/untagged-only', '\Shaarli\Front\Controller\Admin\PublicSessionFilterController:untaggedOnly'); | 101 | $this->get('/untagged-only', '\Shaarli\Front\Controller\Visitor\PublicSessionFilterController:untaggedOnly'); |
99 | })->add('\Shaarli\Front\ShaarliMiddleware'); | 102 | })->add('\Shaarli\Front\ShaarliMiddleware'); |
100 | 103 | ||
101 | $app->group('/admin', function () { | 104 | $app->group('/admin', function () { |
@@ -15,41 +15,25 @@ site_dir: doc/html | |||
15 | pages: | 15 | pages: |
16 | - Home: index.md | 16 | - Home: index.md |
17 | - Setup: | 17 | - Setup: |
18 | - Download and Installation: Download-and-Installation.md | ||
19 | - Upgrade and migration: Upgrade-and-migration.md | ||
20 | - Server configuration: Server-configuration.md | 18 | - Server configuration: Server-configuration.md |
21 | - Server security: Server-security.md | 19 | - Installation: Installation.md |
20 | - Docker: Docker.md | ||
21 | - Reverse Proxy: Reverse-proxy.md | ||
22 | - Backup and restore: Backup-and-restore.md | ||
22 | - Shaarli configuration: Shaarli-configuration.md | 23 | - Shaarli configuration: Shaarli-configuration.md |
23 | - Plugins: Plugins.md | 24 | - Plugins: Plugins.md |
24 | - Docker: | 25 | - Upgrade and migration: Upgrade-and-migration.md |
25 | - Docker 101: docker/docker-101.md | ||
26 | - Shaarli images: docker/shaarli-images.md | ||
27 | - Reverse proxy configuration: docker/reverse-proxy-configuration.md | ||
28 | - Docker resources: docker/resources.md | ||
29 | - Usage: | 26 | - Usage: |
30 | - Browsing and searching: Browsing-and-searching.md | 27 | - Usage: Usage.md |
31 | - Sharing content: Sharing-content.md | ||
32 | - RSS feeds: RSS-feeds.md | ||
33 | - REST API: REST-API.md | 28 | - REST API: REST-API.md |
34 | - Community & Related software: Community-&-Related-software.md | 29 | - Community and Related software: Community-and-related-software.md |
35 | - Guides: | ||
36 | - Install Shaarli on Debian 9 with Docker: guides/install-shaarli-with-debian9-and-docker.md | ||
37 | - Backup, restore, import and export: guides/backup-restore-import-export.md | ||
38 | - Various hacks: guides/various-hacks.md | ||
39 | - Development: | 30 | - Development: |
40 | - Development guidelines: Development-guidelines.md | 31 | - Development: dev/Development.md |
41 | - Continuous integration tools: Continuous-integration-tools.md | 32 | - Versioning: dev/Versioning.md |
42 | - GnuPG signature: GnuPG-signature.md | 33 | - GnuPG signature: dev/GnuPG-signature.md |
43 | - Directory structure: Directory-structure.md | 34 | - Plugin System: dev/Plugin-system.md |
44 | - Link Structure: Link-structure.md | 35 | - Translations: dev/Translations.md |
45 | - 3rd party libraries: 3rd-party-libraries.md | 36 | - Release Shaarli: dev/Release-Shaarli.md |
46 | - Plugin System: Plugin-System.md | 37 | - Theming: dev/Theming.md |
47 | - Release Shaarli: Release-Shaarli.md | 38 | - Unit tests: dev/Unit-tests.md |
48 | - Versioning and Branches: Versioning-and-Branches.md | ||
49 | - Security: Security.md | ||
50 | - Static analysis: Static-analysis.md | ||
51 | - Translations: Translations.md | ||
52 | - Theming: Theming.md | ||
53 | - Unit tests: Unit-tests.md | ||
54 | - FAQ: FAQ.md | ||
55 | - Troubleshooting: Troubleshooting.md | 39 | - Troubleshooting: Troubleshooting.md |
diff --git a/package.json b/package.json index f3d9b51e..8a24512a 100644 --- a/package.json +++ b/package.json | |||
@@ -11,22 +11,23 @@ | |||
11 | "purecss": "^1.0.0" | 11 | "purecss": "^1.0.0" |
12 | }, | 12 | }, |
13 | "devDependencies": { | 13 | "devDependencies": { |
14 | "babel-core": "^6.26.0", | 14 | "@babel/core": "^7.11.6", |
15 | "babel-loader": "^7.1.2", | 15 | "@babel/preset-env": "^7.11.5", |
16 | "babel-minify-webpack-plugin": "^0.2.0", | 16 | "babel-loader": "^8.1.0", |
17 | "babel-preset-env": "^1.6.1", | 17 | "css-loader": "^4.3.0", |
18 | "css-loader": "^0.28.9", | 18 | "eslint": "^7.9.0", |
19 | "eslint": "^4.16.0", | 19 | "eslint-config-airbnb-base": "^14.2.0", |
20 | "eslint-config-airbnb-base": "^12.1.0", | 20 | "eslint-plugin-import": "^2.22.0", |
21 | "eslint-plugin-import": "^2.8.0", | ||
22 | "extract-text-webpack-plugin": "^3.0.2", | ||
23 | "file-loader": "^1.1.6", | 21 | "file-loader": "^1.1.6", |
24 | "node-sass": "^4.12.0", | 22 | "mini-css-extract-plugin": "^0.11.2", |
25 | "sass-lint": "^1.12.1", | 23 | "sass": "^1.26.11", |
26 | "sass-loader": "^6.0.6", | 24 | "sass-loader": "^10.0.2", |
27 | "style-loader": "^0.19.1", | 25 | "stylelint": "^13.7.1", |
28 | "url-loader": "^0.6.2", | 26 | "stylelint-config-standard": "^20.0.0", |
29 | "webpack": "^3.10.0" | 27 | "stylelint-scss": "^3.18.0", |
28 | "terser-webpack-plugin": "^4.2.2", | ||
29 | "webpack": "^4.44.2", | ||
30 | "webpack-cli": "^3.3.12" | ||
30 | }, | 31 | }, |
31 | "scripts": { | 32 | "scripts": { |
32 | "build": "webpack", | 33 | "build": "webpack", |
diff --git a/plugins/archiveorg/archiveorg.php b/plugins/archiveorg/archiveorg.php index f26e6129..922b5966 100644 --- a/plugins/archiveorg/archiveorg.php +++ b/plugins/archiveorg/archiveorg.php | |||
@@ -20,10 +20,12 @@ function hook_archiveorg_render_linklist($data) | |||
20 | $path = ($data['_BASE_PATH_'] ?? '') . '/' . PluginManager::$PLUGINS_PATH; | 20 | $path = ($data['_BASE_PATH_'] ?? '') . '/' . PluginManager::$PLUGINS_PATH; |
21 | 21 | ||
22 | foreach ($data['links'] as &$value) { | 22 | foreach ($data['links'] as &$value) { |
23 | if ($value['private'] && preg_match('/^\?[a-zA-Z0-9-_@]{6}($|&|#)/', $value['real_url'])) { | 23 | $isNote = startsWith($value['real_url'], '/shaare/'); |
24 | if ($value['private'] && $isNote) { | ||
24 | continue; | 25 | continue; |
25 | } | 26 | } |
26 | $archive = sprintf($archive_html, $value['url'], $path, t('View on archive.org')); | 27 | $url = $isNote ? rtrim(index_url($_SERVER), '/') . $value['real_url'] : $value['real_url']; |
28 | $archive = sprintf($archive_html, $url, $path, t('View on archive.org')); | ||
27 | $value['link_plugin'][] = $archive; | 29 | $value['link_plugin'][] = $archive; |
28 | } | 30 | } |
29 | 31 | ||
diff --git a/plugins/default_colors/default_colors.php b/plugins/default_colors/default_colors.php index 1928cc9f..e1fd5cfb 100644 --- a/plugins/default_colors/default_colors.php +++ b/plugins/default_colors/default_colors.php | |||
@@ -15,6 +15,8 @@ const DEFAULT_COLORS_PLACEHOLDERS = [ | |||
15 | 'DEFAULT_COLORS_DARK_MAIN', | 15 | 'DEFAULT_COLORS_DARK_MAIN', |
16 | ]; | 16 | ]; |
17 | 17 | ||
18 | const DEFAULT_COLORS_CSS_FILE = '/default_colors/default_colors.css'; | ||
19 | |||
18 | /** | 20 | /** |
19 | * Display an error if the plugin is active a no color is configured. | 21 | * Display an error if the plugin is active a no color is configured. |
20 | * | 22 | * |
@@ -24,58 +26,62 @@ const DEFAULT_COLORS_PLACEHOLDERS = [ | |||
24 | */ | 26 | */ |
25 | function default_colors_init($conf) | 27 | function default_colors_init($conf) |
26 | { | 28 | { |
27 | $params = ''; | 29 | $params = []; |
28 | foreach (DEFAULT_COLORS_PLACEHOLDERS as $placeholder) { | 30 | foreach (DEFAULT_COLORS_PLACEHOLDERS as $placeholder) { |
29 | $params .= trim($conf->get('plugins.'. $placeholder, '')); | 31 | $value = trim($conf->get('plugins.'. $placeholder, '')); |
32 | if (strlen($value) > 0) { | ||
33 | $params[$placeholder] = $value; | ||
34 | } | ||
30 | } | 35 | } |
31 | 36 | ||
32 | if (empty($params)) { | 37 | if (empty($params)) { |
33 | $error = t('Default colors plugin error: '. | 38 | $error = t('Default colors plugin error: '. |
34 | 'This plugin is active and no custom color is configured.'); | 39 | 'This plugin is active and no custom color is configured.'); |
35 | return array($error); | 40 | return [$error]; |
41 | } | ||
42 | |||
43 | // Colors are defined but the custom CSS file does not exist -> generate it | ||
44 | if (!file_exists(PluginManager::$PLUGINS_PATH . DEFAULT_COLORS_CSS_FILE)) { | ||
45 | default_colors_generate_css_file($params); | ||
36 | } | 46 | } |
37 | } | 47 | } |
38 | 48 | ||
39 | /** | 49 | /** |
40 | * When plugin parameters are saved, we regenerate the custom CSS file with provided settings. | 50 | * When linklist is displayed, include default_colors CSS file. |
41 | * | 51 | * |
42 | * @param array $data $_POST array | 52 | * @param array $data - header data. |
43 | * | 53 | * |
44 | * @return array Updated $_POST array | 54 | * @return mixed - header data with default_colors CSS file added. |
45 | */ | 55 | */ |
46 | function hook_default_colors_save_plugin_parameters($data) | 56 | function hook_default_colors_render_includes($data) |
47 | { | 57 | { |
48 | $file = PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css'; | 58 | $file = PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css'; |
49 | $template = file_get_contents(PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css.template'); | 59 | if (file_exists($file )) { |
50 | $content = ''; | 60 | $data['css_files'][] = $file ; |
51 | foreach (DEFAULT_COLORS_PLACEHOLDERS as $rule) { | ||
52 | $content .= ! empty($data[$rule]) | ||
53 | ? default_colors_format_css_rule($data, $rule) .';'. PHP_EOL | ||
54 | : ''; | ||
55 | } | ||
56 | |||
57 | if (! empty($content)) { | ||
58 | file_put_contents($file, sprintf($template, $content)); | ||
59 | } | 61 | } |
60 | 62 | ||
61 | return $data; | 63 | return $data; |
62 | } | 64 | } |
63 | 65 | ||
64 | /** | 66 | /** |
65 | * When linklist is displayed, include default_colors CSS file. | 67 | * Regenerate the custom CSS file with provided settings. |
66 | * | ||
67 | * @param array $data - header data. | ||
68 | * | 68 | * |
69 | * @return mixed - header data with default_colors CSS file added. | 69 | * @param array $params Plugin configuration (CSS rules) |
70 | */ | 70 | */ |
71 | function hook_default_colors_render_includes($data) | 71 | function default_colors_generate_css_file($params): void |
72 | { | 72 | { |
73 | $file = PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css'; | 73 | $file = PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css'; |
74 | if (file_exists($file )) { | 74 | $template = file_get_contents(PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css.template'); |
75 | $data['css_files'][] = $file ; | 75 | $content = ''; |
76 | foreach (DEFAULT_COLORS_PLACEHOLDERS as $rule) { | ||
77 | $content .= !empty($params[$rule]) | ||
78 | ? default_colors_format_css_rule($params, $rule) .';'. PHP_EOL | ||
79 | : ''; | ||
76 | } | 80 | } |
77 | 81 | ||
78 | return $data; | 82 | if (! empty($content)) { |
83 | file_put_contents($file, sprintf($template, $content)); | ||
84 | } | ||
79 | } | 85 | } |
80 | 86 | ||
81 | /** | 87 | /** |
diff --git a/plugins/isso/isso.php b/plugins/isso/isso.php index 16edd9a6..79e7380b 100644 --- a/plugins/isso/isso.php +++ b/plugins/isso/isso.php | |||
@@ -49,7 +49,7 @@ function hook_isso_render_linklist($data, $conf) | |||
49 | $isso = sprintf($issoHtml, $issoUrl, $issoUrl, $link['id'], $link['id']); | 49 | $isso = sprintf($issoHtml, $issoUrl, $issoUrl, $link['id'], $link['id']); |
50 | $data['plugin_end_zone'][] = $isso; | 50 | $data['plugin_end_zone'][] = $isso; |
51 | } else { | 51 | } else { |
52 | $button = '<span><a href="?%s#isso-thread">'; | 52 | $button = '<span><a href="'. ($data['_BASE_PATH_'] ?? '') . '/shaare/%s#isso-thread">'; |
53 | // For the default theme we use a FontAwesome icon which is better than an image | 53 | // For the default theme we use a FontAwesome icon which is better than an image |
54 | if ($conf->get('resource.theme') === 'default') { | 54 | if ($conf->get('resource.theme') === 'default') { |
55 | $button .= '<i class="linklist-plugin-icon fa fa-comment"></i>'; | 55 | $button .= '<i class="linklist-plugin-icon fa fa-comment"></i>'; |
diff --git a/plugins/playvideos/README.md b/plugins/playvideos/README.md index ab4be22a..32a94e88 100644 --- a/plugins/playvideos/README.md +++ b/plugins/playvideos/README.md | |||
@@ -8,22 +8,21 @@ This uses code from https://zaius.github.io/youtube_playlist/ and is currently o | |||
8 | 8 | ||
9 | #### Installation and setup | 9 | #### Installation and setup |
10 | 10 | ||
11 | This is a default Shaarli plugin, you just have to enable it. See https://shaarli.readthedocs.io/en/master/Shaarli-configuration/ | 11 | This is a default Shaarli plugin, you just have to enable it. See [Shaarli configuration](../../doc/md/Shaarli-configuration.md). |
12 | 12 | ||
13 | 13 | ||
14 | #### Troubleshooting | 14 | #### Troubleshooting |
15 | 15 | ||
16 | If your server has [Content Security Policy](http://content-security-policy.com/) headers enabled, this may prevent the script from loading fully. You should relax the CSP in your server settings. Example CSP rule for apache2: | 16 | If your server has [Content Security Policy](http://content-security-policy.com/) headers enabled, this may prevent the script from loading fully. You should relax the CSP in your server settings. Example CSP rule for apache2: |
17 | |||
18 | In `/etc/apache2/conf-available/shaarli-csp.conf`: | ||
19 | 17 | ||
20 | ```apache | 18 | ```apache |
21 | <Directory /path/to/shaarli> | 19 | <Directory /path/to/shaarli> |
20 | # Required for playvideos plugin | ||
22 | Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' https://www.youtube.com https://s.ytimg.com 'unsafe-eval'" | 21 | Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' https://www.youtube.com https://s.ytimg.com 'unsafe-eval'" |
23 | </Directory> | 22 | </Directory> |
24 | ``` | 23 | ``` |
25 | 24 | ||
26 | Then run `a2enconf shaarli-csp; service apache2 reload` | 25 | You may place the `Header` directive in the `<Directory...` section of your [webserver configuration](../../doc/md/Server-configuration.md)/virtualhost file, or write the above snippet to `/etc/apache2/conf-available/shaarli-csp.conf`; then run `a2enconf shaarli-csp; service apache2 reload`. |
27 | 26 | ||
28 | ### License | 27 | ### License |
29 | ``` | 28 | ``` |
diff --git a/plugins/qrcode/qrcode.php b/plugins/qrcode/qrcode.php index 3b5dae34..95499e39 100644 --- a/plugins/qrcode/qrcode.php +++ b/plugins/qrcode/qrcode.php | |||
@@ -42,7 +42,7 @@ function hook_qrcode_render_linklist($data) | |||
42 | function hook_qrcode_render_footer($data) | 42 | function hook_qrcode_render_footer($data) |
43 | { | 43 | { |
44 | if ($data['_PAGE_'] == TemplatePage::LINKLIST) { | 44 | if ($data['_PAGE_'] == TemplatePage::LINKLIST) { |
45 | $data['js_files'][] = PluginManager::$PLUGINS_PATH . '/qrcode/shaarli-qrcode.js'; | 45 | $data['js_files'][] = PluginManager::$PLUGINS_PATH . '/qrcode/shaarli-qrcode.js'; |
46 | } | 46 | } |
47 | 47 | ||
48 | return $data; | 48 | return $data; |
diff --git a/tests/ApplicationUtilsTest.php b/tests/ApplicationUtilsTest.php index 15388970..a232b351 100644 --- a/tests/ApplicationUtilsTest.php +++ b/tests/ApplicationUtilsTest.php | |||
@@ -8,7 +8,7 @@ require_once 'tests/utils/FakeApplicationUtils.php'; | |||
8 | /** | 8 | /** |
9 | * Unitary tests for Shaarli utilities | 9 | * Unitary tests for Shaarli utilities |
10 | */ | 10 | */ |
11 | class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase | 11 | class ApplicationUtilsTest extends \Shaarli\TestCase |
12 | { | 12 | { |
13 | protected static $testUpdateFile = 'sandbox/update.txt'; | 13 | protected static $testUpdateFile = 'sandbox/update.txt'; |
14 | protected static $testVersion = '0.5.0'; | 14 | protected static $testVersion = '0.5.0'; |
@@ -17,7 +17,7 @@ class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase | |||
17 | /** | 17 | /** |
18 | * Reset test data for each test | 18 | * Reset test data for each test |
19 | */ | 19 | */ |
20 | public function setUp() | 20 | protected function setUp(): void |
21 | { | 21 | { |
22 | FakeApplicationUtils::$VERSION_CODE = ''; | 22 | FakeApplicationUtils::$VERSION_CODE = ''; |
23 | if (file_exists(self::$testUpdateFile)) { | 23 | if (file_exists(self::$testUpdateFile)) { |
@@ -28,7 +28,7 @@ class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase | |||
28 | /** | 28 | /** |
29 | * Remove test version file if it exists | 29 | * Remove test version file if it exists |
30 | */ | 30 | */ |
31 | public function tearDown() | 31 | protected function tearDown(): void |
32 | { | 32 | { |
33 | if (is_file('sandbox/version.php')) { | 33 | if (is_file('sandbox/version.php')) { |
34 | unlink('sandbox/version.php'); | 34 | unlink('sandbox/version.php'); |
@@ -144,11 +144,12 @@ class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase | |||
144 | 144 | ||
145 | /** | 145 | /** |
146 | * Test update checks - invalid Git branch | 146 | * Test update checks - invalid Git branch |
147 | * @expectedException Exception | ||
148 | * @expectedExceptionMessageRegExp /Invalid branch selected for updates/ | ||
149 | */ | 147 | */ |
150 | public function testCheckUpdateInvalidGitBranch() | 148 | public function testCheckUpdateInvalidGitBranch() |
151 | { | 149 | { |
150 | $this->expectException(\Exception::class); | ||
151 | $this->expectExceptionMessageRegExp('/Invalid branch selected for updates/'); | ||
152 | |||
152 | ApplicationUtils::checkUpdate('', 'null', 0, true, true, 'unstable'); | 153 | ApplicationUtils::checkUpdate('', 'null', 0, true, true, 'unstable'); |
153 | } | 154 | } |
154 | 155 | ||
@@ -260,21 +261,23 @@ class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase | |||
260 | 261 | ||
261 | /** | 262 | /** |
262 | * Check a unsupported PHP version | 263 | * Check a unsupported PHP version |
263 | * @expectedException Exception | ||
264 | * @expectedExceptionMessageRegExp /Your PHP version is obsolete/ | ||
265 | */ | 264 | */ |
266 | public function testCheckSupportedPHPVersion51() | 265 | public function testCheckSupportedPHPVersion51() |
267 | { | 266 | { |
267 | $this->expectException(\Exception::class); | ||
268 | $this->expectExceptionMessageRegExp('/Your PHP version is obsolete/'); | ||
269 | |||
268 | $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.1.0')); | 270 | $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.1.0')); |
269 | } | 271 | } |
270 | 272 | ||
271 | /** | 273 | /** |
272 | * Check another unsupported PHP version | 274 | * Check another unsupported PHP version |
273 | * @expectedException Exception | ||
274 | * @expectedExceptionMessageRegExp /Your PHP version is obsolete/ | ||
275 | */ | 275 | */ |
276 | public function testCheckSupportedPHPVersion52() | 276 | public function testCheckSupportedPHPVersion52() |
277 | { | 277 | { |
278 | $this->expectException(\Exception::class); | ||
279 | $this->expectExceptionMessageRegExp('/Your PHP version is obsolete/'); | ||
280 | |||
278 | $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.2')); | 281 | $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.2')); |
279 | } | 282 | } |
280 | 283 | ||
diff --git a/tests/FileUtilsTest.php b/tests/FileUtilsTest.php index 57719175..9163bdf1 100644 --- a/tests/FileUtilsTest.php +++ b/tests/FileUtilsTest.php | |||
@@ -9,7 +9,7 @@ use Exception; | |||
9 | * | 9 | * |
10 | * Test file utility class. | 10 | * Test file utility class. |
11 | */ | 11 | */ |
12 | class FileUtilsTest extends \PHPUnit\Framework\TestCase | 12 | class FileUtilsTest extends \Shaarli\TestCase |
13 | { | 13 | { |
14 | /** | 14 | /** |
15 | * @var string Test file path. | 15 | * @var string Test file path. |
@@ -19,7 +19,7 @@ class FileUtilsTest extends \PHPUnit\Framework\TestCase | |||
19 | /** | 19 | /** |
20 | * Delete test file after every test. | 20 | * Delete test file after every test. |
21 | */ | 21 | */ |
22 | public function tearDown() | 22 | protected function tearDown(): void |
23 | { | 23 | { |
24 | @unlink(self::$file); | 24 | @unlink(self::$file); |
25 | } | 25 | } |
@@ -49,12 +49,12 @@ class FileUtilsTest extends \PHPUnit\Framework\TestCase | |||
49 | 49 | ||
50 | /** | 50 | /** |
51 | * File not writable: raise an exception. | 51 | * File not writable: raise an exception. |
52 | * | ||
53 | * @expectedException Shaarli\Exceptions\IOException | ||
54 | * @expectedExceptionMessage Error accessing "sandbox/flat.db" | ||
55 | */ | 52 | */ |
56 | public function testWriteWithoutPermission() | 53 | public function testWriteWithoutPermission() |
57 | { | 54 | { |
55 | $this->expectException(\Shaarli\Exceptions\IOException::class); | ||
56 | $this->expectExceptionMessage('Error accessing "sandbox/flat.db"'); | ||
57 | |||
58 | touch(self::$file); | 58 | touch(self::$file); |
59 | chmod(self::$file, 0440); | 59 | chmod(self::$file, 0440); |
60 | FileUtils::writeFlatDB(self::$file, null); | 60 | FileUtils::writeFlatDB(self::$file, null); |
@@ -62,23 +62,23 @@ class FileUtilsTest extends \PHPUnit\Framework\TestCase | |||
62 | 62 | ||
63 | /** | 63 | /** |
64 | * Folder non existent: raise an exception. | 64 | * Folder non existent: raise an exception. |
65 | * | ||
66 | * @expectedException Shaarli\Exceptions\IOException | ||
67 | * @expectedExceptionMessage Error accessing "nopefolder" | ||
68 | */ | 65 | */ |
69 | public function testWriteFolderDoesNotExist() | 66 | public function testWriteFolderDoesNotExist() |
70 | { | 67 | { |
68 | $this->expectException(\Shaarli\Exceptions\IOException::class); | ||
69 | $this->expectExceptionMessage('Error accessing "nopefolder"'); | ||
70 | |||
71 | FileUtils::writeFlatDB('nopefolder/file', null); | 71 | FileUtils::writeFlatDB('nopefolder/file', null); |
72 | } | 72 | } |
73 | 73 | ||
74 | /** | 74 | /** |
75 | * Folder non writable: raise an exception. | 75 | * Folder non writable: raise an exception. |
76 | * | ||
77 | * @expectedException Shaarli\Exceptions\IOException | ||
78 | * @expectedExceptionMessage Error accessing "sandbox" | ||
79 | */ | 76 | */ |
80 | public function testWriteFolderPermission() | 77 | public function testWriteFolderPermission() |
81 | { | 78 | { |
79 | $this->expectException(\Shaarli\Exceptions\IOException::class); | ||
80 | $this->expectExceptionMessage('Error accessing "sandbox"'); | ||
81 | |||
82 | chmod(dirname(self::$file), 0555); | 82 | chmod(dirname(self::$file), 0555); |
83 | try { | 83 | try { |
84 | FileUtils::writeFlatDB(self::$file, null); | 84 | FileUtils::writeFlatDB(self::$file, null); |
diff --git a/tests/HistoryTest.php b/tests/HistoryTest.php index 7189c3a9..6dc0e5b7 100644 --- a/tests/HistoryTest.php +++ b/tests/HistoryTest.php | |||
@@ -3,10 +3,9 @@ | |||
3 | namespace Shaarli; | 3 | namespace Shaarli; |
4 | 4 | ||
5 | use DateTime; | 5 | use DateTime; |
6 | use Exception; | ||
7 | use Shaarli\Bookmark\Bookmark; | 6 | use Shaarli\Bookmark\Bookmark; |
8 | 7 | ||
9 | class HistoryTest extends \PHPUnit\Framework\TestCase | 8 | class HistoryTest extends \Shaarli\TestCase |
10 | { | 9 | { |
11 | /** | 10 | /** |
12 | * @var string History file path | 11 | * @var string History file path |
@@ -16,7 +15,7 @@ class HistoryTest extends \PHPUnit\Framework\TestCase | |||
16 | /** | 15 | /** |
17 | * Delete history file. | 16 | * Delete history file. |
18 | */ | 17 | */ |
19 | public function setUp() | 18 | protected function setUp(): void |
20 | { | 19 | { |
21 | if (file_exists(self::$historyFilePath)) { | 20 | if (file_exists(self::$historyFilePath)) { |
22 | unlink(self::$historyFilePath); | 21 | unlink(self::$historyFilePath); |
@@ -44,12 +43,12 @@ class HistoryTest extends \PHPUnit\Framework\TestCase | |||
44 | 43 | ||
45 | /** | 44 | /** |
46 | * Not writable history file: raise an exception. | 45 | * Not writable history file: raise an exception. |
47 | * | ||
48 | * @expectedException Exception | ||
49 | * @expectedExceptionMessage History file isn't readable or writable | ||
50 | */ | 46 | */ |
51 | public function testConstructNotWritable() | 47 | public function testConstructNotWritable() |
52 | { | 48 | { |
49 | $this->expectException(\Exception::class); | ||
50 | $this->expectExceptionMessage('History file isn\'t readable or writable'); | ||
51 | |||
53 | touch(self::$historyFilePath); | 52 | touch(self::$historyFilePath); |
54 | chmod(self::$historyFilePath, 0440); | 53 | chmod(self::$historyFilePath, 0440); |
55 | $history = new History(self::$historyFilePath); | 54 | $history = new History(self::$historyFilePath); |
@@ -58,12 +57,12 @@ class HistoryTest extends \PHPUnit\Framework\TestCase | |||
58 | 57 | ||
59 | /** | 58 | /** |
60 | * Not parsable history file: raise an exception. | 59 | * Not parsable history file: raise an exception. |
61 | * | ||
62 | * @expectedException Exception | ||
63 | * @expectedExceptionMessageRegExp /Could not parse history file/ | ||
64 | */ | 60 | */ |
65 | public function testConstructNotParsable() | 61 | public function testConstructNotParsable() |
66 | { | 62 | { |
63 | $this->expectException(\Exception::class); | ||
64 | $this->expectExceptionMessageRegExp('/Could not parse history file/'); | ||
65 | |||
67 | file_put_contents(self::$historyFilePath, 'not parsable'); | 66 | file_put_contents(self::$historyFilePath, 'not parsable'); |
68 | $history = new History(self::$historyFilePath); | 67 | $history = new History(self::$historyFilePath); |
69 | // gzinflate generates a warning | 68 | // gzinflate generates a warning |
diff --git a/tests/LanguagesTest.php b/tests/LanguagesTest.php index de83f291..ce24c160 100644 --- a/tests/LanguagesTest.php +++ b/tests/LanguagesTest.php | |||
@@ -7,7 +7,7 @@ use Shaarli\Config\ConfigManager; | |||
7 | /** | 7 | /** |
8 | * Class LanguagesTest. | 8 | * Class LanguagesTest. |
9 | */ | 9 | */ |
10 | class LanguagesTest extends \PHPUnit\Framework\TestCase | 10 | class LanguagesTest extends \Shaarli\TestCase |
11 | { | 11 | { |
12 | /** | 12 | /** |
13 | * @var string Config file path (without extension). | 13 | * @var string Config file path (without extension). |
@@ -22,7 +22,7 @@ class LanguagesTest extends \PHPUnit\Framework\TestCase | |||
22 | /** | 22 | /** |
23 | * | 23 | * |
24 | */ | 24 | */ |
25 | public function setUp() | 25 | protected function setUp(): void |
26 | { | 26 | { |
27 | $this->conf = new ConfigManager(self::$configFile); | 27 | $this->conf = new ConfigManager(self::$configFile); |
28 | } | 28 | } |
diff --git a/tests/PluginManagerTest.php b/tests/PluginManagerTest.php index a5d5dbe9..efef5e87 100644 --- a/tests/PluginManagerTest.php +++ b/tests/PluginManagerTest.php | |||
@@ -1,4 +1,5 @@ | |||
1 | <?php | 1 | <?php |
2 | |||
2 | namespace Shaarli\Plugin; | 3 | namespace Shaarli\Plugin; |
3 | 4 | ||
4 | use Shaarli\Config\ConfigManager; | 5 | use Shaarli\Config\ConfigManager; |
@@ -6,7 +7,7 @@ use Shaarli\Config\ConfigManager; | |||
6 | /** | 7 | /** |
7 | * Unit tests for Plugins | 8 | * Unit tests for Plugins |
8 | */ | 9 | */ |
9 | class PluginManagerTest extends \PHPUnit\Framework\TestCase | 10 | class PluginManagerTest extends \Shaarli\TestCase |
10 | { | 11 | { |
11 | /** | 12 | /** |
12 | * Path to tests plugin. | 13 | * Path to tests plugin. |
@@ -41,17 +42,31 @@ class PluginManagerTest extends \PHPUnit\Framework\TestCase | |||
41 | 42 | ||
42 | $this->assertTrue(function_exists('hook_test_random')); | 43 | $this->assertTrue(function_exists('hook_test_random')); |
43 | 44 | ||
44 | $data = array(0 => 'woot'); | 45 | $data = [0 => 'woot']; |
45 | $this->pluginManager->executeHooks('random', $data); | 46 | $this->pluginManager->executeHooks('random', $data); |
46 | $this->assertEquals('woot', $data[1]); | ||
47 | 47 | ||
48 | $data = array(0 => 'woot'); | 48 | static::assertCount(2, $data); |
49 | static::assertSame('woot', $data[1]); | ||
50 | |||
51 | $data = [0 => 'woot']; | ||
49 | $this->pluginManager->executeHooks('random', $data, array('target' => 'test')); | 52 | $this->pluginManager->executeHooks('random', $data, array('target' => 'test')); |
50 | $this->assertEquals('page test', $data[1]); | ||
51 | 53 | ||
52 | $data = array(0 => 'woot'); | 54 | static::assertCount(2, $data); |
55 | static::assertSame('page test', $data[1]); | ||
56 | |||
57 | $data = [0 => 'woot']; | ||
53 | $this->pluginManager->executeHooks('random', $data, array('loggedin' => true)); | 58 | $this->pluginManager->executeHooks('random', $data, array('loggedin' => true)); |
54 | $this->assertEquals('loggedin', $data[1]); | 59 | |
60 | static::assertCount(2, $data); | ||
61 | static::assertEquals('loggedin', $data[1]); | ||
62 | |||
63 | $data = [0 => 'woot']; | ||
64 | $this->pluginManager->executeHooks('random', $data, array('loggedin' => null)); | ||
65 | |||
66 | static::assertCount(3, $data); | ||
67 | static::assertEquals('loggedin', $data[1]); | ||
68 | static::assertArrayHasKey(2, $data); | ||
69 | static::assertNull($data[2]); | ||
55 | } | 70 | } |
56 | 71 | ||
57 | /** | 72 | /** |
@@ -67,8 +82,8 @@ class PluginManagerTest extends \PHPUnit\Framework\TestCase | |||
67 | $data = []; | 82 | $data = []; |
68 | $this->pluginManager->executeHooks('error', $data); | 83 | $this->pluginManager->executeHooks('error', $data); |
69 | 84 | ||
70 | $this->assertSame( | 85 | $this->assertRegExp( |
71 | 'test [plugin incompatibility]: Class \'Unknown\' not found', | 86 | '/test \[plugin incompatibility\]: Class [\'"]Unknown[\'"] not found/', |
72 | $this->pluginManager->getErrors()[0] | 87 | $this->pluginManager->getErrors()[0] |
73 | ); | 88 | ); |
74 | } | 89 | } |
@@ -78,8 +93,8 @@ class PluginManagerTest extends \PHPUnit\Framework\TestCase | |||
78 | */ | 93 | */ |
79 | public function testPluginNotFound(): void | 94 | public function testPluginNotFound(): void |
80 | { | 95 | { |
81 | $this->pluginManager->load(array()); | 96 | $this->pluginManager->load([]); |
82 | $this->pluginManager->load(array('nope', 'renope')); | 97 | $this->pluginManager->load(['nope', 'renope']); |
83 | $this->addToAssertionCount(1); | 98 | $this->addToAssertionCount(1); |
84 | } | 99 | } |
85 | 100 | ||
@@ -89,18 +104,18 @@ class PluginManagerTest extends \PHPUnit\Framework\TestCase | |||
89 | public function testGetPluginsMeta(): void | 104 | public function testGetPluginsMeta(): void |
90 | { | 105 | { |
91 | PluginManager::$PLUGINS_PATH = self::$pluginPath; | 106 | PluginManager::$PLUGINS_PATH = self::$pluginPath; |
92 | $this->pluginManager->load(array(self::$pluginName)); | 107 | $this->pluginManager->load([self::$pluginName]); |
93 | 108 | ||
94 | $expectedParameters = array( | 109 | $expectedParameters = [ |
95 | 'pop' => array( | 110 | 'pop' => [ |
96 | 'value' => '', | 111 | 'value' => '', |
97 | 'desc' => 'pop description', | 112 | 'desc' => 'pop description', |
98 | ), | 113 | ], |
99 | 'hip' => array( | 114 | 'hip' => [ |
100 | 'value' => '', | 115 | 'value' => '', |
101 | 'desc' => '', | 116 | 'desc' => '', |
102 | ), | 117 | ], |
103 | ); | 118 | ]; |
104 | $meta = $this->pluginManager->getPluginsMeta(); | 119 | $meta = $this->pluginManager->getPluginsMeta(); |
105 | $this->assertEquals('test plugin', $meta[self::$pluginName]['description']); | 120 | $this->assertEquals('test plugin', $meta[self::$pluginName]['description']); |
106 | $this->assertEquals($expectedParameters, $meta[self::$pluginName]['parameters']); | 121 | $this->assertEquals($expectedParameters, $meta[self::$pluginName]['parameters']); |
diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 00000000..781e7aa3 --- /dev/null +++ b/tests/TestCase.php | |||
@@ -0,0 +1,77 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli; | ||
6 | |||
7 | /** | ||
8 | * Helper class extending \PHPUnit\Framework\TestCase. | ||
9 | * Used to make Shaarli UT run on multiple versions of PHPUnit. | ||
10 | */ | ||
11 | class TestCase extends \PHPUnit\Framework\TestCase | ||
12 | { | ||
13 | /** | ||
14 | * expectExceptionMessageRegExp has been removed and replaced by expectExceptionMessageMatches in PHPUnit 9. | ||
15 | */ | ||
16 | public function expectExceptionMessageRegExp(string $regularExpression): void | ||
17 | { | ||
18 | if (method_exists($this, 'expectExceptionMessageMatches')) { | ||
19 | $this->expectExceptionMessageMatches($regularExpression); | ||
20 | } else { | ||
21 | parent::expectExceptionMessageRegExp($regularExpression); | ||
22 | } | ||
23 | } | ||
24 | |||
25 | /** | ||
26 | * assertContains is now used for iterable, strings should use assertStringContainsString | ||
27 | */ | ||
28 | public function assertContainsPolyfill($expected, $actual, string $message = ''): void | ||
29 | { | ||
30 | if (is_string($actual) && method_exists($this, 'assertStringContainsString')) { | ||
31 | static::assertStringContainsString($expected, $actual, $message); | ||
32 | } else { | ||
33 | static::assertContains($expected, $actual, $message); | ||
34 | } | ||
35 | } | ||
36 | |||
37 | /** | ||
38 | * assertNotContains is now used for iterable, strings should use assertStringNotContainsString | ||
39 | */ | ||
40 | public function assertNotContainsPolyfill($expected, $actual, string $message = ''): void | ||
41 | { | ||
42 | if (is_string($actual) && method_exists($this, 'assertStringNotContainsString')) { | ||
43 | static::assertStringNotContainsString($expected, $actual, $message); | ||
44 | } else { | ||
45 | static::assertNotContains($expected, $actual, $message); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | /** | ||
50 | * assertFileNotExists has been renamed in assertFileDoesNotExist | ||
51 | */ | ||
52 | public static function assertFileNotExists(string $filename, string $message = ''): void | ||
53 | { | ||
54 | if (method_exists(TestCase::class, 'assertFileDoesNotExist')) { | ||
55 | static::assertFileDoesNotExist($filename, $message); | ||
56 | } else { | ||
57 | parent::assertFileNotExists($filename, $message); | ||
58 | } | ||
59 | } | ||
60 | |||
61 | /** | ||
62 | * assertRegExp has been renamed in assertMatchesRegularExpression | ||
63 | */ | ||
64 | public static function assertRegExp(string $pattern, string $string, string $message = ''): void | ||
65 | { | ||
66 | if (method_exists(TestCase::class, 'assertMatchesRegularExpression')) { | ||
67 | static::assertMatchesRegularExpression($pattern, $string, $message); | ||
68 | } else { | ||
69 | parent::assertRegExp($pattern, $string, $message); | ||
70 | } | ||
71 | } | ||
72 | |||
73 | public function isInTestsContext(): bool | ||
74 | { | ||
75 | return true; | ||
76 | } | ||
77 | } | ||
diff --git a/tests/ThumbnailerTest.php b/tests/ThumbnailerTest.php index c01849f7..70519aca 100644 --- a/tests/ThumbnailerTest.php +++ b/tests/ThumbnailerTest.php | |||
@@ -2,7 +2,6 @@ | |||
2 | 2 | ||
3 | namespace Shaarli; | 3 | namespace Shaarli; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | ||
6 | use Shaarli\Config\ConfigManager; | 5 | use Shaarli\Config\ConfigManager; |
7 | use WebThumbnailer\Application\ConfigManager as WTConfigManager; | 6 | use WebThumbnailer\Application\ConfigManager as WTConfigManager; |
8 | 7 | ||
@@ -30,7 +29,7 @@ class ThumbnailerTest extends TestCase | |||
30 | */ | 29 | */ |
31 | protected $conf; | 30 | protected $conf; |
32 | 31 | ||
33 | public function setUp() | 32 | protected function setUp(): void |
34 | { | 33 | { |
35 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 34 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
36 | $this->conf->set('thumbnails.mode', Thumbnailer::MODE_ALL); | 35 | $this->conf->set('thumbnails.mode', Thumbnailer::MODE_ALL); |
@@ -43,7 +42,7 @@ class ThumbnailerTest extends TestCase | |||
43 | WTConfigManager::addFile('tests/utils/config/wt.json'); | 42 | WTConfigManager::addFile('tests/utils/config/wt.json'); |
44 | } | 43 | } |
45 | 44 | ||
46 | public function tearDown() | 45 | protected function tearDown(): void |
47 | { | 46 | { |
48 | $this->rrmdirContent('sandbox/'); | 47 | $this->rrmdirContent('sandbox/'); |
49 | } | 48 | } |
diff --git a/tests/TimeZoneTest.php b/tests/TimeZoneTest.php index 02bf060f..77862855 100644 --- a/tests/TimeZoneTest.php +++ b/tests/TimeZoneTest.php | |||
@@ -8,14 +8,14 @@ require_once 'application/TimeZone.php'; | |||
8 | /** | 8 | /** |
9 | * Unitary tests for timezone utilities | 9 | * Unitary tests for timezone utilities |
10 | */ | 10 | */ |
11 | class TimeZoneTest extends PHPUnit\Framework\TestCase | 11 | class TimeZoneTest extends \Shaarli\TestCase |
12 | { | 12 | { |
13 | /** | 13 | /** |
14 | * @var array of timezones | 14 | * @var array of timezones |
15 | */ | 15 | */ |
16 | protected $installedTimezones; | 16 | protected $installedTimezones; |
17 | 17 | ||
18 | public function setUp() | 18 | protected function setUp(): void |
19 | { | 19 | { |
20 | $this->installedTimezones = [ | 20 | $this->installedTimezones = [ |
21 | 'Antarctica/Syowa', | 21 | 'Antarctica/Syowa', |
diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php index 26d2a6b8..6e787d7f 100644 --- a/tests/UtilsTest.php +++ b/tests/UtilsTest.php | |||
@@ -10,7 +10,7 @@ require_once 'application/Languages.php'; | |||
10 | /** | 10 | /** |
11 | * Unitary tests for Shaarli utilities | 11 | * Unitary tests for Shaarli utilities |
12 | */ | 12 | */ |
13 | class UtilsTest extends PHPUnit\Framework\TestCase | 13 | class UtilsTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | // Log file | 15 | // Log file |
16 | protected static $testLogFile = 'tests.log'; | 16 | protected static $testLogFile = 'tests.log'; |
@@ -26,7 +26,7 @@ class UtilsTest extends PHPUnit\Framework\TestCase | |||
26 | /** | 26 | /** |
27 | * Assign reference data | 27 | * Assign reference data |
28 | */ | 28 | */ |
29 | public static function setUpBeforeClass() | 29 | public static function setUpBeforeClass(): void |
30 | { | 30 | { |
31 | self::$defaultTimeZone = date_default_timezone_get(); | 31 | self::$defaultTimeZone = date_default_timezone_get(); |
32 | // Timezone without DST for test consistency | 32 | // Timezone without DST for test consistency |
@@ -36,7 +36,7 @@ class UtilsTest extends PHPUnit\Framework\TestCase | |||
36 | /** | 36 | /** |
37 | * Reset the timezone | 37 | * Reset the timezone |
38 | */ | 38 | */ |
39 | public static function tearDownAfterClass() | 39 | public static function tearDownAfterClass(): void |
40 | { | 40 | { |
41 | date_default_timezone_set(self::$defaultTimeZone); | 41 | date_default_timezone_set(self::$defaultTimeZone); |
42 | } | 42 | } |
@@ -44,7 +44,7 @@ class UtilsTest extends PHPUnit\Framework\TestCase | |||
44 | /** | 44 | /** |
45 | * Resets test data before each test | 45 | * Resets test data before each test |
46 | */ | 46 | */ |
47 | protected function setUp() | 47 | protected function setUp(): void |
48 | { | 48 | { |
49 | if (file_exists(self::$testLogFile)) { | 49 | if (file_exists(self::$testLogFile)) { |
50 | unlink(self::$testLogFile); | 50 | unlink(self::$testLogFile); |
diff --git a/tests/api/ApiMiddlewareTest.php b/tests/api/ApiMiddlewareTest.php index df2fb33a..86700840 100644 --- a/tests/api/ApiMiddlewareTest.php +++ b/tests/api/ApiMiddlewareTest.php | |||
@@ -18,7 +18,7 @@ use Slim\Http\Response; | |||
18 | * | 18 | * |
19 | * @package Api | 19 | * @package Api |
20 | */ | 20 | */ |
21 | class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | 21 | class ApiMiddlewareTest extends \Shaarli\TestCase |
22 | { | 22 | { |
23 | /** | 23 | /** |
24 | * @var string datastore to test write operations | 24 | * @var string datastore to test write operations |
@@ -26,7 +26,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
26 | protected static $testDatastore = 'sandbox/datastore.php'; | 26 | protected static $testDatastore = 'sandbox/datastore.php'; |
27 | 27 | ||
28 | /** | 28 | /** |
29 | * @var \ConfigManager instance | 29 | * @var ConfigManager instance |
30 | */ | 30 | */ |
31 | protected $conf; | 31 | protected $conf; |
32 | 32 | ||
@@ -43,7 +43,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
43 | /** | 43 | /** |
44 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 44 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
45 | */ | 45 | */ |
46 | public function setUp() | 46 | protected function setUp(): void |
47 | { | 47 | { |
48 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 48 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
49 | $this->conf->set('api.secret', 'NapoleonWasALizard'); | 49 | $this->conf->set('api.secret', 'NapoleonWasALizard'); |
@@ -61,12 +61,59 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
61 | /** | 61 | /** |
62 | * After every test, remove the test datastore. | 62 | * After every test, remove the test datastore. |
63 | */ | 63 | */ |
64 | public function tearDown() | 64 | protected function tearDown(): void |
65 | { | 65 | { |
66 | @unlink(self::$testDatastore); | 66 | @unlink(self::$testDatastore); |
67 | } | 67 | } |
68 | 68 | ||
69 | /** | 69 | /** |
70 | * Invoke the middleware with a valid token | ||
71 | */ | ||
72 | public function testInvokeMiddlewareWithValidToken(): void | ||
73 | { | ||
74 | $next = function (Request $request, Response $response): Response { | ||
75 | return $response; | ||
76 | }; | ||
77 | $mw = new ApiMiddleware($this->container); | ||
78 | $env = Environment::mock([ | ||
79 | 'REQUEST_METHOD' => 'GET', | ||
80 | 'REQUEST_URI' => '/echo', | ||
81 | 'HTTP_AUTHORIZATION'=> 'Bearer ' . ApiUtilsTest::generateValidJwtToken('NapoleonWasALizard'), | ||
82 | ]); | ||
83 | $request = Request::createFromEnvironment($env); | ||
84 | $response = new Response(); | ||
85 | /** @var Response $response */ | ||
86 | $response = $mw($request, $response, $next); | ||
87 | |||
88 | $this->assertEquals(200, $response->getStatusCode()); | ||
89 | } | ||
90 | |||
91 | /** | ||
92 | * Invoke the middleware with a valid token | ||
93 | * Using specific Apache CGI redirected authorization. | ||
94 | */ | ||
95 | public function testInvokeMiddlewareWithValidTokenFromRedirectedHeader(): void | ||
96 | { | ||
97 | $next = function (Request $request, Response $response): Response { | ||
98 | return $response; | ||
99 | }; | ||
100 | |||
101 | $token = 'Bearer ' . ApiUtilsTest::generateValidJwtToken('NapoleonWasALizard'); | ||
102 | $this->container->environment['REDIRECT_HTTP_AUTHORIZATION'] = $token; | ||
103 | $mw = new ApiMiddleware($this->container); | ||
104 | $env = Environment::mock([ | ||
105 | 'REQUEST_METHOD' => 'GET', | ||
106 | 'REQUEST_URI' => '/echo', | ||
107 | ]); | ||
108 | $request = Request::createFromEnvironment($env); | ||
109 | $response = new Response(); | ||
110 | /** @var Response $response */ | ||
111 | $response = $mw($request, $response, $next); | ||
112 | |||
113 | $this->assertEquals(200, $response->getStatusCode()); | ||
114 | } | ||
115 | |||
116 | /** | ||
70 | * Invoke the middleware with the API disabled: | 117 | * Invoke the middleware with the API disabled: |
71 | * should return a 401 error Unauthorized. | 118 | * should return a 401 error Unauthorized. |
72 | */ | 119 | */ |
@@ -109,7 +156,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
109 | $this->assertEquals(401, $response->getStatusCode()); | 156 | $this->assertEquals(401, $response->getStatusCode()); |
110 | $body = json_decode((string) $response->getBody()); | 157 | $body = json_decode((string) $response->getBody()); |
111 | $this->assertEquals('Not authorized: API is disabled', $body->message); | 158 | $this->assertEquals('Not authorized: API is disabled', $body->message); |
112 | $this->assertContains('ApiAuthorizationException', $body->stacktrace); | 159 | $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace); |
113 | } | 160 | } |
114 | 161 | ||
115 | /** | 162 | /** |
@@ -132,7 +179,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
132 | $this->assertEquals(401, $response->getStatusCode()); | 179 | $this->assertEquals(401, $response->getStatusCode()); |
133 | $body = json_decode((string) $response->getBody()); | 180 | $body = json_decode((string) $response->getBody()); |
134 | $this->assertEquals('Not authorized: JWT token not provided', $body->message); | 181 | $this->assertEquals('Not authorized: JWT token not provided', $body->message); |
135 | $this->assertContains('ApiAuthorizationException', $body->stacktrace); | 182 | $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace); |
136 | } | 183 | } |
137 | 184 | ||
138 | /** | 185 | /** |
@@ -157,7 +204,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
157 | $this->assertEquals(401, $response->getStatusCode()); | 204 | $this->assertEquals(401, $response->getStatusCode()); |
158 | $body = json_decode((string) $response->getBody()); | 205 | $body = json_decode((string) $response->getBody()); |
159 | $this->assertEquals('Not authorized: Token secret must be set in Shaarli\'s administration', $body->message); | 206 | $this->assertEquals('Not authorized: Token secret must be set in Shaarli\'s administration', $body->message); |
160 | $this->assertContains('ApiAuthorizationException', $body->stacktrace); | 207 | $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace); |
161 | } | 208 | } |
162 | 209 | ||
163 | /** | 210 | /** |
@@ -180,7 +227,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
180 | $this->assertEquals(401, $response->getStatusCode()); | 227 | $this->assertEquals(401, $response->getStatusCode()); |
181 | $body = json_decode((string) $response->getBody()); | 228 | $body = json_decode((string) $response->getBody()); |
182 | $this->assertEquals('Not authorized: Invalid JWT header', $body->message); | 229 | $this->assertEquals('Not authorized: Invalid JWT header', $body->message); |
183 | $this->assertContains('ApiAuthorizationException', $body->stacktrace); | 230 | $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace); |
184 | } | 231 | } |
185 | 232 | ||
186 | /** | 233 | /** |
@@ -206,6 +253,6 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase | |||
206 | $this->assertEquals(401, $response->getStatusCode()); | 253 | $this->assertEquals(401, $response->getStatusCode()); |
207 | $body = json_decode((string) $response->getBody()); | 254 | $body = json_decode((string) $response->getBody()); |
208 | $this->assertEquals('Not authorized: Malformed JWT token', $body->message); | 255 | $this->assertEquals('Not authorized: Malformed JWT token', $body->message); |
209 | $this->assertContains('ApiAuthorizationException', $body->stacktrace); | 256 | $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace); |
210 | } | 257 | } |
211 | } | 258 | } |
diff --git a/tests/api/ApiUtilsTest.php b/tests/api/ApiUtilsTest.php index 7efec9bb..7a143859 100644 --- a/tests/api/ApiUtilsTest.php +++ b/tests/api/ApiUtilsTest.php | |||
@@ -8,12 +8,12 @@ use Shaarli\Http\Base64Url; | |||
8 | /** | 8 | /** |
9 | * Class ApiUtilsTest | 9 | * Class ApiUtilsTest |
10 | */ | 10 | */ |
11 | class ApiUtilsTest extends \PHPUnit\Framework\TestCase | 11 | class ApiUtilsTest extends \Shaarli\TestCase |
12 | { | 12 | { |
13 | /** | 13 | /** |
14 | * Force the timezone for ISO datetimes. | 14 | * Force the timezone for ISO datetimes. |
15 | */ | 15 | */ |
16 | public static function setUpBeforeClass() | 16 | public static function setUpBeforeClass(): void |
17 | { | 17 | { |
18 | date_default_timezone_set('UTC'); | 18 | date_default_timezone_set('UTC'); |
19 | } | 19 | } |
@@ -66,143 +66,143 @@ class ApiUtilsTest extends \PHPUnit\Framework\TestCase | |||
66 | 66 | ||
67 | /** | 67 | /** |
68 | * Test validateJwtToken() with a malformed JWT token. | 68 | * Test validateJwtToken() with a malformed JWT token. |
69 | * | ||
70 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
71 | * @expectedExceptionMessage Malformed JWT token | ||
72 | */ | 69 | */ |
73 | public function testValidateJwtTokenMalformed() | 70 | public function testValidateJwtTokenMalformed() |
74 | { | 71 | { |
72 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
73 | $this->expectExceptionMessage('Malformed JWT token'); | ||
74 | |||
75 | $token = 'ABC.DEF'; | 75 | $token = 'ABC.DEF'; |
76 | ApiUtils::validateJwtToken($token, 'foo'); | 76 | ApiUtils::validateJwtToken($token, 'foo'); |
77 | } | 77 | } |
78 | 78 | ||
79 | /** | 79 | /** |
80 | * Test validateJwtToken() with an empty JWT token. | 80 | * Test validateJwtToken() with an empty JWT token. |
81 | * | ||
82 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
83 | * @expectedExceptionMessage Malformed JWT token | ||
84 | */ | 81 | */ |
85 | public function testValidateJwtTokenMalformedEmpty() | 82 | public function testValidateJwtTokenMalformedEmpty() |
86 | { | 83 | { |
84 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
85 | $this->expectExceptionMessage('Malformed JWT token'); | ||
86 | |||
87 | $token = false; | 87 | $token = false; |
88 | ApiUtils::validateJwtToken($token, 'foo'); | 88 | ApiUtils::validateJwtToken($token, 'foo'); |
89 | } | 89 | } |
90 | 90 | ||
91 | /** | 91 | /** |
92 | * Test validateJwtToken() with a JWT token without header. | 92 | * Test validateJwtToken() with a JWT token without header. |
93 | * | ||
94 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
95 | * @expectedExceptionMessage Malformed JWT token | ||
96 | */ | 93 | */ |
97 | public function testValidateJwtTokenMalformedEmptyHeader() | 94 | public function testValidateJwtTokenMalformedEmptyHeader() |
98 | { | 95 | { |
96 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
97 | $this->expectExceptionMessage('Malformed JWT token'); | ||
98 | |||
99 | $token = '.payload.signature'; | 99 | $token = '.payload.signature'; |
100 | ApiUtils::validateJwtToken($token, 'foo'); | 100 | ApiUtils::validateJwtToken($token, 'foo'); |
101 | } | 101 | } |
102 | 102 | ||
103 | /** | 103 | /** |
104 | * Test validateJwtToken() with a JWT token without payload | 104 | * Test validateJwtToken() with a JWT token without payload |
105 | * | ||
106 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
107 | * @expectedExceptionMessage Malformed JWT token | ||
108 | */ | 105 | */ |
109 | public function testValidateJwtTokenMalformedEmptyPayload() | 106 | public function testValidateJwtTokenMalformedEmptyPayload() |
110 | { | 107 | { |
108 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
109 | $this->expectExceptionMessage('Malformed JWT token'); | ||
110 | |||
111 | $token = 'header..signature'; | 111 | $token = 'header..signature'; |
112 | ApiUtils::validateJwtToken($token, 'foo'); | 112 | ApiUtils::validateJwtToken($token, 'foo'); |
113 | } | 113 | } |
114 | 114 | ||
115 | /** | 115 | /** |
116 | * Test validateJwtToken() with a JWT token with an empty signature. | 116 | * Test validateJwtToken() with a JWT token with an empty signature. |
117 | * | ||
118 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
119 | * @expectedExceptionMessage Invalid JWT signature | ||
120 | */ | 117 | */ |
121 | public function testValidateJwtTokenInvalidSignatureEmpty() | 118 | public function testValidateJwtTokenInvalidSignatureEmpty() |
122 | { | 119 | { |
120 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
121 | $this->expectExceptionMessage('Invalid JWT signature'); | ||
122 | |||
123 | $token = 'header.payload.'; | 123 | $token = 'header.payload.'; |
124 | ApiUtils::validateJwtToken($token, 'foo'); | 124 | ApiUtils::validateJwtToken($token, 'foo'); |
125 | } | 125 | } |
126 | 126 | ||
127 | /** | 127 | /** |
128 | * Test validateJwtToken() with a JWT token with an invalid signature. | 128 | * Test validateJwtToken() with a JWT token with an invalid signature. |
129 | * | ||
130 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
131 | * @expectedExceptionMessage Invalid JWT signature | ||
132 | */ | 129 | */ |
133 | public function testValidateJwtTokenInvalidSignature() | 130 | public function testValidateJwtTokenInvalidSignature() |
134 | { | 131 | { |
132 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
133 | $this->expectExceptionMessage('Invalid JWT signature'); | ||
134 | |||
135 | $token = 'header.payload.nope'; | 135 | $token = 'header.payload.nope'; |
136 | ApiUtils::validateJwtToken($token, 'foo'); | 136 | ApiUtils::validateJwtToken($token, 'foo'); |
137 | } | 137 | } |
138 | 138 | ||
139 | /** | 139 | /** |
140 | * Test validateJwtToken() with a JWT token with a signature generated with the wrong API secret. | 140 | * Test validateJwtToken() with a JWT token with a signature generated with the wrong API secret. |
141 | * | ||
142 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
143 | * @expectedExceptionMessage Invalid JWT signature | ||
144 | */ | 141 | */ |
145 | public function testValidateJwtTokenInvalidSignatureSecret() | 142 | public function testValidateJwtTokenInvalidSignatureSecret() |
146 | { | 143 | { |
144 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
145 | $this->expectExceptionMessage('Invalid JWT signature'); | ||
146 | |||
147 | ApiUtils::validateJwtToken(self::generateValidJwtToken('foo'), 'bar'); | 147 | ApiUtils::validateJwtToken(self::generateValidJwtToken('foo'), 'bar'); |
148 | } | 148 | } |
149 | 149 | ||
150 | /** | 150 | /** |
151 | * Test validateJwtToken() with a JWT token with a an invalid header (not JSON). | 151 | * Test validateJwtToken() with a JWT token with a an invalid header (not JSON). |
152 | * | ||
153 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
154 | * @expectedExceptionMessage Invalid JWT header | ||
155 | */ | 152 | */ |
156 | public function testValidateJwtTokenInvalidHeader() | 153 | public function testValidateJwtTokenInvalidHeader() |
157 | { | 154 | { |
155 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
156 | $this->expectExceptionMessage('Invalid JWT header'); | ||
157 | |||
158 | $token = $this->generateCustomJwtToken('notJSON', '{"JSON":1}', 'secret'); | 158 | $token = $this->generateCustomJwtToken('notJSON', '{"JSON":1}', 'secret'); |
159 | ApiUtils::validateJwtToken($token, 'secret'); | 159 | ApiUtils::validateJwtToken($token, 'secret'); |
160 | } | 160 | } |
161 | 161 | ||
162 | /** | 162 | /** |
163 | * Test validateJwtToken() with a JWT token with a an invalid payload (not JSON). | 163 | * Test validateJwtToken() with a JWT token with a an invalid payload (not JSON). |
164 | * | ||
165 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
166 | * @expectedExceptionMessage Invalid JWT payload | ||
167 | */ | 164 | */ |
168 | public function testValidateJwtTokenInvalidPayload() | 165 | public function testValidateJwtTokenInvalidPayload() |
169 | { | 166 | { |
167 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
168 | $this->expectExceptionMessage('Invalid JWT payload'); | ||
169 | |||
170 | $token = $this->generateCustomJwtToken('{"JSON":1}', 'notJSON', 'secret'); | 170 | $token = $this->generateCustomJwtToken('{"JSON":1}', 'notJSON', 'secret'); |
171 | ApiUtils::validateJwtToken($token, 'secret'); | 171 | ApiUtils::validateJwtToken($token, 'secret'); |
172 | } | 172 | } |
173 | 173 | ||
174 | /** | 174 | /** |
175 | * Test validateJwtToken() with a JWT token without issued time. | 175 | * Test validateJwtToken() with a JWT token without issued time. |
176 | * | ||
177 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
178 | * @expectedExceptionMessage Invalid JWT issued time | ||
179 | */ | 176 | */ |
180 | public function testValidateJwtTokenInvalidTimeEmpty() | 177 | public function testValidateJwtTokenInvalidTimeEmpty() |
181 | { | 178 | { |
179 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
180 | $this->expectExceptionMessage('Invalid JWT issued time'); | ||
181 | |||
182 | $token = $this->generateCustomJwtToken('{"JSON":1}', '{"JSON":1}', 'secret'); | 182 | $token = $this->generateCustomJwtToken('{"JSON":1}', '{"JSON":1}', 'secret'); |
183 | ApiUtils::validateJwtToken($token, 'secret'); | 183 | ApiUtils::validateJwtToken($token, 'secret'); |
184 | } | 184 | } |
185 | 185 | ||
186 | /** | 186 | /** |
187 | * Test validateJwtToken() with an expired JWT token. | 187 | * Test validateJwtToken() with an expired JWT token. |
188 | * | ||
189 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
190 | * @expectedExceptionMessage Invalid JWT issued time | ||
191 | */ | 188 | */ |
192 | public function testValidateJwtTokenInvalidTimeExpired() | 189 | public function testValidateJwtTokenInvalidTimeExpired() |
193 | { | 190 | { |
191 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
192 | $this->expectExceptionMessage('Invalid JWT issued time'); | ||
193 | |||
194 | $token = $this->generateCustomJwtToken('{"JSON":1}', '{"iat":' . (time() - 600) . '}', 'secret'); | 194 | $token = $this->generateCustomJwtToken('{"JSON":1}', '{"iat":' . (time() - 600) . '}', 'secret'); |
195 | ApiUtils::validateJwtToken($token, 'secret'); | 195 | ApiUtils::validateJwtToken($token, 'secret'); |
196 | } | 196 | } |
197 | 197 | ||
198 | /** | 198 | /** |
199 | * Test validateJwtToken() with a JWT token issued in the future. | 199 | * Test validateJwtToken() with a JWT token issued in the future. |
200 | * | ||
201 | * @expectedException \Shaarli\Api\Exceptions\ApiAuthorizationException | ||
202 | * @expectedExceptionMessage Invalid JWT issued time | ||
203 | */ | 200 | */ |
204 | public function testValidateJwtTokenInvalidTimeFuture() | 201 | public function testValidateJwtTokenInvalidTimeFuture() |
205 | { | 202 | { |
203 | $this->expectException(\Shaarli\Api\Exceptions\ApiAuthorizationException::class); | ||
204 | $this->expectExceptionMessage('Invalid JWT issued time'); | ||
205 | |||
206 | $token = $this->generateCustomJwtToken('{"JSON":1}', '{"iat":' . (time() + 60) . '}', 'secret'); | 206 | $token = $this->generateCustomJwtToken('{"JSON":1}', '{"iat":' . (time() + 60) . '}', 'secret'); |
207 | ApiUtils::validateJwtToken($token, 'secret'); | 207 | ApiUtils::validateJwtToken($token, 'secret'); |
208 | } | 208 | } |
diff --git a/tests/api/controllers/history/HistoryTest.php b/tests/api/controllers/history/HistoryTest.php index f4d3b646..84f8716e 100644 --- a/tests/api/controllers/history/HistoryTest.php +++ b/tests/api/controllers/history/HistoryTest.php | |||
@@ -11,7 +11,7 @@ use Slim\Http\Response; | |||
11 | 11 | ||
12 | require_once 'tests/utils/ReferenceHistory.php'; | 12 | require_once 'tests/utils/ReferenceHistory.php'; |
13 | 13 | ||
14 | class HistoryTest extends \PHPUnit\Framework\TestCase | 14 | class HistoryTest extends \Shaarli\TestCase |
15 | { | 15 | { |
16 | /** | 16 | /** |
17 | * @var string datastore to test write operations | 17 | * @var string datastore to test write operations |
@@ -41,7 +41,7 @@ class HistoryTest extends \PHPUnit\Framework\TestCase | |||
41 | /** | 41 | /** |
42 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 42 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
43 | */ | 43 | */ |
44 | public function setUp() | 44 | protected function setUp(): void |
45 | { | 45 | { |
46 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 46 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
47 | $this->refHistory = new \ReferenceHistory(); | 47 | $this->refHistory = new \ReferenceHistory(); |
@@ -57,7 +57,7 @@ class HistoryTest extends \PHPUnit\Framework\TestCase | |||
57 | /** | 57 | /** |
58 | * After every test, remove the test datastore. | 58 | * After every test, remove the test datastore. |
59 | */ | 59 | */ |
60 | public function tearDown() | 60 | protected function tearDown(): void |
61 | { | 61 | { |
62 | @unlink(self::$testHistory); | 62 | @unlink(self::$testHistory); |
63 | } | 63 | } |
diff --git a/tests/api/controllers/info/InfoTest.php b/tests/api/controllers/info/InfoTest.php index b5c938e1..1598e1e8 100644 --- a/tests/api/controllers/info/InfoTest.php +++ b/tests/api/controllers/info/InfoTest.php | |||
@@ -1,10 +1,10 @@ | |||
1 | <?php | 1 | <?php |
2 | namespace Shaarli\Api\Controllers; | 2 | namespace Shaarli\Api\Controllers; |
3 | 3 | ||
4 | use PHPUnit\Framework\TestCase; | ||
5 | use Shaarli\Bookmark\BookmarkFileService; | 4 | use Shaarli\Bookmark\BookmarkFileService; |
6 | use Shaarli\Config\ConfigManager; | 5 | use Shaarli\Config\ConfigManager; |
7 | use Shaarli\History; | 6 | use Shaarli\History; |
7 | use Shaarli\TestCase; | ||
8 | use Slim\Container; | 8 | use Slim\Container; |
9 | use Slim\Http\Environment; | 9 | use Slim\Http\Environment; |
10 | use Slim\Http\Request; | 10 | use Slim\Http\Request; |
@@ -47,7 +47,7 @@ class InfoTest extends TestCase | |||
47 | /** | 47 | /** |
48 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 48 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
49 | */ | 49 | */ |
50 | public function setUp() | 50 | protected function setUp(): void |
51 | { | 51 | { |
52 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 52 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
53 | $this->conf->set('resource.datastore', self::$testDatastore); | 53 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -67,7 +67,7 @@ class InfoTest extends TestCase | |||
67 | /** | 67 | /** |
68 | * After every test, remove the test datastore. | 68 | * After every test, remove the test datastore. |
69 | */ | 69 | */ |
70 | public function tearDown() | 70 | protected function tearDown(): void |
71 | { | 71 | { |
72 | @unlink(self::$testDatastore); | 72 | @unlink(self::$testDatastore); |
73 | } | 73 | } |
diff --git a/tests/api/controllers/links/DeleteLinkTest.php b/tests/api/controllers/links/DeleteLinkTest.php index 6c2b3698..cf9464f0 100644 --- a/tests/api/controllers/links/DeleteLinkTest.php +++ b/tests/api/controllers/links/DeleteLinkTest.php | |||
@@ -11,7 +11,7 @@ use Slim\Http\Environment; | |||
11 | use Slim\Http\Request; | 11 | use Slim\Http\Request; |
12 | use Slim\Http\Response; | 12 | use Slim\Http\Response; |
13 | 13 | ||
14 | class DeleteLinkTest extends \PHPUnit\Framework\TestCase | 14 | class DeleteLinkTest extends \Shaarli\TestCase |
15 | { | 15 | { |
16 | /** | 16 | /** |
17 | * @var string datastore to test write operations | 17 | * @var string datastore to test write operations |
@@ -56,7 +56,7 @@ class DeleteLinkTest extends \PHPUnit\Framework\TestCase | |||
56 | /** | 56 | /** |
57 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. | 57 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. |
58 | */ | 58 | */ |
59 | public function setUp() | 59 | protected function setUp(): void |
60 | { | 60 | { |
61 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 61 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
62 | $this->conf->set('resource.datastore', self::$testDatastore); | 62 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -78,7 +78,7 @@ class DeleteLinkTest extends \PHPUnit\Framework\TestCase | |||
78 | /** | 78 | /** |
79 | * After each test, remove the test datastore. | 79 | * After each test, remove the test datastore. |
80 | */ | 80 | */ |
81 | public function tearDown() | 81 | protected function tearDown(): void |
82 | { | 82 | { |
83 | @unlink(self::$testDatastore); | 83 | @unlink(self::$testDatastore); |
84 | @unlink(self::$testHistory); | 84 | @unlink(self::$testHistory); |
@@ -113,11 +113,11 @@ class DeleteLinkTest extends \PHPUnit\Framework\TestCase | |||
113 | 113 | ||
114 | /** | 114 | /** |
115 | * Test DELETE link endpoint: reach not existing ID. | 115 | * Test DELETE link endpoint: reach not existing ID. |
116 | * | ||
117 | * @expectedException \Shaarli\Api\Exceptions\ApiLinkNotFoundException | ||
118 | */ | 116 | */ |
119 | public function testDeleteLink404() | 117 | public function testDeleteLink404() |
120 | { | 118 | { |
119 | $this->expectException(\Shaarli\Api\Exceptions\ApiLinkNotFoundException::class); | ||
120 | |||
121 | $id = -1; | 121 | $id = -1; |
122 | $this->assertFalse($this->bookmarkService->exists($id)); | 122 | $this->assertFalse($this->bookmarkService->exists($id)); |
123 | $env = Environment::mock([ | 123 | $env = Environment::mock([ |
diff --git a/tests/api/controllers/links/GetLinkIdTest.php b/tests/api/controllers/links/GetLinkIdTest.php index 8bb81dc8..99dc606f 100644 --- a/tests/api/controllers/links/GetLinkIdTest.php +++ b/tests/api/controllers/links/GetLinkIdTest.php | |||
@@ -20,7 +20,7 @@ use Slim\Http\Response; | |||
20 | * | 20 | * |
21 | * @package Shaarli\Api\Controllers | 21 | * @package Shaarli\Api\Controllers |
22 | */ | 22 | */ |
23 | class GetLinkIdTest extends \PHPUnit\Framework\TestCase | 23 | class GetLinkIdTest extends \Shaarli\TestCase |
24 | { | 24 | { |
25 | /** | 25 | /** |
26 | * @var string datastore to test write operations | 26 | * @var string datastore to test write operations |
@@ -55,7 +55,7 @@ class GetLinkIdTest extends \PHPUnit\Framework\TestCase | |||
55 | /** | 55 | /** |
56 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. | 56 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. |
57 | */ | 57 | */ |
58 | public function setUp() | 58 | protected function setUp(): void |
59 | { | 59 | { |
60 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 60 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
61 | $this->conf->set('resource.datastore', self::$testDatastore); | 61 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -74,7 +74,7 @@ class GetLinkIdTest extends \PHPUnit\Framework\TestCase | |||
74 | /** | 74 | /** |
75 | * After each test, remove the test datastore. | 75 | * After each test, remove the test datastore. |
76 | */ | 76 | */ |
77 | public function tearDown() | 77 | protected function tearDown(): void |
78 | { | 78 | { |
79 | @unlink(self::$testDatastore); | 79 | @unlink(self::$testDatastore); |
80 | } | 80 | } |
@@ -120,12 +120,12 @@ class GetLinkIdTest extends \PHPUnit\Framework\TestCase | |||
120 | 120 | ||
121 | /** | 121 | /** |
122 | * Test basic getLink service: get non existent link => ApiLinkNotFoundException. | 122 | * Test basic getLink service: get non existent link => ApiLinkNotFoundException. |
123 | * | ||
124 | * @expectedException Shaarli\Api\Exceptions\ApiLinkNotFoundException | ||
125 | * @expectedExceptionMessage Link not found | ||
126 | */ | 123 | */ |
127 | public function testGetLink404() | 124 | public function testGetLink404() |
128 | { | 125 | { |
126 | $this->expectException(\Shaarli\Api\Exceptions\ApiLinkNotFoundException::class); | ||
127 | $this->expectExceptionMessage('Link not found'); | ||
128 | |||
129 | $env = Environment::mock([ | 129 | $env = Environment::mock([ |
130 | 'REQUEST_METHOD' => 'GET', | 130 | 'REQUEST_METHOD' => 'GET', |
131 | ]); | 131 | ]); |
diff --git a/tests/api/controllers/links/GetLinksTest.php b/tests/api/controllers/links/GetLinksTest.php index d02e6fad..ca1bfc63 100644 --- a/tests/api/controllers/links/GetLinksTest.php +++ b/tests/api/controllers/links/GetLinksTest.php | |||
@@ -20,7 +20,7 @@ use Slim\Http\Response; | |||
20 | * | 20 | * |
21 | * @package Shaarli\Api\Controllers | 21 | * @package Shaarli\Api\Controllers |
22 | */ | 22 | */ |
23 | class GetLinksTest extends \PHPUnit\Framework\TestCase | 23 | class GetLinksTest extends \Shaarli\TestCase |
24 | { | 24 | { |
25 | /** | 25 | /** |
26 | * @var string datastore to test write operations | 26 | * @var string datastore to test write operations |
@@ -55,7 +55,7 @@ class GetLinksTest extends \PHPUnit\Framework\TestCase | |||
55 | /** | 55 | /** |
56 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 56 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
57 | */ | 57 | */ |
58 | public function setUp() | 58 | protected function setUp(): void |
59 | { | 59 | { |
60 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 60 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
61 | $this->conf->set('resource.datastore', self::$testDatastore); | 61 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -74,7 +74,7 @@ class GetLinksTest extends \PHPUnit\Framework\TestCase | |||
74 | /** | 74 | /** |
75 | * After every test, remove the test datastore. | 75 | * After every test, remove the test datastore. |
76 | */ | 76 | */ |
77 | public function tearDown() | 77 | protected function tearDown(): void |
78 | { | 78 | { |
79 | @unlink(self::$testDatastore); | 79 | @unlink(self::$testDatastore); |
80 | } | 80 | } |
diff --git a/tests/api/controllers/links/PostLinkTest.php b/tests/api/controllers/links/PostLinkTest.php index f969fe1c..20694571 100644 --- a/tests/api/controllers/links/PostLinkTest.php +++ b/tests/api/controllers/links/PostLinkTest.php | |||
@@ -2,11 +2,11 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Api\Controllers; | 3 | namespace Shaarli\Api\Controllers; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | ||
6 | use Shaarli\Bookmark\Bookmark; | 5 | use Shaarli\Bookmark\Bookmark; |
7 | use Shaarli\Bookmark\BookmarkFileService; | 6 | use Shaarli\Bookmark\BookmarkFileService; |
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\History; | 8 | use Shaarli\History; |
9 | use Shaarli\TestCase; | ||
10 | use Slim\Container; | 10 | use Slim\Container; |
11 | use Slim\Http\Environment; | 11 | use Slim\Http\Environment; |
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
@@ -70,7 +70,7 @@ class PostLinkTest extends TestCase | |||
70 | /** | 70 | /** |
71 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 71 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
72 | */ | 72 | */ |
73 | public function setUp() | 73 | protected function setUp(): void |
74 | { | 74 | { |
75 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 75 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
76 | $this->conf->set('resource.datastore', self::$testDatastore); | 76 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -107,7 +107,7 @@ class PostLinkTest extends TestCase | |||
107 | /** | 107 | /** |
108 | * After every test, remove the test datastore. | 108 | * After every test, remove the test datastore. |
109 | */ | 109 | */ |
110 | public function tearDown() | 110 | protected function tearDown(): void |
111 | { | 111 | { |
112 | @unlink(self::$testDatastore); | 112 | @unlink(self::$testDatastore); |
113 | @unlink(self::$testHistory); | 113 | @unlink(self::$testHistory); |
diff --git a/tests/api/controllers/links/PutLinkTest.php b/tests/api/controllers/links/PutLinkTest.php index 302cac0f..a2e87c59 100644 --- a/tests/api/controllers/links/PutLinkTest.php +++ b/tests/api/controllers/links/PutLinkTest.php | |||
@@ -12,7 +12,7 @@ use Slim\Http\Environment; | |||
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
14 | 14 | ||
15 | class PutLinkTest extends \PHPUnit\Framework\TestCase | 15 | class PutLinkTest extends \Shaarli\TestCase |
16 | { | 16 | { |
17 | /** | 17 | /** |
18 | * @var string datastore to test write operations | 18 | * @var string datastore to test write operations |
@@ -62,7 +62,7 @@ class PutLinkTest extends \PHPUnit\Framework\TestCase | |||
62 | /** | 62 | /** |
63 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 63 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
64 | */ | 64 | */ |
65 | public function setUp() | 65 | protected function setUp(): void |
66 | { | 66 | { |
67 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 67 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
68 | $this->conf->set('resource.datastore', self::$testDatastore); | 68 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -91,7 +91,7 @@ class PutLinkTest extends \PHPUnit\Framework\TestCase | |||
91 | /** | 91 | /** |
92 | * After every test, remove the test datastore. | 92 | * After every test, remove the test datastore. |
93 | */ | 93 | */ |
94 | public function tearDown() | 94 | protected function tearDown(): void |
95 | { | 95 | { |
96 | @unlink(self::$testDatastore); | 96 | @unlink(self::$testDatastore); |
97 | @unlink(self::$testHistory); | 97 | @unlink(self::$testHistory); |
@@ -218,12 +218,12 @@ class PutLinkTest extends \PHPUnit\Framework\TestCase | |||
218 | 218 | ||
219 | /** | 219 | /** |
220 | * Test link update on non existent link => ApiLinkNotFoundException. | 220 | * Test link update on non existent link => ApiLinkNotFoundException. |
221 | * | ||
222 | * @expectedException Shaarli\Api\Exceptions\ApiLinkNotFoundException | ||
223 | * @expectedExceptionMessage Link not found | ||
224 | */ | 221 | */ |
225 | public function testGetLink404() | 222 | public function testGetLink404() |
226 | { | 223 | { |
224 | $this->expectException(\Shaarli\Api\Exceptions\ApiLinkNotFoundException::class); | ||
225 | $this->expectExceptionMessage('Link not found'); | ||
226 | |||
227 | $env = Environment::mock([ | 227 | $env = Environment::mock([ |
228 | 'REQUEST_METHOD' => 'PUT', | 228 | 'REQUEST_METHOD' => 'PUT', |
229 | ]); | 229 | ]); |
diff --git a/tests/api/controllers/tags/DeleteTagTest.php b/tests/api/controllers/tags/DeleteTagTest.php index c6748872..1326eb47 100644 --- a/tests/api/controllers/tags/DeleteTagTest.php +++ b/tests/api/controllers/tags/DeleteTagTest.php | |||
@@ -12,7 +12,7 @@ use Slim\Http\Environment; | |||
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
14 | 14 | ||
15 | class DeleteTagTest extends \PHPUnit\Framework\TestCase | 15 | class DeleteTagTest extends \Shaarli\TestCase |
16 | { | 16 | { |
17 | /** | 17 | /** |
18 | * @var string datastore to test write operations | 18 | * @var string datastore to test write operations |
@@ -57,7 +57,7 @@ class DeleteTagTest extends \PHPUnit\Framework\TestCase | |||
57 | /** | 57 | /** |
58 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. | 58 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. |
59 | */ | 59 | */ |
60 | public function setUp() | 60 | protected function setUp(): void |
61 | { | 61 | { |
62 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 62 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
63 | $this->conf->set('resource.datastore', self::$testDatastore); | 63 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -79,7 +79,7 @@ class DeleteTagTest extends \PHPUnit\Framework\TestCase | |||
79 | /** | 79 | /** |
80 | * After each test, remove the test datastore. | 80 | * After each test, remove the test datastore. |
81 | */ | 81 | */ |
82 | public function tearDown() | 82 | protected function tearDown(): void |
83 | { | 83 | { |
84 | @unlink(self::$testDatastore); | 84 | @unlink(self::$testDatastore); |
85 | @unlink(self::$testHistory); | 85 | @unlink(self::$testHistory); |
@@ -150,12 +150,12 @@ class DeleteTagTest extends \PHPUnit\Framework\TestCase | |||
150 | 150 | ||
151 | /** | 151 | /** |
152 | * Test DELETE tag endpoint: reach not existing tag. | 152 | * Test DELETE tag endpoint: reach not existing tag. |
153 | * | ||
154 | * @expectedException Shaarli\Api\Exceptions\ApiTagNotFoundException | ||
155 | * @expectedExceptionMessage Tag not found | ||
156 | */ | 153 | */ |
157 | public function testDeleteLink404() | 154 | public function testDeleteLink404() |
158 | { | 155 | { |
156 | $this->expectException(\Shaarli\Api\Exceptions\ApiTagNotFoundException::class); | ||
157 | $this->expectExceptionMessage('Tag not found'); | ||
158 | |||
159 | $tagName = 'nopenope'; | 159 | $tagName = 'nopenope'; |
160 | $tags = $this->bookmarkService->bookmarksCountPerTag(); | 160 | $tags = $this->bookmarkService->bookmarksCountPerTag(); |
161 | $this->assertFalse(isset($tags[$tagName])); | 161 | $this->assertFalse(isset($tags[$tagName])); |
diff --git a/tests/api/controllers/tags/GetTagNameTest.php b/tests/api/controllers/tags/GetTagNameTest.php index b9a81f9b..9c05954b 100644 --- a/tests/api/controllers/tags/GetTagNameTest.php +++ b/tests/api/controllers/tags/GetTagNameTest.php | |||
@@ -18,7 +18,7 @@ use Slim\Http\Response; | |||
18 | * | 18 | * |
19 | * @package Shaarli\Api\Controllers | 19 | * @package Shaarli\Api\Controllers |
20 | */ | 20 | */ |
21 | class GetTagNameTest extends \PHPUnit\Framework\TestCase | 21 | class GetTagNameTest extends \Shaarli\TestCase |
22 | { | 22 | { |
23 | /** | 23 | /** |
24 | * @var string datastore to test write operations | 24 | * @var string datastore to test write operations |
@@ -53,7 +53,7 @@ class GetTagNameTest extends \PHPUnit\Framework\TestCase | |||
53 | /** | 53 | /** |
54 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. | 54 | * Before each test, instantiate a new Api with its config, plugins and bookmarks. |
55 | */ | 55 | */ |
56 | public function setUp() | 56 | protected function setUp(): void |
57 | { | 57 | { |
58 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 58 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
59 | $this->conf->set('resource.datastore', self::$testDatastore); | 59 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -72,7 +72,7 @@ class GetTagNameTest extends \PHPUnit\Framework\TestCase | |||
72 | /** | 72 | /** |
73 | * After each test, remove the test datastore. | 73 | * After each test, remove the test datastore. |
74 | */ | 74 | */ |
75 | public function tearDown() | 75 | protected function tearDown(): void |
76 | { | 76 | { |
77 | @unlink(self::$testDatastore); | 77 | @unlink(self::$testDatastore); |
78 | } | 78 | } |
@@ -117,12 +117,12 @@ class GetTagNameTest extends \PHPUnit\Framework\TestCase | |||
117 | 117 | ||
118 | /** | 118 | /** |
119 | * Test basic getTag service: get non existent tag => ApiTagNotFoundException. | 119 | * Test basic getTag service: get non existent tag => ApiTagNotFoundException. |
120 | * | ||
121 | * @expectedException Shaarli\Api\Exceptions\ApiTagNotFoundException | ||
122 | * @expectedExceptionMessage Tag not found | ||
123 | */ | 120 | */ |
124 | public function testGetTag404() | 121 | public function testGetTag404() |
125 | { | 122 | { |
123 | $this->expectException(\Shaarli\Api\Exceptions\ApiTagNotFoundException::class); | ||
124 | $this->expectExceptionMessage('Tag not found'); | ||
125 | |||
126 | $env = Environment::mock([ | 126 | $env = Environment::mock([ |
127 | 'REQUEST_METHOD' => 'GET', | 127 | 'REQUEST_METHOD' => 'GET', |
128 | ]); | 128 | ]); |
diff --git a/tests/api/controllers/tags/GetTagsTest.php b/tests/api/controllers/tags/GetTagsTest.php index 53a3326d..3459fdfa 100644 --- a/tests/api/controllers/tags/GetTagsTest.php +++ b/tests/api/controllers/tags/GetTagsTest.php | |||
@@ -17,7 +17,7 @@ use Slim\Http\Response; | |||
17 | * | 17 | * |
18 | * @package Shaarli\Api\Controllers | 18 | * @package Shaarli\Api\Controllers |
19 | */ | 19 | */ |
20 | class GetTagsTest extends \PHPUnit\Framework\TestCase | 20 | class GetTagsTest extends \Shaarli\TestCase |
21 | { | 21 | { |
22 | /** | 22 | /** |
23 | * @var string datastore to test write operations | 23 | * @var string datastore to test write operations |
@@ -57,7 +57,7 @@ class GetTagsTest extends \PHPUnit\Framework\TestCase | |||
57 | /** | 57 | /** |
58 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 58 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
59 | */ | 59 | */ |
60 | public function setUp() | 60 | protected function setUp(): void |
61 | { | 61 | { |
62 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 62 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
63 | $this->conf->set('resource.datastore', self::$testDatastore); | 63 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -78,7 +78,7 @@ class GetTagsTest extends \PHPUnit\Framework\TestCase | |||
78 | /** | 78 | /** |
79 | * After every test, remove the test datastore. | 79 | * After every test, remove the test datastore. |
80 | */ | 80 | */ |
81 | public function tearDown() | 81 | protected function tearDown(): void |
82 | { | 82 | { |
83 | @unlink(self::$testDatastore); | 83 | @unlink(self::$testDatastore); |
84 | } | 84 | } |
diff --git a/tests/api/controllers/tags/PutTagTest.php b/tests/api/controllers/tags/PutTagTest.php index 2a3cc15a..74edde78 100644 --- a/tests/api/controllers/tags/PutTagTest.php +++ b/tests/api/controllers/tags/PutTagTest.php | |||
@@ -12,7 +12,7 @@ use Slim\Http\Environment; | |||
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
14 | 14 | ||
15 | class PutTagTest extends \PHPUnit\Framework\TestCase | 15 | class PutTagTest extends \Shaarli\TestCase |
16 | { | 16 | { |
17 | /** | 17 | /** |
18 | * @var string datastore to test write operations | 18 | * @var string datastore to test write operations |
@@ -62,7 +62,7 @@ class PutTagTest extends \PHPUnit\Framework\TestCase | |||
62 | /** | 62 | /** |
63 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. | 63 | * Before every test, instantiate a new Api with its config, plugins and bookmarks. |
64 | */ | 64 | */ |
65 | public function setUp() | 65 | protected function setUp(): void |
66 | { | 66 | { |
67 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 67 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
68 | $this->conf->set('resource.datastore', self::$testDatastore); | 68 | $this->conf->set('resource.datastore', self::$testDatastore); |
@@ -84,7 +84,7 @@ class PutTagTest extends \PHPUnit\Framework\TestCase | |||
84 | /** | 84 | /** |
85 | * After every test, remove the test datastore. | 85 | * After every test, remove the test datastore. |
86 | */ | 86 | */ |
87 | public function tearDown() | 87 | protected function tearDown(): void |
88 | { | 88 | { |
89 | @unlink(self::$testDatastore); | 89 | @unlink(self::$testDatastore); |
90 | @unlink(self::$testHistory); | 90 | @unlink(self::$testHistory); |
@@ -159,12 +159,12 @@ class PutTagTest extends \PHPUnit\Framework\TestCase | |||
159 | 159 | ||
160 | /** | 160 | /** |
161 | * Test tag update with an empty new tag name => ApiBadParametersException | 161 | * Test tag update with an empty new tag name => ApiBadParametersException |
162 | * | ||
163 | * @expectedException Shaarli\Api\Exceptions\ApiBadParametersException | ||
164 | * @expectedExceptionMessage New tag name is required in the request body | ||
165 | */ | 162 | */ |
166 | public function testPutTagEmpty() | 163 | public function testPutTagEmpty() |
167 | { | 164 | { |
165 | $this->expectException(\Shaarli\Api\Exceptions\ApiBadParametersException::class); | ||
166 | $this->expectExceptionMessage('New tag name is required in the request body'); | ||
167 | |||
168 | $tagName = 'gnu'; | 168 | $tagName = 'gnu'; |
169 | $newName = ''; | 169 | $newName = ''; |
170 | 170 | ||
@@ -194,12 +194,12 @@ class PutTagTest extends \PHPUnit\Framework\TestCase | |||
194 | 194 | ||
195 | /** | 195 | /** |
196 | * Test tag update on non existent tag => ApiTagNotFoundException. | 196 | * Test tag update on non existent tag => ApiTagNotFoundException. |
197 | * | ||
198 | * @expectedException Shaarli\Api\Exceptions\ApiTagNotFoundException | ||
199 | * @expectedExceptionMessage Tag not found | ||
200 | */ | 197 | */ |
201 | public function testPutTag404() | 198 | public function testPutTag404() |
202 | { | 199 | { |
200 | $this->expectException(\Shaarli\Api\Exceptions\ApiTagNotFoundException::class); | ||
201 | $this->expectExceptionMessage('Tag not found'); | ||
202 | |||
203 | $env = Environment::mock([ | 203 | $env = Environment::mock([ |
204 | 'REQUEST_METHOD' => 'PUT', | 204 | 'REQUEST_METHOD' => 'PUT', |
205 | ]); | 205 | ]); |
diff --git a/tests/bookmark/BookmarkArrayTest.php b/tests/bookmark/BookmarkArrayTest.php index 0f8f04c5..ebed9bfc 100644 --- a/tests/bookmark/BookmarkArrayTest.php +++ b/tests/bookmark/BookmarkArrayTest.php | |||
@@ -2,10 +2,7 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Bookmark; | 3 | namespace Shaarli\Bookmark; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | 5 | use Shaarli\TestCase; |
6 | use Shaarli\Bookmark\Exception\InvalidBookmarkException; | ||
7 | use Shaarli\Config\ConfigManager; | ||
8 | use Shaarli\History; | ||
9 | 6 | ||
10 | /** | 7 | /** |
11 | * Class BookmarkArrayTest | 8 | * Class BookmarkArrayTest |
@@ -47,22 +44,22 @@ class BookmarkArrayTest extends TestCase | |||
47 | 44 | ||
48 | /** | 45 | /** |
49 | * Test adding a bad entry: wrong type | 46 | * Test adding a bad entry: wrong type |
50 | * | ||
51 | * @expectedException Shaarli\Bookmark\Exception\InvalidBookmarkException | ||
52 | */ | 47 | */ |
53 | public function testArrayAccessAddBadEntryInstance() | 48 | public function testArrayAccessAddBadEntryInstance() |
54 | { | 49 | { |
50 | $this->expectException(\Shaarli\Bookmark\Exception\InvalidBookmarkException::class); | ||
51 | |||
55 | $array = new BookmarkArray(); | 52 | $array = new BookmarkArray(); |
56 | $array[] = 'nope'; | 53 | $array[] = 'nope'; |
57 | } | 54 | } |
58 | 55 | ||
59 | /** | 56 | /** |
60 | * Test adding a bad entry: no id | 57 | * Test adding a bad entry: no id |
61 | * | ||
62 | * @expectedException Shaarli\Bookmark\Exception\InvalidBookmarkException | ||
63 | */ | 58 | */ |
64 | public function testArrayAccessAddBadEntryNoId() | 59 | public function testArrayAccessAddBadEntryNoId() |
65 | { | 60 | { |
61 | $this->expectException(\Shaarli\Bookmark\Exception\InvalidBookmarkException::class); | ||
62 | |||
66 | $array = new BookmarkArray(); | 63 | $array = new BookmarkArray(); |
67 | $bookmark = new Bookmark(); | 64 | $bookmark = new Bookmark(); |
68 | $array[] = $bookmark; | 65 | $array[] = $bookmark; |
@@ -70,11 +67,11 @@ class BookmarkArrayTest extends TestCase | |||
70 | 67 | ||
71 | /** | 68 | /** |
72 | * Test adding a bad entry: no url | 69 | * Test adding a bad entry: no url |
73 | * | ||
74 | * @expectedException Shaarli\Bookmark\Exception\InvalidBookmarkException | ||
75 | */ | 70 | */ |
76 | public function testArrayAccessAddBadEntryNoUrl() | 71 | public function testArrayAccessAddBadEntryNoUrl() |
77 | { | 72 | { |
73 | $this->expectException(\Shaarli\Bookmark\Exception\InvalidBookmarkException::class); | ||
74 | |||
78 | $array = new BookmarkArray(); | 75 | $array = new BookmarkArray(); |
79 | $bookmark = (new Bookmark())->setId(11); | 76 | $bookmark = (new Bookmark())->setId(11); |
80 | $array[] = $bookmark; | 77 | $array[] = $bookmark; |
@@ -82,11 +79,11 @@ class BookmarkArrayTest extends TestCase | |||
82 | 79 | ||
83 | /** | 80 | /** |
84 | * Test adding a bad entry: invalid offset | 81 | * Test adding a bad entry: invalid offset |
85 | * | ||
86 | * @expectedException Shaarli\Bookmark\Exception\InvalidBookmarkException | ||
87 | */ | 82 | */ |
88 | public function testArrayAccessAddBadEntryOffset() | 83 | public function testArrayAccessAddBadEntryOffset() |
89 | { | 84 | { |
85 | $this->expectException(\Shaarli\Bookmark\Exception\InvalidBookmarkException::class); | ||
86 | |||
90 | $array = new BookmarkArray(); | 87 | $array = new BookmarkArray(); |
91 | $bookmark = (new Bookmark())->setId(11); | 88 | $bookmark = (new Bookmark())->setId(11); |
92 | $bookmark->validate(); | 89 | $bookmark->validate(); |
@@ -95,11 +92,11 @@ class BookmarkArrayTest extends TestCase | |||
95 | 92 | ||
96 | /** | 93 | /** |
97 | * Test adding a bad entry: invalid ID type | 94 | * Test adding a bad entry: invalid ID type |
98 | * | ||
99 | * @expectedException Shaarli\Bookmark\Exception\InvalidBookmarkException | ||
100 | */ | 95 | */ |
101 | public function testArrayAccessAddBadEntryIdType() | 96 | public function testArrayAccessAddBadEntryIdType() |
102 | { | 97 | { |
98 | $this->expectException(\Shaarli\Bookmark\Exception\InvalidBookmarkException::class); | ||
99 | |||
103 | $array = new BookmarkArray(); | 100 | $array = new BookmarkArray(); |
104 | $bookmark = (new Bookmark())->setId('nope'); | 101 | $bookmark = (new Bookmark())->setId('nope'); |
105 | $bookmark->validate(); | 102 | $bookmark->validate(); |
@@ -108,11 +105,11 @@ class BookmarkArrayTest extends TestCase | |||
108 | 105 | ||
109 | /** | 106 | /** |
110 | * Test adding a bad entry: ID/offset not consistent | 107 | * Test adding a bad entry: ID/offset not consistent |
111 | * | ||
112 | * @expectedException Shaarli\Bookmark\Exception\InvalidBookmarkException | ||
113 | */ | 108 | */ |
114 | public function testArrayAccessAddBadEntryIdOffset() | 109 | public function testArrayAccessAddBadEntryIdOffset() |
115 | { | 110 | { |
111 | $this->expectException(\Shaarli\Bookmark\Exception\InvalidBookmarkException::class); | ||
112 | |||
116 | $array = new BookmarkArray(); | 113 | $array = new BookmarkArray(); |
117 | $bookmark = (new Bookmark())->setId(11); | 114 | $bookmark = (new Bookmark())->setId(11); |
118 | $bookmark->validate(); | 115 | $bookmark->validate(); |
diff --git a/tests/bookmark/BookmarkFileServiceTest.php b/tests/bookmark/BookmarkFileServiceTest.php index 7b1906d3..c399822b 100644 --- a/tests/bookmark/BookmarkFileServiceTest.php +++ b/tests/bookmark/BookmarkFileServiceTest.php | |||
@@ -6,7 +6,6 @@ | |||
6 | namespace Shaarli\Bookmark; | 6 | namespace Shaarli\Bookmark; |
7 | 7 | ||
8 | use DateTime; | 8 | use DateTime; |
9 | use PHPUnit\Framework\TestCase; | ||
10 | use ReferenceLinkDB; | 9 | use ReferenceLinkDB; |
11 | use ReflectionClass; | 10 | use ReflectionClass; |
12 | use Shaarli; | 11 | use Shaarli; |
@@ -14,6 +13,7 @@ use Shaarli\Bookmark\Exception\BookmarkNotFoundException; | |||
14 | use Shaarli\Config\ConfigManager; | 13 | use Shaarli\Config\ConfigManager; |
15 | use Shaarli\Formatter\BookmarkMarkdownFormatter; | 14 | use Shaarli\Formatter\BookmarkMarkdownFormatter; |
16 | use Shaarli\History; | 15 | use Shaarli\History; |
16 | use Shaarli\TestCase; | ||
17 | 17 | ||
18 | /** | 18 | /** |
19 | * Unitary tests for LegacyLinkDBTest | 19 | * Unitary tests for LegacyLinkDBTest |
@@ -66,7 +66,7 @@ class BookmarkFileServiceTest extends TestCase | |||
66 | * | 66 | * |
67 | * Resets test data for each test | 67 | * Resets test data for each test |
68 | */ | 68 | */ |
69 | protected function setUp() | 69 | protected function setUp(): void |
70 | { | 70 | { |
71 | if (file_exists(self::$testDatastore)) { | 71 | if (file_exists(self::$testDatastore)) { |
72 | unlink(self::$testDatastore); | 72 | unlink(self::$testDatastore); |
@@ -134,11 +134,11 @@ class BookmarkFileServiceTest extends TestCase | |||
134 | 134 | ||
135 | /** | 135 | /** |
136 | * Test get() method for an undefined bookmark | 136 | * Test get() method for an undefined bookmark |
137 | * | ||
138 | * @expectedException Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
139 | */ | 137 | */ |
140 | public function testGetUndefined() | 138 | public function testGetUndefined() |
141 | { | 139 | { |
140 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
141 | |||
142 | $this->privateLinkDB->get(666); | 142 | $this->privateLinkDB->get(666); |
143 | } | 143 | } |
144 | 144 | ||
@@ -230,13 +230,13 @@ class BookmarkFileServiceTest extends TestCase | |||
230 | 230 | ||
231 | /** | 231 | /** |
232 | * Test add() method for a bookmark without any field set and without writing the data store | 232 | * Test add() method for a bookmark without any field set and without writing the data store |
233 | * | ||
234 | * @expectedExceptionMessage Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
235 | */ | 233 | */ |
236 | public function testAddMinimalNoWrite() | 234 | public function testAddMinimalNoWrite() |
237 | { | 235 | { |
236 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
237 | |||
238 | $bookmark = new Bookmark(); | 238 | $bookmark = new Bookmark(); |
239 | $this->privateLinkDB->add($bookmark); | 239 | $this->privateLinkDB->add($bookmark, false); |
240 | 240 | ||
241 | $bookmark = $this->privateLinkDB->get(43); | 241 | $bookmark = $this->privateLinkDB->get(43); |
242 | $this->assertEquals(43, $bookmark->getId()); | 242 | $this->assertEquals(43, $bookmark->getId()); |
@@ -249,34 +249,34 @@ class BookmarkFileServiceTest extends TestCase | |||
249 | 249 | ||
250 | /** | 250 | /** |
251 | * Test add() method while logged out | 251 | * Test add() method while logged out |
252 | * | ||
253 | * @expectedException \Exception | ||
254 | * @expectedExceptionMessage You're not authorized to alter the datastore | ||
255 | */ | 252 | */ |
256 | public function testAddLoggedOut() | 253 | public function testAddLoggedOut() |
257 | { | 254 | { |
255 | $this->expectException(\Exception::class); | ||
256 | $this->expectExceptionMessage('You\'re not authorized to alter the datastore'); | ||
257 | |||
258 | $this->publicLinkDB->add(new Bookmark()); | 258 | $this->publicLinkDB->add(new Bookmark()); |
259 | } | 259 | } |
260 | 260 | ||
261 | /** | 261 | /** |
262 | * Test add() method with an entry which is not a bookmark instance | 262 | * Test add() method with an entry which is not a bookmark instance |
263 | * | ||
264 | * @expectedException \Exception | ||
265 | * @expectedExceptionMessage Provided data is invalid | ||
266 | */ | 263 | */ |
267 | public function testAddNotABookmark() | 264 | public function testAddNotABookmark() |
268 | { | 265 | { |
266 | $this->expectException(\Exception::class); | ||
267 | $this->expectExceptionMessage('Provided data is invalid'); | ||
268 | |||
269 | $this->privateLinkDB->add(['title' => 'hi!']); | 269 | $this->privateLinkDB->add(['title' => 'hi!']); |
270 | } | 270 | } |
271 | 271 | ||
272 | /** | 272 | /** |
273 | * Test add() method with a Bookmark already containing an ID | 273 | * Test add() method with a Bookmark already containing an ID |
274 | * | ||
275 | * @expectedException \Exception | ||
276 | * @expectedExceptionMessage This bookmarks already exists | ||
277 | */ | 274 | */ |
278 | public function testAddWithId() | 275 | public function testAddWithId() |
279 | { | 276 | { |
277 | $this->expectException(\Exception::class); | ||
278 | $this->expectExceptionMessage('This bookmarks already exists'); | ||
279 | |||
280 | $bookmark = new Bookmark(); | 280 | $bookmark = new Bookmark(); |
281 | $bookmark->setId(43); | 281 | $bookmark->setId(43); |
282 | $this->privateLinkDB->add($bookmark); | 282 | $this->privateLinkDB->add($bookmark); |
@@ -397,44 +397,44 @@ class BookmarkFileServiceTest extends TestCase | |||
397 | 397 | ||
398 | /** | 398 | /** |
399 | * Test set() method while logged out | 399 | * Test set() method while logged out |
400 | * | ||
401 | * @expectedException \Exception | ||
402 | * @expectedExceptionMessage You're not authorized to alter the datastore | ||
403 | */ | 400 | */ |
404 | public function testSetLoggedOut() | 401 | public function testSetLoggedOut() |
405 | { | 402 | { |
403 | $this->expectException(\Exception::class); | ||
404 | $this->expectExceptionMessage('You\'re not authorized to alter the datastore'); | ||
405 | |||
406 | $this->publicLinkDB->set(new Bookmark()); | 406 | $this->publicLinkDB->set(new Bookmark()); |
407 | } | 407 | } |
408 | 408 | ||
409 | /** | 409 | /** |
410 | * Test set() method with an entry which is not a bookmark instance | 410 | * Test set() method with an entry which is not a bookmark instance |
411 | * | ||
412 | * @expectedException \Exception | ||
413 | * @expectedExceptionMessage Provided data is invalid | ||
414 | */ | 411 | */ |
415 | public function testSetNotABookmark() | 412 | public function testSetNotABookmark() |
416 | { | 413 | { |
414 | $this->expectException(\Exception::class); | ||
415 | $this->expectExceptionMessage('Provided data is invalid'); | ||
416 | |||
417 | $this->privateLinkDB->set(['title' => 'hi!']); | 417 | $this->privateLinkDB->set(['title' => 'hi!']); |
418 | } | 418 | } |
419 | 419 | ||
420 | /** | 420 | /** |
421 | * Test set() method with a Bookmark without an ID defined. | 421 | * Test set() method with a Bookmark without an ID defined. |
422 | * | ||
423 | * @expectedException Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
424 | */ | 422 | */ |
425 | public function testSetWithoutId() | 423 | public function testSetWithoutId() |
426 | { | 424 | { |
425 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
426 | |||
427 | $bookmark = new Bookmark(); | 427 | $bookmark = new Bookmark(); |
428 | $this->privateLinkDB->set($bookmark); | 428 | $this->privateLinkDB->set($bookmark); |
429 | } | 429 | } |
430 | 430 | ||
431 | /** | 431 | /** |
432 | * Test set() method with a Bookmark with an unknow ID | 432 | * Test set() method with a Bookmark with an unknow ID |
433 | * | ||
434 | * @expectedException Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
435 | */ | 433 | */ |
436 | public function testSetWithUnknownId() | 434 | public function testSetWithUnknownId() |
437 | { | 435 | { |
436 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
437 | |||
438 | $bookmark = new Bookmark(); | 438 | $bookmark = new Bookmark(); |
439 | $bookmark->setId(666); | 439 | $bookmark->setId(666); |
440 | $this->privateLinkDB->set($bookmark); | 440 | $this->privateLinkDB->set($bookmark); |
@@ -481,23 +481,23 @@ class BookmarkFileServiceTest extends TestCase | |||
481 | 481 | ||
482 | /** | 482 | /** |
483 | * Test addOrSet() method while logged out | 483 | * Test addOrSet() method while logged out |
484 | * | ||
485 | * @expectedException \Exception | ||
486 | * @expectedExceptionMessage You're not authorized to alter the datastore | ||
487 | */ | 484 | */ |
488 | public function testAddOrSetLoggedOut() | 485 | public function testAddOrSetLoggedOut() |
489 | { | 486 | { |
487 | $this->expectException(\Exception::class); | ||
488 | $this->expectExceptionMessage('You\'re not authorized to alter the datastore'); | ||
489 | |||
490 | $this->publicLinkDB->addOrSet(new Bookmark()); | 490 | $this->publicLinkDB->addOrSet(new Bookmark()); |
491 | } | 491 | } |
492 | 492 | ||
493 | /** | 493 | /** |
494 | * Test addOrSet() method with an entry which is not a bookmark instance | 494 | * Test addOrSet() method with an entry which is not a bookmark instance |
495 | * | ||
496 | * @expectedException \Exception | ||
497 | * @expectedExceptionMessage Provided data is invalid | ||
498 | */ | 495 | */ |
499 | public function testAddOrSetNotABookmark() | 496 | public function testAddOrSetNotABookmark() |
500 | { | 497 | { |
498 | $this->expectException(\Exception::class); | ||
499 | $this->expectExceptionMessage('Provided data is invalid'); | ||
500 | |||
501 | $this->privateLinkDB->addOrSet(['title' => 'hi!']); | 501 | $this->privateLinkDB->addOrSet(['title' => 'hi!']); |
502 | } | 502 | } |
503 | 503 | ||
@@ -524,11 +524,11 @@ class BookmarkFileServiceTest extends TestCase | |||
524 | 524 | ||
525 | /** | 525 | /** |
526 | * Test remove() method with an existing Bookmark | 526 | * Test remove() method with an existing Bookmark |
527 | * | ||
528 | * @expectedException Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
529 | */ | 527 | */ |
530 | public function testRemoveExisting() | 528 | public function testRemoveExisting() |
531 | { | 529 | { |
530 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
531 | |||
532 | $bookmark = $this->privateLinkDB->get(42); | 532 | $bookmark = $this->privateLinkDB->get(42); |
533 | $this->privateLinkDB->remove($bookmark); | 533 | $this->privateLinkDB->remove($bookmark); |
534 | 534 | ||
@@ -548,34 +548,34 @@ class BookmarkFileServiceTest extends TestCase | |||
548 | 548 | ||
549 | /** | 549 | /** |
550 | * Test remove() method while logged out | 550 | * Test remove() method while logged out |
551 | * | ||
552 | * @expectedException \Exception | ||
553 | * @expectedExceptionMessage You're not authorized to alter the datastore | ||
554 | */ | 551 | */ |
555 | public function testRemoveLoggedOut() | 552 | public function testRemoveLoggedOut() |
556 | { | 553 | { |
554 | $this->expectException(\Exception::class); | ||
555 | $this->expectExceptionMessage('You\'re not authorized to alter the datastore'); | ||
556 | |||
557 | $bookmark = $this->privateLinkDB->get(42); | 557 | $bookmark = $this->privateLinkDB->get(42); |
558 | $this->publicLinkDB->remove($bookmark); | 558 | $this->publicLinkDB->remove($bookmark); |
559 | } | 559 | } |
560 | 560 | ||
561 | /** | 561 | /** |
562 | * Test remove() method with an entry which is not a bookmark instance | 562 | * Test remove() method with an entry which is not a bookmark instance |
563 | * | ||
564 | * @expectedException \Exception | ||
565 | * @expectedExceptionMessage Provided data is invalid | ||
566 | */ | 563 | */ |
567 | public function testRemoveNotABookmark() | 564 | public function testRemoveNotABookmark() |
568 | { | 565 | { |
566 | $this->expectException(\Exception::class); | ||
567 | $this->expectExceptionMessage('Provided data is invalid'); | ||
568 | |||
569 | $this->privateLinkDB->remove(['title' => 'hi!']); | 569 | $this->privateLinkDB->remove(['title' => 'hi!']); |
570 | } | 570 | } |
571 | 571 | ||
572 | /** | 572 | /** |
573 | * Test remove() method with a Bookmark with an unknown ID | 573 | * Test remove() method with a Bookmark with an unknown ID |
574 | * | ||
575 | * @expectedException Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
576 | */ | 574 | */ |
577 | public function testRemoveWithUnknownId() | 575 | public function testRemoveWithUnknownId() |
578 | { | 576 | { |
577 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
578 | |||
579 | $bookmark = new Bookmark(); | 579 | $bookmark = new Bookmark(); |
580 | $bookmark->setId(666); | 580 | $bookmark->setId(666); |
581 | $this->privateLinkDB->remove($bookmark); | 581 | $this->privateLinkDB->remove($bookmark); |
@@ -615,14 +615,18 @@ class BookmarkFileServiceTest extends TestCase | |||
615 | { | 615 | { |
616 | $dbSize = $this->privateLinkDB->count(); | 616 | $dbSize = $this->privateLinkDB->count(); |
617 | $this->privateLinkDB->initialize(); | 617 | $this->privateLinkDB->initialize(); |
618 | $this->assertEquals($dbSize + 2, $this->privateLinkDB->count()); | 618 | $this->assertEquals($dbSize + 3, $this->privateLinkDB->count()); |
619 | $this->assertEquals( | 619 | $this->assertStringStartsWith( |
620 | 'My secret stuff... - Pastebin.com', | 620 | 'Shaarli will automatically pick up the thumbnail for links to a variety of websites.', |
621 | $this->privateLinkDB->get(43)->getTitle() | 621 | $this->privateLinkDB->get(43)->getDescription() |
622 | ); | 622 | ); |
623 | $this->assertEquals( | 623 | $this->assertStringStartsWith( |
624 | 'The personal, minimalist, super-fast, database free, bookmarking service', | 624 | 'Adding a shaare without entering a URL creates a text-only "note" post such as this one.', |
625 | $this->privateLinkDB->get(44)->getTitle() | 625 | $this->privateLinkDB->get(44)->getDescription() |
626 | ); | ||
627 | $this->assertStringStartsWith( | ||
628 | 'Welcome to Shaarli!', | ||
629 | $this->privateLinkDB->get(45)->getDescription() | ||
626 | ); | 630 | ); |
627 | } | 631 | } |
628 | 632 | ||
@@ -631,15 +635,14 @@ class BookmarkFileServiceTest extends TestCase | |||
631 | * to make sure that nothing have been broken in the migration process. | 635 | * to make sure that nothing have been broken in the migration process. |
632 | * They mostly cover search/filters. Some of them might be redundant with the previous ones. | 636 | * They mostly cover search/filters. Some of them might be redundant with the previous ones. |
633 | */ | 637 | */ |
634 | |||
635 | /** | 638 | /** |
636 | * Attempt to instantiate a LinkDB whereas the datastore is not writable | 639 | * Attempt to instantiate a LinkDB whereas the datastore is not writable |
637 | * | ||
638 | * @expectedException Shaarli\Bookmark\Exception\NotWritableDataStoreException | ||
639 | * @expectedExceptionMessageRegExp #Couldn't load data from the data store file "null".*# | ||
640 | */ | 640 | */ |
641 | public function testConstructDatastoreNotWriteable() | 641 | public function testConstructDatastoreNotWriteable() |
642 | { | 642 | { |
643 | $this->expectException(\Shaarli\Bookmark\Exception\NotWritableDataStoreException::class); | ||
644 | $this->expectExceptionMessageRegExp('#Couldn\'t load data from the data store file "null".*#'); | ||
645 | |||
643 | $conf = new ConfigManager('tests/utils/config/configJson'); | 646 | $conf = new ConfigManager('tests/utils/config/configJson'); |
644 | $conf->set('resource.datastore', 'null/store.db'); | 647 | $conf->set('resource.datastore', 'null/store.db'); |
645 | new BookmarkFileService($conf, $this->history, true); | 648 | new BookmarkFileService($conf, $this->history, true); |
@@ -744,7 +747,7 @@ class BookmarkFileServiceTest extends TestCase | |||
744 | $link = $this->publicLinkDB->findByUrl('http://mediagoblin.org/'); | 747 | $link = $this->publicLinkDB->findByUrl('http://mediagoblin.org/'); |
745 | 748 | ||
746 | $this->assertNotEquals(false, $link); | 749 | $this->assertNotEquals(false, $link); |
747 | $this->assertContains( | 750 | $this->assertContainsPolyfill( |
748 | 'A free software media publishing platform', | 751 | 'A free software media publishing platform', |
749 | $link->getDescription() | 752 | $link->getDescription() |
750 | ); | 753 | ); |
@@ -1062,6 +1065,36 @@ class BookmarkFileServiceTest extends TestCase | |||
1062 | } | 1065 | } |
1063 | 1066 | ||
1064 | /** | 1067 | /** |
1068 | * Test filterDay while logged in | ||
1069 | */ | ||
1070 | public function testFilterDayLoggedIn(): void | ||
1071 | { | ||
1072 | $bookmarks = $this->privateLinkDB->filterDay('20121206'); | ||
1073 | $expectedIds = [4, 9, 1, 0]; | ||
1074 | |||
1075 | static::assertCount(4, $bookmarks); | ||
1076 | foreach ($bookmarks as $bookmark) { | ||
1077 | $i = ($i ?? -1) + 1; | ||
1078 | static::assertSame($expectedIds[$i], $bookmark->getId()); | ||
1079 | } | ||
1080 | } | ||
1081 | |||
1082 | /** | ||
1083 | * Test filterDay while logged out | ||
1084 | */ | ||
1085 | public function testFilterDayLoggedOut(): void | ||
1086 | { | ||
1087 | $bookmarks = $this->publicLinkDB->filterDay('20121206'); | ||
1088 | $expectedIds = [4, 9, 1]; | ||
1089 | |||
1090 | static::assertCount(3, $bookmarks); | ||
1091 | foreach ($bookmarks as $bookmark) { | ||
1092 | $i = ($i ?? -1) + 1; | ||
1093 | static::assertSame($expectedIds[$i], $bookmark->getId()); | ||
1094 | } | ||
1095 | } | ||
1096 | |||
1097 | /** | ||
1065 | * Allows to test LinkDB's private methods | 1098 | * Allows to test LinkDB's private methods |
1066 | * | 1099 | * |
1067 | * @see | 1100 | * @see |
diff --git a/tests/bookmark/BookmarkFilterTest.php b/tests/bookmark/BookmarkFilterTest.php index d4c71cb9..48c7f824 100644 --- a/tests/bookmark/BookmarkFilterTest.php +++ b/tests/bookmark/BookmarkFilterTest.php | |||
@@ -3,11 +3,10 @@ | |||
3 | namespace Shaarli\Bookmark; | 3 | namespace Shaarli\Bookmark; |
4 | 4 | ||
5 | use Exception; | 5 | use Exception; |
6 | use PHPUnit\Framework\TestCase; | ||
7 | use ReferenceLinkDB; | 6 | use ReferenceLinkDB; |
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Formatter\FormatterFactory; | ||
10 | use Shaarli\History; | 8 | use Shaarli\History; |
9 | use Shaarli\TestCase; | ||
11 | 10 | ||
12 | /** | 11 | /** |
13 | * Class BookmarkFilterTest. | 12 | * Class BookmarkFilterTest. |
@@ -36,7 +35,7 @@ class BookmarkFilterTest extends TestCase | |||
36 | /** | 35 | /** |
37 | * Instantiate linkFilter with ReferenceLinkDB data. | 36 | * Instantiate linkFilter with ReferenceLinkDB data. |
38 | */ | 37 | */ |
39 | public static function setUpBeforeClass() | 38 | public static function setUpBeforeClass(): void |
40 | { | 39 | { |
41 | $conf = new ConfigManager('tests/utils/config/configJson'); | 40 | $conf = new ConfigManager('tests/utils/config/configJson'); |
42 | $conf->set('resource.datastore', self::$testDatastore); | 41 | $conf->set('resource.datastore', self::$testDatastore); |
@@ -190,6 +189,17 @@ class BookmarkFilterTest extends TestCase | |||
190 | } | 189 | } |
191 | 190 | ||
192 | /** | 191 | /** |
192 | * Return bookmarks for a given day | ||
193 | */ | ||
194 | public function testFilterDayRestrictedVisibility(): void | ||
195 | { | ||
196 | $this->assertEquals( | ||
197 | 3, | ||
198 | count(self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, '20121206', false, BookmarkFilter::$PUBLIC)) | ||
199 | ); | ||
200 | } | ||
201 | |||
202 | /** | ||
193 | * 404 - day not found | 203 | * 404 - day not found |
194 | */ | 204 | */ |
195 | public function testFilterUnknownDay() | 205 | public function testFilterUnknownDay() |
@@ -202,21 +212,23 @@ class BookmarkFilterTest extends TestCase | |||
202 | 212 | ||
203 | /** | 213 | /** |
204 | * Use an invalid date format | 214 | * Use an invalid date format |
205 | * @expectedException Exception | ||
206 | * @expectedExceptionMessageRegExp /Invalid date format/ | ||
207 | */ | 215 | */ |
208 | public function testFilterInvalidDayWithChars() | 216 | public function testFilterInvalidDayWithChars() |
209 | { | 217 | { |
218 | $this->expectException(\Exception::class); | ||
219 | $this->expectExceptionMessageRegExp('/Invalid date format/'); | ||
220 | |||
210 | self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, 'Rainy day, dream away'); | 221 | self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, 'Rainy day, dream away'); |
211 | } | 222 | } |
212 | 223 | ||
213 | /** | 224 | /** |
214 | * Use an invalid date format | 225 | * Use an invalid date format |
215 | * @expectedException Exception | ||
216 | * @expectedExceptionMessageRegExp /Invalid date format/ | ||
217 | */ | 226 | */ |
218 | public function testFilterInvalidDayDigits() | 227 | public function testFilterInvalidDayDigits() |
219 | { | 228 | { |
229 | $this->expectException(\Exception::class); | ||
230 | $this->expectExceptionMessageRegExp('/Invalid date format/'); | ||
231 | |||
220 | self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, '20'); | 232 | self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, '20'); |
221 | } | 233 | } |
222 | 234 | ||
@@ -240,11 +252,11 @@ class BookmarkFilterTest extends TestCase | |||
240 | 252 | ||
241 | /** | 253 | /** |
242 | * No link for this hash | 254 | * No link for this hash |
243 | * | ||
244 | * @expectedException \Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
245 | */ | 255 | */ |
246 | public function testFilterUnknownSmallHash() | 256 | public function testFilterUnknownSmallHash() |
247 | { | 257 | { |
258 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
259 | |||
248 | self::$linkFilter->filter(BookmarkFilter::$FILTER_HASH, 'Iblaah'); | 260 | self::$linkFilter->filter(BookmarkFilter::$FILTER_HASH, 'Iblaah'); |
249 | } | 261 | } |
250 | 262 | ||
diff --git a/tests/bookmark/BookmarkInitializerTest.php b/tests/bookmark/BookmarkInitializerTest.php index 3906cc7f..25704004 100644 --- a/tests/bookmark/BookmarkInitializerTest.php +++ b/tests/bookmark/BookmarkInitializerTest.php | |||
@@ -2,9 +2,9 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Bookmark; | 3 | namespace Shaarli\Bookmark; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | ||
6 | use Shaarli\Config\ConfigManager; | 5 | use Shaarli\Config\ConfigManager; |
7 | use Shaarli\History; | 6 | use Shaarli\History; |
7 | use Shaarli\TestCase; | ||
8 | 8 | ||
9 | /** | 9 | /** |
10 | * Class BookmarkInitializerTest | 10 | * Class BookmarkInitializerTest |
@@ -37,7 +37,7 @@ class BookmarkInitializerTest extends TestCase | |||
37 | /** | 37 | /** |
38 | * Initialize an empty BookmarkFileService | 38 | * Initialize an empty BookmarkFileService |
39 | */ | 39 | */ |
40 | public function setUp() | 40 | public function setUp(): void |
41 | { | 41 | { |
42 | if (file_exists(self::$testDatastore)) { | 42 | if (file_exists(self::$testDatastore)) { |
43 | unlink(self::$testDatastore); | 43 | unlink(self::$testDatastore); |
@@ -64,17 +64,26 @@ class BookmarkInitializerTest extends TestCase | |||
64 | 64 | ||
65 | $this->initializer->initialize(); | 65 | $this->initializer->initialize(); |
66 | 66 | ||
67 | $this->assertEquals($refDB->countLinks() + 2, $this->bookmarkService->count()); | 67 | $this->assertEquals($refDB->countLinks() + 3, $this->bookmarkService->count()); |
68 | |||
68 | $bookmark = $this->bookmarkService->get(43); | 69 | $bookmark = $this->bookmarkService->get(43); |
69 | $this->assertEquals(43, $bookmark->getId()); | 70 | $this->assertStringStartsWith( |
70 | $this->assertEquals('My secret stuff... - Pastebin.com', $bookmark->getTitle()); | 71 | 'Shaarli will automatically pick up the thumbnail for links to a variety of websites.', |
72 | $bookmark->getDescription() | ||
73 | ); | ||
71 | $this->assertTrue($bookmark->isPrivate()); | 74 | $this->assertTrue($bookmark->isPrivate()); |
72 | 75 | ||
73 | $bookmark = $this->bookmarkService->get(44); | 76 | $bookmark = $this->bookmarkService->get(44); |
74 | $this->assertEquals(44, $bookmark->getId()); | 77 | $this->assertStringStartsWith( |
75 | $this->assertEquals( | 78 | 'Adding a shaare without entering a URL creates a text-only "note" post such as this one.', |
76 | 'The personal, minimalist, super-fast, database free, bookmarking service', | 79 | $bookmark->getDescription() |
77 | $bookmark->getTitle() | 80 | ); |
81 | $this->assertTrue($bookmark->isPrivate()); | ||
82 | |||
83 | $bookmark = $this->bookmarkService->get(45); | ||
84 | $this->assertStringStartsWith( | ||
85 | 'Welcome to Shaarli!', | ||
86 | $bookmark->getDescription() | ||
78 | ); | 87 | ); |
79 | $this->assertFalse($bookmark->isPrivate()); | 88 | $this->assertFalse($bookmark->isPrivate()); |
80 | 89 | ||
@@ -82,17 +91,26 @@ class BookmarkInitializerTest extends TestCase | |||
82 | 91 | ||
83 | // Reload from file | 92 | // Reload from file |
84 | $this->bookmarkService = new BookmarkFileService($this->conf, $this->history, true); | 93 | $this->bookmarkService = new BookmarkFileService($this->conf, $this->history, true); |
85 | $this->assertEquals($refDB->countLinks() + 2, $this->bookmarkService->count()); | 94 | $this->assertEquals($refDB->countLinks() + 3, $this->bookmarkService->count()); |
95 | |||
86 | $bookmark = $this->bookmarkService->get(43); | 96 | $bookmark = $this->bookmarkService->get(43); |
87 | $this->assertEquals(43, $bookmark->getId()); | 97 | $this->assertStringStartsWith( |
88 | $this->assertEquals('My secret stuff... - Pastebin.com', $bookmark->getTitle()); | 98 | 'Shaarli will automatically pick up the thumbnail for links to a variety of websites.', |
99 | $bookmark->getDescription() | ||
100 | ); | ||
89 | $this->assertTrue($bookmark->isPrivate()); | 101 | $this->assertTrue($bookmark->isPrivate()); |
90 | 102 | ||
91 | $bookmark = $this->bookmarkService->get(44); | 103 | $bookmark = $this->bookmarkService->get(44); |
92 | $this->assertEquals(44, $bookmark->getId()); | 104 | $this->assertStringStartsWith( |
93 | $this->assertEquals( | 105 | 'Adding a shaare without entering a URL creates a text-only "note" post such as this one.', |
94 | 'The personal, minimalist, super-fast, database free, bookmarking service', | 106 | $bookmark->getDescription() |
95 | $bookmark->getTitle() | 107 | ); |
108 | $this->assertTrue($bookmark->isPrivate()); | ||
109 | |||
110 | $bookmark = $this->bookmarkService->get(45); | ||
111 | $this->assertStringStartsWith( | ||
112 | 'Welcome to Shaarli!', | ||
113 | $bookmark->getDescription() | ||
96 | ); | 114 | ); |
97 | $this->assertFalse($bookmark->isPrivate()); | 115 | $this->assertFalse($bookmark->isPrivate()); |
98 | } | 116 | } |
@@ -107,17 +125,25 @@ class BookmarkInitializerTest extends TestCase | |||
107 | 125 | ||
108 | $this->initializer->initialize(); | 126 | $this->initializer->initialize(); |
109 | 127 | ||
110 | $this->assertEquals(2, $this->bookmarkService->count()); | 128 | $this->assertEquals(3, $this->bookmarkService->count()); |
111 | $bookmark = $this->bookmarkService->get(0); | 129 | $bookmark = $this->bookmarkService->get(0); |
112 | $this->assertEquals(0, $bookmark->getId()); | 130 | $this->assertStringStartsWith( |
113 | $this->assertEquals('My secret stuff... - Pastebin.com', $bookmark->getTitle()); | 131 | 'Shaarli will automatically pick up the thumbnail for links to a variety of websites.', |
132 | $bookmark->getDescription() | ||
133 | ); | ||
114 | $this->assertTrue($bookmark->isPrivate()); | 134 | $this->assertTrue($bookmark->isPrivate()); |
115 | 135 | ||
116 | $bookmark = $this->bookmarkService->get(1); | 136 | $bookmark = $this->bookmarkService->get(1); |
117 | $this->assertEquals(1, $bookmark->getId()); | 137 | $this->assertStringStartsWith( |
118 | $this->assertEquals( | 138 | 'Adding a shaare without entering a URL creates a text-only "note" post such as this one.', |
119 | 'The personal, minimalist, super-fast, database free, bookmarking service', | 139 | $bookmark->getDescription() |
120 | $bookmark->getTitle() | 140 | ); |
141 | $this->assertTrue($bookmark->isPrivate()); | ||
142 | |||
143 | $bookmark = $this->bookmarkService->get(2); | ||
144 | $this->assertStringStartsWith( | ||
145 | 'Welcome to Shaarli!', | ||
146 | $bookmark->getDescription() | ||
121 | ); | 147 | ); |
122 | $this->assertFalse($bookmark->isPrivate()); | 148 | $this->assertFalse($bookmark->isPrivate()); |
123 | } | 149 | } |
diff --git a/tests/bookmark/BookmarkTest.php b/tests/bookmark/BookmarkTest.php index 4b6a3c07..afec2440 100644 --- a/tests/bookmark/BookmarkTest.php +++ b/tests/bookmark/BookmarkTest.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Bookmark; | 3 | namespace Shaarli\Bookmark; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | ||
6 | use Shaarli\Bookmark\Exception\InvalidBookmarkException; | 5 | use Shaarli\Bookmark\Exception\InvalidBookmarkException; |
6 | use Shaarli\TestCase; | ||
7 | 7 | ||
8 | /** | 8 | /** |
9 | * Class BookmarkTest | 9 | * Class BookmarkTest |
@@ -150,7 +150,7 @@ class BookmarkTest extends TestCase | |||
150 | $exception = $e; | 150 | $exception = $e; |
151 | } | 151 | } |
152 | $this->assertNotNull($exception); | 152 | $this->assertNotNull($exception); |
153 | $this->assertContains('- ID: '. PHP_EOL, $exception->getMessage()); | 153 | $this->assertContainsPolyfill('- ID: '. PHP_EOL, $exception->getMessage()); |
154 | } | 154 | } |
155 | 155 | ||
156 | /** | 156 | /** |
@@ -169,7 +169,7 @@ class BookmarkTest extends TestCase | |||
169 | $exception = $e; | 169 | $exception = $e; |
170 | } | 170 | } |
171 | $this->assertNotNull($exception); | 171 | $this->assertNotNull($exception); |
172 | $this->assertContains('- ID: str'. PHP_EOL, $exception->getMessage()); | 172 | $this->assertContainsPolyfill('- ID: str'. PHP_EOL, $exception->getMessage()); |
173 | } | 173 | } |
174 | 174 | ||
175 | /** | 175 | /** |
@@ -188,7 +188,7 @@ class BookmarkTest extends TestCase | |||
188 | $exception = $e; | 188 | $exception = $e; |
189 | } | 189 | } |
190 | $this->assertNotNull($exception); | 190 | $this->assertNotNull($exception); |
191 | $this->assertContains('- ShortUrl: '. PHP_EOL, $exception->getMessage()); | 191 | $this->assertContainsPolyfill('- ShortUrl: '. PHP_EOL, $exception->getMessage()); |
192 | } | 192 | } |
193 | 193 | ||
194 | /** | 194 | /** |
@@ -207,7 +207,7 @@ class BookmarkTest extends TestCase | |||
207 | $exception = $e; | 207 | $exception = $e; |
208 | } | 208 | } |
209 | $this->assertNotNull($exception); | 209 | $this->assertNotNull($exception); |
210 | $this->assertContains('- Created: '. PHP_EOL, $exception->getMessage()); | 210 | $this->assertContainsPolyfill('- Created: '. PHP_EOL, $exception->getMessage()); |
211 | } | 211 | } |
212 | 212 | ||
213 | /** | 213 | /** |
@@ -226,7 +226,7 @@ class BookmarkTest extends TestCase | |||
226 | $exception = $e; | 226 | $exception = $e; |
227 | } | 227 | } |
228 | $this->assertNotNull($exception); | 228 | $this->assertNotNull($exception); |
229 | $this->assertContains('- Created: Not a DateTime object'. PHP_EOL, $exception->getMessage()); | 229 | $this->assertContainsPolyfill('- Created: Not a DateTime object'. PHP_EOL, $exception->getMessage()); |
230 | } | 230 | } |
231 | 231 | ||
232 | /** | 232 | /** |
diff --git a/tests/bookmark/LinkUtilsTest.php b/tests/bookmark/LinkUtilsTest.php index 7d4a7b89..ef00b92f 100644 --- a/tests/bookmark/LinkUtilsTest.php +++ b/tests/bookmark/LinkUtilsTest.php | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Bookmark; | 3 | namespace Shaarli\Bookmark; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | 5 | use Shaarli\TestCase; |
6 | 6 | ||
7 | require_once 'tests/utils/CurlUtils.php'; | 7 | require_once 'tests/utils/CurlUtils.php'; |
8 | 8 | ||
@@ -43,6 +43,19 @@ class LinkUtilsTest extends TestCase | |||
43 | } | 43 | } |
44 | 44 | ||
45 | /** | 45 | /** |
46 | * Test headers_extract_charset() when the charset is found with odd quotes. | ||
47 | */ | ||
48 | public function testHeadersExtractExistentCharsetWithQuotes() | ||
49 | { | ||
50 | $charset = 'x-MacCroatian'; | ||
51 | $headers = 'text/html; charset="' . $charset . '"otherstuff="test"'; | ||
52 | $this->assertEquals(strtolower($charset), header_extract_charset($headers)); | ||
53 | |||
54 | $headers = 'text/html; charset=\'' . $charset . '\'otherstuff="test"'; | ||
55 | $this->assertEquals(strtolower($charset), header_extract_charset($headers)); | ||
56 | } | ||
57 | |||
58 | /** | ||
46 | * Test headers_extract_charset() when the charset is not found. | 59 | * Test headers_extract_charset() when the charset is not found. |
47 | */ | 60 | */ |
48 | public function testHeadersExtractNonExistentCharset() | 61 | public function testHeadersExtractNonExistentCharset() |
@@ -437,13 +450,13 @@ class LinkUtilsTest extends TestCase | |||
437 | カタカナ #カタカナ」カタカナ\n'; | 450 | カタカナ #カタカナ」カタカナ\n'; |
438 | $autolinkedDescription = hashtag_autolink($rawDescription, $index); | 451 | $autolinkedDescription = hashtag_autolink($rawDescription, $index); |
439 | 452 | ||
440 | $this->assertContains($this->getHashtagLink('hashtag', $index), $autolinkedDescription); | 453 | $this->assertContainsPolyfill($this->getHashtagLink('hashtag', $index), $autolinkedDescription); |
441 | $this->assertNotContains(' #hashtag', $autolinkedDescription); | 454 | $this->assertNotContainsPolyfill(' #hashtag', $autolinkedDescription); |
442 | $this->assertNotContains('>#nothashtag', $autolinkedDescription); | 455 | $this->assertNotContainsPolyfill('>#nothashtag', $autolinkedDescription); |
443 | $this->assertContains($this->getHashtagLink('ашок', $index), $autolinkedDescription); | 456 | $this->assertContainsPolyfill($this->getHashtagLink('ашок', $index), $autolinkedDescription); |
444 | $this->assertContains($this->getHashtagLink('カタカナ', $index), $autolinkedDescription); | 457 | $this->assertContainsPolyfill($this->getHashtagLink('カタカナ', $index), $autolinkedDescription); |
445 | $this->assertContains($this->getHashtagLink('hashtag_hashtag', $index), $autolinkedDescription); | 458 | $this->assertContainsPolyfill($this->getHashtagLink('hashtag_hashtag', $index), $autolinkedDescription); |
446 | $this->assertNotContains($this->getHashtagLink('hashtag-nothashtag', $index), $autolinkedDescription); | 459 | $this->assertNotContainsPolyfill($this->getHashtagLink('hashtag-nothashtag', $index), $autolinkedDescription); |
447 | } | 460 | } |
448 | 461 | ||
449 | /** | 462 | /** |
@@ -454,9 +467,9 @@ class LinkUtilsTest extends TestCase | |||
454 | $rawDescription = 'blabla #hashtag x#nothashtag'; | 467 | $rawDescription = 'blabla #hashtag x#nothashtag'; |
455 | $autolinkedDescription = hashtag_autolink($rawDescription); | 468 | $autolinkedDescription = hashtag_autolink($rawDescription); |
456 | 469 | ||
457 | $this->assertContains($this->getHashtagLink('hashtag'), $autolinkedDescription); | 470 | $this->assertContainsPolyfill($this->getHashtagLink('hashtag'), $autolinkedDescription); |
458 | $this->assertNotContains(' #hashtag', $autolinkedDescription); | 471 | $this->assertNotContainsPolyfill(' #hashtag', $autolinkedDescription); |
459 | $this->assertNotContains('>#nothashtag', $autolinkedDescription); | 472 | $this->assertNotContainsPolyfill('>#nothashtag', $autolinkedDescription); |
460 | } | 473 | } |
461 | 474 | ||
462 | /** | 475 | /** |
diff --git a/tests/bootstrap.php b/tests/bootstrap.php index d4ddedd5..2d675c9a 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php | |||
@@ -18,6 +18,7 @@ require_once 'application/bookmark/LinkUtils.php'; | |||
18 | require_once 'application/Utils.php'; | 18 | require_once 'application/Utils.php'; |
19 | require_once 'application/http/UrlUtils.php'; | 19 | require_once 'application/http/UrlUtils.php'; |
20 | require_once 'application/http/HttpUtils.php'; | 20 | require_once 'application/http/HttpUtils.php'; |
21 | require_once 'tests/TestCase.php'; | ||
21 | require_once 'tests/container/ShaarliTestContainer.php'; | 22 | require_once 'tests/container/ShaarliTestContainer.php'; |
22 | require_once 'tests/front/controller/visitor/FrontControllerMockHelper.php'; | 23 | require_once 'tests/front/controller/visitor/FrontControllerMockHelper.php'; |
23 | require_once 'tests/front/controller/admin/FrontAdminControllerMockHelper.php'; | 24 | require_once 'tests/front/controller/admin/FrontAdminControllerMockHelper.php'; |
diff --git a/tests/config/ConfigJsonTest.php b/tests/config/ConfigJsonTest.php index 33160eb0..c0ba5b8f 100644 --- a/tests/config/ConfigJsonTest.php +++ b/tests/config/ConfigJsonTest.php | |||
@@ -4,14 +4,14 @@ namespace Shaarli\Config; | |||
4 | /** | 4 | /** |
5 | * Class ConfigJsonTest | 5 | * Class ConfigJsonTest |
6 | */ | 6 | */ |
7 | class ConfigJsonTest extends \PHPUnit\Framework\TestCase | 7 | class ConfigJsonTest extends \Shaarli\TestCase |
8 | { | 8 | { |
9 | /** | 9 | /** |
10 | * @var ConfigJson | 10 | * @var ConfigJson |
11 | */ | 11 | */ |
12 | protected $configIO; | 12 | protected $configIO; |
13 | 13 | ||
14 | public function setUp() | 14 | protected function setUp(): void |
15 | { | 15 | { |
16 | $this->configIO = new ConfigJson(); | 16 | $this->configIO = new ConfigJson(); |
17 | } | 17 | } |
@@ -38,12 +38,12 @@ class ConfigJsonTest extends \PHPUnit\Framework\TestCase | |||
38 | 38 | ||
39 | /** | 39 | /** |
40 | * Read a non existent config file -> empty array. | 40 | * Read a non existent config file -> empty array. |
41 | * | ||
42 | * @expectedException \Exception | ||
43 | * @expectedExceptionMessageRegExp /An error occurred while parsing JSON configuration file \([\w\/\.]+\): error code #4/ | ||
44 | */ | 41 | */ |
45 | public function testReadInvalidJson() | 42 | public function testReadInvalidJson() |
46 | { | 43 | { |
44 | $this->expectException(\Exception::class); | ||
45 | $this->expectExceptionMessageRegExp('/An error occurred while parsing JSON configuration file \\([\\w\\/\\.]+\\): error code #4/'); | ||
46 | |||
47 | $this->configIO->read('tests/utils/config/configInvalid.json.php'); | 47 | $this->configIO->read('tests/utils/config/configInvalid.json.php'); |
48 | } | 48 | } |
49 | 49 | ||
@@ -110,22 +110,11 @@ class ConfigJsonTest extends \PHPUnit\Framework\TestCase | |||
110 | 110 | ||
111 | /** | 111 | /** |
112 | * Write to invalid path. | 112 | * Write to invalid path. |
113 | * | ||
114 | * @expectedException \Shaarli\Exceptions\IOException | ||
115 | */ | ||
116 | public function testWriteInvalidArray() | ||
117 | { | ||
118 | $conf = array('conf' => 'value'); | ||
119 | @$this->configIO->write(array(), $conf); | ||
120 | } | ||
121 | |||
122 | /** | ||
123 | * Write to invalid path. | ||
124 | * | ||
125 | * @expectedException \Shaarli\Exceptions\IOException | ||
126 | */ | 113 | */ |
127 | public function testWriteInvalidBlank() | 114 | public function testWriteInvalidBlank() |
128 | { | 115 | { |
116 | $this->expectException(\Shaarli\Exceptions\IOException::class); | ||
117 | |||
129 | $conf = array('conf' => 'value'); | 118 | $conf = array('conf' => 'value'); |
130 | @$this->configIO->write('', $conf); | 119 | @$this->configIO->write('', $conf); |
131 | } | 120 | } |
diff --git a/tests/config/ConfigManagerTest.php b/tests/config/ConfigManagerTest.php index 33830bc9..65d8ba2c 100644 --- a/tests/config/ConfigManagerTest.php +++ b/tests/config/ConfigManagerTest.php | |||
@@ -7,14 +7,14 @@ namespace Shaarli\Config; | |||
7 | * Note: it only test the manager with ConfigJson, | 7 | * Note: it only test the manager with ConfigJson, |
8 | * ConfigPhp is only a workaround to handle the transition to JSON type. | 8 | * ConfigPhp is only a workaround to handle the transition to JSON type. |
9 | */ | 9 | */ |
10 | class ConfigManagerTest extends \PHPUnit\Framework\TestCase | 10 | class ConfigManagerTest extends \Shaarli\TestCase |
11 | { | 11 | { |
12 | /** | 12 | /** |
13 | * @var ConfigManager | 13 | * @var ConfigManager |
14 | */ | 14 | */ |
15 | protected $conf; | 15 | protected $conf; |
16 | 16 | ||
17 | public function setUp() | 17 | protected function setUp(): void |
18 | { | 18 | { |
19 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 19 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
20 | } | 20 | } |
@@ -95,44 +95,44 @@ class ConfigManagerTest extends \PHPUnit\Framework\TestCase | |||
95 | 95 | ||
96 | /** | 96 | /** |
97 | * Set with an empty key. | 97 | * Set with an empty key. |
98 | * | ||
99 | * @expectedException \Exception | ||
100 | * @expectedExceptionMessageRegExp #^Invalid setting key parameter. String expected, got.*# | ||
101 | */ | 98 | */ |
102 | public function testSetEmptyKey() | 99 | public function testSetEmptyKey() |
103 | { | 100 | { |
101 | $this->expectException(\Exception::class); | ||
102 | $this->expectExceptionMessageRegExp('#^Invalid setting key parameter. String expected, got.*#'); | ||
103 | |||
104 | $this->conf->set('', 'stuff'); | 104 | $this->conf->set('', 'stuff'); |
105 | } | 105 | } |
106 | 106 | ||
107 | /** | 107 | /** |
108 | * Set with an array key. | 108 | * Set with an array key. |
109 | * | ||
110 | * @expectedException \Exception | ||
111 | * @expectedExceptionMessageRegExp #^Invalid setting key parameter. String expected, got.*# | ||
112 | */ | 109 | */ |
113 | public function testSetArrayKey() | 110 | public function testSetArrayKey() |
114 | { | 111 | { |
112 | $this->expectException(\Exception::class); | ||
113 | $this->expectExceptionMessageRegExp('#^Invalid setting key parameter. String expected, got.*#'); | ||
114 | |||
115 | $this->conf->set(array('foo' => 'bar'), 'stuff'); | 115 | $this->conf->set(array('foo' => 'bar'), 'stuff'); |
116 | } | 116 | } |
117 | 117 | ||
118 | /** | 118 | /** |
119 | * Remove with an empty key. | 119 | * Remove with an empty key. |
120 | * | ||
121 | * @expectedException \Exception | ||
122 | * @expectedExceptionMessageRegExp #^Invalid setting key parameter. String expected, got.*# | ||
123 | */ | 120 | */ |
124 | public function testRmoveEmptyKey() | 121 | public function testRmoveEmptyKey() |
125 | { | 122 | { |
123 | $this->expectException(\Exception::class); | ||
124 | $this->expectExceptionMessageRegExp('#^Invalid setting key parameter. String expected, got.*#'); | ||
125 | |||
126 | $this->conf->remove(''); | 126 | $this->conf->remove(''); |
127 | } | 127 | } |
128 | 128 | ||
129 | /** | 129 | /** |
130 | * Try to write the config without mandatory parameter (e.g. 'login'). | 130 | * Try to write the config without mandatory parameter (e.g. 'login'). |
131 | * | ||
132 | * @expectedException Shaarli\Config\Exception\MissingFieldConfigException | ||
133 | */ | 131 | */ |
134 | public function testWriteMissingParameter() | 132 | public function testWriteMissingParameter() |
135 | { | 133 | { |
134 | $this->expectException(\Shaarli\Config\Exception\MissingFieldConfigException::class); | ||
135 | |||
136 | $this->conf->setConfigFile('tests/utils/config/configTmp'); | 136 | $this->conf->setConfigFile('tests/utils/config/configTmp'); |
137 | $this->assertFalse(file_exists($this->conf->getConfigFileExt())); | 137 | $this->assertFalse(file_exists($this->conf->getConfigFileExt())); |
138 | $this->conf->reload(); | 138 | $this->conf->reload(); |
diff --git a/tests/config/ConfigPhpTest.php b/tests/config/ConfigPhpTest.php index fb91b51b..7bf9fe64 100644 --- a/tests/config/ConfigPhpTest.php +++ b/tests/config/ConfigPhpTest.php | |||
@@ -8,14 +8,14 @@ namespace Shaarli\Config; | |||
8 | * which are kept between tests. | 8 | * which are kept between tests. |
9 | * @runTestsInSeparateProcesses | 9 | * @runTestsInSeparateProcesses |
10 | */ | 10 | */ |
11 | class ConfigPhpTest extends \PHPUnit\Framework\TestCase | 11 | class ConfigPhpTest extends \Shaarli\TestCase |
12 | { | 12 | { |
13 | /** | 13 | /** |
14 | * @var ConfigPhp | 14 | * @var ConfigPhp |
15 | */ | 15 | */ |
16 | protected $configIO; | 16 | protected $configIO; |
17 | 17 | ||
18 | public function setUp() | 18 | protected function setUp(): void |
19 | { | 19 | { |
20 | $this->configIO = new ConfigPhp(); | 20 | $this->configIO = new ConfigPhp(); |
21 | } | 21 | } |
diff --git a/tests/config/ConfigPluginTest.php b/tests/config/ConfigPluginTest.php index b2cc0045..fa72d8c4 100644 --- a/tests/config/ConfigPluginTest.php +++ b/tests/config/ConfigPluginTest.php | |||
@@ -9,7 +9,7 @@ require_once 'application/config/ConfigPlugin.php'; | |||
9 | /** | 9 | /** |
10 | * Unitary tests for Shaarli config related functions | 10 | * Unitary tests for Shaarli config related functions |
11 | */ | 11 | */ |
12 | class ConfigPluginTest extends \PHPUnit\Framework\TestCase | 12 | class ConfigPluginTest extends \Shaarli\TestCase |
13 | { | 13 | { |
14 | /** | 14 | /** |
15 | * Test save_plugin_config with valid data. | 15 | * Test save_plugin_config with valid data. |
@@ -46,11 +46,11 @@ class ConfigPluginTest extends \PHPUnit\Framework\TestCase | |||
46 | 46 | ||
47 | /** | 47 | /** |
48 | * Test save_plugin_config with invalid data. | 48 | * Test save_plugin_config with invalid data. |
49 | * | ||
50 | * @expectedException Shaarli\Config\Exception\PluginConfigOrderException | ||
51 | */ | 49 | */ |
52 | public function testSavePluginConfigInvalid() | 50 | public function testSavePluginConfigInvalid() |
53 | { | 51 | { |
52 | $this->expectException(\Shaarli\Config\Exception\PluginConfigOrderException::class); | ||
53 | |||
54 | $data = array( | 54 | $data = array( |
55 | 'plugin2' => 0, | 55 | 'plugin2' => 0, |
56 | 'plugin3' => 0, | 56 | 'plugin3' => 0, |
diff --git a/tests/container/ContainerBuilderTest.php b/tests/container/ContainerBuilderTest.php index c08010ae..5d52daef 100644 --- a/tests/container/ContainerBuilderTest.php +++ b/tests/container/ContainerBuilderTest.php | |||
@@ -4,12 +4,12 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Container; | 5 | namespace Shaarli\Container; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\BookmarkServiceInterface; | 7 | use Shaarli\Bookmark\BookmarkServiceInterface; |
9 | use Shaarli\Config\ConfigManager; | 8 | use Shaarli\Config\ConfigManager; |
10 | use Shaarli\Feed\FeedBuilder; | 9 | use Shaarli\Feed\FeedBuilder; |
11 | use Shaarli\Formatter\FormatterFactory; | 10 | use Shaarli\Formatter\FormatterFactory; |
12 | use Shaarli\Front\Controller\Visitor\ErrorController; | 11 | use Shaarli\Front\Controller\Visitor\ErrorController; |
12 | use Shaarli\Front\Controller\Visitor\ErrorNotFoundController; | ||
13 | use Shaarli\History; | 13 | use Shaarli\History; |
14 | use Shaarli\Http\HttpAccess; | 14 | use Shaarli\Http\HttpAccess; |
15 | use Shaarli\Netscape\NetscapeBookmarkUtils; | 15 | use Shaarli\Netscape\NetscapeBookmarkUtils; |
@@ -19,6 +19,7 @@ use Shaarli\Render\PageCacheManager; | |||
19 | use Shaarli\Security\CookieManager; | 19 | use Shaarli\Security\CookieManager; |
20 | use Shaarli\Security\LoginManager; | 20 | use Shaarli\Security\LoginManager; |
21 | use Shaarli\Security\SessionManager; | 21 | use Shaarli\Security\SessionManager; |
22 | use Shaarli\TestCase; | ||
22 | use Shaarli\Thumbnailer; | 23 | use Shaarli\Thumbnailer; |
23 | use Shaarli\Updater\Updater; | 24 | use Shaarli\Updater\Updater; |
24 | use Slim\Http\Environment; | 25 | use Slim\Http\Environment; |
@@ -75,6 +76,7 @@ class ContainerBuilderTest extends TestCase | |||
75 | static::assertInstanceOf(PageBuilder::class, $container->pageBuilder); | 76 | static::assertInstanceOf(PageBuilder::class, $container->pageBuilder); |
76 | static::assertInstanceOf(PageCacheManager::class, $container->pageCacheManager); | 77 | static::assertInstanceOf(PageCacheManager::class, $container->pageCacheManager); |
77 | static::assertInstanceOf(ErrorController::class, $container->phpErrorHandler); | 78 | static::assertInstanceOf(ErrorController::class, $container->phpErrorHandler); |
79 | static::assertInstanceOf(ErrorNotFoundController::class, $container->notFoundHandler); | ||
78 | static::assertInstanceOf(PluginManager::class, $container->pluginManager); | 80 | static::assertInstanceOf(PluginManager::class, $container->pluginManager); |
79 | static::assertInstanceOf(SessionManager::class, $container->sessionManager); | 81 | static::assertInstanceOf(SessionManager::class, $container->sessionManager); |
80 | static::assertInstanceOf(Thumbnailer::class, $container->thumbnailer); | 82 | static::assertInstanceOf(Thumbnailer::class, $container->thumbnailer); |
diff --git a/tests/feed/CachedPageTest.php b/tests/feed/CachedPageTest.php index 2e716432..904db9dc 100644 --- a/tests/feed/CachedPageTest.php +++ b/tests/feed/CachedPageTest.php | |||
@@ -7,7 +7,7 @@ namespace Shaarli\Feed; | |||
7 | /** | 7 | /** |
8 | * Unitary tests for cached pages | 8 | * Unitary tests for cached pages |
9 | */ | 9 | */ |
10 | class CachedPageTest extends \PHPUnit\Framework\TestCase | 10 | class CachedPageTest extends \Shaarli\TestCase |
11 | { | 11 | { |
12 | // test cache directory | 12 | // test cache directory |
13 | protected static $testCacheDir = 'sandbox/pagecache'; | 13 | protected static $testCacheDir = 'sandbox/pagecache'; |
@@ -17,7 +17,7 @@ class CachedPageTest extends \PHPUnit\Framework\TestCase | |||
17 | /** | 17 | /** |
18 | * Create the cache directory if needed | 18 | * Create the cache directory if needed |
19 | */ | 19 | */ |
20 | public static function setUpBeforeClass() | 20 | public static function setUpBeforeClass(): void |
21 | { | 21 | { |
22 | if (!is_dir(self::$testCacheDir)) { | 22 | if (!is_dir(self::$testCacheDir)) { |
23 | mkdir(self::$testCacheDir); | 23 | mkdir(self::$testCacheDir); |
@@ -28,7 +28,7 @@ class CachedPageTest extends \PHPUnit\Framework\TestCase | |||
28 | /** | 28 | /** |
29 | * Reset the page cache | 29 | * Reset the page cache |
30 | */ | 30 | */ |
31 | public function setUp() | 31 | protected function setUp(): void |
32 | { | 32 | { |
33 | if (file_exists(self::$filename)) { | 33 | if (file_exists(self::$filename)) { |
34 | unlink(self::$filename); | 34 | unlink(self::$filename); |
diff --git a/tests/feed/FeedBuilderTest.php b/tests/feed/FeedBuilderTest.php index 5c2aaedb..c29e8ef3 100644 --- a/tests/feed/FeedBuilderTest.php +++ b/tests/feed/FeedBuilderTest.php | |||
@@ -10,13 +10,14 @@ use Shaarli\Bookmark\LinkDB; | |||
10 | use Shaarli\Config\ConfigManager; | 10 | use Shaarli\Config\ConfigManager; |
11 | use Shaarli\Formatter\FormatterFactory; | 11 | use Shaarli\Formatter\FormatterFactory; |
12 | use Shaarli\History; | 12 | use Shaarli\History; |
13 | use Shaarli\TestCase; | ||
13 | 14 | ||
14 | /** | 15 | /** |
15 | * FeedBuilderTest class. | 16 | * FeedBuilderTest class. |
16 | * | 17 | * |
17 | * Unit tests for FeedBuilder. | 18 | * Unit tests for FeedBuilder. |
18 | */ | 19 | */ |
19 | class FeedBuilderTest extends \PHPUnit\Framework\TestCase | 20 | class FeedBuilderTest extends TestCase |
20 | { | 21 | { |
21 | /** | 22 | /** |
22 | * @var string locale Basque (Spain). | 23 | * @var string locale Basque (Spain). |
@@ -44,7 +45,7 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
44 | /** | 45 | /** |
45 | * Called before every test method. | 46 | * Called before every test method. |
46 | */ | 47 | */ |
47 | public static function setUpBeforeClass() | 48 | public static function setUpBeforeClass(): void |
48 | { | 49 | { |
49 | $conf = new ConfigManager('tests/utils/config/configJson'); | 50 | $conf = new ConfigManager('tests/utils/config/configJson'); |
50 | $conf->set('resource.datastore', self::$testDatastore); | 51 | $conf->set('resource.datastore', self::$testDatastore); |
@@ -60,7 +61,7 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
60 | 'SERVER_NAME' => 'host.tld', | 61 | 'SERVER_NAME' => 'host.tld', |
61 | 'SERVER_PORT' => '80', | 62 | 'SERVER_PORT' => '80', |
62 | 'SCRIPT_NAME' => '/index.php', | 63 | 'SCRIPT_NAME' => '/index.php', |
63 | 'REQUEST_URI' => '/index.php?do=feed', | 64 | 'REQUEST_URI' => '/feed/atom', |
64 | ); | 65 | ); |
65 | } | 66 | } |
66 | 67 | ||
@@ -81,13 +82,13 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
81 | $this->assertEquals(self::$RSS_LANGUAGE, $data['language']); | 82 | $this->assertEquals(self::$RSS_LANGUAGE, $data['language']); |
82 | $this->assertRegExp('/Wed, 03 Aug 2016 09:30:33 \+\d{4}/', $data['last_update']); | 83 | $this->assertRegExp('/Wed, 03 Aug 2016 09:30:33 \+\d{4}/', $data['last_update']); |
83 | $this->assertEquals(true, $data['show_dates']); | 84 | $this->assertEquals(true, $data['show_dates']); |
84 | $this->assertEquals('http://host.tld/index.php?do=feed', $data['self_link']); | 85 | $this->assertEquals('http://host.tld/feed/atom', $data['self_link']); |
85 | $this->assertEquals('http://host.tld/', $data['index_url']); | 86 | $this->assertEquals('http://host.tld/', $data['index_url']); |
86 | $this->assertFalse($data['usepermalinks']); | 87 | $this->assertFalse($data['usepermalinks']); |
87 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); | 88 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); |
88 | 89 | ||
89 | // Test first not pinned link (note link) | 90 | // Test first not pinned link (note link) |
90 | $link = $data['links'][array_keys($data['links'])[2]]; | 91 | $link = $data['links'][array_keys($data['links'])[0]]; |
91 | $this->assertEquals(41, $link['id']); | 92 | $this->assertEquals(41, $link['id']); |
92 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); | 93 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); |
93 | $this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']); | 94 | $this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']); |
@@ -96,9 +97,9 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
96 | $pub = DateTime::createFromFormat(DateTime::RSS, $link['pub_iso_date']); | 97 | $pub = DateTime::createFromFormat(DateTime::RSS, $link['pub_iso_date']); |
97 | $up = DateTime::createFromFormat(DateTime::ATOM, $link['up_iso_date']); | 98 | $up = DateTime::createFromFormat(DateTime::ATOM, $link['up_iso_date']); |
98 | $this->assertEquals($pub, $up); | 99 | $this->assertEquals($pub, $up); |
99 | $this->assertContains('Stallman has a beard', $link['description']); | 100 | $this->assertContainsPolyfill('Stallman has a beard', $link['description']); |
100 | $this->assertContains('Permalink', $link['description']); | 101 | $this->assertContainsPolyfill('Permalink', $link['description']); |
101 | $this->assertContains('http://host.tld/shaare/WDWyig', $link['description']); | 102 | $this->assertContainsPolyfill('http://host.tld/shaare/WDWyig', $link['description']); |
102 | $this->assertEquals(1, count($link['taglist'])); | 103 | $this->assertEquals(1, count($link['taglist'])); |
103 | $this->assertEquals('sTuff', $link['taglist'][0]); | 104 | $this->assertEquals('sTuff', $link['taglist'][0]); |
104 | 105 | ||
@@ -128,7 +129,7 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
128 | $data = $feedBuilder->buildData(FeedBuilder::$FEED_ATOM, null); | 129 | $data = $feedBuilder->buildData(FeedBuilder::$FEED_ATOM, null); |
129 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); | 130 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); |
130 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['last_update']); | 131 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['last_update']); |
131 | $link = $data['links'][array_keys($data['links'])[2]]; | 132 | $link = $data['links'][array_keys($data['links'])[0]]; |
132 | $this->assertRegExp('/2015-03-10T11:46:51\+\d{2}:\d{2}/', $link['pub_iso_date']); | 133 | $this->assertRegExp('/2015-03-10T11:46:51\+\d{2}:\d{2}/', $link['pub_iso_date']); |
133 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['links'][8]['up_iso_date']); | 134 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['links'][8]['up_iso_date']); |
134 | } | 135 | } |
@@ -173,7 +174,7 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
173 | $feedBuilder->setLocale(self::$LOCALE); | 174 | $feedBuilder->setLocale(self::$LOCALE); |
174 | $data = $feedBuilder->buildData(FeedBuilder::$FEED_ATOM, $criteria); | 175 | $data = $feedBuilder->buildData(FeedBuilder::$FEED_ATOM, $criteria); |
175 | $this->assertEquals(3, count($data['links'])); | 176 | $this->assertEquals(3, count($data['links'])); |
176 | $link = $data['links'][array_keys($data['links'])[2]]; | 177 | $link = $data['links'][array_keys($data['links'])[0]]; |
177 | $this->assertEquals(41, $link['id']); | 178 | $this->assertEquals(41, $link['id']); |
178 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); | 179 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); |
179 | } | 180 | } |
@@ -195,21 +196,21 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
195 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); | 196 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); |
196 | $this->assertTrue($data['usepermalinks']); | 197 | $this->assertTrue($data['usepermalinks']); |
197 | // First link is a permalink | 198 | // First link is a permalink |
198 | $link = $data['links'][array_keys($data['links'])[2]]; | 199 | $link = $data['links'][array_keys($data['links'])[0]]; |
199 | $this->assertEquals(41, $link['id']); | 200 | $this->assertEquals(41, $link['id']); |
200 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); | 201 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); |
201 | $this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']); | 202 | $this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']); |
202 | $this->assertEquals('http://host.tld/shaare/WDWyig', $link['url']); | 203 | $this->assertEquals('http://host.tld/shaare/WDWyig', $link['url']); |
203 | $this->assertContains('Direct link', $link['description']); | 204 | $this->assertContainsPolyfill('Direct link', $link['description']); |
204 | $this->assertContains('http://host.tld/shaare/WDWyig', $link['description']); | 205 | $this->assertContainsPolyfill('http://host.tld/shaare/WDWyig', $link['description']); |
205 | // Second link is a direct link | 206 | // Second link is a direct link |
206 | $link = $data['links'][array_keys($data['links'])[3]]; | 207 | $link = $data['links'][array_keys($data['links'])[1]]; |
207 | $this->assertEquals(8, $link['id']); | 208 | $this->assertEquals(8, $link['id']); |
208 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114633'), $link['created']); | 209 | $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114633'), $link['created']); |
209 | $this->assertEquals('http://host.tld/shaare/RttfEw', $link['guid']); | 210 | $this->assertEquals('http://host.tld/shaare/RttfEw', $link['guid']); |
210 | $this->assertEquals('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['url']); | 211 | $this->assertEquals('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['url']); |
211 | $this->assertContains('Direct link', $link['description']); | 212 | $this->assertContainsPolyfill('Direct link', $link['description']); |
212 | $this->assertContains('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['description']); | 213 | $this->assertContainsPolyfill('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['description']); |
213 | } | 214 | } |
214 | 215 | ||
215 | /** | 216 | /** |
@@ -253,7 +254,7 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
253 | 'SERVER_NAME' => 'host.tld', | 254 | 'SERVER_NAME' => 'host.tld', |
254 | 'SERVER_PORT' => '8080', | 255 | 'SERVER_PORT' => '8080', |
255 | 'SCRIPT_NAME' => '/~user/shaarli/index.php', | 256 | 'SCRIPT_NAME' => '/~user/shaarli/index.php', |
256 | 'REQUEST_URI' => '/~user/shaarli/index.php?do=feed', | 257 | 'REQUEST_URI' => '/~user/shaarli/feed/atom', |
257 | ); | 258 | ); |
258 | $feedBuilder = new FeedBuilder( | 259 | $feedBuilder = new FeedBuilder( |
259 | self::$bookmarkService, | 260 | self::$bookmarkService, |
@@ -265,14 +266,14 @@ class FeedBuilderTest extends \PHPUnit\Framework\TestCase | |||
265 | $data = $feedBuilder->buildData(FeedBuilder::$FEED_ATOM, null); | 266 | $data = $feedBuilder->buildData(FeedBuilder::$FEED_ATOM, null); |
266 | 267 | ||
267 | $this->assertEquals( | 268 | $this->assertEquals( |
268 | 'http://host.tld:8080/~user/shaarli/index.php?do=feed', | 269 | 'http://host.tld:8080/~user/shaarli/feed/atom', |
269 | $data['self_link'] | 270 | $data['self_link'] |
270 | ); | 271 | ); |
271 | 272 | ||
272 | // Test first link (note link) | 273 | // Test first link (note link) |
273 | $link = $data['links'][array_keys($data['links'])[2]]; | 274 | $link = $data['links'][array_keys($data['links'])[0]]; |
274 | $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['guid']); | 275 | $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['guid']); |
275 | $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['url']); | 276 | $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['url']); |
276 | $this->assertContains('http://host.tld:8080/~user/shaarli/./add-tag/hashtag', $link['description']); | 277 | $this->assertContainsPolyfill('http://host.tld:8080/~user/shaarli/./add-tag/hashtag', $link['description']); |
277 | } | 278 | } |
278 | } | 279 | } |
diff --git a/tests/formatter/BookmarkDefaultFormatterTest.php b/tests/formatter/BookmarkDefaultFormatterTest.php index cf48b00b..9534436e 100644 --- a/tests/formatter/BookmarkDefaultFormatterTest.php +++ b/tests/formatter/BookmarkDefaultFormatterTest.php | |||
@@ -3,9 +3,9 @@ | |||
3 | namespace Shaarli\Formatter; | 3 | namespace Shaarli\Formatter; |
4 | 4 | ||
5 | use DateTime; | 5 | use DateTime; |
6 | use PHPUnit\Framework\TestCase; | ||
7 | use Shaarli\Bookmark\Bookmark; | 6 | use Shaarli\Bookmark\Bookmark; |
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
8 | use Shaarli\TestCase; | ||
9 | 9 | ||
10 | /** | 10 | /** |
11 | * Class BookmarkDefaultFormatterTest | 11 | * Class BookmarkDefaultFormatterTest |
@@ -25,7 +25,7 @@ class BookmarkDefaultFormatterTest extends TestCase | |||
25 | /** | 25 | /** |
26 | * Initialize formatter instance. | 26 | * Initialize formatter instance. |
27 | */ | 27 | */ |
28 | public function setUp() | 28 | protected function setUp(): void |
29 | { | 29 | { |
30 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); | 30 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); |
31 | $this->conf = new ConfigManager(self::$testConf); | 31 | $this->conf = new ConfigManager(self::$testConf); |
diff --git a/tests/formatter/BookmarkMarkdownExtraFormatterTest.php b/tests/formatter/BookmarkMarkdownExtraFormatterTest.php new file mode 100644 index 00000000..d4941ef3 --- /dev/null +++ b/tests/formatter/BookmarkMarkdownExtraFormatterTest.php | |||
@@ -0,0 +1,162 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Shaarli\Formatter; | ||
4 | |||
5 | use DateTime; | ||
6 | use PHPUnit\Framework\TestCase; | ||
7 | use Shaarli\Bookmark\Bookmark; | ||
8 | use Shaarli\Config\ConfigManager; | ||
9 | |||
10 | /** | ||
11 | * Class BookmarkMarkdownExtraFormatterTest | ||
12 | * @package Shaarli\Formatter | ||
13 | */ | ||
14 | class BookmarkMarkdownExtraFormatterTest extends TestCase | ||
15 | { | ||
16 | /** @var string Path of test config file */ | ||
17 | protected static $testConf = 'sandbox/config'; | ||
18 | |||
19 | /** @var BookmarkFormatter */ | ||
20 | protected $formatter; | ||
21 | |||
22 | /** @var ConfigManager instance */ | ||
23 | protected $conf; | ||
24 | |||
25 | /** | ||
26 | * Initialize formatter instance. | ||
27 | */ | ||
28 | public function setUp(): void | ||
29 | { | ||
30 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); | ||
31 | $this->conf = new ConfigManager(self::$testConf); | ||
32 | $this->formatter = new BookmarkMarkdownExtraFormatter($this->conf, true); | ||
33 | } | ||
34 | |||
35 | /** | ||
36 | * Test formatting a bookmark with all its attribute filled. | ||
37 | */ | ||
38 | public function testFormatExtra(): void | ||
39 | { | ||
40 | $bookmark = new Bookmark(); | ||
41 | $bookmark->setId($id = 11); | ||
42 | $bookmark->setShortUrl($short = 'abcdef'); | ||
43 | $bookmark->setUrl('https://sub.domain.tld?query=here&for=real#hash'); | ||
44 | $bookmark->setTitle($title = 'This is a <strong>bookmark</strong>'); | ||
45 | $bookmark->setDescription('<h2>Content</h2><p>`Here is some content</p>'); | ||
46 | $bookmark->setTags($tags = ['tag1', 'bookmark', 'other', '<script>alert("xss");</script>']); | ||
47 | $bookmark->setThumbnail('http://domain2.tdl2/?type=img&name=file.png'); | ||
48 | $bookmark->setSticky(true); | ||
49 | $bookmark->setCreated($created = DateTime::createFromFormat('Ymd_His', '20190521_190412')); | ||
50 | $bookmark->setUpdated($updated = DateTime::createFromFormat('Ymd_His', '20190521_191213')); | ||
51 | $bookmark->setPrivate(true); | ||
52 | |||
53 | $link = $this->formatter->format($bookmark); | ||
54 | $this->assertEquals($id, $link['id']); | ||
55 | $this->assertEquals($short, $link['shorturl']); | ||
56 | $this->assertEquals('https://sub.domain.tld?query=here&for=real#hash', $link['url']); | ||
57 | $this->assertEquals( | ||
58 | 'https://sub.domain.tld?query=here&for=real#hash', | ||
59 | $link['real_url'] | ||
60 | ); | ||
61 | $this->assertEquals('This is a <strong>bookmark</strong>', $link['title']); | ||
62 | $this->assertEquals( | ||
63 | '<div class="markdown"><p>'. | ||
64 | '<h2>Content</h2><p>`Here is some content</p>'. | ||
65 | '</p></div>', | ||
66 | $link['description'] | ||
67 | ); | ||
68 | $tags[3] = '<script>alert("xss");</script>'; | ||
69 | $this->assertEquals($tags, $link['taglist']); | ||
70 | $this->assertEquals(implode(' ', $tags), $link['tags']); | ||
71 | $this->assertEquals( | ||
72 | 'http://domain2.tdl2/?type=img&name=file.png', | ||
73 | $link['thumbnail'] | ||
74 | ); | ||
75 | $this->assertEquals($created, $link['created']); | ||
76 | $this->assertEquals($created->getTimestamp(), $link['timestamp']); | ||
77 | $this->assertEquals($updated, $link['updated']); | ||
78 | $this->assertEquals($updated->getTimestamp(), $link['updated_timestamp']); | ||
79 | $this->assertTrue($link['private']); | ||
80 | $this->assertTrue($link['sticky']); | ||
81 | $this->assertEquals('private', $link['class']); | ||
82 | } | ||
83 | |||
84 | /** | ||
85 | * Test formatting a bookmark with all its attribute filled. | ||
86 | */ | ||
87 | public function testFormatExtraMinimal(): void | ||
88 | { | ||
89 | $bookmark = new Bookmark(); | ||
90 | |||
91 | $link = $this->formatter->format($bookmark); | ||
92 | $this->assertEmpty($link['id']); | ||
93 | $this->assertEmpty($link['shorturl']); | ||
94 | $this->assertEmpty($link['url']); | ||
95 | $this->assertEmpty($link['real_url']); | ||
96 | $this->assertEmpty($link['title']); | ||
97 | $this->assertEmpty($link['description']); | ||
98 | $this->assertEmpty($link['taglist']); | ||
99 | $this->assertEmpty($link['tags']); | ||
100 | $this->assertEmpty($link['thumbnail']); | ||
101 | $this->assertEmpty($link['created']); | ||
102 | $this->assertEmpty($link['timestamp']); | ||
103 | $this->assertEmpty($link['updated']); | ||
104 | $this->assertEmpty($link['updated_timestamp']); | ||
105 | $this->assertFalse($link['private']); | ||
106 | $this->assertFalse($link['sticky']); | ||
107 | $this->assertEmpty($link['class']); | ||
108 | } | ||
109 | |||
110 | /** | ||
111 | * Make sure that the description is properly formatted by the default formatter. | ||
112 | */ | ||
113 | public function testFormatExtrraDescription(): void | ||
114 | { | ||
115 | $description = 'This a <strong>description</strong>'. PHP_EOL; | ||
116 | $description .= 'text https://sub.domain.tld?query=here&for=real#hash more text'. PHP_EOL; | ||
117 | $description .= 'Also, there is an #hashtag added'. PHP_EOL; | ||
118 | $description .= ' A N D KEEP SPACES ! '. PHP_EOL; | ||
119 | $description .= '# Header {.class}'. PHP_EOL; | ||
120 | |||
121 | $bookmark = new Bookmark(); | ||
122 | $bookmark->setDescription($description); | ||
123 | $link = $this->formatter->format($bookmark); | ||
124 | |||
125 | $description = '<div class="markdown"><p>'; | ||
126 | $description .= 'This a <strong>description</strong><br />'. PHP_EOL; | ||
127 | $url = 'https://sub.domain.tld?query=here&for=real#hash'; | ||
128 | $description .= 'text <a href="'. $url .'">'. $url .'</a> more text<br />'. PHP_EOL; | ||
129 | $description .= 'Also, there is an <a href="./add-tag/hashtag">#hashtag</a> added<br />'. PHP_EOL; | ||
130 | $description .= 'A N D KEEP SPACES ! </p>' . PHP_EOL; | ||
131 | $description .= '<h1 class="class">Header</h1>'; | ||
132 | $description .= '</div>'; | ||
133 | |||
134 | $this->assertEquals($description, $link['description']); | ||
135 | } | ||
136 | |||
137 | /** | ||
138 | * Test formatting URL with an index_url set | ||
139 | * It should prepend relative links. | ||
140 | */ | ||
141 | public function testFormatExtraNoteWithIndexUrl(): void | ||
142 | { | ||
143 | $bookmark = new Bookmark(); | ||
144 | $bookmark->setUrl($short = '?abcdef'); | ||
145 | $description = 'Text #hashtag more text'; | ||
146 | $bookmark->setDescription($description); | ||
147 | |||
148 | $this->formatter->addContextData('index_url', $root = 'https://domain.tld/hithere/'); | ||
149 | |||
150 | $description = '<div class="markdown"><p>'; | ||
151 | $description .= 'Text <a href="'. $root .'./add-tag/hashtag">#hashtag</a> more text'; | ||
152 | $description .= '</p></div>'; | ||
153 | |||
154 | $link = $this->formatter->format($bookmark); | ||
155 | $this->assertEquals($root . $short, $link['url']); | ||
156 | $this->assertEquals($root . $short, $link['real_url']); | ||
157 | $this->assertEquals( | ||
158 | $description, | ||
159 | $link['description'] | ||
160 | ); | ||
161 | } | ||
162 | } | ||
diff --git a/tests/formatter/BookmarkMarkdownFormatterTest.php b/tests/formatter/BookmarkMarkdownFormatterTest.php index 3e72d1ee..ab6b4080 100644 --- a/tests/formatter/BookmarkMarkdownFormatterTest.php +++ b/tests/formatter/BookmarkMarkdownFormatterTest.php | |||
@@ -3,9 +3,9 @@ | |||
3 | namespace Shaarli\Formatter; | 3 | namespace Shaarli\Formatter; |
4 | 4 | ||
5 | use DateTime; | 5 | use DateTime; |
6 | use PHPUnit\Framework\TestCase; | ||
7 | use Shaarli\Bookmark\Bookmark; | 6 | use Shaarli\Bookmark\Bookmark; |
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
8 | use Shaarli\TestCase; | ||
9 | 9 | ||
10 | /** | 10 | /** |
11 | * Class BookmarkMarkdownFormatterTest | 11 | * Class BookmarkMarkdownFormatterTest |
@@ -25,7 +25,7 @@ class BookmarkMarkdownFormatterTest extends TestCase | |||
25 | /** | 25 | /** |
26 | * Initialize formatter instance. | 26 | * Initialize formatter instance. |
27 | */ | 27 | */ |
28 | public function setUp() | 28 | protected function setUp(): void |
29 | { | 29 | { |
30 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); | 30 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); |
31 | $this->conf = new ConfigManager(self::$testConf); | 31 | $this->conf = new ConfigManager(self::$testConf); |
diff --git a/tests/formatter/BookmarkRawFormatterTest.php b/tests/formatter/BookmarkRawFormatterTest.php index 4491b035..c76bb7b9 100644 --- a/tests/formatter/BookmarkRawFormatterTest.php +++ b/tests/formatter/BookmarkRawFormatterTest.php | |||
@@ -3,9 +3,9 @@ | |||
3 | namespace Shaarli\Formatter; | 3 | namespace Shaarli\Formatter; |
4 | 4 | ||
5 | use DateTime; | 5 | use DateTime; |
6 | use PHPUnit\Framework\TestCase; | ||
7 | use Shaarli\Bookmark\Bookmark; | 6 | use Shaarli\Bookmark\Bookmark; |
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
8 | use Shaarli\TestCase; | ||
9 | 9 | ||
10 | /** | 10 | /** |
11 | * Class BookmarkRawFormatterTest | 11 | * Class BookmarkRawFormatterTest |
@@ -25,7 +25,7 @@ class BookmarkRawFormatterTest extends TestCase | |||
25 | /** | 25 | /** |
26 | * Initialize formatter instance. | 26 | * Initialize formatter instance. |
27 | */ | 27 | */ |
28 | public function setUp() | 28 | protected function setUp(): void |
29 | { | 29 | { |
30 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); | 30 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); |
31 | $this->conf = new ConfigManager(self::$testConf); | 31 | $this->conf = new ConfigManager(self::$testConf); |
diff --git a/tests/formatter/FormatterFactoryTest.php b/tests/formatter/FormatterFactoryTest.php index 5adf3ffd..ae476cb5 100644 --- a/tests/formatter/FormatterFactoryTest.php +++ b/tests/formatter/FormatterFactoryTest.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Formatter; | 3 | namespace Shaarli\Formatter; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | ||
6 | use Shaarli\Config\ConfigManager; | 5 | use Shaarli\Config\ConfigManager; |
6 | use Shaarli\TestCase; | ||
7 | 7 | ||
8 | /** | 8 | /** |
9 | * Class FormatterFactoryTest | 9 | * Class FormatterFactoryTest |
@@ -24,7 +24,7 @@ class FormatterFactoryTest extends TestCase | |||
24 | /** | 24 | /** |
25 | * Initialize FormatterFactory instance | 25 | * Initialize FormatterFactory instance |
26 | */ | 26 | */ |
27 | public function setUp() | 27 | protected function setUp(): void |
28 | { | 28 | { |
29 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); | 29 | copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php'); |
30 | $this->conf = new ConfigManager(self::$testConf); | 30 | $this->conf = new ConfigManager(self::$testConf); |
diff --git a/tests/front/ShaarliAdminMiddlewareTest.php b/tests/front/ShaarliAdminMiddlewareTest.php index 7451330b..44025f11 100644 --- a/tests/front/ShaarliAdminMiddlewareTest.php +++ b/tests/front/ShaarliAdminMiddlewareTest.php | |||
@@ -4,10 +4,10 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front; | 5 | namespace Shaarli\Front; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Container\ShaarliContainer; | 8 | use Shaarli\Container\ShaarliContainer; |
10 | use Shaarli\Security\LoginManager; | 9 | use Shaarli\Security\LoginManager; |
10 | use Shaarli\TestCase; | ||
11 | use Shaarli\Updater\Updater; | 11 | use Shaarli\Updater\Updater; |
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
diff --git a/tests/front/ShaarliMiddlewareTest.php b/tests/front/ShaarliMiddlewareTest.php index 05aa34a9..655c5bba 100644 --- a/tests/front/ShaarliMiddlewareTest.php +++ b/tests/front/ShaarliMiddlewareTest.php | |||
@@ -4,7 +4,6 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front; | 5 | namespace Shaarli\Front; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Container\ShaarliContainer; | 8 | use Shaarli\Container\ShaarliContainer; |
10 | use Shaarli\Front\Exception\LoginBannedException; | 9 | use Shaarli\Front\Exception\LoginBannedException; |
@@ -12,6 +11,7 @@ use Shaarli\Front\Exception\UnauthorizedException; | |||
12 | use Shaarli\Render\PageBuilder; | 11 | use Shaarli\Render\PageBuilder; |
13 | use Shaarli\Render\PageCacheManager; | 12 | use Shaarli\Render\PageCacheManager; |
14 | use Shaarli\Security\LoginManager; | 13 | use Shaarli\Security\LoginManager; |
14 | use Shaarli\TestCase; | ||
15 | use Shaarli\Updater\Updater; | 15 | use Shaarli\Updater\Updater; |
16 | use Slim\Http\Request; | 16 | use Slim\Http\Request; |
17 | use Slim\Http\Response; | 17 | use Slim\Http\Response; |
diff --git a/tests/front/controller/admin/ConfigureControllerTest.php b/tests/front/controller/admin/ConfigureControllerTest.php index f2f84bac..d82db0a7 100644 --- a/tests/front/controller/admin/ConfigureControllerTest.php +++ b/tests/front/controller/admin/ConfigureControllerTest.php | |||
@@ -4,10 +4,10 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Front\Exception\WrongTokenException; | 8 | use Shaarli\Front\Exception\WrongTokenException; |
10 | use Shaarli\Security\SessionManager; | 9 | use Shaarli\Security\SessionManager; |
10 | use Shaarli\TestCase; | ||
11 | use Shaarli\Thumbnailer; | 11 | use Shaarli\Thumbnailer; |
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
@@ -51,7 +51,7 @@ class ConfigureControllerTest extends TestCase | |||
51 | static::assertSame('general.title', $assignedVariables['title']); | 51 | static::assertSame('general.title', $assignedVariables['title']); |
52 | static::assertSame('resource.theme', $assignedVariables['theme']); | 52 | static::assertSame('resource.theme', $assignedVariables['theme']); |
53 | static::assertEmpty($assignedVariables['theme_available']); | 53 | static::assertEmpty($assignedVariables['theme_available']); |
54 | static::assertSame(['default', 'markdown'], $assignedVariables['formatter_available']); | 54 | static::assertSame(['default', 'markdown', 'markdownExtra'], $assignedVariables['formatter_available']); |
55 | static::assertNotEmpty($assignedVariables['continents']); | 55 | static::assertNotEmpty($assignedVariables['continents']); |
56 | static::assertNotEmpty($assignedVariables['cities']); | 56 | static::assertNotEmpty($assignedVariables['cities']); |
57 | static::assertSame('general.retrieve_description', $assignedVariables['retrieve_description']); | 57 | static::assertSame('general.retrieve_description', $assignedVariables['retrieve_description']); |
@@ -62,7 +62,7 @@ class ConfigureControllerTest extends TestCase | |||
62 | static::assertSame('privacy.hide_public_links', $assignedVariables['hide_public_links']); | 62 | static::assertSame('privacy.hide_public_links', $assignedVariables['hide_public_links']); |
63 | static::assertSame('api.enabled', $assignedVariables['api_enabled']); | 63 | static::assertSame('api.enabled', $assignedVariables['api_enabled']); |
64 | static::assertSame('api.secret', $assignedVariables['api_secret']); | 64 | static::assertSame('api.secret', $assignedVariables['api_secret']); |
65 | static::assertCount(4, $assignedVariables['languages']); | 65 | static::assertCount(5, $assignedVariables['languages']); |
66 | static::assertArrayHasKey('gd_enabled', $assignedVariables); | 66 | static::assertArrayHasKey('gd_enabled', $assignedVariables); |
67 | static::assertSame('thumbnails.mode', $assignedVariables['thumbnails_mode']); | 67 | static::assertSame('thumbnails.mode', $assignedVariables['thumbnails_mode']); |
68 | } | 68 | } |
diff --git a/tests/front/controller/admin/ExportControllerTest.php b/tests/front/controller/admin/ExportControllerTest.php index 50d9e378..0e6f2762 100644 --- a/tests/front/controller/admin/ExportControllerTest.php +++ b/tests/front/controller/admin/ExportControllerTest.php | |||
@@ -4,12 +4,12 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Formatter\BookmarkFormatter; | 8 | use Shaarli\Formatter\BookmarkFormatter; |
10 | use Shaarli\Formatter\BookmarkRawFormatter; | 9 | use Shaarli\Formatter\BookmarkRawFormatter; |
11 | use Shaarli\Netscape\NetscapeBookmarkUtils; | 10 | use Shaarli\Netscape\NetscapeBookmarkUtils; |
12 | use Shaarli\Security\SessionManager; | 11 | use Shaarli\Security\SessionManager; |
12 | use Shaarli\TestCase; | ||
13 | use Slim\Http\Request; | 13 | use Slim\Http\Request; |
14 | use Slim\Http\Response; | 14 | use Slim\Http\Response; |
15 | 15 | ||
@@ -84,7 +84,7 @@ class ExportControllerTest extends TestCase | |||
84 | static::assertInstanceOf(BookmarkRawFormatter::class, $formatter); | 84 | static::assertInstanceOf(BookmarkRawFormatter::class, $formatter); |
85 | static::assertSame($parameters['selection'], $selection); | 85 | static::assertSame($parameters['selection'], $selection); |
86 | static::assertTrue($prependNoteUrl); | 86 | static::assertTrue($prependNoteUrl); |
87 | static::assertSame('http://shaarli', $indexUrl); | 87 | static::assertSame('http://shaarli/subfolder/', $indexUrl); |
88 | 88 | ||
89 | return $bookmarks; | 89 | return $bookmarks; |
90 | } | 90 | } |
diff --git a/tests/front/controller/admin/ImportControllerTest.php b/tests/front/controller/admin/ImportControllerTest.php index eb31fad0..c266caa5 100644 --- a/tests/front/controller/admin/ImportControllerTest.php +++ b/tests/front/controller/admin/ImportControllerTest.php | |||
@@ -4,10 +4,10 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Psr\Http\Message\UploadedFileInterface; | 7 | use Psr\Http\Message\UploadedFileInterface; |
9 | use Shaarli\Netscape\NetscapeBookmarkUtils; | 8 | use Shaarli\Netscape\NetscapeBookmarkUtils; |
10 | use Shaarli\Security\SessionManager; | 9 | use Shaarli\Security\SessionManager; |
10 | use Shaarli\TestCase; | ||
11 | use Slim\Http\Request; | 11 | use Slim\Http\Request; |
12 | use Slim\Http\Response; | 12 | use Slim\Http\Response; |
13 | use Slim\Http\UploadedFile; | 13 | use Slim\Http\UploadedFile; |
diff --git a/tests/front/controller/admin/LogoutControllerTest.php b/tests/front/controller/admin/LogoutControllerTest.php index 45e84dc0..94e53019 100644 --- a/tests/front/controller/admin/LogoutControllerTest.php +++ b/tests/front/controller/admin/LogoutControllerTest.php | |||
@@ -4,10 +4,9 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Security\CookieManager; | 7 | use Shaarli\Security\CookieManager; |
9 | use Shaarli\Security\LoginManager; | ||
10 | use Shaarli\Security\SessionManager; | 8 | use Shaarli\Security\SessionManager; |
9 | use Shaarli\TestCase; | ||
11 | use Slim\Http\Request; | 10 | use Slim\Http\Request; |
12 | use Slim\Http\Response; | 11 | use Slim\Http\Response; |
13 | 12 | ||
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php b/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php index 7d5b752a..0f27ec2f 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php | |||
@@ -4,10 +4,10 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; | 5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | 7 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; |
9 | use Shaarli\Front\Controller\Admin\ManageShaareController; | 8 | use Shaarli\Front\Controller\Admin\ManageShaareController; |
10 | use Shaarli\Http\HttpAccess; | 9 | use Shaarli\Http\HttpAccess; |
10 | use Shaarli\TestCase; | ||
11 | use Slim\Http\Request; | 11 | use Slim\Http\Request; |
12 | use Slim\Http\Response; | 12 | use Slim\Http\Response; |
13 | 13 | ||
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php index 5a615791..096d0774 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php | |||
@@ -4,7 +4,6 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; | 5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; | 8 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; |
10 | use Shaarli\Formatter\BookmarkFormatter; | 9 | use Shaarli\Formatter\BookmarkFormatter; |
@@ -14,6 +13,7 @@ use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | |||
14 | use Shaarli\Front\Controller\Admin\ManageShaareController; | 13 | use Shaarli\Front\Controller\Admin\ManageShaareController; |
15 | use Shaarli\Http\HttpAccess; | 14 | use Shaarli\Http\HttpAccess; |
16 | use Shaarli\Security\SessionManager; | 15 | use Shaarli\Security\SessionManager; |
16 | use Shaarli\TestCase; | ||
17 | use Slim\Http\Request; | 17 | use Slim\Http\Request; |
18 | use Slim\Http\Response; | 18 | use Slim\Http\Response; |
19 | 19 | ||
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php index dee622bb..ba774e21 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php | |||
@@ -4,7 +4,6 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; | 5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; | 8 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; |
10 | use Shaarli\Formatter\BookmarkFormatter; | 9 | use Shaarli\Formatter\BookmarkFormatter; |
@@ -13,6 +12,7 @@ use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | |||
13 | use Shaarli\Front\Controller\Admin\ManageShaareController; | 12 | use Shaarli\Front\Controller\Admin\ManageShaareController; |
14 | use Shaarli\Http\HttpAccess; | 13 | use Shaarli\Http\HttpAccess; |
15 | use Shaarli\Security\SessionManager; | 14 | use Shaarli\Security\SessionManager; |
15 | use Shaarli\TestCase; | ||
16 | use Slim\Http\Request; | 16 | use Slim\Http\Request; |
17 | use Slim\Http\Response; | 17 | use Slim\Http\Response; |
18 | 18 | ||
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php b/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php index 777583d5..2eb95251 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php | |||
@@ -4,12 +4,12 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; | 5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Config\ConfigManager; | 8 | use Shaarli\Config\ConfigManager; |
10 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | 9 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; |
11 | use Shaarli\Front\Controller\Admin\ManageShaareController; | 10 | use Shaarli\Front\Controller\Admin\ManageShaareController; |
12 | use Shaarli\Http\HttpAccess; | 11 | use Shaarli\Http\HttpAccess; |
12 | use Shaarli\TestCase; | ||
13 | use Slim\Http\Request; | 13 | use Slim\Http\Request; |
14 | use Slim\Http\Response; | 14 | use Slim\Http\Response; |
15 | 15 | ||
@@ -96,12 +96,14 @@ class DisplayCreateFormTest extends TestCase | |||
96 | 96 | ||
97 | // Make sure that PluginManager hook is triggered | 97 | // Make sure that PluginManager hook is triggered |
98 | $this->container->pluginManager | 98 | $this->container->pluginManager |
99 | ->expects(static::at(0)) | 99 | ->expects(static::atLeastOnce()) |
100 | ->method('executeHooks') | 100 | ->method('executeHooks') |
101 | ->withConsecutive(['render_editlink'], ['render_includes']) | ||
101 | ->willReturnCallback(function (string $hook, array $data) use ($remoteTitle, $remoteDesc): array { | 102 | ->willReturnCallback(function (string $hook, array $data) use ($remoteTitle, $remoteDesc): array { |
102 | static::assertSame('render_editlink', $hook); | 103 | if ('render_editlink' === $hook) { |
103 | static::assertSame($remoteTitle, $data['link']['title']); | 104 | static::assertSame($remoteTitle, $data['link']['title']); |
104 | static::assertSame($remoteDesc, $data['link']['description']); | 105 | static::assertSame($remoteDesc, $data['link']['description']); |
106 | } | ||
105 | 107 | ||
106 | return $data; | 108 | return $data; |
107 | }) | 109 | }) |
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php b/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php index 1a1cdcf3..2dc3f41c 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php | |||
@@ -4,13 +4,13 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; | 5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; | 8 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; |
10 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | 9 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; |
11 | use Shaarli\Front\Controller\Admin\ManageShaareController; | 10 | use Shaarli\Front\Controller\Admin\ManageShaareController; |
12 | use Shaarli\Http\HttpAccess; | 11 | use Shaarli\Http\HttpAccess; |
13 | use Shaarli\Security\SessionManager; | 12 | use Shaarli\Security\SessionManager; |
13 | use Shaarli\TestCase; | ||
14 | use Slim\Http\Request; | 14 | use Slim\Http\Request; |
15 | use Slim\Http\Response; | 15 | use Slim\Http\Response; |
16 | 16 | ||
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php index 1607b475..50ce7df1 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php | |||
@@ -4,13 +4,13 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; | 5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; | 8 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; |
10 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | 9 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; |
11 | use Shaarli\Front\Controller\Admin\ManageShaareController; | 10 | use Shaarli\Front\Controller\Admin\ManageShaareController; |
12 | use Shaarli\Http\HttpAccess; | 11 | use Shaarli\Http\HttpAccess; |
13 | use Shaarli\Security\SessionManager; | 12 | use Shaarli\Security\SessionManager; |
13 | use Shaarli\TestCase; | ||
14 | use Slim\Http\Request; | 14 | use Slim\Http\Request; |
15 | use Slim\Http\Response; | 15 | use Slim\Http\Response; |
16 | 16 | ||
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php index dabcd60d..f7a68226 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php | |||
@@ -4,7 +4,6 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; | 5 | namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Config\ConfigManager; | 8 | use Shaarli\Config\ConfigManager; |
10 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | 9 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; |
@@ -12,6 +11,7 @@ use Shaarli\Front\Controller\Admin\ManageShaareController; | |||
12 | use Shaarli\Front\Exception\WrongTokenException; | 11 | use Shaarli\Front\Exception\WrongTokenException; |
13 | use Shaarli\Http\HttpAccess; | 12 | use Shaarli\Http\HttpAccess; |
14 | use Shaarli\Security\SessionManager; | 13 | use Shaarli\Security\SessionManager; |
14 | use Shaarli\TestCase; | ||
15 | use Shaarli\Thumbnailer; | 15 | use Shaarli\Thumbnailer; |
16 | use Slim\Http\Request; | 16 | use Slim\Http\Request; |
17 | use Slim\Http\Response; | 17 | use Slim\Http\Response; |
@@ -43,7 +43,7 @@ class SaveBookmarkTest extends TestCase | |||
43 | 'lf_description' => 'Provided description.', | 43 | 'lf_description' => 'Provided description.', |
44 | 'lf_tags' => 'abc def', | 44 | 'lf_tags' => 'abc def', |
45 | 'lf_private' => '1', | 45 | 'lf_private' => '1', |
46 | 'returnurl' => 'http://shaarli.tld/subfolder/admin/add-shaare' | 46 | 'returnurl' => 'http://shaarli/subfolder/admin/add-shaare' |
47 | ]; | 47 | ]; |
48 | 48 | ||
49 | $request = $this->createMock(Request::class); | 49 | $request = $this->createMock(Request::class); |
@@ -88,17 +88,18 @@ class SaveBookmarkTest extends TestCase | |||
88 | 88 | ||
89 | // Make sure that PluginManager hook is triggered | 89 | // Make sure that PluginManager hook is triggered |
90 | $this->container->pluginManager | 90 | $this->container->pluginManager |
91 | ->expects(static::at(0)) | 91 | ->expects(static::atLeastOnce()) |
92 | ->method('executeHooks') | 92 | ->method('executeHooks') |
93 | ->withConsecutive(['save_link']) | ||
93 | ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array { | 94 | ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array { |
94 | static::assertSame('save_link', $hook); | 95 | if ('save_link' === $hook) { |
95 | 96 | static::assertSame($id, $data['id']); | |
96 | static::assertSame($id, $data['id']); | 97 | static::assertSame($parameters['lf_url'], $data['url']); |
97 | static::assertSame($parameters['lf_url'], $data['url']); | 98 | static::assertSame($parameters['lf_title'], $data['title']); |
98 | static::assertSame($parameters['lf_title'], $data['title']); | 99 | static::assertSame($parameters['lf_description'], $data['description']); |
99 | static::assertSame($parameters['lf_description'], $data['description']); | 100 | static::assertSame($parameters['lf_tags'], $data['tags']); |
100 | static::assertSame($parameters['lf_tags'], $data['tags']); | 101 | static::assertTrue($data['private']); |
101 | static::assertTrue($data['private']); | 102 | } |
102 | 103 | ||
103 | return $data; | 104 | return $data; |
104 | }) | 105 | }) |
@@ -124,7 +125,7 @@ class SaveBookmarkTest extends TestCase | |||
124 | 'lf_description' => 'Provided description.', | 125 | 'lf_description' => 'Provided description.', |
125 | 'lf_tags' => 'abc def', | 126 | 'lf_tags' => 'abc def', |
126 | 'lf_private' => '1', | 127 | 'lf_private' => '1', |
127 | 'returnurl' => 'http://shaarli.tld/subfolder/?page=2' | 128 | 'returnurl' => 'http://shaarli/subfolder/?page=2' |
128 | ]; | 129 | ]; |
129 | 130 | ||
130 | $request = $this->createMock(Request::class); | 131 | $request = $this->createMock(Request::class); |
@@ -174,17 +175,18 @@ class SaveBookmarkTest extends TestCase | |||
174 | 175 | ||
175 | // Make sure that PluginManager hook is triggered | 176 | // Make sure that PluginManager hook is triggered |
176 | $this->container->pluginManager | 177 | $this->container->pluginManager |
177 | ->expects(static::at(0)) | 178 | ->expects(static::atLeastOnce()) |
178 | ->method('executeHooks') | 179 | ->method('executeHooks') |
180 | ->withConsecutive(['save_link']) | ||
179 | ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array { | 181 | ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array { |
180 | static::assertSame('save_link', $hook); | 182 | if ('save_link' === $hook) { |
181 | 183 | static::assertSame($id, $data['id']); | |
182 | static::assertSame($id, $data['id']); | 184 | static::assertSame($parameters['lf_url'], $data['url']); |
183 | static::assertSame($parameters['lf_url'], $data['url']); | 185 | static::assertSame($parameters['lf_title'], $data['title']); |
184 | static::assertSame($parameters['lf_title'], $data['title']); | 186 | static::assertSame($parameters['lf_description'], $data['description']); |
185 | static::assertSame($parameters['lf_description'], $data['description']); | 187 | static::assertSame($parameters['lf_tags'], $data['tags']); |
186 | static::assertSame($parameters['lf_tags'], $data['tags']); | 188 | static::assertTrue($data['private']); |
187 | static::assertTrue($data['private']); | 189 | } |
188 | 190 | ||
189 | return $data; | 191 | return $data; |
190 | }) | 192 | }) |
@@ -239,6 +241,30 @@ class SaveBookmarkTest extends TestCase | |||
239 | } | 241 | } |
240 | 242 | ||
241 | /** | 243 | /** |
244 | * Test save a bookmark - with ID #0 | ||
245 | */ | ||
246 | public function testSaveBookmarkWithIdZero(): void | ||
247 | { | ||
248 | $parameters = ['lf_id' => '0']; | ||
249 | |||
250 | $request = $this->createMock(Request::class); | ||
251 | $request | ||
252 | ->method('getParam') | ||
253 | ->willReturnCallback(function (string $key) use ($parameters): ?string { | ||
254 | return $parameters[$key] ?? null; | ||
255 | }) | ||
256 | ; | ||
257 | $response = new Response(); | ||
258 | |||
259 | $this->container->bookmarkService->expects(static::once())->method('exists')->with(0)->willReturn(true); | ||
260 | $this->container->bookmarkService->expects(static::once())->method('get')->with(0)->willReturn(new Bookmark()); | ||
261 | |||
262 | $result = $this->controller->save($request, $response); | ||
263 | |||
264 | static::assertSame(302, $result->getStatusCode()); | ||
265 | } | ||
266 | |||
267 | /** | ||
242 | * Change the password with a wrong existing password | 268 | * Change the password with a wrong existing password |
243 | */ | 269 | */ |
244 | public function testSaveBookmarkFromBookmarklet(): void | 270 | public function testSaveBookmarkFromBookmarklet(): void |
diff --git a/tests/front/controller/admin/ManageTagControllerTest.php b/tests/front/controller/admin/ManageTagControllerTest.php index 09ba0b4b..8a0ff7a9 100644 --- a/tests/front/controller/admin/ManageTagControllerTest.php +++ b/tests/front/controller/admin/ManageTagControllerTest.php | |||
@@ -4,11 +4,11 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\BookmarkFilter; | 8 | use Shaarli\Bookmark\BookmarkFilter; |
10 | use Shaarli\Front\Exception\WrongTokenException; | 9 | use Shaarli\Front\Exception\WrongTokenException; |
11 | use Shaarli\Security\SessionManager; | 10 | use Shaarli\Security\SessionManager; |
11 | use Shaarli\TestCase; | ||
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
14 | 14 | ||
diff --git a/tests/front/controller/admin/PasswordControllerTest.php b/tests/front/controller/admin/PasswordControllerTest.php index 9a01089e..58f47b49 100644 --- a/tests/front/controller/admin/PasswordControllerTest.php +++ b/tests/front/controller/admin/PasswordControllerTest.php | |||
@@ -4,11 +4,11 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Front\Exception\OpenShaarliPasswordException; | 8 | use Shaarli\Front\Exception\OpenShaarliPasswordException; |
10 | use Shaarli\Front\Exception\WrongTokenException; | 9 | use Shaarli\Front\Exception\WrongTokenException; |
11 | use Shaarli\Security\SessionManager; | 10 | use Shaarli\Security\SessionManager; |
11 | use Shaarli\TestCase; | ||
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
14 | 14 | ||
diff --git a/tests/front/controller/admin/PluginsControllerTest.php b/tests/front/controller/admin/PluginsControllerTest.php index 5b59285c..974d614d 100644 --- a/tests/front/controller/admin/PluginsControllerTest.php +++ b/tests/front/controller/admin/PluginsControllerTest.php | |||
@@ -4,11 +4,11 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Front\Exception\WrongTokenException; | 8 | use Shaarli\Front\Exception\WrongTokenException; |
10 | use Shaarli\Plugin\PluginManager; | 9 | use Shaarli\Plugin\PluginManager; |
11 | use Shaarli\Security\SessionManager; | 10 | use Shaarli\Security\SessionManager; |
11 | use Shaarli\TestCase; | ||
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
14 | 14 | ||
@@ -32,7 +32,7 @@ class PluginsControllerTest extends TestCase | |||
32 | array_map(function (string $plugin) use ($path) { touch($path . '/' . $plugin); }, static::PLUGIN_NAMES); | 32 | array_map(function (string $plugin) use ($path) { touch($path . '/' . $plugin); }, static::PLUGIN_NAMES); |
33 | } | 33 | } |
34 | 34 | ||
35 | public function tearDown() | 35 | public function tearDown(): void |
36 | { | 36 | { |
37 | $path = __DIR__ . '/folder'; | 37 | $path = __DIR__ . '/folder'; |
38 | array_map(function (string $plugin) use ($path) { unlink($path . '/' . $plugin); }, static::PLUGIN_NAMES); | 38 | array_map(function (string $plugin) use ($path) { unlink($path . '/' . $plugin); }, static::PLUGIN_NAMES); |
@@ -125,6 +125,7 @@ class PluginsControllerTest extends TestCase | |||
125 | 'parameters_form' => true, | 125 | 'parameters_form' => true, |
126 | 'parameter1' => 'blip', | 126 | 'parameter1' => 'blip', |
127 | 'parameter2' => 'blop', | 127 | 'parameter2' => 'blop', |
128 | 'token' => 'this parameter should not be saved' | ||
128 | ]; | 129 | ]; |
129 | 130 | ||
130 | $request = $this->createMock(Request::class); | 131 | $request = $this->createMock(Request::class); |
@@ -143,7 +144,7 @@ class PluginsControllerTest extends TestCase | |||
143 | ->with('save_plugin_parameters', $parameters) | 144 | ->with('save_plugin_parameters', $parameters) |
144 | ; | 145 | ; |
145 | $this->container->conf | 146 | $this->container->conf |
146 | ->expects(static::atLeastOnce()) | 147 | ->expects(static::exactly(2)) |
147 | ->method('set') | 148 | ->method('set') |
148 | ->withConsecutive(['plugins.parameter1', 'blip'], ['plugins.parameter2', 'blop']) | 149 | ->withConsecutive(['plugins.parameter1', 'blip'], ['plugins.parameter2', 'blop']) |
149 | ; | 150 | ; |
diff --git a/tests/front/controller/admin/SessionFilterControllerTest.php b/tests/front/controller/admin/SessionFilterControllerTest.php index d306c6e9..712a625b 100644 --- a/tests/front/controller/admin/SessionFilterControllerTest.php +++ b/tests/front/controller/admin/SessionFilterControllerTest.php | |||
@@ -4,9 +4,9 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Security\LoginManager; | 7 | use Shaarli\Security\LoginManager; |
9 | use Shaarli\Security\SessionManager; | 8 | use Shaarli\Security\SessionManager; |
9 | use Shaarli\TestCase; | ||
10 | use Slim\Http\Request; | 10 | use Slim\Http\Request; |
11 | use Slim\Http\Response; | 11 | use Slim\Http\Response; |
12 | 12 | ||
@@ -31,7 +31,7 @@ class SessionFilterControllerTest extends TestCase | |||
31 | { | 31 | { |
32 | $arg = ['visibility' => 'private']; | 32 | $arg = ['visibility' => 'private']; |
33 | 33 | ||
34 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 34 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller/?searchtag=abc'; |
35 | 35 | ||
36 | $this->container->loginManager->method('isLoggedIn')->willReturn(true); | 36 | $this->container->loginManager->method('isLoggedIn')->willReturn(true); |
37 | $this->container->sessionManager | 37 | $this->container->sessionManager |
@@ -57,7 +57,7 @@ class SessionFilterControllerTest extends TestCase | |||
57 | { | 57 | { |
58 | $arg = ['visibility' => 'private']; | 58 | $arg = ['visibility' => 'private']; |
59 | 59 | ||
60 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 60 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller/?searchtag=abc'; |
61 | 61 | ||
62 | $this->container->loginManager->method('isLoggedIn')->willReturn(true); | 62 | $this->container->loginManager->method('isLoggedIn')->willReturn(true); |
63 | $this->container->sessionManager | 63 | $this->container->sessionManager |
@@ -121,7 +121,7 @@ class SessionFilterControllerTest extends TestCase | |||
121 | { | 121 | { |
122 | $arg = ['visibility' => 'test']; | 122 | $arg = ['visibility' => 'test']; |
123 | 123 | ||
124 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 124 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller/?searchtag=abc'; |
125 | 125 | ||
126 | $this->container->loginManager->method('isLoggedIn')->willReturn(true); | 126 | $this->container->loginManager->method('isLoggedIn')->willReturn(true); |
127 | $this->container->sessionManager | 127 | $this->container->sessionManager |
@@ -151,7 +151,7 @@ class SessionFilterControllerTest extends TestCase | |||
151 | { | 151 | { |
152 | $arg = ['visibility' => 'test']; | 152 | $arg = ['visibility' => 'test']; |
153 | 153 | ||
154 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 154 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller/?searchtag=abc'; |
155 | 155 | ||
156 | $this->container->loginManager = $this->createMock(LoginManager::class); | 156 | $this->container->loginManager = $this->createMock(LoginManager::class); |
157 | $this->container->loginManager->method('isLoggedIn')->willReturn(false); | 157 | $this->container->loginManager->method('isLoggedIn')->willReturn(false); |
diff --git a/tests/front/controller/admin/ShaarliAdminControllerTest.php b/tests/front/controller/admin/ShaarliAdminControllerTest.php index fff427cb..486d5d2d 100644 --- a/tests/front/controller/admin/ShaarliAdminControllerTest.php +++ b/tests/front/controller/admin/ShaarliAdminControllerTest.php | |||
@@ -4,9 +4,9 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Front\Exception\WrongTokenException; | 7 | use Shaarli\Front\Exception\WrongTokenException; |
9 | use Shaarli\Security\SessionManager; | 8 | use Shaarli\Security\SessionManager; |
9 | use Shaarli\TestCase; | ||
10 | use Slim\Http\Request; | 10 | use Slim\Http\Request; |
11 | 11 | ||
12 | /** | 12 | /** |
diff --git a/tests/front/controller/admin/ThumbnailsControllerTest.php b/tests/front/controller/admin/ThumbnailsControllerTest.php index 0c0c8a83..f4a8acff 100644 --- a/tests/front/controller/admin/ThumbnailsControllerTest.php +++ b/tests/front/controller/admin/ThumbnailsControllerTest.php | |||
@@ -4,9 +4,9 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; | 8 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; |
9 | use Shaarli\TestCase; | ||
10 | use Shaarli\Thumbnailer; | 10 | use Shaarli\Thumbnailer; |
11 | use Slim\Http\Request; | 11 | use Slim\Http\Request; |
12 | use Slim\Http\Response; | 12 | use Slim\Http\Response; |
diff --git a/tests/front/controller/admin/TokenControllerTest.php b/tests/front/controller/admin/TokenControllerTest.php index 04b0c0fa..d2f0907f 100644 --- a/tests/front/controller/admin/TokenControllerTest.php +++ b/tests/front/controller/admin/TokenControllerTest.php | |||
@@ -4,7 +4,7 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | 7 | use Shaarli\TestCase; |
8 | use Slim\Http\Request; | 8 | use Slim\Http\Request; |
9 | use Slim\Http\Response; | 9 | use Slim\Http\Response; |
10 | 10 | ||
diff --git a/tests/front/controller/admin/ToolsControllerTest.php b/tests/front/controller/admin/ToolsControllerTest.php index fc756f0f..e82f8b14 100644 --- a/tests/front/controller/admin/ToolsControllerTest.php +++ b/tests/front/controller/admin/ToolsControllerTest.php | |||
@@ -4,11 +4,11 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | 5 | namespace Shaarli\Front\Controller\Admin; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | 7 | use Shaarli\TestCase; |
8 | use Slim\Http\Request; | 8 | use Slim\Http\Request; |
9 | use Slim\Http\Response; | 9 | use Slim\Http\Response; |
10 | 10 | ||
11 | class ToolsControllerTestControllerTest extends TestCase | 11 | class ToolsControllerTest extends TestCase |
12 | { | 12 | { |
13 | use FrontAdminControllerMockHelper; | 13 | use FrontAdminControllerMockHelper; |
14 | 14 | ||
@@ -41,7 +41,7 @@ class ToolsControllerTestControllerTest extends TestCase | |||
41 | 41 | ||
42 | static::assertSame(200, $result->getStatusCode()); | 42 | static::assertSame(200, $result->getStatusCode()); |
43 | static::assertSame('tools', (string) $result->getBody()); | 43 | static::assertSame('tools', (string) $result->getBody()); |
44 | static::assertSame('https://shaarli', $assignedVariables['pageabsaddr']); | 44 | static::assertSame('https://shaarli/', $assignedVariables['pageabsaddr']); |
45 | static::assertTrue($assignedVariables['sslenabled']); | 45 | static::assertTrue($assignedVariables['sslenabled']); |
46 | } | 46 | } |
47 | 47 | ||
@@ -63,7 +63,7 @@ class ToolsControllerTestControllerTest extends TestCase | |||
63 | 63 | ||
64 | static::assertSame(200, $result->getStatusCode()); | 64 | static::assertSame(200, $result->getStatusCode()); |
65 | static::assertSame('tools', (string) $result->getBody()); | 65 | static::assertSame('tools', (string) $result->getBody()); |
66 | static::assertSame('http://shaarli', $assignedVariables['pageabsaddr']); | 66 | static::assertSame('http://shaarli/', $assignedVariables['pageabsaddr']); |
67 | static::assertFalse($assignedVariables['sslenabled']); | 67 | static::assertFalse($assignedVariables['sslenabled']); |
68 | } | 68 | } |
69 | } | 69 | } |
diff --git a/tests/front/controller/visitor/BookmarkListControllerTest.php b/tests/front/controller/visitor/BookmarkListControllerTest.php index 5daaa2c4..0c95df97 100644 --- a/tests/front/controller/visitor/BookmarkListControllerTest.php +++ b/tests/front/controller/visitor/BookmarkListControllerTest.php | |||
@@ -4,11 +4,11 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; | 8 | use Shaarli\Bookmark\Exception\BookmarkNotFoundException; |
10 | use Shaarli\Config\ConfigManager; | 9 | use Shaarli\Config\ConfigManager; |
11 | use Shaarli\Security\LoginManager; | 10 | use Shaarli\Security\LoginManager; |
11 | use Shaarli\TestCase; | ||
12 | use Shaarli\Thumbnailer; | 12 | use Shaarli\Thumbnailer; |
13 | use Slim\Http\Request; | 13 | use Slim\Http\Request; |
14 | use Slim\Http\Response; | 14 | use Slim\Http\Response; |
diff --git a/tests/front/controller/visitor/DailyControllerTest.php b/tests/front/controller/visitor/DailyControllerTest.php index b802c62c..fc78bc13 100644 --- a/tests/front/controller/visitor/DailyControllerTest.php +++ b/tests/front/controller/visitor/DailyControllerTest.php | |||
@@ -4,9 +4,9 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Feed\CachedPage; | 8 | use Shaarli\Feed\CachedPage; |
9 | use Shaarli\TestCase; | ||
10 | use Slim\Http\Request; | 10 | use Slim\Http\Request; |
11 | use Slim\Http\Response; | 11 | use Slim\Http\Response; |
12 | 12 | ||
@@ -78,19 +78,20 @@ class DailyControllerTest extends TestCase | |||
78 | 78 | ||
79 | // Make sure that PluginManager hook is triggered | 79 | // Make sure that PluginManager hook is triggered |
80 | $this->container->pluginManager | 80 | $this->container->pluginManager |
81 | ->expects(static::at(0)) | 81 | ->expects(static::atLeastOnce()) |
82 | ->method('executeHooks') | 82 | ->method('executeHooks') |
83 | ->withConsecutive(['render_daily']) | ||
83 | ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array { | 84 | ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array { |
84 | static::assertSame('render_daily', $hook); | 85 | if ('render_daily' === $hook) { |
86 | static::assertArrayHasKey('linksToDisplay', $data); | ||
87 | static::assertCount(3, $data['linksToDisplay']); | ||
88 | static::assertSame(1, $data['linksToDisplay'][0]['id']); | ||
89 | static::assertSame($currentDay->getTimestamp(), $data['day']); | ||
90 | static::assertSame('20200510', $data['previousday']); | ||
91 | static::assertSame('20200516', $data['nextday']); | ||
85 | 92 | ||
86 | static::assertArrayHasKey('linksToDisplay', $data); | 93 | static::assertArrayHasKey('loggedin', $param); |
87 | static::assertCount(3, $data['linksToDisplay']); | 94 | } |
88 | static::assertSame(1, $data['linksToDisplay'][0]['id']); | ||
89 | static::assertSame($currentDay->getTimestamp(), $data['day']); | ||
90 | static::assertSame('20200510', $data['previousday']); | ||
91 | static::assertSame('20200516', $data['nextday']); | ||
92 | |||
93 | static::assertArrayHasKey('loggedin', $param); | ||
94 | 95 | ||
95 | return $data; | 96 | return $data; |
96 | }) | 97 | }) |
@@ -203,19 +204,20 @@ class DailyControllerTest extends TestCase | |||
203 | 204 | ||
204 | // Make sure that PluginManager hook is triggered | 205 | // Make sure that PluginManager hook is triggered |
205 | $this->container->pluginManager | 206 | $this->container->pluginManager |
206 | ->expects(static::at(0)) | 207 | ->expects(static::atLeastOnce()) |
207 | ->method('executeHooks') | 208 | ->method('executeHooks') |
209 | ->withConsecutive(['render_daily']) | ||
208 | ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array { | 210 | ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array { |
209 | static::assertSame('render_daily', $hook); | 211 | if ('render_daily' === $hook) { |
210 | 212 | static::assertArrayHasKey('linksToDisplay', $data); | |
211 | static::assertArrayHasKey('linksToDisplay', $data); | 213 | static::assertCount(1, $data['linksToDisplay']); |
212 | static::assertCount(1, $data['linksToDisplay']); | 214 | static::assertSame(1, $data['linksToDisplay'][0]['id']); |
213 | static::assertSame(1, $data['linksToDisplay'][0]['id']); | 215 | static::assertSame($currentDay->getTimestamp(), $data['day']); |
214 | static::assertSame($currentDay->getTimestamp(), $data['day']); | 216 | static::assertEmpty($data['previousday']); |
215 | static::assertEmpty($data['previousday']); | 217 | static::assertEmpty($data['nextday']); |
216 | static::assertEmpty($data['nextday']); | ||
217 | 218 | ||
218 | static::assertArrayHasKey('loggedin', $param); | 219 | static::assertArrayHasKey('loggedin', $param); |
220 | } | ||
219 | 221 | ||
220 | return $data; | 222 | return $data; |
221 | }); | 223 | }); |
@@ -281,7 +283,7 @@ class DailyControllerTest extends TestCase | |||
281 | 283 | ||
282 | // Make sure that PluginManager hook is triggered | 284 | // Make sure that PluginManager hook is triggered |
283 | $this->container->pluginManager | 285 | $this->container->pluginManager |
284 | ->expects(static::at(0)) | 286 | ->expects(static::atLeastOnce()) |
285 | ->method('executeHooks') | 287 | ->method('executeHooks') |
286 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 288 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
287 | return $data; | 289 | return $data; |
@@ -333,7 +335,7 @@ class DailyControllerTest extends TestCase | |||
333 | 335 | ||
334 | // Make sure that PluginManager hook is triggered | 336 | // Make sure that PluginManager hook is triggered |
335 | $this->container->pluginManager | 337 | $this->container->pluginManager |
336 | ->expects(static::at(0)) | 338 | ->expects(static::atLeastOnce()) |
337 | ->method('executeHooks') | 339 | ->method('executeHooks') |
338 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 340 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
339 | return $data; | 341 | return $data; |
@@ -392,8 +394,8 @@ class DailyControllerTest extends TestCase | |||
392 | static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]); | 394 | static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]); |
393 | static::assertSame('dailyrss', (string) $result->getBody()); | 395 | static::assertSame('dailyrss', (string) $result->getBody()); |
394 | static::assertSame('Shaarli', $assignedVariables['title']); | 396 | static::assertSame('Shaarli', $assignedVariables['title']); |
395 | static::assertSame('http://shaarli', $assignedVariables['index_url']); | 397 | static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']); |
396 | static::assertSame('http://shaarli/daily-rss', $assignedVariables['page_url']); | 398 | static::assertSame('http://shaarli/subfolder/daily-rss', $assignedVariables['page_url']); |
397 | static::assertFalse($assignedVariables['hide_timestamps']); | 399 | static::assertFalse($assignedVariables['hide_timestamps']); |
398 | static::assertCount(2, $assignedVariables['days']); | 400 | static::assertCount(2, $assignedVariables['days']); |
399 | 401 | ||
@@ -402,7 +404,7 @@ class DailyControllerTest extends TestCase | |||
402 | static::assertEquals($dates[0], $day['date']); | 404 | static::assertEquals($dates[0], $day['date']); |
403 | static::assertSame($dates[0]->format(\DateTime::RSS), $day['date_rss']); | 405 | static::assertSame($dates[0]->format(\DateTime::RSS), $day['date_rss']); |
404 | static::assertSame(format_date($dates[0], false), $day['date_human']); | 406 | static::assertSame(format_date($dates[0], false), $day['date_human']); |
405 | static::assertSame('http://shaarli/daily?day='. $dates[0]->format('Ymd'), $day['absolute_url']); | 407 | static::assertSame('http://shaarli/subfolder/daily?day='. $dates[0]->format('Ymd'), $day['absolute_url']); |
406 | static::assertCount(1, $day['links']); | 408 | static::assertCount(1, $day['links']); |
407 | static::assertSame(1, $day['links'][0]['id']); | 409 | static::assertSame(1, $day['links'][0]['id']); |
408 | static::assertSame('http://domain.tld/1', $day['links'][0]['url']); | 410 | static::assertSame('http://domain.tld/1', $day['links'][0]['url']); |
@@ -413,7 +415,7 @@ class DailyControllerTest extends TestCase | |||
413 | static::assertEquals($dates[1], $day['date']); | 415 | static::assertEquals($dates[1], $day['date']); |
414 | static::assertSame($dates[1]->format(\DateTime::RSS), $day['date_rss']); | 416 | static::assertSame($dates[1]->format(\DateTime::RSS), $day['date_rss']); |
415 | static::assertSame(format_date($dates[1], false), $day['date_human']); | 417 | static::assertSame(format_date($dates[1], false), $day['date_human']); |
416 | static::assertSame('http://shaarli/daily?day='. $dates[1]->format('Ymd'), $day['absolute_url']); | 418 | static::assertSame('http://shaarli/subfolder/daily?day='. $dates[1]->format('Ymd'), $day['absolute_url']); |
417 | static::assertCount(2, $day['links']); | 419 | static::assertCount(2, $day['links']); |
418 | 420 | ||
419 | static::assertSame(2, $day['links'][0]['id']); | 421 | static::assertSame(2, $day['links'][0]['id']); |
@@ -468,8 +470,8 @@ class DailyControllerTest extends TestCase | |||
468 | static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]); | 470 | static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]); |
469 | static::assertSame('dailyrss', (string) $result->getBody()); | 471 | static::assertSame('dailyrss', (string) $result->getBody()); |
470 | static::assertSame('Shaarli', $assignedVariables['title']); | 472 | static::assertSame('Shaarli', $assignedVariables['title']); |
471 | static::assertSame('http://shaarli', $assignedVariables['index_url']); | 473 | static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']); |
472 | static::assertSame('http://shaarli/daily-rss', $assignedVariables['page_url']); | 474 | static::assertSame('http://shaarli/subfolder/daily-rss', $assignedVariables['page_url']); |
473 | static::assertFalse($assignedVariables['hide_timestamps']); | 475 | static::assertFalse($assignedVariables['hide_timestamps']); |
474 | static::assertCount(0, $assignedVariables['days']); | 476 | static::assertCount(0, $assignedVariables['days']); |
475 | } | 477 | } |
diff --git a/tests/front/controller/visitor/ErrorControllerTest.php b/tests/front/controller/visitor/ErrorControllerTest.php index e497bfef..75408cf4 100644 --- a/tests/front/controller/visitor/ErrorControllerTest.php +++ b/tests/front/controller/visitor/ErrorControllerTest.php | |||
@@ -4,8 +4,8 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Front\Exception\ShaarliFrontException; | 7 | use Shaarli\Front\Exception\ShaarliFrontException; |
8 | use Shaarli\TestCase; | ||
9 | use Slim\Http\Request; | 9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | 10 | use Slim\Http\Response; |
11 | 11 | ||
diff --git a/tests/front/controller/visitor/ErrorNotFoundControllerTest.php b/tests/front/controller/visitor/ErrorNotFoundControllerTest.php new file mode 100644 index 00000000..a1cbbecf --- /dev/null +++ b/tests/front/controller/visitor/ErrorNotFoundControllerTest.php | |||
@@ -0,0 +1,81 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\Front\Controller\Visitor; | ||
6 | |||
7 | use Shaarli\TestCase; | ||
8 | use Slim\Http\Request; | ||
9 | use Slim\Http\Response; | ||
10 | use Slim\Http\Uri; | ||
11 | |||
12 | class ErrorNotFoundControllerTest extends TestCase | ||
13 | { | ||
14 | use FrontControllerMockHelper; | ||
15 | |||
16 | /** @var ErrorNotFoundController */ | ||
17 | protected $controller; | ||
18 | |||
19 | public function setUp(): void | ||
20 | { | ||
21 | $this->createContainer(); | ||
22 | |||
23 | $this->controller = new ErrorNotFoundController($this->container); | ||
24 | } | ||
25 | |||
26 | /** | ||
27 | * Test displaying 404 error | ||
28 | */ | ||
29 | public function testDisplayNotFoundError(): void | ||
30 | { | ||
31 | $request = $this->createMock(Request::class); | ||
32 | $request->expects(static::once())->method('getRequestTarget')->willReturn('/'); | ||
33 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
34 | $uri = $this->createMock(Uri::class); | ||
35 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
36 | |||
37 | return $uri; | ||
38 | }); | ||
39 | |||
40 | $response = new Response(); | ||
41 | |||
42 | // Save RainTPL assigned variables | ||
43 | $assignedVariables = []; | ||
44 | $this->assignTemplateVars($assignedVariables); | ||
45 | |||
46 | $result = ($this->controller)( | ||
47 | $request, | ||
48 | $response | ||
49 | ); | ||
50 | |||
51 | static::assertSame(404, $result->getStatusCode()); | ||
52 | static::assertSame('404', (string) $result->getBody()); | ||
53 | static::assertSame('Requested page could not be found.', $assignedVariables['error_message']); | ||
54 | } | ||
55 | |||
56 | /** | ||
57 | * Test displaying 404 error from REST API | ||
58 | */ | ||
59 | public function testDisplayNotFoundErrorFromAPI(): void | ||
60 | { | ||
61 | $request = $this->createMock(Request::class); | ||
62 | $request->expects(static::once())->method('getRequestTarget')->willReturn('/sufolder/api/v1/links'); | ||
63 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
64 | $uri = $this->createMock(Uri::class); | ||
65 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
66 | |||
67 | return $uri; | ||
68 | }); | ||
69 | |||
70 | $response = new Response(); | ||
71 | |||
72 | // Save RainTPL assigned variables | ||
73 | $assignedVariables = []; | ||
74 | $this->assignTemplateVars($assignedVariables); | ||
75 | |||
76 | $result = ($this->controller)($request, $response); | ||
77 | |||
78 | static::assertSame(404, $result->getStatusCode()); | ||
79 | static::assertSame([], $assignedVariables); | ||
80 | } | ||
81 | } | ||
diff --git a/tests/front/controller/visitor/FeedControllerTest.php b/tests/front/controller/visitor/FeedControllerTest.php index fb417e2a..4ae7c925 100644 --- a/tests/front/controller/visitor/FeedControllerTest.php +++ b/tests/front/controller/visitor/FeedControllerTest.php | |||
@@ -4,8 +4,8 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Feed\FeedBuilder; | 7 | use Shaarli\Feed\FeedBuilder; |
8 | use Shaarli\TestCase; | ||
9 | use Slim\Http\Request; | 9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | 10 | use Slim\Http\Response; |
11 | 11 | ||
@@ -45,14 +45,16 @@ class FeedControllerTest extends TestCase | |||
45 | 45 | ||
46 | // Make sure that PluginManager hook is triggered | 46 | // Make sure that PluginManager hook is triggered |
47 | $this->container->pluginManager | 47 | $this->container->pluginManager |
48 | ->expects(static::at(0)) | 48 | ->expects(static::atLeastOnce()) |
49 | ->method('executeHooks') | 49 | ->method('executeHooks') |
50 | ->withConsecutive(['render_feed']) | ||
50 | ->willReturnCallback(function (string $hook, array $data, array $param): void { | 51 | ->willReturnCallback(function (string $hook, array $data, array $param): void { |
51 | static::assertSame('render_feed', $hook); | 52 | if ('render_feed' === $hook) { |
52 | static::assertSame('data', $data['content']); | 53 | static::assertSame('data', $data['content']); |
53 | 54 | ||
54 | static::assertArrayHasKey('loggedin', $param); | 55 | static::assertArrayHasKey('loggedin', $param); |
55 | static::assertSame('rss', $param['target']); | 56 | static::assertSame('feed.rss', $param['target']); |
57 | } | ||
56 | }) | 58 | }) |
57 | ; | 59 | ; |
58 | 60 | ||
@@ -84,14 +86,16 @@ class FeedControllerTest extends TestCase | |||
84 | 86 | ||
85 | // Make sure that PluginManager hook is triggered | 87 | // Make sure that PluginManager hook is triggered |
86 | $this->container->pluginManager | 88 | $this->container->pluginManager |
87 | ->expects(static::at(0)) | 89 | ->expects(static::atLeastOnce()) |
88 | ->method('executeHooks') | 90 | ->method('executeHooks') |
91 | ->withConsecutive(['render_feed']) | ||
89 | ->willReturnCallback(function (string $hook, array $data, array $param): void { | 92 | ->willReturnCallback(function (string $hook, array $data, array $param): void { |
90 | static::assertSame('render_feed', $hook); | 93 | if ('render_feed' === $hook) { |
91 | static::assertSame('data', $data['content']); | 94 | static::assertSame('data', $data['content']); |
92 | 95 | ||
93 | static::assertArrayHasKey('loggedin', $param); | 96 | static::assertArrayHasKey('loggedin', $param); |
94 | static::assertSame('atom', $param['target']); | 97 | static::assertSame('feed.atom', $param['target']); |
98 | } | ||
95 | }) | 99 | }) |
96 | ; | 100 | ; |
97 | 101 | ||
@@ -124,14 +128,16 @@ class FeedControllerTest extends TestCase | |||
124 | 128 | ||
125 | // Make sure that PluginManager hook is triggered | 129 | // Make sure that PluginManager hook is triggered |
126 | $this->container->pluginManager | 130 | $this->container->pluginManager |
127 | ->expects(static::at(0)) | 131 | ->expects(static::atLeastOnce()) |
128 | ->method('executeHooks') | 132 | ->method('executeHooks') |
133 | ->withConsecutive(['render_feed']) | ||
129 | ->willReturnCallback(function (string $hook, array $data, array $param): void { | 134 | ->willReturnCallback(function (string $hook, array $data, array $param): void { |
130 | static::assertSame('render_feed', $hook); | 135 | if ('render_feed' === $hook) { |
131 | static::assertSame('data', $data['content']); | 136 | static::assertSame('data', $data['content']); |
132 | 137 | ||
133 | static::assertArrayHasKey('loggedin', $param); | 138 | static::assertArrayHasKey('loggedin', $param); |
134 | static::assertSame('atom', $param['target']); | 139 | static::assertSame('feed.atom', $param['target']); |
140 | } | ||
135 | }) | 141 | }) |
136 | ; | 142 | ; |
137 | 143 | ||
diff --git a/tests/front/controller/visitor/FrontControllerMockHelper.php b/tests/front/controller/visitor/FrontControllerMockHelper.php index e0bd4ecf..fc0bb7d1 100644 --- a/tests/front/controller/visitor/FrontControllerMockHelper.php +++ b/tests/front/controller/visitor/FrontControllerMockHelper.php | |||
@@ -4,7 +4,6 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\MockObject\MockObject; | ||
8 | use Shaarli\Bookmark\BookmarkServiceInterface; | 7 | use Shaarli\Bookmark\BookmarkServiceInterface; |
9 | use Shaarli\Config\ConfigManager; | 8 | use Shaarli\Config\ConfigManager; |
10 | use Shaarli\Container\ShaarliTestContainer; | 9 | use Shaarli\Container\ShaarliTestContainer; |
@@ -79,8 +78,9 @@ trait FrontControllerMockHelper | |||
79 | $this->container->environment = [ | 78 | $this->container->environment = [ |
80 | 'SERVER_NAME' => 'shaarli', | 79 | 'SERVER_NAME' => 'shaarli', |
81 | 'SERVER_PORT' => '80', | 80 | 'SERVER_PORT' => '80', |
82 | 'REQUEST_URI' => '/daily-rss', | 81 | 'REQUEST_URI' => '/subfolder/daily-rss', |
83 | 'REMOTE_ADDR' => '1.2.3.4', | 82 | 'REMOTE_ADDR' => '1.2.3.4', |
83 | 'SCRIPT_NAME' => '/subfolder/index.php', | ||
84 | ]; | 84 | ]; |
85 | 85 | ||
86 | $this->container->basePath = '/subfolder'; | 86 | $this->container->basePath = '/subfolder'; |
@@ -94,7 +94,6 @@ trait FrontControllerMockHelper | |||
94 | protected function assignTemplateVars(array &$variables): void | 94 | protected function assignTemplateVars(array &$variables): void |
95 | { | 95 | { |
96 | $this->container->pageBuilder | 96 | $this->container->pageBuilder |
97 | ->expects(static::atLeastOnce()) | ||
98 | ->method('assign') | 97 | ->method('assign') |
99 | ->willReturnCallback(function ($key, $value) use (&$variables) { | 98 | ->willReturnCallback(function ($key, $value) use (&$variables) { |
100 | $variables[$key] = $value; | 99 | $variables[$key] = $value; |
@@ -115,5 +114,5 @@ trait FrontControllerMockHelper | |||
115 | /** | 114 | /** |
116 | * Force to be used in PHPUnit context. | 115 | * Force to be used in PHPUnit context. |
117 | */ | 116 | */ |
118 | protected abstract function createMock($originalClassName): MockObject; | 117 | protected abstract function isInTestsContext(): bool; |
119 | } | 118 | } |
diff --git a/tests/front/controller/visitor/InstallControllerTest.php b/tests/front/controller/visitor/InstallControllerTest.php index 3b855365..345ad544 100644 --- a/tests/front/controller/visitor/InstallControllerTest.php +++ b/tests/front/controller/visitor/InstallControllerTest.php | |||
@@ -4,10 +4,10 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Front\Exception\AlreadyInstalledException; | 8 | use Shaarli\Front\Exception\AlreadyInstalledException; |
10 | use Shaarli\Security\SessionManager; | 9 | use Shaarli\Security\SessionManager; |
10 | use Shaarli\TestCase; | ||
11 | use Slim\Http\Request; | 11 | use Slim\Http\Request; |
12 | use Slim\Http\Response; | 12 | use Slim\Http\Response; |
13 | 13 | ||
@@ -257,6 +257,39 @@ class InstallControllerTest extends TestCase | |||
257 | static::assertSame('/subfolder/login', $result->getHeader('location')[0]); | 257 | static::assertSame('/subfolder/login', $result->getHeader('location')[0]); |
258 | 258 | ||
259 | static::assertSame('UTC', $confSettings['general.timezone']); | 259 | static::assertSame('UTC', $confSettings['general.timezone']); |
260 | static::assertSame('Shared bookmarks on http://shaarli', $confSettings['general.title']); | 260 | static::assertSame('Shared bookmarks on http://shaarli/subfolder/', $confSettings['general.title']); |
261 | } | ||
262 | |||
263 | /** | ||
264 | * Same test as testSaveInstallDefaultValues() but for an instance install in root directory. | ||
265 | */ | ||
266 | public function testSaveInstallDefaultValuesWithoutSubfolder(): void | ||
267 | { | ||
268 | $confSettings = []; | ||
269 | |||
270 | $this->container->environment = [ | ||
271 | 'SERVER_NAME' => 'shaarli', | ||
272 | 'SERVER_PORT' => '80', | ||
273 | 'REQUEST_URI' => '/install', | ||
274 | 'REMOTE_ADDR' => '1.2.3.4', | ||
275 | 'SCRIPT_NAME' => '/index.php', | ||
276 | ]; | ||
277 | |||
278 | $this->container->basePath = ''; | ||
279 | |||
280 | $request = $this->createMock(Request::class); | ||
281 | $response = new Response(); | ||
282 | |||
283 | $this->container->conf->method('set')->willReturnCallback(function (string $key, $value) use (&$confSettings) { | ||
284 | $confSettings[$key] = $value; | ||
285 | }); | ||
286 | |||
287 | $result = $this->controller->save($request, $response); | ||
288 | |||
289 | static::assertSame(302, $result->getStatusCode()); | ||
290 | static::assertSame('/login', $result->getHeader('location')[0]); | ||
291 | |||
292 | static::assertSame('UTC', $confSettings['general.timezone']); | ||
293 | static::assertSame('Shared bookmarks on http://shaarli/', $confSettings['general.title']); | ||
261 | } | 294 | } |
262 | } | 295 | } |
diff --git a/tests/front/controller/visitor/LoginControllerTest.php b/tests/front/controller/visitor/LoginControllerTest.php index 0a21f938..1312ccb7 100644 --- a/tests/front/controller/visitor/LoginControllerTest.php +++ b/tests/front/controller/visitor/LoginControllerTest.php | |||
@@ -4,13 +4,13 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Front\Exception\LoginBannedException; | 8 | use Shaarli\Front\Exception\LoginBannedException; |
10 | use Shaarli\Front\Exception\WrongTokenException; | 9 | use Shaarli\Front\Exception\WrongTokenException; |
11 | use Shaarli\Render\TemplatePage; | 10 | use Shaarli\Render\TemplatePage; |
12 | use Shaarli\Security\CookieManager; | 11 | use Shaarli\Security\CookieManager; |
13 | use Shaarli\Security\SessionManager; | 12 | use Shaarli\Security\SessionManager; |
13 | use Shaarli\TestCase; | ||
14 | use Slim\Http\Request; | 14 | use Slim\Http\Request; |
15 | use Slim\Http\Response; | 15 | use Slim\Http\Response; |
16 | 16 | ||
diff --git a/tests/front/controller/visitor/OpenSearchControllerTest.php b/tests/front/controller/visitor/OpenSearchControllerTest.php index 5f9f5b12..42d876c3 100644 --- a/tests/front/controller/visitor/OpenSearchControllerTest.php +++ b/tests/front/controller/visitor/OpenSearchControllerTest.php | |||
@@ -4,7 +4,7 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | 7 | use Shaarli\TestCase; |
8 | use Slim\Http\Request; | 8 | use Slim\Http\Request; |
9 | use Slim\Http\Response; | 9 | use Slim\Http\Response; |
10 | 10 | ||
@@ -39,6 +39,6 @@ class OpenSearchControllerTest extends TestCase | |||
39 | $result->getHeader('Content-Type')[0] | 39 | $result->getHeader('Content-Type')[0] |
40 | ); | 40 | ); |
41 | static::assertSame('opensearch', (string) $result->getBody()); | 41 | static::assertSame('opensearch', (string) $result->getBody()); |
42 | static::assertSame('http://shaarli', $assignedVariables['serverurl']); | 42 | static::assertSame('http://shaarli/subfolder/', $assignedVariables['serverurl']); |
43 | } | 43 | } |
44 | } | 44 | } |
diff --git a/tests/front/controller/visitor/PictureWallControllerTest.php b/tests/front/controller/visitor/PictureWallControllerTest.php index 3dc3f292..b868231d 100644 --- a/tests/front/controller/visitor/PictureWallControllerTest.php +++ b/tests/front/controller/visitor/PictureWallControllerTest.php | |||
@@ -4,10 +4,10 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Config\ConfigManager; | 8 | use Shaarli\Config\ConfigManager; |
10 | use Shaarli\Front\Exception\ThumbnailsDisabledException; | 9 | use Shaarli\Front\Exception\ThumbnailsDisabledException; |
10 | use Shaarli\TestCase; | ||
11 | use Shaarli\Thumbnailer; | 11 | use Shaarli\Thumbnailer; |
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
@@ -67,15 +67,17 @@ class PictureWallControllerTest extends TestCase | |||
67 | 67 | ||
68 | // Make sure that PluginManager hook is triggered | 68 | // Make sure that PluginManager hook is triggered |
69 | $this->container->pluginManager | 69 | $this->container->pluginManager |
70 | ->expects(static::at(0)) | 70 | ->expects(static::atLeastOnce()) |
71 | ->method('executeHooks') | 71 | ->method('executeHooks') |
72 | ->withConsecutive(['render_picwall']) | ||
72 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 73 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
73 | static::assertSame('render_picwall', $hook); | 74 | if ('render_picwall' === $hook) { |
74 | static::assertArrayHasKey('linksToDisplay', $data); | 75 | static::assertArrayHasKey('linksToDisplay', $data); |
75 | static::assertCount(2, $data['linksToDisplay']); | 76 | static::assertCount(2, $data['linksToDisplay']); |
76 | static::assertSame(1, $data['linksToDisplay'][0]['id']); | 77 | static::assertSame(1, $data['linksToDisplay'][0]['id']); |
77 | static::assertSame(3, $data['linksToDisplay'][1]['id']); | 78 | static::assertSame(3, $data['linksToDisplay'][1]['id']); |
78 | static::assertArrayHasKey('loggedin', $param); | 79 | static::assertArrayHasKey('loggedin', $param); |
80 | } | ||
79 | 81 | ||
80 | return $data; | 82 | return $data; |
81 | }); | 83 | }); |
diff --git a/tests/front/controller/visitor/PublicSessionFilterControllerTest.php b/tests/front/controller/visitor/PublicSessionFilterControllerTest.php index 06352750..7e3b00af 100644 --- a/tests/front/controller/visitor/PublicSessionFilterControllerTest.php +++ b/tests/front/controller/visitor/PublicSessionFilterControllerTest.php | |||
@@ -4,8 +4,8 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Security\SessionManager; | 7 | use Shaarli\Security\SessionManager; |
8 | use Shaarli\TestCase; | ||
9 | use Slim\Http\Request; | 9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | 10 | use Slim\Http\Response; |
11 | 11 | ||
@@ -28,7 +28,7 @@ class PublicSessionFilterControllerTest extends TestCase | |||
28 | */ | 28 | */ |
29 | public function testLinksPerPage(): void | 29 | public function testLinksPerPage(): void |
30 | { | 30 | { |
31 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 31 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller/?searchtag=abc'; |
32 | 32 | ||
33 | $request = $this->createMock(Request::class); | 33 | $request = $this->createMock(Request::class); |
34 | $request->method('getParam')->with('nb')->willReturn('8'); | 34 | $request->method('getParam')->with('nb')->willReturn('8'); |
@@ -74,7 +74,7 @@ class PublicSessionFilterControllerTest extends TestCase | |||
74 | */ | 74 | */ |
75 | public function testUntaggedOnly(): void | 75 | public function testUntaggedOnly(): void |
76 | { | 76 | { |
77 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 77 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller/?searchtag=abc'; |
78 | 78 | ||
79 | $request = $this->createMock(Request::class); | 79 | $request = $this->createMock(Request::class); |
80 | $response = new Response(); | 80 | $response = new Response(); |
@@ -97,7 +97,7 @@ class PublicSessionFilterControllerTest extends TestCase | |||
97 | */ | 97 | */ |
98 | public function testUntaggedOnlyToggleOff(): void | 98 | public function testUntaggedOnlyToggleOff(): void |
99 | { | 99 | { |
100 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 100 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller/?searchtag=abc'; |
101 | 101 | ||
102 | $request = $this->createMock(Request::class); | 102 | $request = $this->createMock(Request::class); |
103 | $response = new Response(); | 103 | $response = new Response(); |
diff --git a/tests/front/controller/visitor/ShaarliVisitorControllerTest.php b/tests/front/controller/visitor/ShaarliVisitorControllerTest.php index 316ce49c..935ec24e 100644 --- a/tests/front/controller/visitor/ShaarliVisitorControllerTest.php +++ b/tests/front/controller/visitor/ShaarliVisitorControllerTest.php | |||
@@ -4,8 +4,8 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\BookmarkFilter; | 7 | use Shaarli\Bookmark\BookmarkFilter; |
8 | use Shaarli\TestCase; | ||
9 | use Slim\Http\Request; | 9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | 10 | use Slim\Http\Response; |
11 | 11 | ||
@@ -110,7 +110,7 @@ class ShaarliVisitorControllerTest extends TestCase | |||
110 | */ | 110 | */ |
111 | public function testRedirectFromRefererDefault(): void | 111 | public function testRedirectFromRefererDefault(): void |
112 | { | 112 | { |
113 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli.tld/subfolder/controller?query=param&other=2'; | 113 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller?query=param&other=2'; |
114 | 114 | ||
115 | $response = new Response(); | 115 | $response = new Response(); |
116 | 116 | ||
@@ -125,7 +125,7 @@ class ShaarliVisitorControllerTest extends TestCase | |||
125 | */ | 125 | */ |
126 | public function testRedirectFromRefererWithUnmatchedLoopTerm(): void | 126 | public function testRedirectFromRefererWithUnmatchedLoopTerm(): void |
127 | { | 127 | { |
128 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli.tld/subfolder/controller?query=param&other=2'; | 128 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller?query=param&other=2'; |
129 | 129 | ||
130 | $response = new Response(); | 130 | $response = new Response(); |
131 | 131 | ||
@@ -140,7 +140,7 @@ class ShaarliVisitorControllerTest extends TestCase | |||
140 | */ | 140 | */ |
141 | public function testRedirectFromRefererWithMatchingLoopTermInPath(): void | 141 | public function testRedirectFromRefererWithMatchingLoopTermInPath(): void |
142 | { | 142 | { |
143 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli.tld/subfolder/controller?query=param&other=2'; | 143 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller?query=param&other=2'; |
144 | 144 | ||
145 | $response = new Response(); | 145 | $response = new Response(); |
146 | 146 | ||
@@ -155,7 +155,7 @@ class ShaarliVisitorControllerTest extends TestCase | |||
155 | */ | 155 | */ |
156 | public function testRedirectFromRefererWithMatchingLoopTermInQueryParam(): void | 156 | public function testRedirectFromRefererWithMatchingLoopTermInQueryParam(): void |
157 | { | 157 | { |
158 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli.tld/subfolder/controller?query=param&other=2'; | 158 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller?query=param&other=2'; |
159 | 159 | ||
160 | $response = new Response(); | 160 | $response = new Response(); |
161 | 161 | ||
@@ -171,7 +171,7 @@ class ShaarliVisitorControllerTest extends TestCase | |||
171 | */ | 171 | */ |
172 | public function testRedirectFromRefererWithMatchingLoopTermInQueryValue(): void | 172 | public function testRedirectFromRefererWithMatchingLoopTermInQueryValue(): void |
173 | { | 173 | { |
174 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli.tld/subfolder/controller?query=param&other=2'; | 174 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller?query=param&other=2'; |
175 | 175 | ||
176 | $response = new Response(); | 176 | $response = new Response(); |
177 | 177 | ||
@@ -187,7 +187,7 @@ class ShaarliVisitorControllerTest extends TestCase | |||
187 | */ | 187 | */ |
188 | public function testRedirectFromRefererWithLoopTermInDomain(): void | 188 | public function testRedirectFromRefererWithLoopTermInDomain(): void |
189 | { | 189 | { |
190 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli.tld/subfolder/controller?query=param&other=2'; | 190 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller?query=param&other=2'; |
191 | 191 | ||
192 | $response = new Response(); | 192 | $response = new Response(); |
193 | 193 | ||
@@ -203,7 +203,7 @@ class ShaarliVisitorControllerTest extends TestCase | |||
203 | */ | 203 | */ |
204 | public function testRedirectFromRefererWithMatchingClearedParam(): void | 204 | public function testRedirectFromRefererWithMatchingClearedParam(): void |
205 | { | 205 | { |
206 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli.tld/subfolder/controller?query=param&other=2'; | 206 | $this->container->environment['HTTP_REFERER'] = 'http://shaarli/subfolder/controller?query=param&other=2'; |
207 | 207 | ||
208 | $response = new Response(); | 208 | $response = new Response(); |
209 | 209 | ||
@@ -212,4 +212,35 @@ class ShaarliVisitorControllerTest extends TestCase | |||
212 | static::assertSame(302, $result->getStatusCode()); | 212 | static::assertSame(302, $result->getStatusCode()); |
213 | static::assertSame(['/subfolder/controller?other=2'], $result->getHeader('location')); | 213 | static::assertSame(['/subfolder/controller?other=2'], $result->getHeader('location')); |
214 | } | 214 | } |
215 | |||
216 | /** | ||
217 | * Test redirectFromReferer() - From another domain -> we ignore the given referrer. | ||
218 | */ | ||
219 | public function testRedirectExternalReferer(): void | ||
220 | { | ||
221 | $this->container->environment['HTTP_REFERER'] = 'http://other.domain.tld/controller?query=param&other=2'; | ||
222 | |||
223 | $response = new Response(); | ||
224 | |||
225 | $result = $this->controller->redirectFromReferer($this->request, $response, ['query'], ['query']); | ||
226 | |||
227 | static::assertSame(302, $result->getStatusCode()); | ||
228 | static::assertSame(['/subfolder/'], $result->getHeader('location')); | ||
229 | } | ||
230 | |||
231 | /** | ||
232 | * Test redirectFromReferer() - From another domain -> we ignore the given referrer. | ||
233 | */ | ||
234 | public function testRedirectExternalRefererExplicitDomainName(): void | ||
235 | { | ||
236 | $this->container->environment['SERVER_NAME'] = 'my.shaarli.tld'; | ||
237 | $this->container->environment['HTTP_REFERER'] = 'http://your.shaarli.tld/controller?query=param&other=2'; | ||
238 | |||
239 | $response = new Response(); | ||
240 | |||
241 | $result = $this->controller->redirectFromReferer($this->request, $response, ['query'], ['query']); | ||
242 | |||
243 | static::assertSame(302, $result->getStatusCode()); | ||
244 | static::assertSame(['/subfolder/'], $result->getHeader('location')); | ||
245 | } | ||
215 | } | 246 | } |
diff --git a/tests/front/controller/visitor/TagCloudControllerTest.php b/tests/front/controller/visitor/TagCloudControllerTest.php index 9a6a4bc0..9305612e 100644 --- a/tests/front/controller/visitor/TagCloudControllerTest.php +++ b/tests/front/controller/visitor/TagCloudControllerTest.php | |||
@@ -4,8 +4,8 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Bookmark\BookmarkFilter; | 7 | use Shaarli\Bookmark\BookmarkFilter; |
8 | use Shaarli\TestCase; | ||
9 | use Slim\Http\Request; | 9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | 10 | use Slim\Http\Response; |
11 | 11 | ||
@@ -53,14 +53,16 @@ class TagCloudControllerTest extends TestCase | |||
53 | 53 | ||
54 | // Make sure that PluginManager hook is triggered | 54 | // Make sure that PluginManager hook is triggered |
55 | $this->container->pluginManager | 55 | $this->container->pluginManager |
56 | ->expects(static::at(0)) | 56 | ->expects(static::atLeastOnce()) |
57 | ->method('executeHooks') | 57 | ->method('executeHooks') |
58 | ->withConsecutive(['render_tagcloud']) | ||
58 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 59 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
59 | static::assertSame('render_tagcloud', $hook); | 60 | if ('render_tagcloud' === $hook) { |
60 | static::assertSame('', $data['search_tags']); | 61 | static::assertSame('', $data['search_tags']); |
61 | static::assertCount(3, $data['tags']); | 62 | static::assertCount(3, $data['tags']); |
62 | 63 | ||
63 | static::assertArrayHasKey('loggedin', $param); | 64 | static::assertArrayHasKey('loggedin', $param); |
65 | } | ||
64 | 66 | ||
65 | return $data; | 67 | return $data; |
66 | }) | 68 | }) |
@@ -124,14 +126,16 @@ class TagCloudControllerTest extends TestCase | |||
124 | 126 | ||
125 | // Make sure that PluginManager hook is triggered | 127 | // Make sure that PluginManager hook is triggered |
126 | $this->container->pluginManager | 128 | $this->container->pluginManager |
127 | ->expects(static::at(0)) | 129 | ->expects(static::atLeastOnce()) |
128 | ->method('executeHooks') | 130 | ->method('executeHooks') |
131 | ->withConsecutive(['render_tagcloud']) | ||
129 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 132 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
130 | static::assertSame('render_tagcloud', $hook); | 133 | if ('render_tagcloud' === $hook) { |
131 | static::assertSame('ghi def', $data['search_tags']); | 134 | static::assertSame('ghi def', $data['search_tags']); |
132 | static::assertCount(1, $data['tags']); | 135 | static::assertCount(1, $data['tags']); |
133 | 136 | ||
134 | static::assertArrayHasKey('loggedin', $param); | 137 | static::assertArrayHasKey('loggedin', $param); |
138 | } | ||
135 | 139 | ||
136 | return $data; | 140 | return $data; |
137 | }) | 141 | }) |
@@ -175,14 +179,16 @@ class TagCloudControllerTest extends TestCase | |||
175 | 179 | ||
176 | // Make sure that PluginManager hook is triggered | 180 | // Make sure that PluginManager hook is triggered |
177 | $this->container->pluginManager | 181 | $this->container->pluginManager |
178 | ->expects(static::at(0)) | 182 | ->expects(static::atLeastOnce()) |
179 | ->method('executeHooks') | 183 | ->method('executeHooks') |
184 | ->withConsecutive(['render_tagcloud']) | ||
180 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 185 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
181 | static::assertSame('render_tagcloud', $hook); | 186 | if ('render_tagcloud' === $hook) { |
182 | static::assertSame('', $data['search_tags']); | 187 | static::assertSame('', $data['search_tags']); |
183 | static::assertCount(0, $data['tags']); | 188 | static::assertCount(0, $data['tags']); |
184 | 189 | ||
185 | static::assertArrayHasKey('loggedin', $param); | 190 | static::assertArrayHasKey('loggedin', $param); |
191 | } | ||
186 | 192 | ||
187 | return $data; | 193 | return $data; |
188 | }) | 194 | }) |
@@ -227,14 +233,16 @@ class TagCloudControllerTest extends TestCase | |||
227 | 233 | ||
228 | // Make sure that PluginManager hook is triggered | 234 | // Make sure that PluginManager hook is triggered |
229 | $this->container->pluginManager | 235 | $this->container->pluginManager |
230 | ->expects(static::at(0)) | 236 | ->expects(static::atLeastOnce()) |
231 | ->method('executeHooks') | 237 | ->method('executeHooks') |
238 | ->withConsecutive(['render_taglist']) | ||
232 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 239 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
233 | static::assertSame('render_taglist', $hook); | 240 | if ('render_taglist' === $hook) { |
234 | static::assertSame('', $data['search_tags']); | 241 | static::assertSame('', $data['search_tags']); |
235 | static::assertCount(3, $data['tags']); | 242 | static::assertCount(3, $data['tags']); |
236 | 243 | ||
237 | static::assertArrayHasKey('loggedin', $param); | 244 | static::assertArrayHasKey('loggedin', $param); |
245 | } | ||
238 | 246 | ||
239 | return $data; | 247 | return $data; |
240 | }) | 248 | }) |
@@ -297,14 +305,16 @@ class TagCloudControllerTest extends TestCase | |||
297 | 305 | ||
298 | // Make sure that PluginManager hook is triggered | 306 | // Make sure that PluginManager hook is triggered |
299 | $this->container->pluginManager | 307 | $this->container->pluginManager |
300 | ->expects(static::at(0)) | 308 | ->expects(static::atLeastOnce()) |
301 | ->method('executeHooks') | 309 | ->method('executeHooks') |
310 | ->withConsecutive(['render_taglist']) | ||
302 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 311 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
303 | static::assertSame('render_taglist', $hook); | 312 | if ('render_taglist' === $hook) { |
304 | static::assertSame('ghi def', $data['search_tags']); | 313 | static::assertSame('ghi def', $data['search_tags']); |
305 | static::assertCount(1, $data['tags']); | 314 | static::assertCount(1, $data['tags']); |
306 | 315 | ||
307 | static::assertArrayHasKey('loggedin', $param); | 316 | static::assertArrayHasKey('loggedin', $param); |
317 | } | ||
308 | 318 | ||
309 | return $data; | 319 | return $data; |
310 | }) | 320 | }) |
@@ -344,14 +354,16 @@ class TagCloudControllerTest extends TestCase | |||
344 | 354 | ||
345 | // Make sure that PluginManager hook is triggered | 355 | // Make sure that PluginManager hook is triggered |
346 | $this->container->pluginManager | 356 | $this->container->pluginManager |
347 | ->expects(static::at(0)) | 357 | ->expects(static::atLeastOnce()) |
348 | ->method('executeHooks') | 358 | ->method('executeHooks') |
359 | ->withConsecutive(['render_taglist']) | ||
349 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 360 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
350 | static::assertSame('render_taglist', $hook); | 361 | if ('render_taglist' === $hook) { |
351 | static::assertSame('', $data['search_tags']); | 362 | static::assertSame('', $data['search_tags']); |
352 | static::assertCount(0, $data['tags']); | 363 | static::assertCount(0, $data['tags']); |
353 | 364 | ||
354 | static::assertArrayHasKey('loggedin', $param); | 365 | static::assertArrayHasKey('loggedin', $param); |
366 | } | ||
355 | 367 | ||
356 | return $data; | 368 | return $data; |
357 | }) | 369 | }) |
diff --git a/tests/front/controller/visitor/TagControllerTest.php b/tests/front/controller/visitor/TagControllerTest.php index 43076086..750ea02d 100644 --- a/tests/front/controller/visitor/TagControllerTest.php +++ b/tests/front/controller/visitor/TagControllerTest.php | |||
@@ -4,7 +4,7 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Front\Controller\Visitor; | 5 | namespace Shaarli\Front\Controller\Visitor; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | 7 | use Shaarli\TestCase; |
8 | use Slim\Http\Request; | 8 | use Slim\Http\Request; |
9 | use Slim\Http\Response; | 9 | use Slim\Http\Response; |
10 | 10 | ||
diff --git a/tests/http/HttpUtils/ClientIpIdTest.php b/tests/http/HttpUtils/ClientIpIdTest.php index 982e57e0..3a0fcf30 100644 --- a/tests/http/HttpUtils/ClientIpIdTest.php +++ b/tests/http/HttpUtils/ClientIpIdTest.php | |||
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php'; | |||
10 | /** | 10 | /** |
11 | * Unitary tests for client_ip_id() | 11 | * Unitary tests for client_ip_id() |
12 | */ | 12 | */ |
13 | class ClientIpIdTest extends \PHPUnit\Framework\TestCase | 13 | class ClientIpIdTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | /** | 15 | /** |
16 | * Get a remote client ID based on its IP | 16 | * Get a remote client ID based on its IP |
diff --git a/tests/http/HttpUtils/GetHttpUrlTest.php b/tests/http/HttpUtils/GetHttpUrlTest.php index 3dc5bc9b..a868ac02 100644 --- a/tests/http/HttpUtils/GetHttpUrlTest.php +++ b/tests/http/HttpUtils/GetHttpUrlTest.php | |||
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php'; | |||
10 | /** | 10 | /** |
11 | * Unitary tests for get_http_response() | 11 | * Unitary tests for get_http_response() |
12 | */ | 12 | */ |
13 | class GetHttpUrlTest extends \PHPUnit\Framework\TestCase | 13 | class GetHttpUrlTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | /** | 15 | /** |
16 | * Get an invalid local URL | 16 | * Get an invalid local URL |
diff --git a/tests/http/HttpUtils/GetIpAdressFromProxyTest.php b/tests/http/HttpUtils/GetIpAdressFromProxyTest.php index fe3a639e..60cdb992 100644 --- a/tests/http/HttpUtils/GetIpAdressFromProxyTest.php +++ b/tests/http/HttpUtils/GetIpAdressFromProxyTest.php | |||
@@ -7,7 +7,7 @@ require_once 'application/http/HttpUtils.php'; | |||
7 | /** | 7 | /** |
8 | * Unitary tests for getIpAddressFromProxy() | 8 | * Unitary tests for getIpAddressFromProxy() |
9 | */ | 9 | */ |
10 | class GetIpAdressFromProxyTest extends \PHPUnit\Framework\TestCase | 10 | class GetIpAdressFromProxyTest extends \Shaarli\TestCase |
11 | { | 11 | { |
12 | 12 | ||
13 | /** | 13 | /** |
diff --git a/tests/http/HttpUtils/IndexUrlTest.php b/tests/http/HttpUtils/IndexUrlTest.php index 73d33cd4..f283d119 100644 --- a/tests/http/HttpUtils/IndexUrlTest.php +++ b/tests/http/HttpUtils/IndexUrlTest.php | |||
@@ -5,12 +5,14 @@ | |||
5 | 5 | ||
6 | namespace Shaarli\Http; | 6 | namespace Shaarli\Http; |
7 | 7 | ||
8 | use Shaarli\TestCase; | ||
9 | |||
8 | require_once 'application/http/HttpUtils.php'; | 10 | require_once 'application/http/HttpUtils.php'; |
9 | 11 | ||
10 | /** | 12 | /** |
11 | * Unitary tests for index_url() | 13 | * Unitary tests for index_url() |
12 | */ | 14 | */ |
13 | class IndexUrlTest extends \PHPUnit\Framework\TestCase | 15 | class IndexUrlTest extends TestCase |
14 | { | 16 | { |
15 | /** | 17 | /** |
16 | * If on the main page, remove "index.php" from the URL resource | 18 | * If on the main page, remove "index.php" from the URL resource |
@@ -103,4 +105,36 @@ class IndexUrlTest extends \PHPUnit\Framework\TestCase | |||
103 | ) | 105 | ) |
104 | ); | 106 | ); |
105 | } | 107 | } |
108 | |||
109 | /** | ||
110 | * The route is stored in REQUEST_URI and subfolder | ||
111 | */ | ||
112 | public function testPageUrlWithRouteUnderSubfolder() | ||
113 | { | ||
114 | $this->assertEquals( | ||
115 | 'http://host.tld/subfolder/picture-wall', | ||
116 | page_url( | ||
117 | array( | ||
118 | 'HTTPS' => 'Off', | ||
119 | 'SERVER_NAME' => 'host.tld', | ||
120 | 'SERVER_PORT' => '80', | ||
121 | 'SCRIPT_NAME' => '/subfolder/index.php', | ||
122 | 'REQUEST_URI' => '/subfolder/picture-wall', | ||
123 | ) | ||
124 | ) | ||
125 | ); | ||
126 | |||
127 | $this->assertEquals( | ||
128 | 'http://host.tld/subfolder/admin/picture-wall', | ||
129 | page_url( | ||
130 | array( | ||
131 | 'HTTPS' => 'Off', | ||
132 | 'SERVER_NAME' => 'host.tld', | ||
133 | 'SERVER_PORT' => '80', | ||
134 | 'SCRIPT_NAME' => '/subfolder/admin/index.php', | ||
135 | 'REQUEST_URI' => '/subfolder/admin/picture-wall', | ||
136 | ) | ||
137 | ) | ||
138 | ); | ||
139 | } | ||
106 | } | 140 | } |
diff --git a/tests/http/HttpUtils/IndexUrlTestWithConstant.php b/tests/http/HttpUtils/IndexUrlTestWithConstant.php new file mode 100644 index 00000000..ecaea724 --- /dev/null +++ b/tests/http/HttpUtils/IndexUrlTestWithConstant.php | |||
@@ -0,0 +1,51 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\Http; | ||
6 | |||
7 | use Shaarli\TestCase; | ||
8 | |||
9 | /** | ||
10 | * Test index_url with SHAARLI_ROOT_URL defined to override automatic retrieval. | ||
11 | * This should stay in its dedicated class to make sure to not alter other tests of the suite. | ||
12 | */ | ||
13 | class IndexUrlTestWithConstant extends TestCase | ||
14 | { | ||
15 | public static function setUpBeforeClass(): void | ||
16 | { | ||
17 | define('SHAARLI_ROOT_URL', 'http://other-host.tld/subfolder/'); | ||
18 | } | ||
19 | |||
20 | /** | ||
21 | * The route is stored in REQUEST_URI and subfolder | ||
22 | */ | ||
23 | public function testIndexUrlWithConstantDefined() | ||
24 | { | ||
25 | $this->assertEquals( | ||
26 | 'http://other-host.tld/subfolder/', | ||
27 | index_url( | ||
28 | array( | ||
29 | 'HTTPS' => 'Off', | ||
30 | 'SERVER_NAME' => 'host.tld', | ||
31 | 'SERVER_PORT' => '80', | ||
32 | 'SCRIPT_NAME' => '/index.php', | ||
33 | 'REQUEST_URI' => '/picture-wall', | ||
34 | ) | ||
35 | ) | ||
36 | ); | ||
37 | |||
38 | $this->assertEquals( | ||
39 | 'http://other-host.tld/subfolder/', | ||
40 | index_url( | ||
41 | array( | ||
42 | 'HTTPS' => 'Off', | ||
43 | 'SERVER_NAME' => 'host.tld', | ||
44 | 'SERVER_PORT' => '80', | ||
45 | 'SCRIPT_NAME' => '/admin/index.php', | ||
46 | 'REQUEST_URI' => '/admin/picture-wall', | ||
47 | ) | ||
48 | ) | ||
49 | ); | ||
50 | } | ||
51 | } | ||
diff --git a/tests/http/HttpUtils/IsHttpsTest.php b/tests/http/HttpUtils/IsHttpsTest.php index 348956c6..8b3fd93d 100644 --- a/tests/http/HttpUtils/IsHttpsTest.php +++ b/tests/http/HttpUtils/IsHttpsTest.php | |||
@@ -9,7 +9,7 @@ require_once 'application/http/HttpUtils.php'; | |||
9 | * | 9 | * |
10 | * Test class for is_https() function. | 10 | * Test class for is_https() function. |
11 | */ | 11 | */ |
12 | class IsHttpsTest extends \PHPUnit\Framework\TestCase | 12 | class IsHttpsTest extends \Shaarli\TestCase |
13 | { | 13 | { |
14 | 14 | ||
15 | /** | 15 | /** |
diff --git a/tests/http/HttpUtils/PageUrlTest.php b/tests/http/HttpUtils/PageUrlTest.php index f1991716..ebb3e617 100644 --- a/tests/http/HttpUtils/PageUrlTest.php +++ b/tests/http/HttpUtils/PageUrlTest.php | |||
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php'; | |||
10 | /** | 10 | /** |
11 | * Unitary tests for page_url() | 11 | * Unitary tests for page_url() |
12 | */ | 12 | */ |
13 | class PageUrlTest extends \PHPUnit\Framework\TestCase | 13 | class PageUrlTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | /** | 15 | /** |
16 | * If on the main page, remove "index.php" from the URL resource | 16 | * If on the main page, remove "index.php" from the URL resource |
diff --git a/tests/http/HttpUtils/ServerUrlTest.php b/tests/http/HttpUtils/ServerUrlTest.php index 9caf1049..339664e1 100644 --- a/tests/http/HttpUtils/ServerUrlTest.php +++ b/tests/http/HttpUtils/ServerUrlTest.php | |||
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php'; | |||
10 | /** | 10 | /** |
11 | * Unitary tests for server_url() | 11 | * Unitary tests for server_url() |
12 | */ | 12 | */ |
13 | class ServerUrlTest extends \PHPUnit\Framework\TestCase | 13 | class ServerUrlTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | /** | 15 | /** |
16 | * Detect if the server uses SSL | 16 | * Detect if the server uses SSL |
diff --git a/tests/http/UrlTest.php b/tests/http/UrlTest.php index ae92f73a..c6b39c29 100644 --- a/tests/http/UrlTest.php +++ b/tests/http/UrlTest.php | |||
@@ -8,7 +8,7 @@ namespace Shaarli\Http; | |||
8 | /** | 8 | /** |
9 | * Unitary tests for URL utilities | 9 | * Unitary tests for URL utilities |
10 | */ | 10 | */ |
11 | class UrlTest extends \PHPUnit\Framework\TestCase | 11 | class UrlTest extends \Shaarli\TestCase |
12 | { | 12 | { |
13 | // base URL for tests | 13 | // base URL for tests |
14 | protected static $baseUrl = 'http://domain.tld:3000'; | 14 | protected static $baseUrl = 'http://domain.tld:3000'; |
diff --git a/tests/http/UrlUtils/CleanupUrlTest.php b/tests/http/UrlUtils/CleanupUrlTest.php index 6c4d124b..45690ecf 100644 --- a/tests/http/UrlUtils/CleanupUrlTest.php +++ b/tests/http/UrlUtils/CleanupUrlTest.php | |||
@@ -7,7 +7,7 @@ namespace Shaarli\Http; | |||
7 | 7 | ||
8 | require_once 'application/http/UrlUtils.php'; | 8 | require_once 'application/http/UrlUtils.php'; |
9 | 9 | ||
10 | class CleanupUrlTest extends \PHPUnit\Framework\TestCase | 10 | class CleanupUrlTest extends \Shaarli\TestCase |
11 | { | 11 | { |
12 | /** | 12 | /** |
13 | * @var string reference URL | 13 | * @var string reference URL |
diff --git a/tests/http/UrlUtils/GetUrlSchemeTest.php b/tests/http/UrlUtils/GetUrlSchemeTest.php index 2b97f7be..18a9a5e5 100644 --- a/tests/http/UrlUtils/GetUrlSchemeTest.php +++ b/tests/http/UrlUtils/GetUrlSchemeTest.php | |||
@@ -7,7 +7,7 @@ namespace Shaarli\Http; | |||
7 | 7 | ||
8 | require_once 'application/http/UrlUtils.php'; | 8 | require_once 'application/http/UrlUtils.php'; |
9 | 9 | ||
10 | class GetUrlSchemeTest extends \PHPUnit\Framework\TestCase | 10 | class GetUrlSchemeTest extends \Shaarli\TestCase |
11 | { | 11 | { |
12 | /** | 12 | /** |
13 | * Get empty scheme string for empty UrlUtils | 13 | * Get empty scheme string for empty UrlUtils |
diff --git a/tests/http/UrlUtils/UnparseUrlTest.php b/tests/http/UrlUtils/UnparseUrlTest.php index 040d8c54..5e6246cc 100644 --- a/tests/http/UrlUtils/UnparseUrlTest.php +++ b/tests/http/UrlUtils/UnparseUrlTest.php | |||
@@ -10,7 +10,7 @@ require_once 'application/http/UrlUtils.php'; | |||
10 | /** | 10 | /** |
11 | * Unitary tests for unparse_url() | 11 | * Unitary tests for unparse_url() |
12 | */ | 12 | */ |
13 | class UnparseUrlTest extends \PHPUnit\Framework\TestCase | 13 | class UnparseUrlTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | /** | 15 | /** |
16 | * Thanks for building nothing | 16 | * Thanks for building nothing |
diff --git a/tests/http/UrlUtils/WhitelistProtocolsTest.php b/tests/http/UrlUtils/WhitelistProtocolsTest.php index 69512dbd..b8a6baaa 100644 --- a/tests/http/UrlUtils/WhitelistProtocolsTest.php +++ b/tests/http/UrlUtils/WhitelistProtocolsTest.php | |||
@@ -9,7 +9,7 @@ require_once 'application/http/UrlUtils.php'; | |||
9 | * | 9 | * |
10 | * Test whitelist_protocols() function of UrlUtils. | 10 | * Test whitelist_protocols() function of UrlUtils. |
11 | */ | 11 | */ |
12 | class WhitelistProtocolsTest extends \PHPUnit\Framework\TestCase | 12 | class WhitelistProtocolsTest extends \Shaarli\TestCase |
13 | { | 13 | { |
14 | /** | 14 | /** |
15 | * Test whitelist_protocols() on a note (relative URL). | 15 | * Test whitelist_protocols() on a note (relative URL). |
diff --git a/tests/languages/fr/LanguagesFrTest.php b/tests/languages/fr/LanguagesFrTest.php index b8b7ca3a..d84feed1 100644 --- a/tests/languages/fr/LanguagesFrTest.php +++ b/tests/languages/fr/LanguagesFrTest.php | |||
@@ -12,7 +12,7 @@ use Shaarli\Config\ConfigManager; | |||
12 | * | 12 | * |
13 | * @package Shaarli | 13 | * @package Shaarli |
14 | */ | 14 | */ |
15 | class LanguagesFrTest extends \PHPUnit\Framework\TestCase | 15 | class LanguagesFrTest extends \Shaarli\TestCase |
16 | { | 16 | { |
17 | /** | 17 | /** |
18 | * @var string Config file path (without extension). | 18 | * @var string Config file path (without extension). |
@@ -27,7 +27,7 @@ class LanguagesFrTest extends \PHPUnit\Framework\TestCase | |||
27 | /** | 27 | /** |
28 | * Init: force French | 28 | * Init: force French |
29 | */ | 29 | */ |
30 | public function setUp() | 30 | protected function setUp(): void |
31 | { | 31 | { |
32 | $this->conf = new ConfigManager(self::$configFile); | 32 | $this->conf = new ConfigManager(self::$configFile); |
33 | $this->conf->set('translation.language', 'fr'); | 33 | $this->conf->set('translation.language', 'fr'); |
@@ -36,7 +36,7 @@ class LanguagesFrTest extends \PHPUnit\Framework\TestCase | |||
36 | /** | 36 | /** |
37 | * Reset the locale since gettext seems to mess with it, making it too long | 37 | * Reset the locale since gettext seems to mess with it, making it too long |
38 | */ | 38 | */ |
39 | public static function tearDownAfterClass() | 39 | public static function tearDownAfterClass(): void |
40 | { | 40 | { |
41 | if (! empty(getenv('UT_LOCALE'))) { | 41 | if (! empty(getenv('UT_LOCALE'))) { |
42 | setlocale(LC_ALL, getenv('UT_LOCALE')); | 42 | setlocale(LC_ALL, getenv('UT_LOCALE')); |
diff --git a/tests/legacy/LegacyControllerTest.php b/tests/legacy/LegacyControllerTest.php index 759a5b2a..1a2549a3 100644 --- a/tests/legacy/LegacyControllerTest.php +++ b/tests/legacy/LegacyControllerTest.php | |||
@@ -4,8 +4,8 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Legacy; | 5 | namespace Shaarli\Legacy; |
6 | 6 | ||
7 | use PHPUnit\Framework\TestCase; | ||
8 | use Shaarli\Front\Controller\Visitor\FrontControllerMockHelper; | 7 | use Shaarli\Front\Controller\Visitor\FrontControllerMockHelper; |
8 | use Shaarli\TestCase; | ||
9 | use Slim\Http\Request; | 9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | 10 | use Slim\Http\Response; |
11 | 11 | ||
@@ -66,11 +66,11 @@ class LegacyControllerTest extends TestCase | |||
66 | { | 66 | { |
67 | return [ | 67 | return [ |
68 | ['post', [], '/admin/shaare', true], | 68 | ['post', [], '/admin/shaare', true], |
69 | ['post', [], '/login', false], | 69 | ['post', [], '/login?returnurl=/subfolder/admin/shaare', false], |
70 | ['post', ['title' => 'test'], '/admin/shaare?title=test', true], | 70 | ['post', ['title' => 'test'], '/admin/shaare?title=test', true], |
71 | ['post', ['title' => 'test'], '/login?title=test', false], | 71 | ['post', ['title' => 'test'], '/login?returnurl=/subfolder/admin/shaare?title=test', false], |
72 | ['addlink', [], '/admin/add-shaare', true], | 72 | ['addlink', [], '/admin/add-shaare', true], |
73 | ['addlink', [], '/login', false], | 73 | ['addlink', [], '/login?returnurl=/subfolder/admin/add-shaare', false], |
74 | ['login', [], '/login', true], | 74 | ['login', [], '/login', true], |
75 | ['login', [], '/login', false], | 75 | ['login', [], '/login', false], |
76 | ['logout', [], '/admin/logout', true], | 76 | ['logout', [], '/admin/logout', true], |
@@ -94,6 +94,8 @@ class LegacyControllerTest extends TestCase | |||
94 | ['opensearch', [], '/open-search', true], | 94 | ['opensearch', [], '/open-search', true], |
95 | ['dailyrss', [], '/daily-rss', false], | 95 | ['dailyrss', [], '/daily-rss', false], |
96 | ['dailyrss', [], '/daily-rss', true], | 96 | ['dailyrss', [], '/daily-rss', true], |
97 | ['configure', [], '/login?returnurl=/subfolder/admin/configure', false], | ||
98 | ['configure', [], '/admin/configure', true], | ||
97 | ]; | 99 | ]; |
98 | } | 100 | } |
99 | } | 101 | } |
diff --git a/tests/legacy/LegacyLinkDBTest.php b/tests/legacy/LegacyLinkDBTest.php index 0884ad03..df2cad62 100644 --- a/tests/legacy/LegacyLinkDBTest.php +++ b/tests/legacy/LegacyLinkDBTest.php | |||
@@ -18,7 +18,7 @@ require_once 'tests/utils/ReferenceLinkDB.php'; | |||
18 | /** | 18 | /** |
19 | * Unitary tests for LegacyLinkDBTest | 19 | * Unitary tests for LegacyLinkDBTest |
20 | */ | 20 | */ |
21 | class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase | 21 | class LegacyLinkDBTest extends \Shaarli\TestCase |
22 | { | 22 | { |
23 | // datastore to test write operations | 23 | // datastore to test write operations |
24 | protected static $testDatastore = 'sandbox/datastore.php'; | 24 | protected static $testDatastore = 'sandbox/datastore.php'; |
@@ -52,7 +52,7 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase | |||
52 | * | 52 | * |
53 | * Resets test data for each test | 53 | * Resets test data for each test |
54 | */ | 54 | */ |
55 | protected function setUp() | 55 | protected function setUp(): void |
56 | { | 56 | { |
57 | if (file_exists(self::$testDatastore)) { | 57 | if (file_exists(self::$testDatastore)) { |
58 | unlink(self::$testDatastore); | 58 | unlink(self::$testDatastore); |
@@ -99,12 +99,12 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase | |||
99 | 99 | ||
100 | /** | 100 | /** |
101 | * Attempt to instantiate a LinkDB whereas the datastore is not writable | 101 | * Attempt to instantiate a LinkDB whereas the datastore is not writable |
102 | * | ||
103 | * @expectedException Shaarli\Exceptions\IOException | ||
104 | * @expectedExceptionMessageRegExp /Error accessing "null"/ | ||
105 | */ | 102 | */ |
106 | public function testConstructDatastoreNotWriteable() | 103 | public function testConstructDatastoreNotWriteable() |
107 | { | 104 | { |
105 | $this->expectException(\Shaarli\Exceptions\IOException::class); | ||
106 | $this->expectExceptionMessageRegExp('/Error accessing "null"/'); | ||
107 | |||
108 | new LegacyLinkDB('null/store.db', false, false); | 108 | new LegacyLinkDB('null/store.db', false, false); |
109 | } | 109 | } |
110 | 110 | ||
@@ -257,7 +257,7 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase | |||
257 | $link = self::$publicLinkDB->getLinkFromUrl('http://mediagoblin.org/'); | 257 | $link = self::$publicLinkDB->getLinkFromUrl('http://mediagoblin.org/'); |
258 | 258 | ||
259 | $this->assertNotEquals(false, $link); | 259 | $this->assertNotEquals(false, $link); |
260 | $this->assertContains( | 260 | $this->assertContainsPolyfill( |
261 | 'A free software media publishing platform', | 261 | 'A free software media publishing platform', |
262 | $link['description'] | 262 | $link['description'] |
263 | ); | 263 | ); |
@@ -420,22 +420,22 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase | |||
420 | 420 | ||
421 | /** | 421 | /** |
422 | * Test filterHash() with an invalid smallhash. | 422 | * Test filterHash() with an invalid smallhash. |
423 | * | ||
424 | * @expectedException \Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
425 | */ | 423 | */ |
426 | public function testFilterHashInValid1() | 424 | public function testFilterHashInValid1() |
427 | { | 425 | { |
426 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
427 | |||
428 | $request = 'blabla'; | 428 | $request = 'blabla'; |
429 | self::$publicLinkDB->filterHash($request); | 429 | self::$publicLinkDB->filterHash($request); |
430 | } | 430 | } |
431 | 431 | ||
432 | /** | 432 | /** |
433 | * Test filterHash() with an empty smallhash. | 433 | * Test filterHash() with an empty smallhash. |
434 | * | ||
435 | * @expectedException \Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
436 | */ | 434 | */ |
437 | public function testFilterHashInValid() | 435 | public function testFilterHashInValid() |
438 | { | 436 | { |
437 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
438 | |||
439 | self::$publicLinkDB->filterHash(''); | 439 | self::$publicLinkDB->filterHash(''); |
440 | } | 440 | } |
441 | 441 | ||
@@ -470,9 +470,9 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase | |||
470 | 470 | ||
471 | $res = $linkDB->renameTag('cartoon', 'Taz'); | 471 | $res = $linkDB->renameTag('cartoon', 'Taz'); |
472 | $this->assertEquals(3, count($res)); | 472 | $this->assertEquals(3, count($res)); |
473 | $this->assertContains(' Taz ', $linkDB[4]['tags']); | 473 | $this->assertContainsPolyfill(' Taz ', $linkDB[4]['tags']); |
474 | $this->assertContains(' Taz ', $linkDB[1]['tags']); | 474 | $this->assertContainsPolyfill(' Taz ', $linkDB[1]['tags']); |
475 | $this->assertContains(' Taz ', $linkDB[0]['tags']); | 475 | $this->assertContainsPolyfill(' Taz ', $linkDB[0]['tags']); |
476 | } | 476 | } |
477 | 477 | ||
478 | /** | 478 | /** |
@@ -512,7 +512,7 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase | |||
512 | 512 | ||
513 | $res = $linkDB->renameTag('cartoon', null); | 513 | $res = $linkDB->renameTag('cartoon', null); |
514 | $this->assertEquals(3, count($res)); | 514 | $this->assertEquals(3, count($res)); |
515 | $this->assertNotContains('cartoon', $linkDB[4]['tags']); | 515 | $this->assertNotContainsPolyfill('cartoon', $linkDB[4]['tags']); |
516 | } | 516 | } |
517 | 517 | ||
518 | /** | 518 | /** |
diff --git a/tests/legacy/LegacyLinkFilterTest.php b/tests/legacy/LegacyLinkFilterTest.php index ba9ec529..45d7754d 100644 --- a/tests/legacy/LegacyLinkFilterTest.php +++ b/tests/legacy/LegacyLinkFilterTest.php | |||
@@ -10,7 +10,7 @@ use Shaarli\Legacy\LegacyLinkFilter; | |||
10 | /** | 10 | /** |
11 | * Class LegacyLinkFilterTest. | 11 | * Class LegacyLinkFilterTest. |
12 | */ | 12 | */ |
13 | class LegacyLinkFilterTest extends \PHPUnit\Framework\TestCase | 13 | class LegacyLinkFilterTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | /** | 15 | /** |
16 | * @var string Test datastore path. | 16 | * @var string Test datastore path. |
@@ -34,7 +34,7 @@ class LegacyLinkFilterTest extends \PHPUnit\Framework\TestCase | |||
34 | /** | 34 | /** |
35 | * Instantiate linkFilter with ReferenceLinkDB data. | 35 | * Instantiate linkFilter with ReferenceLinkDB data. |
36 | */ | 36 | */ |
37 | public static function setUpBeforeClass() | 37 | public static function setUpBeforeClass(): void |
38 | { | 38 | { |
39 | self::$refDB = new ReferenceLinkDB(true); | 39 | self::$refDB = new ReferenceLinkDB(true); |
40 | self::$refDB->write(self::$testDatastore); | 40 | self::$refDB->write(self::$testDatastore); |
@@ -197,21 +197,23 @@ class LegacyLinkFilterTest extends \PHPUnit\Framework\TestCase | |||
197 | 197 | ||
198 | /** | 198 | /** |
199 | * Use an invalid date format | 199 | * Use an invalid date format |
200 | * @expectedException Exception | ||
201 | * @expectedExceptionMessageRegExp /Invalid date format/ | ||
202 | */ | 200 | */ |
203 | public function testFilterInvalidDayWithChars() | 201 | public function testFilterInvalidDayWithChars() |
204 | { | 202 | { |
203 | $this->expectException(\Exception::class); | ||
204 | $this->expectExceptionMessageRegExp('/Invalid date format/'); | ||
205 | |||
205 | self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, 'Rainy day, dream away'); | 206 | self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, 'Rainy day, dream away'); |
206 | } | 207 | } |
207 | 208 | ||
208 | /** | 209 | /** |
209 | * Use an invalid date format | 210 | * Use an invalid date format |
210 | * @expectedException Exception | ||
211 | * @expectedExceptionMessageRegExp /Invalid date format/ | ||
212 | */ | 211 | */ |
213 | public function testFilterInvalidDayDigits() | 212 | public function testFilterInvalidDayDigits() |
214 | { | 213 | { |
214 | $this->expectException(\Exception::class); | ||
215 | $this->expectExceptionMessageRegExp('/Invalid date format/'); | ||
216 | |||
215 | self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, '20'); | 217 | self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, '20'); |
216 | } | 218 | } |
217 | 219 | ||
@@ -235,11 +237,11 @@ class LegacyLinkFilterTest extends \PHPUnit\Framework\TestCase | |||
235 | 237 | ||
236 | /** | 238 | /** |
237 | * No link for this hash | 239 | * No link for this hash |
238 | * | ||
239 | * @expectedException \Shaarli\Bookmark\Exception\BookmarkNotFoundException | ||
240 | */ | 240 | */ |
241 | public function testFilterUnknownSmallHash() | 241 | public function testFilterUnknownSmallHash() |
242 | { | 242 | { |
243 | $this->expectException(\Shaarli\Bookmark\Exception\BookmarkNotFoundException::class); | ||
244 | |||
243 | self::$linkFilter->filter(LegacyLinkFilter::$FILTER_HASH, 'Iblaah'); | 245 | self::$linkFilter->filter(LegacyLinkFilter::$FILTER_HASH, 'Iblaah'); |
244 | } | 246 | } |
245 | 247 | ||
diff --git a/tests/legacy/LegacyRouterTest.php b/tests/legacy/LegacyRouterTest.php deleted file mode 100644 index c2019ca7..00000000 --- a/tests/legacy/LegacyRouterTest.php +++ /dev/null | |||
@@ -1,512 +0,0 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Shaarli\Legacy; | ||
4 | |||
5 | use PHPUnit\Framework\TestCase; | ||
6 | |||
7 | /** | ||
8 | * Unit tests for Router | ||
9 | */ | ||
10 | class LegacyRouterTest extends TestCase | ||
11 | { | ||
12 | /** | ||
13 | * Test findPage: login page output. | ||
14 | * Valid: page should be return. | ||
15 | * | ||
16 | * @return void | ||
17 | */ | ||
18 | public function testFindPageLoginValid() | ||
19 | { | ||
20 | $this->assertEquals( | ||
21 | LegacyRouter::$PAGE_LOGIN, | ||
22 | LegacyRouter::findPage('do=login', array(), false) | ||
23 | ); | ||
24 | |||
25 | $this->assertEquals( | ||
26 | LegacyRouter::$PAGE_LOGIN, | ||
27 | LegacyRouter::findPage('do=login', array(), 1) | ||
28 | ); | ||
29 | |||
30 | $this->assertEquals( | ||
31 | LegacyRouter::$PAGE_LOGIN, | ||
32 | LegacyRouter::findPage('do=login&stuff', array(), false) | ||
33 | ); | ||
34 | } | ||
35 | |||
36 | /** | ||
37 | * Test findPage: login page output. | ||
38 | * Invalid: page shouldn't be return. | ||
39 | * | ||
40 | * @return void | ||
41 | */ | ||
42 | public function testFindPageLoginInvalid() | ||
43 | { | ||
44 | $this->assertNotEquals( | ||
45 | LegacyRouter::$PAGE_LOGIN, | ||
46 | LegacyRouter::findPage('do=login', array(), true) | ||
47 | ); | ||
48 | |||
49 | $this->assertNotEquals( | ||
50 | LegacyRouter::$PAGE_LOGIN, | ||
51 | LegacyRouter::findPage('do=other', array(), false) | ||
52 | ); | ||
53 | } | ||
54 | |||
55 | /** | ||
56 | * Test findPage: picwall page output. | ||
57 | * Valid: page should be return. | ||
58 | * | ||
59 | * @return void | ||
60 | */ | ||
61 | public function testFindPagePicwallValid() | ||
62 | { | ||
63 | $this->assertEquals( | ||
64 | LegacyRouter::$PAGE_PICWALL, | ||
65 | LegacyRouter::findPage('do=picwall', array(), false) | ||
66 | ); | ||
67 | |||
68 | $this->assertEquals( | ||
69 | LegacyRouter::$PAGE_PICWALL, | ||
70 | LegacyRouter::findPage('do=picwall', array(), true) | ||
71 | ); | ||
72 | } | ||
73 | |||
74 | /** | ||
75 | * Test findPage: picwall page output. | ||
76 | * Invalid: page shouldn't be return. | ||
77 | * | ||
78 | * @return void | ||
79 | */ | ||
80 | public function testFindPagePicwallInvalid() | ||
81 | { | ||
82 | $this->assertEquals( | ||
83 | LegacyRouter::$PAGE_PICWALL, | ||
84 | LegacyRouter::findPage('do=picwall&stuff', array(), false) | ||
85 | ); | ||
86 | |||
87 | $this->assertNotEquals( | ||
88 | LegacyRouter::$PAGE_PICWALL, | ||
89 | LegacyRouter::findPage('do=other', array(), false) | ||
90 | ); | ||
91 | } | ||
92 | |||
93 | /** | ||
94 | * Test findPage: tagcloud page output. | ||
95 | * Valid: page should be return. | ||
96 | * | ||
97 | * @return void | ||
98 | */ | ||
99 | public function testFindPageTagcloudValid() | ||
100 | { | ||
101 | $this->assertEquals( | ||
102 | LegacyRouter::$PAGE_TAGCLOUD, | ||
103 | LegacyRouter::findPage('do=tagcloud', array(), false) | ||
104 | ); | ||
105 | |||
106 | $this->assertEquals( | ||
107 | LegacyRouter::$PAGE_TAGCLOUD, | ||
108 | LegacyRouter::findPage('do=tagcloud', array(), true) | ||
109 | ); | ||
110 | |||
111 | $this->assertEquals( | ||
112 | LegacyRouter::$PAGE_TAGCLOUD, | ||
113 | LegacyRouter::findPage('do=tagcloud&stuff', array(), false) | ||
114 | ); | ||
115 | } | ||
116 | |||
117 | /** | ||
118 | * Test findPage: tagcloud page output. | ||
119 | * Invalid: page shouldn't be return. | ||
120 | * | ||
121 | * @return void | ||
122 | */ | ||
123 | public function testFindPageTagcloudInvalid() | ||
124 | { | ||
125 | $this->assertNotEquals( | ||
126 | LegacyRouter::$PAGE_TAGCLOUD, | ||
127 | LegacyRouter::findPage('do=other', array(), false) | ||
128 | ); | ||
129 | } | ||
130 | |||
131 | /** | ||
132 | * Test findPage: linklist page output. | ||
133 | * Valid: page should be return. | ||
134 | * | ||
135 | * @return void | ||
136 | */ | ||
137 | public function testFindPageLinklistValid() | ||
138 | { | ||
139 | $this->assertEquals( | ||
140 | LegacyRouter::$PAGE_LINKLIST, | ||
141 | LegacyRouter::findPage('', array(), true) | ||
142 | ); | ||
143 | |||
144 | $this->assertEquals( | ||
145 | LegacyRouter::$PAGE_LINKLIST, | ||
146 | LegacyRouter::findPage('whatever', array(), true) | ||
147 | ); | ||
148 | |||
149 | $this->assertEquals( | ||
150 | LegacyRouter::$PAGE_LINKLIST, | ||
151 | LegacyRouter::findPage('whatever', array(), false) | ||
152 | ); | ||
153 | |||
154 | $this->assertEquals( | ||
155 | LegacyRouter::$PAGE_LINKLIST, | ||
156 | LegacyRouter::findPage('do=tools', array(), false) | ||
157 | ); | ||
158 | } | ||
159 | |||
160 | /** | ||
161 | * Test findPage: tools page output. | ||
162 | * Valid: page should be return. | ||
163 | * | ||
164 | * @return void | ||
165 | */ | ||
166 | public function testFindPageToolsValid() | ||
167 | { | ||
168 | $this->assertEquals( | ||
169 | LegacyRouter::$PAGE_TOOLS, | ||
170 | LegacyRouter::findPage('do=tools', array(), true) | ||
171 | ); | ||
172 | |||
173 | $this->assertEquals( | ||
174 | LegacyRouter::$PAGE_TOOLS, | ||
175 | LegacyRouter::findPage('do=tools&stuff', array(), true) | ||
176 | ); | ||
177 | } | ||
178 | |||
179 | /** | ||
180 | * Test findPage: tools page output. | ||
181 | * Invalid: page shouldn't be return. | ||
182 | * | ||
183 | * @return void | ||
184 | */ | ||
185 | public function testFindPageToolsInvalid() | ||
186 | { | ||
187 | $this->assertNotEquals( | ||
188 | LegacyRouter::$PAGE_TOOLS, | ||
189 | LegacyRouter::findPage('do=tools', array(), 1) | ||
190 | ); | ||
191 | |||
192 | $this->assertNotEquals( | ||
193 | LegacyRouter::$PAGE_TOOLS, | ||
194 | LegacyRouter::findPage('do=tools', array(), false) | ||
195 | ); | ||
196 | |||
197 | $this->assertNotEquals( | ||
198 | LegacyRouter::$PAGE_TOOLS, | ||
199 | LegacyRouter::findPage('do=other', array(), true) | ||
200 | ); | ||
201 | } | ||
202 | |||
203 | /** | ||
204 | * Test findPage: changepasswd page output. | ||
205 | * Valid: page should be return. | ||
206 | * | ||
207 | * @return void | ||
208 | */ | ||
209 | public function testFindPageChangepasswdValid() | ||
210 | { | ||
211 | $this->assertEquals( | ||
212 | LegacyRouter::$PAGE_CHANGEPASSWORD, | ||
213 | LegacyRouter::findPage('do=changepasswd', array(), true) | ||
214 | ); | ||
215 | $this->assertEquals( | ||
216 | LegacyRouter::$PAGE_CHANGEPASSWORD, | ||
217 | LegacyRouter::findPage('do=changepasswd&stuff', array(), true) | ||
218 | ); | ||
219 | } | ||
220 | |||
221 | /** | ||
222 | * Test findPage: changepasswd page output. | ||
223 | * Invalid: page shouldn't be return. | ||
224 | * | ||
225 | * @return void | ||
226 | */ | ||
227 | public function testFindPageChangepasswdInvalid() | ||
228 | { | ||
229 | $this->assertNotEquals( | ||
230 | LegacyRouter::$PAGE_CHANGEPASSWORD, | ||
231 | LegacyRouter::findPage('do=changepasswd', array(), 1) | ||
232 | ); | ||
233 | |||
234 | $this->assertNotEquals( | ||
235 | LegacyRouter::$PAGE_CHANGEPASSWORD, | ||
236 | LegacyRouter::findPage('do=changepasswd', array(), false) | ||
237 | ); | ||
238 | |||
239 | $this->assertNotEquals( | ||
240 | LegacyRouter::$PAGE_CHANGEPASSWORD, | ||
241 | LegacyRouter::findPage('do=other', array(), true) | ||
242 | ); | ||
243 | } | ||
244 | /** | ||
245 | * Test findPage: configure page output. | ||
246 | * Valid: page should be return. | ||
247 | * | ||
248 | * @return void | ||
249 | */ | ||
250 | public function testFindPageConfigureValid() | ||
251 | { | ||
252 | $this->assertEquals( | ||
253 | LegacyRouter::$PAGE_CONFIGURE, | ||
254 | LegacyRouter::findPage('do=configure', array(), true) | ||
255 | ); | ||
256 | |||
257 | $this->assertEquals( | ||
258 | LegacyRouter::$PAGE_CONFIGURE, | ||
259 | LegacyRouter::findPage('do=configure&stuff', array(), true) | ||
260 | ); | ||
261 | } | ||
262 | |||
263 | /** | ||
264 | * Test findPage: configure page output. | ||
265 | * Invalid: page shouldn't be return. | ||
266 | * | ||
267 | * @return void | ||
268 | */ | ||
269 | public function testFindPageConfigureInvalid() | ||
270 | { | ||
271 | $this->assertNotEquals( | ||
272 | LegacyRouter::$PAGE_CONFIGURE, | ||
273 | LegacyRouter::findPage('do=configure', array(), 1) | ||
274 | ); | ||
275 | |||
276 | $this->assertNotEquals( | ||
277 | LegacyRouter::$PAGE_CONFIGURE, | ||
278 | LegacyRouter::findPage('do=configure', array(), false) | ||
279 | ); | ||
280 | |||
281 | $this->assertNotEquals( | ||
282 | LegacyRouter::$PAGE_CONFIGURE, | ||
283 | LegacyRouter::findPage('do=other', array(), true) | ||
284 | ); | ||
285 | } | ||
286 | |||
287 | /** | ||
288 | * Test findPage: changetag page output. | ||
289 | * Valid: page should be return. | ||
290 | * | ||
291 | * @return void | ||
292 | */ | ||
293 | public function testFindPageChangetagValid() | ||
294 | { | ||
295 | $this->assertEquals( | ||
296 | LegacyRouter::$PAGE_CHANGETAG, | ||
297 | LegacyRouter::findPage('do=changetag', array(), true) | ||
298 | ); | ||
299 | |||
300 | $this->assertEquals( | ||
301 | LegacyRouter::$PAGE_CHANGETAG, | ||
302 | LegacyRouter::findPage('do=changetag&stuff', array(), true) | ||
303 | ); | ||
304 | } | ||
305 | |||
306 | /** | ||
307 | * Test findPage: changetag page output. | ||
308 | * Invalid: page shouldn't be return. | ||
309 | * | ||
310 | * @return void | ||
311 | */ | ||
312 | public function testFindPageChangetagInvalid() | ||
313 | { | ||
314 | $this->assertNotEquals( | ||
315 | LegacyRouter::$PAGE_CHANGETAG, | ||
316 | LegacyRouter::findPage('do=changetag', array(), 1) | ||
317 | ); | ||
318 | |||
319 | $this->assertNotEquals( | ||
320 | LegacyRouter::$PAGE_CHANGETAG, | ||
321 | LegacyRouter::findPage('do=changetag', array(), false) | ||
322 | ); | ||
323 | |||
324 | $this->assertNotEquals( | ||
325 | LegacyRouter::$PAGE_CHANGETAG, | ||
326 | LegacyRouter::findPage('do=other', array(), true) | ||
327 | ); | ||
328 | } | ||
329 | |||
330 | /** | ||
331 | * Test findPage: addlink page output. | ||
332 | * Valid: page should be return. | ||
333 | * | ||
334 | * @return void | ||
335 | */ | ||
336 | public function testFindPageAddlinkValid() | ||
337 | { | ||
338 | $this->assertEquals( | ||
339 | LegacyRouter::$PAGE_ADDLINK, | ||
340 | LegacyRouter::findPage('do=addlink', array(), true) | ||
341 | ); | ||
342 | |||
343 | $this->assertEquals( | ||
344 | LegacyRouter::$PAGE_ADDLINK, | ||
345 | LegacyRouter::findPage('do=addlink&stuff', array(), true) | ||
346 | ); | ||
347 | } | ||
348 | |||
349 | /** | ||
350 | * Test findPage: addlink page output. | ||
351 | * Invalid: page shouldn't be return. | ||
352 | * | ||
353 | * @return void | ||
354 | */ | ||
355 | public function testFindPageAddlinkInvalid() | ||
356 | { | ||
357 | $this->assertNotEquals( | ||
358 | LegacyRouter::$PAGE_ADDLINK, | ||
359 | LegacyRouter::findPage('do=addlink', array(), 1) | ||
360 | ); | ||
361 | |||
362 | $this->assertNotEquals( | ||
363 | LegacyRouter::$PAGE_ADDLINK, | ||
364 | LegacyRouter::findPage('do=addlink', array(), false) | ||
365 | ); | ||
366 | |||
367 | $this->assertNotEquals( | ||
368 | LegacyRouter::$PAGE_ADDLINK, | ||
369 | LegacyRouter::findPage('do=other', array(), true) | ||
370 | ); | ||
371 | } | ||
372 | |||
373 | /** | ||
374 | * Test findPage: export page output. | ||
375 | * Valid: page should be return. | ||
376 | * | ||
377 | * @return void | ||
378 | */ | ||
379 | public function testFindPageExportValid() | ||
380 | { | ||
381 | $this->assertEquals( | ||
382 | LegacyRouter::$PAGE_EXPORT, | ||
383 | LegacyRouter::findPage('do=export', array(), true) | ||
384 | ); | ||
385 | |||
386 | $this->assertEquals( | ||
387 | LegacyRouter::$PAGE_EXPORT, | ||
388 | LegacyRouter::findPage('do=export&stuff', array(), true) | ||
389 | ); | ||
390 | } | ||
391 | |||
392 | /** | ||
393 | * Test findPage: export page output. | ||
394 | * Invalid: page shouldn't be return. | ||
395 | * | ||
396 | * @return void | ||
397 | */ | ||
398 | public function testFindPageExportInvalid() | ||
399 | { | ||
400 | $this->assertNotEquals( | ||
401 | LegacyRouter::$PAGE_EXPORT, | ||
402 | LegacyRouter::findPage('do=export', array(), 1) | ||
403 | ); | ||
404 | |||
405 | $this->assertNotEquals( | ||
406 | LegacyRouter::$PAGE_EXPORT, | ||
407 | LegacyRouter::findPage('do=export', array(), false) | ||
408 | ); | ||
409 | |||
410 | $this->assertNotEquals( | ||
411 | LegacyRouter::$PAGE_EXPORT, | ||
412 | LegacyRouter::findPage('do=other', array(), true) | ||
413 | ); | ||
414 | } | ||
415 | |||
416 | /** | ||
417 | * Test findPage: import page output. | ||
418 | * Valid: page should be return. | ||
419 | * | ||
420 | * @return void | ||
421 | */ | ||
422 | public function testFindPageImportValid() | ||
423 | { | ||
424 | $this->assertEquals( | ||
425 | LegacyRouter::$PAGE_IMPORT, | ||
426 | LegacyRouter::findPage('do=import', array(), true) | ||
427 | ); | ||
428 | |||
429 | $this->assertEquals( | ||
430 | LegacyRouter::$PAGE_IMPORT, | ||
431 | LegacyRouter::findPage('do=import&stuff', array(), true) | ||
432 | ); | ||
433 | } | ||
434 | |||
435 | /** | ||
436 | * Test findPage: import page output. | ||
437 | * Invalid: page shouldn't be return. | ||
438 | * | ||
439 | * @return void | ||
440 | */ | ||
441 | public function testFindPageImportInvalid() | ||
442 | { | ||
443 | $this->assertNotEquals( | ||
444 | LegacyRouter::$PAGE_IMPORT, | ||
445 | LegacyRouter::findPage('do=import', array(), 1) | ||
446 | ); | ||
447 | |||
448 | $this->assertNotEquals( | ||
449 | LegacyRouter::$PAGE_IMPORT, | ||
450 | LegacyRouter::findPage('do=import', array(), false) | ||
451 | ); | ||
452 | |||
453 | $this->assertNotEquals( | ||
454 | LegacyRouter::$PAGE_IMPORT, | ||
455 | LegacyRouter::findPage('do=other', array(), true) | ||
456 | ); | ||
457 | } | ||
458 | |||
459 | /** | ||
460 | * Test findPage: editlink page output. | ||
461 | * Valid: page should be return. | ||
462 | * | ||
463 | * @return void | ||
464 | */ | ||
465 | public function testFindPageEditlinkValid() | ||
466 | { | ||
467 | $this->assertEquals( | ||
468 | LegacyRouter::$PAGE_EDITLINK, | ||
469 | LegacyRouter::findPage('whatever', array('edit_link' => 1), true) | ||
470 | ); | ||
471 | |||
472 | $this->assertEquals( | ||
473 | LegacyRouter::$PAGE_EDITLINK, | ||
474 | LegacyRouter::findPage('', array('edit_link' => 1), true) | ||
475 | ); | ||
476 | |||
477 | |||
478 | $this->assertEquals( | ||
479 | LegacyRouter::$PAGE_EDITLINK, | ||
480 | LegacyRouter::findPage('whatever', array('post' => 1), true) | ||
481 | ); | ||
482 | |||
483 | $this->assertEquals( | ||
484 | LegacyRouter::$PAGE_EDITLINK, | ||
485 | LegacyRouter::findPage('whatever', array('post' => 1, 'edit_link' => 1), true) | ||
486 | ); | ||
487 | } | ||
488 | |||
489 | /** | ||
490 | * Test findPage: editlink page output. | ||
491 | * Invalid: page shouldn't be return. | ||
492 | * | ||
493 | * @return void | ||
494 | */ | ||
495 | public function testFindPageEditlinkInvalid() | ||
496 | { | ||
497 | $this->assertNotEquals( | ||
498 | LegacyRouter::$PAGE_EDITLINK, | ||
499 | LegacyRouter::findPage('whatever', array('edit_link' => 1), false) | ||
500 | ); | ||
501 | |||
502 | $this->assertNotEquals( | ||
503 | LegacyRouter::$PAGE_EDITLINK, | ||
504 | LegacyRouter::findPage('whatever', array('edit_link' => 1), 1) | ||
505 | ); | ||
506 | |||
507 | $this->assertNotEquals( | ||
508 | LegacyRouter::$PAGE_EDITLINK, | ||
509 | LegacyRouter::findPage('whatever', array(), true) | ||
510 | ); | ||
511 | } | ||
512 | } | ||
diff --git a/tests/legacy/LegacyUpdaterTest.php b/tests/legacy/LegacyUpdaterTest.php index 7c429811..f7391b86 100644 --- a/tests/legacy/LegacyUpdaterTest.php +++ b/tests/legacy/LegacyUpdaterTest.php | |||
@@ -20,7 +20,7 @@ require_once 'inc/rain.tpl.class.php'; | |||
20 | * Class UpdaterTest. | 20 | * Class UpdaterTest. |
21 | * Runs unit tests against the updater class. | 21 | * Runs unit tests against the updater class. |
22 | */ | 22 | */ |
23 | class LegacyUpdaterTest extends \PHPUnit\Framework\TestCase | 23 | class LegacyUpdaterTest extends \Shaarli\TestCase |
24 | { | 24 | { |
25 | /** | 25 | /** |
26 | * @var string Path to test datastore. | 26 | * @var string Path to test datastore. |
@@ -40,7 +40,7 @@ class LegacyUpdaterTest extends \PHPUnit\Framework\TestCase | |||
40 | /** | 40 | /** |
41 | * Executed before each test. | 41 | * Executed before each test. |
42 | */ | 42 | */ |
43 | public function setUp() | 43 | protected function setUp(): void |
44 | { | 44 | { |
45 | copy('tests/utils/config/configJson.json.php', self::$configFile .'.json.php'); | 45 | copy('tests/utils/config/configJson.json.php', self::$configFile .'.json.php'); |
46 | $this->conf = new ConfigManager(self::$configFile); | 46 | $this->conf = new ConfigManager(self::$configFile); |
@@ -80,23 +80,23 @@ class LegacyUpdaterTest extends \PHPUnit\Framework\TestCase | |||
80 | 80 | ||
81 | /** | 81 | /** |
82 | * Test errors in UpdaterUtils::write_updates_file(): empty updates file. | 82 | * Test errors in UpdaterUtils::write_updates_file(): empty updates file. |
83 | * | ||
84 | * @expectedException Exception | ||
85 | * @expectedExceptionMessageRegExp /Updates file path is not set(.*)/ | ||
86 | */ | 83 | */ |
87 | public function testWriteEmptyUpdatesFile() | 84 | public function testWriteEmptyUpdatesFile() |
88 | { | 85 | { |
86 | $this->expectException(\Exception::class); | ||
87 | $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/'); | ||
88 | |||
89 | UpdaterUtils::write_updates_file('', array('test')); | 89 | UpdaterUtils::write_updates_file('', array('test')); |
90 | } | 90 | } |
91 | 91 | ||
92 | /** | 92 | /** |
93 | * Test errors in UpdaterUtils::write_updates_file(): not writable updates file. | 93 | * Test errors in UpdaterUtils::write_updates_file(): not writable updates file. |
94 | * | ||
95 | * @expectedException Exception | ||
96 | * @expectedExceptionMessageRegExp /Unable to write(.*)/ | ||
97 | */ | 94 | */ |
98 | public function testWriteUpdatesFileNotWritable() | 95 | public function testWriteUpdatesFileNotWritable() |
99 | { | 96 | { |
97 | $this->expectException(\Exception::class); | ||
98 | $this->expectExceptionMessageRegExp('/Unable to write(.*)/'); | ||
99 | |||
100 | $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; | 100 | $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; |
101 | touch($updatesFile); | 101 | touch($updatesFile); |
102 | chmod($updatesFile, 0444); | 102 | chmod($updatesFile, 0444); |
@@ -161,11 +161,11 @@ class LegacyUpdaterTest extends \PHPUnit\Framework\TestCase | |||
161 | 161 | ||
162 | /** | 162 | /** |
163 | * Test Update failed. | 163 | * Test Update failed. |
164 | * | ||
165 | * @expectedException \Exception | ||
166 | */ | 164 | */ |
167 | public function testUpdateFailed() | 165 | public function testUpdateFailed() |
168 | { | 166 | { |
167 | $this->expectException(\Exception::class); | ||
168 | |||
169 | $updates = array( | 169 | $updates = array( |
170 | 'updateMethodDummy1', | 170 | 'updateMethodDummy1', |
171 | 'updateMethodDummy2', | 171 | 'updateMethodDummy2', |
@@ -723,7 +723,7 @@ $GLOBALS[\'privateLinkByDefault\'] = true;'; | |||
723 | $this->assertEquals(\Shaarli\Thumbnailer::MODE_ALL, $this->conf->get('thumbnails.mode')); | 723 | $this->assertEquals(\Shaarli\Thumbnailer::MODE_ALL, $this->conf->get('thumbnails.mode')); |
724 | $this->assertEquals(125, $this->conf->get('thumbnails.width')); | 724 | $this->assertEquals(125, $this->conf->get('thumbnails.width')); |
725 | $this->assertEquals(90, $this->conf->get('thumbnails.height')); | 725 | $this->assertEquals(90, $this->conf->get('thumbnails.height')); |
726 | $this->assertContains('You have enabled or changed thumbnails', $_SESSION['warnings'][0]); | 726 | $this->assertContainsPolyfill('You have enabled or changed thumbnails', $_SESSION['warnings'][0]); |
727 | } | 727 | } |
728 | 728 | ||
729 | /** | 729 | /** |
@@ -754,7 +754,7 @@ $GLOBALS[\'privateLinkByDefault\'] = true;'; | |||
754 | if (isset($_SESSION['warnings'])) { | 754 | if (isset($_SESSION['warnings'])) { |
755 | unset($_SESSION['warnings']); | 755 | unset($_SESSION['warnings']); |
756 | } | 756 | } |
757 | 757 | ||
758 | $updater = new LegacyUpdater([], [], $this->conf, true, $_SESSION); | 758 | $updater = new LegacyUpdater([], [], $this->conf, true, $_SESSION); |
759 | $this->assertTrue($updater->updateMethodWebThumbnailer()); | 759 | $this->assertTrue($updater->updateMethodWebThumbnailer()); |
760 | $this->assertFalse($this->conf->exists('thumbnail')); | 760 | $this->assertFalse($this->conf->exists('thumbnail')); |
diff --git a/tests/netscape/BookmarkExportTest.php b/tests/netscape/BookmarkExportTest.php index 509da51d..9b95ccc9 100644 --- a/tests/netscape/BookmarkExportTest.php +++ b/tests/netscape/BookmarkExportTest.php | |||
@@ -2,12 +2,12 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Netscape; | 3 | namespace Shaarli\Netscape; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | ||
6 | use Shaarli\Bookmark\BookmarkFileService; | 5 | use Shaarli\Bookmark\BookmarkFileService; |
7 | use Shaarli\Config\ConfigManager; | 6 | use Shaarli\Config\ConfigManager; |
8 | use Shaarli\Formatter\BookmarkFormatter; | 7 | use Shaarli\Formatter\BookmarkFormatter; |
9 | use Shaarli\Formatter\FormatterFactory; | 8 | use Shaarli\Formatter\FormatterFactory; |
10 | use Shaarli\History; | 9 | use Shaarli\History; |
10 | use Shaarli\TestCase; | ||
11 | 11 | ||
12 | require_once 'tests/utils/ReferenceLinkDB.php'; | 12 | require_once 'tests/utils/ReferenceLinkDB.php'; |
13 | 13 | ||
@@ -54,7 +54,7 @@ class BookmarkExportTest extends TestCase | |||
54 | /** | 54 | /** |
55 | * Instantiate reference data | 55 | * Instantiate reference data |
56 | */ | 56 | */ |
57 | public static function setUpBeforeClass() | 57 | public static function setUpBeforeClass(): void |
58 | { | 58 | { |
59 | static::$conf = new ConfigManager('tests/utils/config/configJson'); | 59 | static::$conf = new ConfigManager('tests/utils/config/configJson'); |
60 | static::$conf->set('resource.datastore', static::$testDatastore); | 60 | static::$conf->set('resource.datastore', static::$testDatastore); |
@@ -77,11 +77,12 @@ class BookmarkExportTest extends TestCase | |||
77 | 77 | ||
78 | /** | 78 | /** |
79 | * Attempt to export an invalid link selection | 79 | * Attempt to export an invalid link selection |
80 | * @expectedException Exception | ||
81 | * @expectedExceptionMessageRegExp /Invalid export selection/ | ||
82 | */ | 80 | */ |
83 | public function testFilterAndFormatInvalid() | 81 | public function testFilterAndFormatInvalid() |
84 | { | 82 | { |
83 | $this->expectException(\Exception::class); | ||
84 | $this->expectExceptionMessageRegExp('/Invalid export selection/'); | ||
85 | |||
85 | $this->netscapeBookmarkUtils->filterAndFormat( | 86 | $this->netscapeBookmarkUtils->filterAndFormat( |
86 | self::$formatter, | 87 | self::$formatter, |
87 | 'derp', | 88 | 'derp', |
diff --git a/tests/netscape/BookmarkImportTest.php b/tests/netscape/BookmarkImportTest.php index f678e26b..c1e49b5f 100644 --- a/tests/netscape/BookmarkImportTest.php +++ b/tests/netscape/BookmarkImportTest.php | |||
@@ -3,13 +3,13 @@ | |||
3 | namespace Shaarli\Netscape; | 3 | namespace Shaarli\Netscape; |
4 | 4 | ||
5 | use DateTime; | 5 | use DateTime; |
6 | use PHPUnit\Framework\TestCase; | ||
7 | use Psr\Http\Message\UploadedFileInterface; | 6 | use Psr\Http\Message\UploadedFileInterface; |
8 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
9 | use Shaarli\Bookmark\BookmarkFileService; | 8 | use Shaarli\Bookmark\BookmarkFileService; |
10 | use Shaarli\Bookmark\BookmarkFilter; | 9 | use Shaarli\Bookmark\BookmarkFilter; |
11 | use Shaarli\Config\ConfigManager; | 10 | use Shaarli\Config\ConfigManager; |
12 | use Shaarli\History; | 11 | use Shaarli\History; |
12 | use Shaarli\TestCase; | ||
13 | use Slim\Http\UploadedFile; | 13 | use Slim\Http\UploadedFile; |
14 | 14 | ||
15 | /** | 15 | /** |
@@ -75,7 +75,7 @@ class BookmarkImportTest extends TestCase | |||
75 | */ | 75 | */ |
76 | protected static $defaultTimeZone; | 76 | protected static $defaultTimeZone; |
77 | 77 | ||
78 | public static function setUpBeforeClass() | 78 | public static function setUpBeforeClass(): void |
79 | { | 79 | { |
80 | self::$defaultTimeZone = date_default_timezone_get(); | 80 | self::$defaultTimeZone = date_default_timezone_get(); |
81 | // Timezone without DST for test consistency | 81 | // Timezone without DST for test consistency |
@@ -85,7 +85,7 @@ class BookmarkImportTest extends TestCase | |||
85 | /** | 85 | /** |
86 | * Resets test data before each test | 86 | * Resets test data before each test |
87 | */ | 87 | */ |
88 | protected function setUp() | 88 | protected function setUp(): void |
89 | { | 89 | { |
90 | if (file_exists(self::$testDatastore)) { | 90 | if (file_exists(self::$testDatastore)) { |
91 | unlink(self::$testDatastore); | 91 | unlink(self::$testDatastore); |
@@ -104,12 +104,12 @@ class BookmarkImportTest extends TestCase | |||
104 | /** | 104 | /** |
105 | * Delete history file. | 105 | * Delete history file. |
106 | */ | 106 | */ |
107 | public function tearDown() | 107 | protected function tearDown(): void |
108 | { | 108 | { |
109 | @unlink(self::$historyFilePath); | 109 | @unlink(self::$historyFilePath); |
110 | } | 110 | } |
111 | 111 | ||
112 | public static function tearDownAfterClass() | 112 | public static function tearDownAfterClass(): void |
113 | { | 113 | { |
114 | date_default_timezone_set(self::$defaultTimeZone); | 114 | date_default_timezone_set(self::$defaultTimeZone); |
115 | } | 115 | } |
diff --git a/tests/plugins/PluginAddlinkTest.php b/tests/plugins/PluginAddlinkTest.php index aa5c6988..a3ec9fc9 100644 --- a/tests/plugins/PluginAddlinkTest.php +++ b/tests/plugins/PluginAddlinkTest.php | |||
@@ -9,12 +9,12 @@ require_once 'plugins/addlink_toolbar/addlink_toolbar.php'; | |||
9 | /** | 9 | /** |
10 | * Unit test for the Addlink toolbar plugin | 10 | * Unit test for the Addlink toolbar plugin |
11 | */ | 11 | */ |
12 | class PluginAddlinkTest extends \PHPUnit\Framework\TestCase | 12 | class PluginAddlinkTest extends \Shaarli\TestCase |
13 | { | 13 | { |
14 | /** | 14 | /** |
15 | * Reset plugin path. | 15 | * Reset plugin path. |
16 | */ | 16 | */ |
17 | public function setUp() | 17 | protected function setUp(): void |
18 | { | 18 | { |
19 | PluginManager::$PLUGINS_PATH = 'plugins'; | 19 | PluginManager::$PLUGINS_PATH = 'plugins'; |
20 | } | 20 | } |
diff --git a/tests/plugins/PluginArchiveorgTest.php b/tests/plugins/PluginArchiveorgTest.php index b9a67adb..467dc3d0 100644 --- a/tests/plugins/PluginArchiveorgTest.php +++ b/tests/plugins/PluginArchiveorgTest.php | |||
@@ -1,4 +1,5 @@ | |||
1 | <?php | 1 | <?php |
2 | |||
2 | namespace Shaarli\Plugin\Archiveorg; | 3 | namespace Shaarli\Plugin\Archiveorg; |
3 | 4 | ||
4 | /** | 5 | /** |
@@ -6,6 +7,7 @@ namespace Shaarli\Plugin\Archiveorg; | |||
6 | */ | 7 | */ |
7 | 8 | ||
8 | use Shaarli\Plugin\PluginManager; | 9 | use Shaarli\Plugin\PluginManager; |
10 | use Shaarli\TestCase; | ||
9 | 11 | ||
10 | require_once 'plugins/archiveorg/archiveorg.php'; | 12 | require_once 'plugins/archiveorg/archiveorg.php'; |
11 | 13 | ||
@@ -13,20 +15,35 @@ require_once 'plugins/archiveorg/archiveorg.php'; | |||
13 | * Class PluginArchiveorgTest | 15 | * Class PluginArchiveorgTest |
14 | * Unit test for the archiveorg plugin | 16 | * Unit test for the archiveorg plugin |
15 | */ | 17 | */ |
16 | class PluginArchiveorgTest extends \PHPUnit\Framework\TestCase | 18 | class PluginArchiveorgTest extends TestCase |
17 | { | 19 | { |
20 | protected $savedScriptName; | ||
21 | |||
18 | /** | 22 | /** |
19 | * Reset plugin path | 23 | * Reset plugin path |
20 | */ | 24 | */ |
21 | public function setUp() | 25 | public function setUp(): void |
22 | { | 26 | { |
23 | PluginManager::$PLUGINS_PATH = 'plugins'; | 27 | PluginManager::$PLUGINS_PATH = 'plugins'; |
28 | |||
29 | // plugins manipulate global vars | ||
30 | $_SERVER['SERVER_PORT'] = '80'; | ||
31 | $_SERVER['SERVER_NAME'] = 'shaarli.shaarli'; | ||
32 | $this->savedScriptName = $_SERVER['SCRIPT_NAME'] ?? null; | ||
33 | $_SERVER['SCRIPT_NAME'] = '/index.php'; | ||
34 | } | ||
35 | |||
36 | public function tearDown(): void | ||
37 | { | ||
38 | unset($_SERVER['SERVER_PORT']); | ||
39 | unset($_SERVER['SERVER_NAME']); | ||
40 | $_SERVER['SCRIPT_NAME'] = $this->savedScriptName; | ||
24 | } | 41 | } |
25 | 42 | ||
26 | /** | 43 | /** |
27 | * Test render_linklist hook on external bookmarks. | 44 | * Test render_linklist hook on external bookmarks. |
28 | */ | 45 | */ |
29 | public function testArchiveorgLinklistOnExternalLinks() | 46 | public function testArchiveorgLinklistOnExternalLinks(): void |
30 | { | 47 | { |
31 | $str = 'http://randomstr.com/test'; | 48 | $str = 'http://randomstr.com/test'; |
32 | 49 | ||
@@ -56,16 +73,16 @@ class PluginArchiveorgTest extends \PHPUnit\Framework\TestCase | |||
56 | /** | 73 | /** |
57 | * Test render_linklist hook on internal bookmarks. | 74 | * Test render_linklist hook on internal bookmarks. |
58 | */ | 75 | */ |
59 | public function testArchiveorgLinklistOnInternalLinks() | 76 | public function testArchiveorgLinklistOnInternalLinks(): void |
60 | { | 77 | { |
61 | $internalLink1 = 'http://shaarli.shaarli/?qvMAqg'; | 78 | $internalLink1 = 'http://shaarli.shaarli/shaare/qvMAqg'; |
62 | $internalLinkRealURL1 = '?qvMAqg'; | 79 | $internalLinkRealURL1 = '/shaare/qvMAqg'; |
63 | 80 | ||
64 | $internalLink2 = 'http://shaarli.shaarli/?2_7zww'; | 81 | $internalLink2 = 'http://shaarli.shaarli/shaare/2_7zww'; |
65 | $internalLinkRealURL2 = '?2_7zww'; | 82 | $internalLinkRealURL2 = '/shaare/2_7zww'; |
66 | 83 | ||
67 | $internalLink3 = 'http://shaarli.shaarli/?z7u-_Q'; | 84 | $internalLink3 = 'http://shaarli.shaarli/shaare/z7u-_Q'; |
68 | $internalLinkRealURL3 = '?z7u-_Q'; | 85 | $internalLinkRealURL3 = '/shaare/z7u-_Q'; |
69 | 86 | ||
70 | $data = array( | 87 | $data = array( |
71 | 'title' => $internalLink1, | 88 | 'title' => $internalLink1, |
diff --git a/tests/plugins/PluginDefaultColorsTest.php b/tests/plugins/PluginDefaultColorsTest.php index b9951cca..cc844c60 100644 --- a/tests/plugins/PluginDefaultColorsTest.php +++ b/tests/plugins/PluginDefaultColorsTest.php | |||
@@ -2,11 +2,10 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Plugin\DefaultColors; | 3 | namespace Shaarli\Plugin\DefaultColors; |
4 | 4 | ||
5 | use DateTime; | ||
6 | use PHPUnit\Framework\TestCase; | ||
7 | use Shaarli\Bookmark\LinkDB; | 5 | use Shaarli\Bookmark\LinkDB; |
8 | use Shaarli\Config\ConfigManager; | 6 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\Plugin\PluginManager; | 7 | use Shaarli\Plugin\PluginManager; |
8 | use Shaarli\TestCase; | ||
10 | 9 | ||
11 | require_once 'plugins/default_colors/default_colors.php'; | 10 | require_once 'plugins/default_colors/default_colors.php'; |
12 | 11 | ||
@@ -20,7 +19,7 @@ class PluginDefaultColorsTest extends TestCase | |||
20 | /** | 19 | /** |
21 | * Reset plugin path | 20 | * Reset plugin path |
22 | */ | 21 | */ |
23 | public function setUp() | 22 | protected function setUp(): void |
24 | { | 23 | { |
25 | PluginManager::$PLUGINS_PATH = 'sandbox'; | 24 | PluginManager::$PLUGINS_PATH = 'sandbox'; |
26 | mkdir(PluginManager::$PLUGINS_PATH . '/default_colors/'); | 25 | mkdir(PluginManager::$PLUGINS_PATH . '/default_colors/'); |
@@ -33,7 +32,7 @@ class PluginDefaultColorsTest extends TestCase | |||
33 | /** | 32 | /** |
34 | * Remove sandbox files and folder | 33 | * Remove sandbox files and folder |
35 | */ | 34 | */ |
36 | public function tearDown() | 35 | protected function tearDown(): void |
37 | { | 36 | { |
38 | if (file_exists('sandbox/default_colors/default_colors.css.template')) { | 37 | if (file_exists('sandbox/default_colors/default_colors.css.template')) { |
39 | unlink('sandbox/default_colors/default_colors.css.template'); | 38 | unlink('sandbox/default_colors/default_colors.css.template'); |
@@ -57,6 +56,8 @@ class PluginDefaultColorsTest extends TestCase | |||
57 | $conf->set('plugins.DEFAULT_COLORS_BACKGROUND', 'value'); | 56 | $conf->set('plugins.DEFAULT_COLORS_BACKGROUND', 'value'); |
58 | $errors = default_colors_init($conf); | 57 | $errors = default_colors_init($conf); |
59 | $this->assertEmpty($errors); | 58 | $this->assertEmpty($errors); |
59 | |||
60 | $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); | ||
60 | } | 61 | } |
61 | 62 | ||
62 | /** | 63 | /** |
@@ -72,9 +73,9 @@ class PluginDefaultColorsTest extends TestCase | |||
72 | /** | 73 | /** |
73 | * Test the save plugin parameters hook with all colors specified. | 74 | * Test the save plugin parameters hook with all colors specified. |
74 | */ | 75 | */ |
75 | public function testSavePluginParametersAll() | 76 | public function testGenerateCssFile() |
76 | { | 77 | { |
77 | $post = [ | 78 | $params = [ |
78 | 'other1' => true, | 79 | 'other1' => true, |
79 | 'DEFAULT_COLORS_MAIN' => 'blue', | 80 | 'DEFAULT_COLORS_MAIN' => 'blue', |
80 | 'DEFAULT_COLORS_BACKGROUND' => 'pink', | 81 | 'DEFAULT_COLORS_BACKGROUND' => 'pink', |
@@ -82,7 +83,7 @@ class PluginDefaultColorsTest extends TestCase | |||
82 | 'DEFAULT_COLORS_DARK_MAIN' => 'green', | 83 | 'DEFAULT_COLORS_DARK_MAIN' => 'green', |
83 | ]; | 84 | ]; |
84 | 85 | ||
85 | hook_default_colors_save_plugin_parameters($post); | 86 | default_colors_generate_css_file($params); |
86 | $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); | 87 | $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); |
87 | $content = file_get_contents($file); | 88 | $content = file_get_contents($file); |
88 | $expected = ':root { | 89 | $expected = ':root { |
@@ -98,16 +99,16 @@ class PluginDefaultColorsTest extends TestCase | |||
98 | /** | 99 | /** |
99 | * Test the save plugin parameters hook with only one color specified. | 100 | * Test the save plugin parameters hook with only one color specified. |
100 | */ | 101 | */ |
101 | public function testSavePluginParametersSingle() | 102 | public function testGenerateCssFileSingle() |
102 | { | 103 | { |
103 | $post = [ | 104 | $params = [ |
104 | 'other1' => true, | 105 | 'other1' => true, |
105 | 'DEFAULT_COLORS_BACKGROUND' => 'pink', | 106 | 'DEFAULT_COLORS_BACKGROUND' => 'pink', |
106 | 'other2' => ['yep'], | 107 | 'other2' => ['yep'], |
107 | 'DEFAULT_COLORS_DARK_MAIN' => '', | 108 | 'DEFAULT_COLORS_DARK_MAIN' => '', |
108 | ]; | 109 | ]; |
109 | 110 | ||
110 | hook_default_colors_save_plugin_parameters($post); | 111 | default_colors_generate_css_file($params); |
111 | $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); | 112 | $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); |
112 | $content = file_get_contents($file); | 113 | $content = file_get_contents($file); |
113 | $expected = ':root { | 114 | $expected = ':root { |
@@ -121,9 +122,9 @@ class PluginDefaultColorsTest extends TestCase | |||
121 | /** | 122 | /** |
122 | * Test the save plugin parameters hook with no color specified. | 123 | * Test the save plugin parameters hook with no color specified. |
123 | */ | 124 | */ |
124 | public function testSavePluginParametersNone() | 125 | public function testGenerateCssFileNone() |
125 | { | 126 | { |
126 | hook_default_colors_save_plugin_parameters([]); | 127 | default_colors_generate_css_file([]); |
127 | $this->assertFileNotExists($file = 'sandbox/default_colors/default_colors.css'); | 128 | $this->assertFileNotExists($file = 'sandbox/default_colors/default_colors.css'); |
128 | } | 129 | } |
129 | 130 | ||
diff --git a/tests/plugins/PluginIssoTest.php b/tests/plugins/PluginIssoTest.php index 99477205..16ecf357 100644 --- a/tests/plugins/PluginIssoTest.php +++ b/tests/plugins/PluginIssoTest.php | |||
@@ -5,6 +5,7 @@ use DateTime; | |||
5 | use Shaarli\Bookmark\Bookmark; | 5 | use Shaarli\Bookmark\Bookmark; |
6 | use Shaarli\Config\ConfigManager; | 6 | use Shaarli\Config\ConfigManager; |
7 | use Shaarli\Plugin\PluginManager; | 7 | use Shaarli\Plugin\PluginManager; |
8 | use Shaarli\TestCase; | ||
8 | 9 | ||
9 | require_once 'plugins/isso/isso.php'; | 10 | require_once 'plugins/isso/isso.php'; |
10 | 11 | ||
@@ -13,12 +14,12 @@ require_once 'plugins/isso/isso.php'; | |||
13 | * | 14 | * |
14 | * Test the Isso plugin (comment system). | 15 | * Test the Isso plugin (comment system). |
15 | */ | 16 | */ |
16 | class PluginIssoTest extends \PHPUnit\Framework\TestCase | 17 | class PluginIssoTest extends TestCase |
17 | { | 18 | { |
18 | /** | 19 | /** |
19 | * Reset plugin path | 20 | * Reset plugin path |
20 | */ | 21 | */ |
21 | public function setUp() | 22 | public function setUp(): void |
22 | { | 23 | { |
23 | PluginManager::$PLUGINS_PATH = 'plugins'; | 24 | PluginManager::$PLUGINS_PATH = 'plugins'; |
24 | } | 25 | } |
@@ -26,7 +27,7 @@ class PluginIssoTest extends \PHPUnit\Framework\TestCase | |||
26 | /** | 27 | /** |
27 | * Test Isso init without errors. | 28 | * Test Isso init without errors. |
28 | */ | 29 | */ |
29 | public function testIssoInitNoError() | 30 | public function testIssoInitNoError(): void |
30 | { | 31 | { |
31 | $conf = new ConfigManager(''); | 32 | $conf = new ConfigManager(''); |
32 | $conf->set('plugins.ISSO_SERVER', 'value'); | 33 | $conf->set('plugins.ISSO_SERVER', 'value'); |
@@ -37,7 +38,7 @@ class PluginIssoTest extends \PHPUnit\Framework\TestCase | |||
37 | /** | 38 | /** |
38 | * Test Isso init with errors. | 39 | * Test Isso init with errors. |
39 | */ | 40 | */ |
40 | public function testIssoInitError() | 41 | public function testIssoInitError(): void |
41 | { | 42 | { |
42 | $conf = new ConfigManager(''); | 43 | $conf = new ConfigManager(''); |
43 | $errors = isso_init($conf); | 44 | $errors = isso_init($conf); |
@@ -47,7 +48,7 @@ class PluginIssoTest extends \PHPUnit\Framework\TestCase | |||
47 | /** | 48 | /** |
48 | * Test render_linklist hook with valid settings to display the comment form. | 49 | * Test render_linklist hook with valid settings to display the comment form. |
49 | */ | 50 | */ |
50 | public function testIssoDisplayed() | 51 | public function testIssoDisplayed(): void |
51 | { | 52 | { |
52 | $conf = new ConfigManager(''); | 53 | $conf = new ConfigManager(''); |
53 | $conf->set('plugins.ISSO_SERVER', 'value'); | 54 | $conf->set('plugins.ISSO_SERVER', 'value'); |
@@ -87,7 +88,7 @@ class PluginIssoTest extends \PHPUnit\Framework\TestCase | |||
87 | /** | 88 | /** |
88 | * Test isso plugin when multiple bookmarks are displayed (shouldn't be displayed). | 89 | * Test isso plugin when multiple bookmarks are displayed (shouldn't be displayed). |
89 | */ | 90 | */ |
90 | public function testIssoMultipleLinks() | 91 | public function testIssoMultipleLinks(): void |
91 | { | 92 | { |
92 | $conf = new ConfigManager(''); | 93 | $conf = new ConfigManager(''); |
93 | $conf->set('plugins.ISSO_SERVER', 'value'); | 94 | $conf->set('plugins.ISSO_SERVER', 'value'); |
@@ -115,14 +116,14 @@ class PluginIssoTest extends \PHPUnit\Framework\TestCase | |||
115 | 116 | ||
116 | $processed = hook_isso_render_linklist($data, $conf); | 117 | $processed = hook_isso_render_linklist($data, $conf); |
117 | // link_plugin should be added for the icon | 118 | // link_plugin should be added for the icon |
118 | $this->assertContains('<a href="?'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); | 119 | $this->assertContainsPolyfill('<a href="/shaare/'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); |
119 | $this->assertContains('<a href="?'. $short2 .'#isso-thread">', $processed['links'][1]['link_plugin'][0]); | 120 | $this->assertContainsPolyfill('<a href="/shaare/'. $short2 .'#isso-thread">', $processed['links'][1]['link_plugin'][0]); |
120 | } | 121 | } |
121 | 122 | ||
122 | /** | 123 | /** |
123 | * Test isso plugin when using search (shouldn't be displayed). | 124 | * Test isso plugin when using search (shouldn't be displayed). |
124 | */ | 125 | */ |
125 | public function testIssoNotDisplayedWhenSearch() | 126 | public function testIssoNotDisplayedWhenSearch(): void |
126 | { | 127 | { |
127 | $conf = new ConfigManager(''); | 128 | $conf = new ConfigManager(''); |
128 | $conf->set('plugins.ISSO_SERVER', 'value'); | 129 | $conf->set('plugins.ISSO_SERVER', 'value'); |
@@ -145,13 +146,13 @@ class PluginIssoTest extends \PHPUnit\Framework\TestCase | |||
145 | $processed = hook_isso_render_linklist($data, $conf); | 146 | $processed = hook_isso_render_linklist($data, $conf); |
146 | 147 | ||
147 | // link_plugin should be added for the icon | 148 | // link_plugin should be added for the icon |
148 | $this->assertContains('<a href="?'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); | 149 | $this->assertContainsPolyfill('<a href="/shaare/'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); |
149 | } | 150 | } |
150 | 151 | ||
151 | /** | 152 | /** |
152 | * Test isso plugin without server configuration (shouldn't be displayed). | 153 | * Test isso plugin without server configuration (shouldn't be displayed). |
153 | */ | 154 | */ |
154 | public function testIssoWithoutConf() | 155 | public function testIssoWithoutConf(): void |
155 | { | 156 | { |
156 | $data = 'abc'; | 157 | $data = 'abc'; |
157 | $conf = new ConfigManager(''); | 158 | $conf = new ConfigManager(''); |
diff --git a/tests/plugins/PluginPlayvideosTest.php b/tests/plugins/PluginPlayvideosTest.php index b7b6ce53..338d2e35 100644 --- a/tests/plugins/PluginPlayvideosTest.php +++ b/tests/plugins/PluginPlayvideosTest.php | |||
@@ -14,12 +14,12 @@ require_once 'plugins/playvideos/playvideos.php'; | |||
14 | * Class PluginPlayvideosTest | 14 | * Class PluginPlayvideosTest |
15 | * Unit test for the PlayVideos plugin | 15 | * Unit test for the PlayVideos plugin |
16 | */ | 16 | */ |
17 | class PluginPlayvideosTest extends \PHPUnit\Framework\TestCase | 17 | class PluginPlayvideosTest extends \Shaarli\TestCase |
18 | { | 18 | { |
19 | /** | 19 | /** |
20 | * Reset plugin path | 20 | * Reset plugin path |
21 | */ | 21 | */ |
22 | public function setUp() | 22 | protected function setUp(): void |
23 | { | 23 | { |
24 | PluginManager::$PLUGINS_PATH = 'plugins'; | 24 | PluginManager::$PLUGINS_PATH = 'plugins'; |
25 | } | 25 | } |
diff --git a/tests/plugins/PluginPubsubhubbubTest.php b/tests/plugins/PluginPubsubhubbubTest.php index e66f484e..d3f7b439 100644 --- a/tests/plugins/PluginPubsubhubbubTest.php +++ b/tests/plugins/PluginPubsubhubbubTest.php | |||
@@ -11,7 +11,7 @@ require_once 'plugins/pubsubhubbub/pubsubhubbub.php'; | |||
11 | * Class PluginPubsubhubbubTest | 11 | * Class PluginPubsubhubbubTest |
12 | * Unit test for the pubsubhubbub plugin | 12 | * Unit test for the pubsubhubbub plugin |
13 | */ | 13 | */ |
14 | class PluginPubsubhubbubTest extends \PHPUnit\Framework\TestCase | 14 | class PluginPubsubhubbubTest extends \Shaarli\TestCase |
15 | { | 15 | { |
16 | /** | 16 | /** |
17 | * @var string Config file path (without extension). | 17 | * @var string Config file path (without extension). |
@@ -21,7 +21,7 @@ class PluginPubsubhubbubTest extends \PHPUnit\Framework\TestCase | |||
21 | /** | 21 | /** |
22 | * Reset plugin path | 22 | * Reset plugin path |
23 | */ | 23 | */ |
24 | public function setUp() | 24 | protected function setUp(): void |
25 | { | 25 | { |
26 | PluginManager::$PLUGINS_PATH = 'plugins'; | 26 | PluginManager::$PLUGINS_PATH = 'plugins'; |
27 | } | 27 | } |
diff --git a/tests/plugins/PluginQrcodeTest.php b/tests/plugins/PluginQrcodeTest.php index c9f8c733..1d85fba6 100644 --- a/tests/plugins/PluginQrcodeTest.php +++ b/tests/plugins/PluginQrcodeTest.php | |||
@@ -14,12 +14,12 @@ require_once 'plugins/qrcode/qrcode.php'; | |||
14 | * Class PluginQrcodeTest | 14 | * Class PluginQrcodeTest |
15 | * Unit test for the QR-Code plugin | 15 | * Unit test for the QR-Code plugin |
16 | */ | 16 | */ |
17 | class PluginQrcodeTest extends \PHPUnit\Framework\TestCase | 17 | class PluginQrcodeTest extends \Shaarli\TestCase |
18 | { | 18 | { |
19 | /** | 19 | /** |
20 | * Reset plugin path | 20 | * Reset plugin path |
21 | */ | 21 | */ |
22 | public function setUp() | 22 | protected function setUp(): void |
23 | { | 23 | { |
24 | PluginManager::$PLUGINS_PATH = 'plugins'; | 24 | PluginManager::$PLUGINS_PATH = 'plugins'; |
25 | } | 25 | } |
diff --git a/tests/plugins/PluginWallabagTest.php b/tests/plugins/PluginWallabagTest.php index 79751921..36317215 100644 --- a/tests/plugins/PluginWallabagTest.php +++ b/tests/plugins/PluginWallabagTest.php | |||
@@ -10,12 +10,12 @@ require_once 'plugins/wallabag/wallabag.php'; | |||
10 | * Class PluginWallabagTest | 10 | * Class PluginWallabagTest |
11 | * Unit test for the Wallabag plugin | 11 | * Unit test for the Wallabag plugin |
12 | */ | 12 | */ |
13 | class PluginWallabagTest extends \PHPUnit\Framework\TestCase | 13 | class PluginWallabagTest extends \Shaarli\TestCase |
14 | { | 14 | { |
15 | /** | 15 | /** |
16 | * Reset plugin path | 16 | * Reset plugin path |
17 | */ | 17 | */ |
18 | public function setUp() | 18 | protected function setUp(): void |
19 | { | 19 | { |
20 | PluginManager::$PLUGINS_PATH = 'plugins'; | 20 | PluginManager::$PLUGINS_PATH = 'plugins'; |
21 | } | 21 | } |
diff --git a/tests/plugins/WallabagInstanceTest.php b/tests/plugins/WallabagInstanceTest.php index a3cd9076..5ef3de1a 100644 --- a/tests/plugins/WallabagInstanceTest.php +++ b/tests/plugins/WallabagInstanceTest.php | |||
@@ -4,7 +4,7 @@ namespace Shaarli\Plugin\Wallabag; | |||
4 | /** | 4 | /** |
5 | * Class WallabagInstanceTest | 5 | * Class WallabagInstanceTest |
6 | */ | 6 | */ |
7 | class WallabagInstanceTest extends \PHPUnit\Framework\TestCase | 7 | class WallabagInstanceTest extends \Shaarli\TestCase |
8 | { | 8 | { |
9 | /** | 9 | /** |
10 | * @var string wallabag url. | 10 | * @var string wallabag url. |
@@ -14,7 +14,7 @@ class WallabagInstanceTest extends \PHPUnit\Framework\TestCase | |||
14 | /** | 14 | /** |
15 | * Reset plugin path | 15 | * Reset plugin path |
16 | */ | 16 | */ |
17 | public function setUp() | 17 | protected function setUp(): void |
18 | { | 18 | { |
19 | $this->instance = 'http://some.url'; | 19 | $this->instance = 'http://some.url'; |
20 | } | 20 | } |
diff --git a/tests/plugins/test/test.php b/tests/plugins/test/test.php index ae5032dd..03be4f4e 100644 --- a/tests/plugins/test/test.php +++ b/tests/plugins/test/test.php | |||
@@ -13,6 +13,9 @@ function hook_test_random($data) | |||
13 | $data[1] = 'page test'; | 13 | $data[1] = 'page test'; |
14 | } elseif (isset($data['_LOGGEDIN_']) && $data['_LOGGEDIN_'] === true) { | 14 | } elseif (isset($data['_LOGGEDIN_']) && $data['_LOGGEDIN_'] === true) { |
15 | $data[1] = 'loggedin'; | 15 | $data[1] = 'loggedin'; |
16 | } elseif (array_key_exists('_LOGGEDIN_', $data)) { | ||
17 | $data[1] = 'loggedin'; | ||
18 | $data[2] = $data['_LOGGEDIN_']; | ||
16 | } else { | 19 | } else { |
17 | $data[1] = $data[0]; | 20 | $data[1] = $data[0]; |
18 | } | 21 | } |
diff --git a/tests/render/PageCacheManagerTest.php b/tests/render/PageCacheManagerTest.php index c258f45f..08d4e5ea 100644 --- a/tests/render/PageCacheManagerTest.php +++ b/tests/render/PageCacheManagerTest.php | |||
@@ -6,8 +6,8 @@ | |||
6 | 6 | ||
7 | namespace Shaarli\Render; | 7 | namespace Shaarli\Render; |
8 | 8 | ||
9 | use PHPUnit\Framework\TestCase; | ||
10 | use Shaarli\Security\SessionManager; | 9 | use Shaarli\Security\SessionManager; |
10 | use Shaarli\TestCase; | ||
11 | 11 | ||
12 | /** | 12 | /** |
13 | * Unitary tests for cached pages | 13 | * Unitary tests for cached pages |
@@ -29,7 +29,7 @@ class PageCacheManagerTest extends TestCase | |||
29 | /** | 29 | /** |
30 | * Populate the cache with dummy files | 30 | * Populate the cache with dummy files |
31 | */ | 31 | */ |
32 | public function setUp() | 32 | protected function setUp(): void |
33 | { | 33 | { |
34 | $this->cacheManager = new PageCacheManager(static::$testCacheDir, true); | 34 | $this->cacheManager = new PageCacheManager(static::$testCacheDir, true); |
35 | 35 | ||
@@ -48,7 +48,7 @@ class PageCacheManagerTest extends TestCase | |||
48 | /** | 48 | /** |
49 | * Remove dummycache folder after each tests. | 49 | * Remove dummycache folder after each tests. |
50 | */ | 50 | */ |
51 | public function tearDown() | 51 | protected function tearDown(): void |
52 | { | 52 | { |
53 | array_map('unlink', glob(self::$testCacheDir . '/*')); | 53 | array_map('unlink', glob(self::$testCacheDir . '/*')); |
54 | rmdir(self::$testCacheDir); | 54 | rmdir(self::$testCacheDir); |
diff --git a/tests/render/ThemeUtilsTest.php b/tests/render/ThemeUtilsTest.php index 58e3426b..7d841e4d 100644 --- a/tests/render/ThemeUtilsTest.php +++ b/tests/render/ThemeUtilsTest.php | |||
@@ -7,7 +7,7 @@ namespace Shaarli\Render; | |||
7 | * | 7 | * |
8 | * @package Shaarli | 8 | * @package Shaarli |
9 | */ | 9 | */ |
10 | class ThemeUtilsTest extends \PHPUnit\Framework\TestCase | 10 | class ThemeUtilsTest extends \Shaarli\TestCase |
11 | { | 11 | { |
12 | /** | 12 | /** |
13 | * Test getThemes() with existing theme directories. | 13 | * Test getThemes() with existing theme directories. |
diff --git a/tests/security/BanManagerTest.php b/tests/security/BanManagerTest.php index bba7c8ad..698d3d10 100644 --- a/tests/security/BanManagerTest.php +++ b/tests/security/BanManagerTest.php | |||
@@ -3,8 +3,8 @@ | |||
3 | 3 | ||
4 | namespace Shaarli\Security; | 4 | namespace Shaarli\Security; |
5 | 5 | ||
6 | use PHPUnit\Framework\TestCase; | ||
7 | use Shaarli\FileUtils; | 6 | use Shaarli\FileUtils; |
7 | use Shaarli\TestCase; | ||
8 | 8 | ||
9 | /** | 9 | /** |
10 | * Test coverage for BanManager | 10 | * Test coverage for BanManager |
@@ -32,7 +32,7 @@ class BanManagerTest extends TestCase | |||
32 | /** | 32 | /** |
33 | * Prepare or reset test resources | 33 | * Prepare or reset test resources |
34 | */ | 34 | */ |
35 | public function setUp() | 35 | protected function setUp(): void |
36 | { | 36 | { |
37 | if (file_exists($this->banFile)) { | 37 | if (file_exists($this->banFile)) { |
38 | unlink($this->banFile); | 38 | unlink($this->banFile); |
diff --git a/tests/security/LoginManagerTest.php b/tests/security/LoginManagerTest.php index f242be09..d302983d 100644 --- a/tests/security/LoginManagerTest.php +++ b/tests/security/LoginManagerTest.php | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Security; | 3 | namespace Shaarli\Security; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | 5 | use Shaarli\TestCase; |
6 | 6 | ||
7 | /** | 7 | /** |
8 | * Test coverage for LoginManager | 8 | * Test coverage for LoginManager |
@@ -63,7 +63,7 @@ class LoginManagerTest extends TestCase | |||
63 | /** | 63 | /** |
64 | * Prepare or reset test resources | 64 | * Prepare or reset test resources |
65 | */ | 65 | */ |
66 | public function setUp() | 66 | protected function setUp(): void |
67 | { | 67 | { |
68 | if (file_exists($this->banFile)) { | 68 | if (file_exists($this->banFile)) { |
69 | unlink($this->banFile); | 69 | unlink($this->banFile); |
diff --git a/tests/security/SessionManagerTest.php b/tests/security/SessionManagerTest.php index 60695dcf..3f9c3ef5 100644 --- a/tests/security/SessionManagerTest.php +++ b/tests/security/SessionManagerTest.php | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Security; | 3 | namespace Shaarli\Security; |
4 | 4 | ||
5 | use PHPUnit\Framework\TestCase; | 5 | use Shaarli\TestCase; |
6 | 6 | ||
7 | /** | 7 | /** |
8 | * Test coverage for SessionManager | 8 | * Test coverage for SessionManager |
@@ -24,7 +24,7 @@ class SessionManagerTest extends TestCase | |||
24 | /** | 24 | /** |
25 | * Assign reference data | 25 | * Assign reference data |
26 | */ | 26 | */ |
27 | public static function setUpBeforeClass() | 27 | public static function setUpBeforeClass(): void |
28 | { | 28 | { |
29 | self::$sidHashes = \ReferenceSessionIdHashes::getHashes(); | 29 | self::$sidHashes = \ReferenceSessionIdHashes::getHashes(); |
30 | } | 30 | } |
@@ -32,7 +32,7 @@ class SessionManagerTest extends TestCase | |||
32 | /** | 32 | /** |
33 | * Initialize or reset test resources | 33 | * Initialize or reset test resources |
34 | */ | 34 | */ |
35 | public function setUp() | 35 | protected function setUp(): void |
36 | { | 36 | { |
37 | $this->conf = new \FakeConfigManager([ | 37 | $this->conf = new \FakeConfigManager([ |
38 | 'credentials.login' => 'johndoe', | 38 | 'credentials.login' => 'johndoe', |
@@ -207,15 +207,16 @@ class SessionManagerTest extends TestCase | |||
207 | 'expires_on' => time() + 1000, | 207 | 'expires_on' => time() + 1000, |
208 | 'username' => 'johndoe', | 208 | 'username' => 'johndoe', |
209 | 'visibility' => 'public', | 209 | 'visibility' => 'public', |
210 | 'untaggedonly' => false, | 210 | 'untaggedonly' => true, |
211 | ]; | 211 | ]; |
212 | $this->sessionManager->logout(); | 212 | $this->sessionManager->logout(); |
213 | 213 | ||
214 | $this->assertFalse(isset($this->session['ip'])); | 214 | $this->assertArrayNotHasKey('ip', $this->session); |
215 | $this->assertFalse(isset($this->session['expires_on'])); | 215 | $this->assertArrayNotHasKey('expires_on', $this->session); |
216 | $this->assertFalse(isset($this->session['username'])); | 216 | $this->assertArrayNotHasKey('username', $this->session); |
217 | $this->assertFalse(isset($this->session['visibility'])); | 217 | $this->assertArrayNotHasKey('visibility', $this->session); |
218 | $this->assertFalse(isset($this->session['untaggedonly'])); | 218 | $this->assertArrayHasKey('untaggedonly', $this->session); |
219 | $this->assertTrue($this->session['untaggedonly']); | ||
219 | } | 220 | } |
220 | 221 | ||
221 | /** | 222 | /** |
diff --git a/tests/updater/DummyUpdater.php b/tests/updater/DummyUpdater.php index 07c7f5c4..3403233f 100644 --- a/tests/updater/DummyUpdater.php +++ b/tests/updater/DummyUpdater.php | |||
@@ -37,7 +37,7 @@ class DummyUpdater extends Updater | |||
37 | * | 37 | * |
38 | * @return bool true. | 38 | * @return bool true. |
39 | */ | 39 | */ |
40 | final private function updateMethodDummy1() | 40 | final protected function updateMethodDummy1() |
41 | { | 41 | { |
42 | return true; | 42 | return true; |
43 | } | 43 | } |
@@ -47,7 +47,7 @@ class DummyUpdater extends Updater | |||
47 | * | 47 | * |
48 | * @return bool true. | 48 | * @return bool true. |
49 | */ | 49 | */ |
50 | final private function updateMethodDummy2() | 50 | final protected function updateMethodDummy2() |
51 | { | 51 | { |
52 | return true; | 52 | return true; |
53 | } | 53 | } |
@@ -57,7 +57,7 @@ class DummyUpdater extends Updater | |||
57 | * | 57 | * |
58 | * @return bool true. | 58 | * @return bool true. |
59 | */ | 59 | */ |
60 | final private function updateMethodDummy3() | 60 | final protected function updateMethodDummy3() |
61 | { | 61 | { |
62 | return true; | 62 | return true; |
63 | } | 63 | } |
@@ -67,7 +67,7 @@ class DummyUpdater extends Updater | |||
67 | * | 67 | * |
68 | * @throws Exception error. | 68 | * @throws Exception error. |
69 | */ | 69 | */ |
70 | final private function updateMethodException() | 70 | final protected function updateMethodException() |
71 | { | 71 | { |
72 | throw new Exception('whatever'); | 72 | throw new Exception('whatever'); |
73 | } | 73 | } |
diff --git a/tests/updater/UpdaterTest.php b/tests/updater/UpdaterTest.php index a7dd70bf..a6280b8c 100644 --- a/tests/updater/UpdaterTest.php +++ b/tests/updater/UpdaterTest.php | |||
@@ -2,11 +2,11 @@ | |||
2 | namespace Shaarli\Updater; | 2 | namespace Shaarli\Updater; |
3 | 3 | ||
4 | use Exception; | 4 | use Exception; |
5 | use PHPUnit\Framework\TestCase; | ||
6 | use Shaarli\Bookmark\BookmarkFileService; | 5 | use Shaarli\Bookmark\BookmarkFileService; |
7 | use Shaarli\Bookmark\BookmarkServiceInterface; | 6 | use Shaarli\Bookmark\BookmarkServiceInterface; |
8 | use Shaarli\Config\ConfigManager; | 7 | use Shaarli\Config\ConfigManager; |
9 | use Shaarli\History; | 8 | use Shaarli\History; |
9 | use Shaarli\TestCase; | ||
10 | 10 | ||
11 | 11 | ||
12 | /** | 12 | /** |
@@ -42,7 +42,7 @@ class UpdaterTest extends TestCase | |||
42 | /** | 42 | /** |
43 | * Executed before each test. | 43 | * Executed before each test. |
44 | */ | 44 | */ |
45 | public function setUp() | 45 | protected function setUp(): void |
46 | { | 46 | { |
47 | $this->refDB = new \ReferenceLinkDB(); | 47 | $this->refDB = new \ReferenceLinkDB(); |
48 | $this->refDB->write(self::$testDatastore); | 48 | $this->refDB->write(self::$testDatastore); |
@@ -87,23 +87,23 @@ class UpdaterTest extends TestCase | |||
87 | 87 | ||
88 | /** | 88 | /** |
89 | * Test errors in UpdaterUtils::write_updates_file(): empty updates file. | 89 | * Test errors in UpdaterUtils::write_updates_file(): empty updates file. |
90 | * | ||
91 | * @expectedException Exception | ||
92 | * @expectedExceptionMessageRegExp /Updates file path is not set(.*)/ | ||
93 | */ | 90 | */ |
94 | public function testWriteEmptyUpdatesFile() | 91 | public function testWriteEmptyUpdatesFile() |
95 | { | 92 | { |
93 | $this->expectException(\Exception::class); | ||
94 | $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/'); | ||
95 | |||
96 | UpdaterUtils::write_updates_file('', array('test')); | 96 | UpdaterUtils::write_updates_file('', array('test')); |
97 | } | 97 | } |
98 | 98 | ||
99 | /** | 99 | /** |
100 | * Test errors in UpdaterUtils::write_updates_file(): not writable updates file. | 100 | * Test errors in UpdaterUtils::write_updates_file(): not writable updates file. |
101 | * | ||
102 | * @expectedException Exception | ||
103 | * @expectedExceptionMessageRegExp /Unable to write(.*)/ | ||
104 | */ | 101 | */ |
105 | public function testWriteUpdatesFileNotWritable() | 102 | public function testWriteUpdatesFileNotWritable() |
106 | { | 103 | { |
104 | $this->expectException(\Exception::class); | ||
105 | $this->expectExceptionMessageRegExp('/Unable to write(.*)/'); | ||
106 | |||
107 | $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; | 107 | $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; |
108 | touch($updatesFile); | 108 | touch($updatesFile); |
109 | chmod($updatesFile, 0444); | 109 | chmod($updatesFile, 0444); |
@@ -168,11 +168,11 @@ class UpdaterTest extends TestCase | |||
168 | 168 | ||
169 | /** | 169 | /** |
170 | * Test Update failed. | 170 | * Test Update failed. |
171 | * | ||
172 | * @expectedException \Exception | ||
173 | */ | 171 | */ |
174 | public function testUpdateFailed() | 172 | public function testUpdateFailed() |
175 | { | 173 | { |
174 | $this->expectException(\Exception::class); | ||
175 | |||
176 | $updates = array( | 176 | $updates = array( |
177 | 'updateMethodDummy1', | 177 | 'updateMethodDummy1', |
178 | 'updateMethodDummy2', | 178 | 'updateMethodDummy2', |
diff --git a/tpl/default/includes.html b/tpl/default/includes.html index 227f9b52..09768ac4 100644 --- a/tpl/default/includes.html +++ b/tpl/default/includes.html | |||
@@ -8,7 +8,7 @@ | |||
8 | <link href="{$asset_path}/img/favicon.png#" rel="shortcut icon" type="image/png" /> | 8 | <link href="{$asset_path}/img/favicon.png#" rel="shortcut icon" type="image/png" /> |
9 | <link href="{$asset_path}/img/apple-touch-icon.png#" rel="apple-touch-icon" sizes="180x180" /> | 9 | <link href="{$asset_path}/img/apple-touch-icon.png#" rel="apple-touch-icon" sizes="180x180" /> |
10 | <link type="text/css" rel="stylesheet" href="{$asset_path}/css/shaarli.min.css?v={$version_hash}#" /> | 10 | <link type="text/css" rel="stylesheet" href="{$asset_path}/css/shaarli.min.css?v={$version_hash}#" /> |
11 | {if="$formatter==='markdown'"} | 11 | {if="strpos($formatter, 'markdown') !== false"} |
12 | <link type="text/css" rel="stylesheet" href="{$asset_path}/css/markdown.min.css?v={$version_hash}#" /> | 12 | <link type="text/css" rel="stylesheet" href="{$asset_path}/css/markdown.min.css?v={$version_hash}#" /> |
13 | {/if} | 13 | {/if} |
14 | {loop="$plugins_includes.css_files"} | 14 | {loop="$plugins_includes.css_files"} |
diff --git a/tpl/default/linklist.html b/tpl/default/linklist.html index c7617b22..b08773d8 100644 --- a/tpl/default/linklist.html +++ b/tpl/default/linklist.html | |||
@@ -94,7 +94,7 @@ | |||
94 | {'tagged'|t} | 94 | {'tagged'|t} |
95 | {loop="$exploded_tags"} | 95 | {loop="$exploded_tags"} |
96 | <span class="label label-tag" title="{'Remove tag'|t}"> | 96 | <span class="label label-tag" title="{'Remove tag'|t}"> |
97 | <a href="{$base_path}/remove-tag/{function="urlencode($value)"}" aria-label="{'Remove tag'|t}"> | 97 | <a href="{$base_path}/remove-tag/{function="$search_tags_url.$key1"}" aria-label="{'Remove tag'|t}"> |
98 | {$value}<span class="remove"><i class="fa fa-times" aria-hidden="true"></i></span> | 98 | {$value}<span class="remove"><i class="fa fa-times" aria-hidden="true"></i></span> |
99 | </a> | 99 | </a> |
100 | </span> | 100 | </span> |
@@ -183,7 +183,7 @@ | |||
183 | {$tag_counter=count($value.taglist)} | 183 | {$tag_counter=count($value.taglist)} |
184 | {loop="value.taglist"} | 184 | {loop="value.taglist"} |
185 | <span class="label label-tag" title="{$strAddTag}"> | 185 | <span class="label label-tag" title="{$strAddTag}"> |
186 | <a href="{$base_path}/add-tag/{$value|urlencode}">{$value}</a> | 186 | <a href="{$base_path}/add-tag/{$value1.urlencoded_taglist.$key2}">{$value}</a> |
187 | </span> | 187 | </span> |
188 | {if="$tag_counter - 1 != $counter"}·{/if} | 188 | {if="$tag_counter - 1 != $counter"}·{/if} |
189 | {/loop} | 189 | {/loop} |
@@ -272,7 +272,17 @@ | |||
272 | <i class="fa fa-trash" aria-hidden="true"></i> | 272 | <i class="fa fa-trash" aria-hidden="true"></i> |
273 | </a> | 273 | </a> |
274 | · | 274 | · |
275 | <a href="{$base_path}/admin/shaare/{$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a> | 275 | <a href="{$base_path}/admin/shaare/{$value.id}" aria-label="{$strEdit}" title="{$strEdit}"> |
276 | <i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i> | ||
277 | </a> | ||
278 | · | ||
279 | <a href="{$base_path}/admin/shaare/{$value.id}/pin?token={$token}" | ||
280 | aria-label="{$strToggleSticky}" | ||
281 | title="{$strToggleSticky}" | ||
282 | class="pin-link {if="$value.sticky"}pinned-link{/if}" | ||
283 | > | ||
284 | <i class="fa fa-thumb-tack" aria-hidden="true"></i> | ||
285 | </a> | ||
276 | {/if} | 286 | {/if} |
277 | </div> | 287 | </div> |
278 | </div> | 288 | </div> |
diff --git a/tpl/default/linklist.paging.html b/tpl/default/linklist.paging.html index 7b320eaf..aa637868 100644 --- a/tpl/default/linklist.paging.html +++ b/tpl/default/linklist.paging.html | |||
@@ -1,27 +1,29 @@ | |||
1 | <div class="linklist-paging"> | 1 | <div class="linklist-paging"> |
2 | <div class="paging pure-g"> | 2 | <div class="paging pure-g"> |
3 | <div class="linklist-filters pure-u-1-3"> | 3 | <div class="linklist-filters pure-u-1-3"> |
4 | {if="$is_logged_in or !empty($action_plugin)"} | 4 | <span class="linklist-filters-text pure-u-0 pure-u-lg-visible"> |
5 | <span class="linklist-filters-text pure-u-0 pure-u-lg-visible"> | 5 | {'Filters'|t} |
6 | {'Filters'|t} | 6 | </span> |
7 | </span> | 7 | {if="$is_logged_in"} |
8 | {if="$is_logged_in"} | 8 | <a href="{$base_path}/admin/visibility/private" aria-label="{'Only display private links'|t}" title="{'Only display private links'|t}" |
9 | <a href="{$base_path}/admin/visibility/private" aria-label="{'Only display private links'|t}" title="{'Only display private links'|t}" | 9 | class="{if="$visibility==='private'"}filter-on{else}filter-off{/if}" |
10 | class="{if="$visibility==='private'"}filter-on{else}filter-off{/if}" | 10 | ><i class="fa fa-user-secret" aria-hidden="true"></i></a> |
11 | ><i class="fa fa-user-secret" aria-hidden="true"></i></a> | 11 | <a href="{$base_path}/admin/visibility/public" aria-label="{'Only display public links'|t}" title="{'Only display public links'|t}" |
12 | <a href="{$base_path}/admin/visibility/public" aria-label="{'Only display public links'|t}" title="{'Only display public links'|t}" | 12 | class="{if="$visibility==='public'"}filter-on{else}filter-off{/if}" |
13 | class="{if="$visibility==='public'"}filter-on{else}filter-off{/if}" | 13 | ><i class="fa fa-globe" aria-hidden="true"></i></a> |
14 | ><i class="fa fa-globe" aria-hidden="true"></i></a> | 14 | {/if} |
15 | {/if} | 15 | <a href="{$base_path}/untagged-only" aria-label="{'Filter untagged links'|t}" title="{'Filter untagged links'|t}" |
16 | <a href="{$base_path}/untagged-only" aria-label="{'Filter untagged links'|t}" title="{'Filter untagged links'|t}" | 16 | class={if="$untaggedonly"}"filter-on"{else}"filter-off"{/if} |
17 | class={if="$untaggedonly"}"filter-on"{else}"filter-off"{/if} | 17 | ><i class="fa fa-tag" aria-hidden="true"></i></a> |
18 | ><i class="fa fa-tag" aria-hidden="true"></i></a> | 18 | {if="$is_logged_in"} |
19 | <a href="#" aria-label="{'Select all'|t}" title="{'Select all'|t}" | 19 | <a href="#" aria-label="{'Select all'|t}" title="{'Select all'|t}" |
20 | class="filter-off select-all-button pure-u-0 pure-u-lg-visible" | 20 | class="filter-off select-all-button pure-u-0 pure-u-lg-visible" |
21 | ><i class="fa fa-check-square-o" aria-hidden="true"></i></a> | 21 | ><i class="fa fa-check-square-o" aria-hidden="true"></i></a> |
22 | <a href="#" class="filter-off fold-all pure-u-lg-0" aria-label="{'Fold all'|t}" title="{'Fold all'|t}"> | 22 | {/if} |
23 | <i class="fa fa-chevron-up" aria-hidden="true"></i> | 23 | <a href="#" class="filter-off fold-all pure-u-lg-0" aria-label="{'Fold all'|t}" title="{'Fold all'|t}"> |
24 | </a> | 24 | <i class="fa fa-chevron-up" aria-hidden="true"></i> |
25 | </a> | ||
26 | {if="!empty($action_plugin)"} | ||
25 | {loop="$action_plugin"} | 27 | {loop="$action_plugin"} |
26 | {$value.attr.class=isset($value.attr.class) ? $value.attr.class : ''} | 28 | {$value.attr.class=isset($value.attr.class) ? $value.attr.class : ''} |
27 | {$value.attr.class=!empty($value.on) ? $value.attr.class .' filter-on' : $value.attr.class .' filter-off'} | 29 | {$value.attr.class=!empty($value.on) ? $value.attr.class .' filter-on' : $value.attr.class .' filter-off'} |
@@ -53,11 +55,16 @@ | |||
53 | 55 | ||
54 | <div class="linksperpage pure-u-1-3"> | 56 | <div class="linksperpage pure-u-1-3"> |
55 | <div class="pure-u-0 pure-u-lg-visible">{'Links per page'|t}</div> | 57 | <div class="pure-u-0 pure-u-lg-visible">{'Links per page'|t}</div> |
56 | <a href="{$base_path}/links-per-page?nb=20">20</a> | 58 | <a href="{$base_path}/links-per-page?nb=20" |
57 | <a href="{$base_path}/links-per-page?nb=50">50</a> | 59 | {if="$links_per_page == 20"}class="selected"{/if}>20</a> |
58 | <a href="{$base_path}/links-per-page?nb=100">100</a> | 60 | <a href="{$base_path}/links-per-page?nb=50" |
61 | {if="$links_per_page == 50"}class="selected"{/if}>50</a> | ||
62 | <a href="{$base_path}/links-per-page?nb=100" | ||
63 | {if="$links_per_page == 100"}class="selected"{/if}>100</a> | ||
59 | <form method="GET" class="pure-u-0 pure-u-lg-visible" action="{$base_path}/links-per-page"> | 64 | <form method="GET" class="pure-u-0 pure-u-lg-visible" action="{$base_path}/links-per-page"> |
60 | <input type="text" name="nb" placeholder="133"> | 65 | <input type="text" name="nb" placeholder="133" |
66 | {if="$links_per_page != 20 && $links_per_page != 50 && $links_per_page != 100"} | ||
67 | value="{$links_per_page}"{/if}> | ||
61 | </form> | 68 | </form> |
62 | <a href="#" class="filter-off fold-all pure-u-0 pure-u-lg-visible" aria-label="{'Fold all'|t}" title="{'Fold all'|t}"> | 69 | <a href="#" class="filter-off fold-all pure-u-0 pure-u-lg-visible" aria-label="{'Fold all'|t}" title="{'Fold all'|t}"> |
63 | <i class="fa fa-chevron-up" aria-hidden="true"></i> | 70 | <i class="fa fa-chevron-up" aria-hidden="true"></i> |
diff --git a/tpl/default/tag.cloud.html b/tpl/default/tag.cloud.html index 024882ec..c067e1d4 100644 --- a/tpl/default/tag.cloud.html +++ b/tpl/default/tag.cloud.html | |||
@@ -15,7 +15,7 @@ | |||
15 | <h2 class="window-title">{'Tag cloud'|t} - {$countTags} {'tags'|t}</h2> | 15 | <h2 class="window-title">{'Tag cloud'|t} - {$countTags} {'tags'|t}</h2> |
16 | {if="!empty($search_tags)"} | 16 | {if="!empty($search_tags)"} |
17 | <p class="center"> | 17 | <p class="center"> |
18 | <a href="{$base_path}/?searchtags={$search_tags|urlencode}" class="pure-button pure-button-shaarli"> | 18 | <a href="{$base_path}/?searchtags={$search_tags_url}" class="pure-button pure-button-shaarli"> |
19 | {'List all links with those tags'|t} | 19 | {'List all links with those tags'|t} |
20 | </a> | 20 | </a> |
21 | </p> | 21 | </p> |
@@ -48,8 +48,8 @@ | |||
48 | 48 | ||
49 | <div id="cloudtag" class="cloudtag-container"> | 49 | <div id="cloudtag" class="cloudtag-container"> |
50 | {loop="tags"} | 50 | {loop="tags"} |
51 | <a href="{$base_path}/?searchtags={$key|urlencode} {$search_tags|urlencode}" style="font-size:{$value.size}em;">{$key}</a | 51 | <a href="{$base_path}/?searchtags={$tags_url.$key1} {$search_tags_url}" style="font-size:{$value.size}em;">{$key}</a |
52 | ><a href="{$base_path}/add-tag/{$key|urlencode}" title="{'Filter by tag'|t}" class="count">{$value.count}</a> | 52 | ><a href="{$base_path}/add-tag/{$tags_url.$key1}" title="{'Filter by tag'|t}" class="count">{$value.count}</a> |
53 | {loop="$value.tag_plugin"} | 53 | {loop="$value.tag_plugin"} |
54 | {$value} | 54 | {$value} |
55 | {/loop} | 55 | {/loop} |
diff --git a/tpl/default/tag.list.html b/tpl/default/tag.list.html index 99ae44d2..96e7fbe0 100644 --- a/tpl/default/tag.list.html +++ b/tpl/default/tag.list.html | |||
@@ -15,7 +15,7 @@ | |||
15 | <h2 class="window-title">{'Tag list'|t} - {$countTags} {'tags'|t}</h2> | 15 | <h2 class="window-title">{'Tag list'|t} - {$countTags} {'tags'|t}</h2> |
16 | {if="!empty($search_tags)"} | 16 | {if="!empty($search_tags)"} |
17 | <p class="center"> | 17 | <p class="center"> |
18 | <a href="{$base_path}/?searchtags={$search_tags|urlencode}" class="pure-button pure-button-shaarli"> | 18 | <a href="{$base_path}/?searchtags={$search_tags_url}" class="pure-button pure-button-shaarli"> |
19 | {'List all links with those tags'|t} | 19 | {'List all links with those tags'|t} |
20 | </a> | 20 | </a> |
21 | </p> | 21 | </p> |
@@ -47,17 +47,17 @@ | |||
47 | 47 | ||
48 | <div id="taglist" class="taglist-container"> | 48 | <div id="taglist" class="taglist-container"> |
49 | {loop="tags"} | 49 | {loop="tags"} |
50 | <div class="tag-list-item pure-g" data-tag="{$key}"> | 50 | <div class="tag-list-item pure-g" data-tag="{$key}" data-tag-url="{$tags_url.$key1}"> |
51 | <div class="pure-u-1"> | 51 | <div class="pure-u-1"> |
52 | {if="$is_logged_in===true"} | 52 | {if="$is_logged_in===true"} |
53 | <a href="#" class="delete-tag" aria-label="{'Delete'|t}"><i class="fa fa-trash" aria-hidden="true"></i></a> | 53 | <a href="#" class="delete-tag" aria-label="{'Delete'|t}"><i class="fa fa-trash" aria-hidden="true"></i></a> |
54 | <a href="{$base_path}/admin/tags?fromtag={$key|urlencode}" class="rename-tag" aria-label="{'Rename tag'|t}"> | 54 | <a href="{$base_path}/admin/tags?fromtag={$tags_url.$key1}" class="rename-tag" aria-label="{'Rename tag'|t}"> |
55 | <i class="fa fa-pencil-square-o {$key}" aria-hidden="true"></i> | 55 | <i class="fa fa-pencil-square-o {$key}" aria-hidden="true"></i> |
56 | </a> | 56 | </a> |
57 | {/if} | 57 | {/if} |
58 | 58 | ||
59 | <a href="{$base_path}/add-tag/{$key|urlencode}" title="{'Filter by tag'|t}" class="count">{$value}</a> | 59 | <a href="{$base_path}/add-tag/{$tags_url.$key1}" title="{'Filter by tag'|t}" class="count">{$value}</a> |
60 | <a href="{$base_path}/?searchtags={$key|urlencode} {$search_tags|urlencode}" class="tag-link">{$key}</a> | 60 | <a href="{$base_path}/?searchtags={$tags_url.$key1} {$search_tags_url}" class="tag-link">{$key}</a> |
61 | 61 | ||
62 | {loop="$value.tag_plugin"} | 62 | {loop="$value.tag_plugin"} |
63 | {$value} | 63 | {$value} |
diff --git a/tpl/default/tag.sort.html b/tpl/default/tag.sort.html index 8718b188..b3764e29 100644 --- a/tpl/default/tag.sort.html +++ b/tpl/default/tag.sort.html | |||
@@ -1,8 +1,8 @@ | |||
1 | <div class="pure-g"> | 1 | <div class="pure-g"> |
2 | <div class="pure-u-1 pure-alert pure-alert-success tag-sort"> | 2 | <div class="pure-u-1 pure-alert pure-alert-success tag-sort"> |
3 | {'Sort by:'|t} | 3 | {'Sort by:'|t} |
4 | <a href="{$base_path}/tags/cloud">{'Cloud'|t}</a> · | 4 | <a href="{$base_path}/tags/cloud">{'Cloud'|t}</a> |
5 | <a href="{$base_path}/tags/list?sort=usage">{'Most used'|t}</a> · | 5 | <a href="{$base_path}/tags/list?sort=usage">{'Most used'|t}</a> |
6 | <a href="{$base_path}/tags/list?sort=alpha">{'Alphabetical'|t}</a> | 6 | <a href="{$base_path}/tags/list?sort=alpha">{'Alphabetical'|t}</a> |
7 | </div> | 7 | </div> |
8 | </div> | 8 | </div> |
diff --git a/tpl/vintage/editlink.html b/tpl/vintage/editlink.html index c3671b1f..eb8807b5 100644 --- a/tpl/vintage/editlink.html +++ b/tpl/vintage/editlink.html | |||
@@ -11,7 +11,6 @@ | |||
11 | <div id="shaarli_title"><a href="{$titleLink}">{$shaarlititle}</a></div> | 11 | <div id="shaarli_title"><a href="{$titleLink}">{$shaarlititle}</a></div> |
12 | <div id="editlinkform"> | 12 | <div id="editlinkform"> |
13 | <form method="post" name="linkform" action="{$base_path}/admin/shaare"> | 13 | <form method="post" name="linkform" action="{$base_path}/admin/shaare"> |
14 | <input type="hidden" name="lf_linkdate" value="{$link.linkdate}"> | ||
15 | {if="isset($link.id)"} | 14 | {if="isset($link.id)"} |
16 | <input type="hidden" name="lf_id" value="{$link.id}"> | 15 | <input type="hidden" name="lf_id" value="{$link.id}"> |
17 | {/if} | 16 | {/if} |
diff --git a/tpl/vintage/linklist.paging.html b/tpl/vintage/linklist.paging.html index b9396df6..79daf16c 100644 --- a/tpl/vintage/linklist.paging.html +++ b/tpl/vintage/linklist.paging.html | |||
@@ -32,6 +32,6 @@ | |||
32 | </form> | 32 | </form> |
33 | </div> | 33 | </div> |
34 | {if="$previous_page_url"} <a href="{$previous_page_url}" class="paging_older">◄Older</a> {/if} | 34 | {if="$previous_page_url"} <a href="{$previous_page_url}" class="paging_older">◄Older</a> {/if} |
35 | <div class="paging_current">page {$page_current} / {$page_max} </div> | 35 | {if="$page_max>1"}<div class="paging_current">page {$page_current} / {$page_max} </div>{/if} |
36 | {if="$next_page_url"} <a href="{$next_page_url}" class="paging_newer">Newer►</a> {/if} | 36 | {if="$next_page_url"} <a href="{$next_page_url}" class="paging_newer">Newer►</a> {/if} |
37 | </div> | 37 | </div> |
diff --git a/webpack.config.js b/webpack.config.js index 602147e5..a73758cc 100644 --- a/webpack.config.js +++ b/webpack.config.js | |||
@@ -2,26 +2,21 @@ const path = require('path'); | |||
2 | const glob = require('glob'); | 2 | const glob = require('glob'); |
3 | 3 | ||
4 | // Minify JS | 4 | // Minify JS |
5 | const MinifyPlugin = require('babel-minify-webpack-plugin'); | 5 | const TerserPlugin = require('terser-webpack-plugin'); |
6 | 6 | ||
7 | // This plugin extracts the CSS into its own file instead of tying it with the JS. | 7 | // This plugin extracts the CSS into its own file instead of tying it with the JS. |
8 | // It prevents: | 8 | // It prevents: |
9 | // - not having styles due to a JS error | 9 | // - not having styles due to a JS error |
10 | // - the flash page without styles during JS loading | 10 | // - the flash page without styles during JS loading |
11 | const ExtractTextPlugin = require("extract-text-webpack-plugin"); | 11 | const MiniCssExtractPlugin = require("mini-css-extract-plugin"); |
12 | 12 | ||
13 | const extractCssDefault = new ExtractTextPlugin({ | 13 | const extractCss = new MiniCssExtractPlugin({ |
14 | filename: "../css/[name].min.css", | 14 | filename: "../css/[name].min.css", |
15 | publicPath: 'tpl/default/css/', | ||
16 | }); | ||
17 | |||
18 | const extractCssVintage = new ExtractTextPlugin({ | ||
19 | filename: "../css/[name].min.css", | ||
20 | publicPath: 'tpl/vintage/css/', | ||
21 | }); | 15 | }); |
22 | 16 | ||
23 | module.exports = [ | 17 | module.exports = [ |
24 | { | 18 | { |
19 | mode: 'production', | ||
25 | entry: { | 20 | entry: { |
26 | thumbnails: './assets/common/js/thumbnails.js', | 21 | thumbnails: './assets/common/js/thumbnails.js', |
27 | thumbnails_update: './assets/common/js/thumbnails-update.js', | 22 | thumbnails_update: './assets/common/js/thumbnails-update.js', |
@@ -45,23 +40,23 @@ module.exports = [ | |||
45 | loader: 'babel-loader', | 40 | loader: 'babel-loader', |
46 | options: { | 41 | options: { |
47 | presets: [ | 42 | presets: [ |
48 | 'babel-preset-env', | 43 | '@babel/preset-env', |
49 | ] | 44 | ] |
50 | } | 45 | } |
51 | } | 46 | } |
52 | }, | 47 | }, |
53 | { | 48 | { |
54 | test: /\.s?css/, | 49 | test: /\.s?css/, |
55 | use: extractCssDefault.extract({ | 50 | use: [ |
56 | use: [{ | 51 | { |
57 | loader: "css-loader", | 52 | loader: MiniCssExtractPlugin.loader, |
58 | options: { | 53 | options: { |
59 | minimize: true, | 54 | publicPath: 'tpl/default/css/', |
60 | } | 55 | }, |
61 | }, { | 56 | }, |
62 | loader: "sass-loader" | 57 | 'css-loader', |
63 | }], | 58 | 'sass-loader', |
64 | }) | 59 | ], |
65 | }, | 60 | }, |
66 | { | 61 | { |
67 | test: /\.(gif|png|jpe?g|svg|ico)$/i, | 62 | test: /\.(gif|png|jpe?g|svg|ico)$/i, |
@@ -81,17 +76,21 @@ module.exports = [ | |||
81 | options: { | 76 | options: { |
82 | name: '../fonts/[name].[ext]', | 77 | name: '../fonts/[name].[ext]', |
83 | // do not add a publicPath here because it's already handled by CSS's publicPath | 78 | // do not add a publicPath here because it's already handled by CSS's publicPath |
84 | publicPath: '', | 79 | publicPath: '../default/', |
85 | } | 80 | } |
86 | }, | 81 | }, |
87 | ], | 82 | ], |
88 | }, | 83 | }, |
84 | optimization: { | ||
85 | minimize: true, | ||
86 | minimizer: [new TerserPlugin()], | ||
87 | }, | ||
89 | plugins: [ | 88 | plugins: [ |
90 | new MinifyPlugin(), | 89 | extractCss, |
91 | extractCssDefault, | ||
92 | ], | 90 | ], |
93 | }, | 91 | }, |
94 | { | 92 | { |
93 | mode: 'production', | ||
95 | entry: { | 94 | entry: { |
96 | shaarli: [ | 95 | shaarli: [ |
97 | './assets/vintage/js/base.js', | 96 | './assets/vintage/js/base.js', |
@@ -115,21 +114,23 @@ module.exports = [ | |||
115 | loader: 'babel-loader', | 114 | loader: 'babel-loader', |
116 | options: { | 115 | options: { |
117 | presets: [ | 116 | presets: [ |
118 | 'babel-preset-env', | 117 | '@babel/preset-env', |
119 | ] | 118 | ] |
120 | } | 119 | } |
121 | } | 120 | } |
122 | }, | 121 | }, |
123 | { | 122 | { |
124 | test: /\.css$/, | 123 | test: /\.css$/, |
125 | use: extractCssVintage.extract({ | 124 | use: [ |
126 | use: [{ | 125 | { |
127 | loader: "css-loader", | 126 | loader: MiniCssExtractPlugin.loader, |
128 | options: { | 127 | options: { |
129 | minimize: true, | 128 | publicPath: 'tpl/vintage/css/', |
130 | } | 129 | }, |
131 | }], | 130 | }, |
132 | }) | 131 | 'css-loader', |
132 | 'sass-loader', | ||
133 | ], | ||
133 | }, | 134 | }, |
134 | { | 135 | { |
135 | test: /\.(gif|png|jpe?g|svg|ico)$/i, | 136 | test: /\.(gif|png|jpe?g|svg|ico)$/i, |
@@ -145,9 +146,12 @@ module.exports = [ | |||
145 | }, | 146 | }, |
146 | ], | 147 | ], |
147 | }, | 148 | }, |
149 | optimization: { | ||
150 | minimize: true, | ||
151 | minimizer: [new TerserPlugin()], | ||
152 | }, | ||
148 | plugins: [ | 153 | plugins: [ |
149 | new MinifyPlugin(), | 154 | extractCss, |
150 | extractCssVintage, | ||
151 | ], | 155 | ], |
152 | }, | 156 | }, |
153 | ]; | 157 | ]; |
@@ -2,1015 +2,1317 @@ | |||
2 | # yarn lockfile v1 | 2 | # yarn lockfile v1 |
3 | 3 | ||
4 | 4 | ||
5 | abbrev@1: | 5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": |
6 | version "1.1.1" | 6 | version "7.10.4" |
7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" | 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" |
8 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== | 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== |
9 | dependencies: | ||
10 | "@babel/highlight" "^7.10.4" | ||
11 | |||
12 | "@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": | ||
13 | version "7.11.0" | ||
14 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" | ||
15 | integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== | ||
16 | dependencies: | ||
17 | browserslist "^4.12.0" | ||
18 | invariant "^2.2.4" | ||
19 | semver "^5.5.0" | ||
20 | |||
21 | "@babel/core@>=7.9.0", "@babel/core@^7.11.6": | ||
22 | version "7.11.6" | ||
23 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" | ||
24 | integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== | ||
25 | dependencies: | ||
26 | "@babel/code-frame" "^7.10.4" | ||
27 | "@babel/generator" "^7.11.6" | ||
28 | "@babel/helper-module-transforms" "^7.11.0" | ||
29 | "@babel/helpers" "^7.10.4" | ||
30 | "@babel/parser" "^7.11.5" | ||
31 | "@babel/template" "^7.10.4" | ||
32 | "@babel/traverse" "^7.11.5" | ||
33 | "@babel/types" "^7.11.5" | ||
34 | convert-source-map "^1.7.0" | ||
35 | debug "^4.1.0" | ||
36 | gensync "^1.0.0-beta.1" | ||
37 | json5 "^2.1.2" | ||
38 | lodash "^4.17.19" | ||
39 | resolve "^1.3.2" | ||
40 | semver "^5.4.1" | ||
41 | source-map "^0.5.0" | ||
42 | |||
43 | "@babel/generator@^7.11.5", "@babel/generator@^7.11.6": | ||
44 | version "7.11.6" | ||
45 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" | ||
46 | integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== | ||
47 | dependencies: | ||
48 | "@babel/types" "^7.11.5" | ||
49 | jsesc "^2.5.1" | ||
50 | source-map "^0.5.0" | ||
51 | |||
52 | "@babel/helper-annotate-as-pure@^7.10.4": | ||
53 | version "7.10.4" | ||
54 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" | ||
55 | integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== | ||
56 | dependencies: | ||
57 | "@babel/types" "^7.10.4" | ||
58 | |||
59 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": | ||
60 | version "7.10.4" | ||
61 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" | ||
62 | integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== | ||
63 | dependencies: | ||
64 | "@babel/helper-explode-assignable-expression" "^7.10.4" | ||
65 | "@babel/types" "^7.10.4" | ||
66 | |||
67 | "@babel/helper-compilation-targets@^7.10.4": | ||
68 | version "7.10.4" | ||
69 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" | ||
70 | integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== | ||
71 | dependencies: | ||
72 | "@babel/compat-data" "^7.10.4" | ||
73 | browserslist "^4.12.0" | ||
74 | invariant "^2.2.4" | ||
75 | levenary "^1.1.1" | ||
76 | semver "^5.5.0" | ||
77 | |||
78 | "@babel/helper-create-class-features-plugin@^7.10.4": | ||
79 | version "7.10.5" | ||
80 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" | ||
81 | integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== | ||
82 | dependencies: | ||
83 | "@babel/helper-function-name" "^7.10.4" | ||
84 | "@babel/helper-member-expression-to-functions" "^7.10.5" | ||
85 | "@babel/helper-optimise-call-expression" "^7.10.4" | ||
86 | "@babel/helper-plugin-utils" "^7.10.4" | ||
87 | "@babel/helper-replace-supers" "^7.10.4" | ||
88 | "@babel/helper-split-export-declaration" "^7.10.4" | ||
89 | |||
90 | "@babel/helper-create-regexp-features-plugin@^7.10.4": | ||
91 | version "7.10.4" | ||
92 | resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" | ||
93 | integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== | ||
94 | dependencies: | ||
95 | "@babel/helper-annotate-as-pure" "^7.10.4" | ||
96 | "@babel/helper-regex" "^7.10.4" | ||
97 | regexpu-core "^4.7.0" | ||
98 | |||
99 | "@babel/helper-define-map@^7.10.4": | ||
100 | version "7.10.5" | ||
101 | resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" | ||
102 | integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== | ||
103 | dependencies: | ||
104 | "@babel/helper-function-name" "^7.10.4" | ||
105 | "@babel/types" "^7.10.5" | ||
106 | lodash "^4.17.19" | ||
107 | |||
108 | "@babel/helper-explode-assignable-expression@^7.10.4": | ||
109 | version "7.11.4" | ||
110 | resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" | ||
111 | integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== | ||
112 | dependencies: | ||
113 | "@babel/types" "^7.10.4" | ||
114 | |||
115 | "@babel/helper-function-name@^7.10.4": | ||
116 | version "7.10.4" | ||
117 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" | ||
118 | integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== | ||
119 | dependencies: | ||
120 | "@babel/helper-get-function-arity" "^7.10.4" | ||
121 | "@babel/template" "^7.10.4" | ||
122 | "@babel/types" "^7.10.4" | ||
123 | |||
124 | "@babel/helper-get-function-arity@^7.10.4": | ||
125 | version "7.10.4" | ||
126 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" | ||
127 | integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== | ||
128 | dependencies: | ||
129 | "@babel/types" "^7.10.4" | ||
130 | |||
131 | "@babel/helper-hoist-variables@^7.10.4": | ||
132 | version "7.10.4" | ||
133 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" | ||
134 | integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== | ||
135 | dependencies: | ||
136 | "@babel/types" "^7.10.4" | ||
137 | |||
138 | "@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": | ||
139 | version "7.11.0" | ||
140 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" | ||
141 | integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== | ||
142 | dependencies: | ||
143 | "@babel/types" "^7.11.0" | ||
144 | |||
145 | "@babel/helper-module-imports@^7.10.4": | ||
146 | version "7.10.4" | ||
147 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" | ||
148 | integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== | ||
149 | dependencies: | ||
150 | "@babel/types" "^7.10.4" | ||
151 | |||
152 | "@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": | ||
153 | version "7.11.0" | ||
154 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" | ||
155 | integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== | ||
156 | dependencies: | ||
157 | "@babel/helper-module-imports" "^7.10.4" | ||
158 | "@babel/helper-replace-supers" "^7.10.4" | ||
159 | "@babel/helper-simple-access" "^7.10.4" | ||
160 | "@babel/helper-split-export-declaration" "^7.11.0" | ||
161 | "@babel/template" "^7.10.4" | ||
162 | "@babel/types" "^7.11.0" | ||
163 | lodash "^4.17.19" | ||
164 | |||
165 | "@babel/helper-optimise-call-expression@^7.10.4": | ||
166 | version "7.10.4" | ||
167 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" | ||
168 | integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== | ||
169 | dependencies: | ||
170 | "@babel/types" "^7.10.4" | ||
171 | |||
172 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": | ||
173 | version "7.10.4" | ||
174 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" | ||
175 | integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== | ||
176 | |||
177 | "@babel/helper-regex@^7.10.4": | ||
178 | version "7.10.5" | ||
179 | resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" | ||
180 | integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== | ||
181 | dependencies: | ||
182 | lodash "^4.17.19" | ||
183 | |||
184 | "@babel/helper-remap-async-to-generator@^7.10.4": | ||
185 | version "7.11.4" | ||
186 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" | ||
187 | integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== | ||
188 | dependencies: | ||
189 | "@babel/helper-annotate-as-pure" "^7.10.4" | ||
190 | "@babel/helper-wrap-function" "^7.10.4" | ||
191 | "@babel/template" "^7.10.4" | ||
192 | "@babel/types" "^7.10.4" | ||
193 | |||
194 | "@babel/helper-replace-supers@^7.10.4": | ||
195 | version "7.10.4" | ||
196 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" | ||
197 | integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== | ||
198 | dependencies: | ||
199 | "@babel/helper-member-expression-to-functions" "^7.10.4" | ||
200 | "@babel/helper-optimise-call-expression" "^7.10.4" | ||
201 | "@babel/traverse" "^7.10.4" | ||
202 | "@babel/types" "^7.10.4" | ||
203 | |||
204 | "@babel/helper-simple-access@^7.10.4": | ||
205 | version "7.10.4" | ||
206 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" | ||
207 | integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== | ||
208 | dependencies: | ||
209 | "@babel/template" "^7.10.4" | ||
210 | "@babel/types" "^7.10.4" | ||
211 | |||
212 | "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": | ||
213 | version "7.11.0" | ||
214 | resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" | ||
215 | integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== | ||
216 | dependencies: | ||
217 | "@babel/types" "^7.11.0" | ||
218 | |||
219 | "@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": | ||
220 | version "7.11.0" | ||
221 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" | ||
222 | integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== | ||
223 | dependencies: | ||
224 | "@babel/types" "^7.11.0" | ||
225 | |||
226 | "@babel/helper-validator-identifier@^7.10.4": | ||
227 | version "7.10.4" | ||
228 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" | ||
229 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== | ||
230 | |||
231 | "@babel/helper-wrap-function@^7.10.4": | ||
232 | version "7.10.4" | ||
233 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" | ||
234 | integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== | ||
235 | dependencies: | ||
236 | "@babel/helper-function-name" "^7.10.4" | ||
237 | "@babel/template" "^7.10.4" | ||
238 | "@babel/traverse" "^7.10.4" | ||
239 | "@babel/types" "^7.10.4" | ||
240 | |||
241 | "@babel/helpers@^7.10.4": | ||
242 | version "7.10.4" | ||
243 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" | ||
244 | integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== | ||
245 | dependencies: | ||
246 | "@babel/template" "^7.10.4" | ||
247 | "@babel/traverse" "^7.10.4" | ||
248 | "@babel/types" "^7.10.4" | ||
249 | |||
250 | "@babel/highlight@^7.10.4": | ||
251 | version "7.10.4" | ||
252 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" | ||
253 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== | ||
254 | dependencies: | ||
255 | "@babel/helper-validator-identifier" "^7.10.4" | ||
256 | chalk "^2.0.0" | ||
257 | js-tokens "^4.0.0" | ||
258 | |||
259 | "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": | ||
260 | version "7.11.5" | ||
261 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" | ||
262 | integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== | ||
9 | 263 | ||
10 | acorn-dynamic-import@^2.0.0: | 264 | "@babel/plugin-proposal-async-generator-functions@^7.10.4": |
11 | version "2.0.2" | 265 | version "7.10.5" |
12 | resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" | 266 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" |
13 | integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= | 267 | integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== |
268 | dependencies: | ||
269 | "@babel/helper-plugin-utils" "^7.10.4" | ||
270 | "@babel/helper-remap-async-to-generator" "^7.10.4" | ||
271 | "@babel/plugin-syntax-async-generators" "^7.8.0" | ||
272 | |||
273 | "@babel/plugin-proposal-class-properties@^7.10.4": | ||
274 | version "7.10.4" | ||
275 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" | ||
276 | integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== | ||
14 | dependencies: | 277 | dependencies: |
15 | acorn "^4.0.3" | 278 | "@babel/helper-create-class-features-plugin" "^7.10.4" |
16 | 279 | "@babel/helper-plugin-utils" "^7.10.4" | |
17 | acorn-jsx@^3.0.0: | 280 | |
18 | version "3.0.1" | 281 | "@babel/plugin-proposal-dynamic-import@^7.10.4": |
19 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" | 282 | version "7.10.4" |
20 | integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= | 283 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" |
284 | integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== | ||
285 | dependencies: | ||
286 | "@babel/helper-plugin-utils" "^7.10.4" | ||
287 | "@babel/plugin-syntax-dynamic-import" "^7.8.0" | ||
288 | |||
289 | "@babel/plugin-proposal-export-namespace-from@^7.10.4": | ||
290 | version "7.10.4" | ||
291 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" | ||
292 | integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== | ||
21 | dependencies: | 293 | dependencies: |
22 | acorn "^3.0.4" | 294 | "@babel/helper-plugin-utils" "^7.10.4" |
295 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" | ||
23 | 296 | ||
24 | acorn@^3.0.4: | 297 | "@babel/plugin-proposal-json-strings@^7.10.4": |
25 | version "3.3.0" | 298 | version "7.10.4" |
26 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" | 299 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" |
27 | integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= | 300 | integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== |
301 | dependencies: | ||
302 | "@babel/helper-plugin-utils" "^7.10.4" | ||
303 | "@babel/plugin-syntax-json-strings" "^7.8.0" | ||
28 | 304 | ||
29 | acorn@^4.0.3: | 305 | "@babel/plugin-proposal-logical-assignment-operators@^7.11.0": |
30 | version "4.0.13" | 306 | version "7.11.0" |
31 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" | 307 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" |
32 | integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= | 308 | integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== |
309 | dependencies: | ||
310 | "@babel/helper-plugin-utils" "^7.10.4" | ||
311 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" | ||
33 | 312 | ||
34 | acorn@^5.0.0, acorn@^5.5.0: | 313 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": |
35 | version "5.7.3" | 314 | version "7.10.4" |
36 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" | 315 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" |
37 | integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== | 316 | integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== |
317 | dependencies: | ||
318 | "@babel/helper-plugin-utils" "^7.10.4" | ||
319 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" | ||
38 | 320 | ||
39 | ajv-keywords@^1.0.0: | 321 | "@babel/plugin-proposal-numeric-separator@^7.10.4": |
40 | version "1.5.1" | 322 | version "7.10.4" |
41 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" | 323 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" |
42 | integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw= | 324 | integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== |
325 | dependencies: | ||
326 | "@babel/helper-plugin-utils" "^7.10.4" | ||
327 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" | ||
43 | 328 | ||
44 | ajv-keywords@^2.1.0: | 329 | "@babel/plugin-proposal-object-rest-spread@^7.11.0": |
45 | version "2.1.1" | 330 | version "7.11.0" |
46 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" | 331 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" |
47 | integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= | 332 | integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== |
333 | dependencies: | ||
334 | "@babel/helper-plugin-utils" "^7.10.4" | ||
335 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0" | ||
336 | "@babel/plugin-transform-parameters" "^7.10.4" | ||
48 | 337 | ||
49 | ajv-keywords@^3.1.0: | 338 | "@babel/plugin-proposal-optional-catch-binding@^7.10.4": |
50 | version "3.4.0" | 339 | version "7.10.4" |
51 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" | 340 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" |
52 | integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== | 341 | integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== |
342 | dependencies: | ||
343 | "@babel/helper-plugin-utils" "^7.10.4" | ||
344 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" | ||
53 | 345 | ||
54 | ajv@^4.7.0: | 346 | "@babel/plugin-proposal-optional-chaining@^7.11.0": |
55 | version "4.11.8" | 347 | version "7.11.0" |
56 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" | 348 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" |
57 | integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= | 349 | integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== |
58 | dependencies: | 350 | dependencies: |
59 | co "^4.6.0" | 351 | "@babel/helper-plugin-utils" "^7.10.4" |
60 | json-stable-stringify "^1.0.1" | 352 | "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" |
353 | "@babel/plugin-syntax-optional-chaining" "^7.8.0" | ||
61 | 354 | ||
62 | ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0: | 355 | "@babel/plugin-proposal-private-methods@^7.10.4": |
63 | version "5.5.2" | 356 | version "7.10.4" |
64 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" | 357 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" |
65 | integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= | 358 | integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== |
66 | dependencies: | 359 | dependencies: |
67 | co "^4.6.0" | 360 | "@babel/helper-create-class-features-plugin" "^7.10.4" |
68 | fast-deep-equal "^1.0.0" | 361 | "@babel/helper-plugin-utils" "^7.10.4" |
69 | fast-json-stable-stringify "^2.0.0" | ||
70 | json-schema-traverse "^0.3.0" | ||
71 | 362 | ||
72 | ajv@^6.1.0, ajv@^6.5.5: | 363 | "@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": |
73 | version "6.10.0" | 364 | version "7.10.4" |
74 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" | 365 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" |
75 | integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== | 366 | integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== |
76 | dependencies: | 367 | dependencies: |
77 | fast-deep-equal "^2.0.1" | 368 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" |
78 | fast-json-stable-stringify "^2.0.0" | 369 | "@babel/helper-plugin-utils" "^7.10.4" |
79 | json-schema-traverse "^0.4.1" | ||
80 | uri-js "^4.2.2" | ||
81 | 370 | ||
82 | align-text@^0.1.1, align-text@^0.1.3: | 371 | "@babel/plugin-syntax-async-generators@^7.8.0": |
83 | version "0.1.4" | 372 | version "7.8.4" |
84 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" | 373 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" |
85 | integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= | 374 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== |
86 | dependencies: | 375 | dependencies: |
87 | kind-of "^3.0.2" | 376 | "@babel/helper-plugin-utils" "^7.8.0" |
88 | longest "^1.0.1" | ||
89 | repeat-string "^1.5.2" | ||
90 | 377 | ||
91 | alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: | 378 | "@babel/plugin-syntax-class-properties@^7.10.4": |
92 | version "1.0.2" | 379 | version "7.10.4" |
93 | resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" | 380 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" |
94 | integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= | 381 | integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== |
382 | dependencies: | ||
383 | "@babel/helper-plugin-utils" "^7.10.4" | ||
95 | 384 | ||
96 | amdefine@>=0.0.4: | 385 | "@babel/plugin-syntax-dynamic-import@^7.8.0": |
97 | version "1.0.1" | 386 | version "7.8.3" |
98 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" | 387 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" |
99 | integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= | 388 | integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== |
389 | dependencies: | ||
390 | "@babel/helper-plugin-utils" "^7.8.0" | ||
100 | 391 | ||
101 | ansi-escapes@^1.1.0: | 392 | "@babel/plugin-syntax-export-namespace-from@^7.8.3": |
102 | version "1.4.0" | 393 | version "7.8.3" |
103 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" | 394 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" |
104 | integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= | 395 | integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== |
396 | dependencies: | ||
397 | "@babel/helper-plugin-utils" "^7.8.3" | ||
105 | 398 | ||
106 | ansi-escapes@^3.0.0: | 399 | "@babel/plugin-syntax-json-strings@^7.8.0": |
107 | version "3.2.0" | 400 | version "7.8.3" |
108 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" | 401 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" |
109 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== | 402 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== |
403 | dependencies: | ||
404 | "@babel/helper-plugin-utils" "^7.8.0" | ||
110 | 405 | ||
111 | ansi-regex@^2.0.0: | 406 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": |
112 | version "2.1.1" | 407 | version "7.10.4" |
113 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" | 408 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" |
114 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= | 409 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== |
410 | dependencies: | ||
411 | "@babel/helper-plugin-utils" "^7.10.4" | ||
115 | 412 | ||
116 | ansi-regex@^3.0.0: | 413 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": |
117 | version "3.0.0" | 414 | version "7.8.3" |
118 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" | 415 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" |
119 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= | 416 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== |
417 | dependencies: | ||
418 | "@babel/helper-plugin-utils" "^7.8.0" | ||
120 | 419 | ||
121 | ansi-styles@^2.2.1: | 420 | "@babel/plugin-syntax-numeric-separator@^7.10.4": |
122 | version "2.2.1" | 421 | version "7.10.4" |
123 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" | 422 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" |
124 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= | 423 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== |
424 | dependencies: | ||
425 | "@babel/helper-plugin-utils" "^7.10.4" | ||
125 | 426 | ||
126 | ansi-styles@^3.2.1: | 427 | "@babel/plugin-syntax-object-rest-spread@^7.8.0": |
127 | version "3.2.1" | 428 | version "7.8.3" |
128 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" | 429 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" |
129 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== | 430 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== |
130 | dependencies: | 431 | dependencies: |
131 | color-convert "^1.9.0" | 432 | "@babel/helper-plugin-utils" "^7.8.0" |
132 | 433 | ||
133 | anymatch@^2.0.0: | 434 | "@babel/plugin-syntax-optional-catch-binding@^7.8.0": |
134 | version "2.0.0" | 435 | version "7.8.3" |
135 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" | 436 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" |
136 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== | 437 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== |
137 | dependencies: | 438 | dependencies: |
138 | micromatch "^3.1.4" | 439 | "@babel/helper-plugin-utils" "^7.8.0" |
139 | normalize-path "^2.1.1" | ||
140 | 440 | ||
141 | aproba@^1.0.3: | 441 | "@babel/plugin-syntax-optional-chaining@^7.8.0": |
142 | version "1.2.0" | 442 | version "7.8.3" |
143 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" | 443 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" |
144 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== | 444 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== |
445 | dependencies: | ||
446 | "@babel/helper-plugin-utils" "^7.8.0" | ||
145 | 447 | ||
146 | are-we-there-yet@~1.1.2: | 448 | "@babel/plugin-syntax-top-level-await@^7.10.4": |
147 | version "1.1.5" | 449 | version "7.10.4" |
148 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" | 450 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" |
149 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== | 451 | integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== |
150 | dependencies: | 452 | dependencies: |
151 | delegates "^1.0.0" | 453 | "@babel/helper-plugin-utils" "^7.10.4" |
152 | readable-stream "^2.0.6" | ||
153 | 454 | ||
154 | argparse@^1.0.7: | 455 | "@babel/plugin-transform-arrow-functions@^7.10.4": |
155 | version "1.0.10" | 456 | version "7.10.4" |
156 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" | 457 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" |
157 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== | 458 | integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== |
158 | dependencies: | 459 | dependencies: |
159 | sprintf-js "~1.0.2" | 460 | "@babel/helper-plugin-utils" "^7.10.4" |
160 | 461 | ||
161 | arr-diff@^4.0.0: | 462 | "@babel/plugin-transform-async-to-generator@^7.10.4": |
162 | version "4.0.0" | 463 | version "7.10.4" |
163 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" | 464 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" |
164 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= | 465 | integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== |
466 | dependencies: | ||
467 | "@babel/helper-module-imports" "^7.10.4" | ||
468 | "@babel/helper-plugin-utils" "^7.10.4" | ||
469 | "@babel/helper-remap-async-to-generator" "^7.10.4" | ||
165 | 470 | ||
166 | arr-flatten@^1.1.0: | 471 | "@babel/plugin-transform-block-scoped-functions@^7.10.4": |
167 | version "1.1.0" | 472 | version "7.10.4" |
168 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" | 473 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" |
169 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== | 474 | integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== |
475 | dependencies: | ||
476 | "@babel/helper-plugin-utils" "^7.10.4" | ||
170 | 477 | ||
171 | arr-union@^3.1.0: | 478 | "@babel/plugin-transform-block-scoping@^7.10.4": |
172 | version "3.1.0" | 479 | version "7.11.1" |
173 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" | 480 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" |
174 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= | 481 | integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== |
482 | dependencies: | ||
483 | "@babel/helper-plugin-utils" "^7.10.4" | ||
175 | 484 | ||
176 | array-find-index@^1.0.1: | 485 | "@babel/plugin-transform-classes@^7.10.4": |
177 | version "1.0.2" | 486 | version "7.10.4" |
178 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" | 487 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" |
179 | integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= | 488 | integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== |
489 | dependencies: | ||
490 | "@babel/helper-annotate-as-pure" "^7.10.4" | ||
491 | "@babel/helper-define-map" "^7.10.4" | ||
492 | "@babel/helper-function-name" "^7.10.4" | ||
493 | "@babel/helper-optimise-call-expression" "^7.10.4" | ||
494 | "@babel/helper-plugin-utils" "^7.10.4" | ||
495 | "@babel/helper-replace-supers" "^7.10.4" | ||
496 | "@babel/helper-split-export-declaration" "^7.10.4" | ||
497 | globals "^11.1.0" | ||
180 | 498 | ||
181 | array-includes@^3.0.3: | 499 | "@babel/plugin-transform-computed-properties@^7.10.4": |
182 | version "3.0.3" | 500 | version "7.10.4" |
183 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" | 501 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" |
184 | integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= | 502 | integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== |
185 | dependencies: | 503 | dependencies: |
186 | define-properties "^1.1.2" | 504 | "@babel/helper-plugin-utils" "^7.10.4" |
187 | es-abstract "^1.7.0" | ||
188 | 505 | ||
189 | array-unique@^0.3.2: | 506 | "@babel/plugin-transform-destructuring@^7.10.4": |
190 | version "0.3.2" | 507 | version "7.10.4" |
191 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" | 508 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" |
192 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= | 509 | integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== |
510 | dependencies: | ||
511 | "@babel/helper-plugin-utils" "^7.10.4" | ||
193 | 512 | ||
194 | asn1.js@^4.0.0: | 513 | "@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": |
195 | version "4.10.1" | 514 | version "7.10.4" |
196 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" | 515 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" |
197 | integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== | 516 | integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== |
198 | dependencies: | 517 | dependencies: |
199 | bn.js "^4.0.0" | 518 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" |
200 | inherits "^2.0.1" | 519 | "@babel/helper-plugin-utils" "^7.10.4" |
201 | minimalistic-assert "^1.0.0" | ||
202 | 520 | ||
203 | asn1@~0.2.3: | 521 | "@babel/plugin-transform-duplicate-keys@^7.10.4": |
204 | version "0.2.4" | 522 | version "7.10.4" |
205 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" | 523 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" |
206 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== | 524 | integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== |
207 | dependencies: | 525 | dependencies: |
208 | safer-buffer "~2.1.0" | 526 | "@babel/helper-plugin-utils" "^7.10.4" |
209 | 527 | ||
210 | assert-plus@1.0.0, assert-plus@^1.0.0: | 528 | "@babel/plugin-transform-exponentiation-operator@^7.10.4": |
211 | version "1.0.0" | 529 | version "7.10.4" |
212 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" | 530 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" |
213 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= | 531 | integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== |
532 | dependencies: | ||
533 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" | ||
534 | "@babel/helper-plugin-utils" "^7.10.4" | ||
214 | 535 | ||
215 | assert@^1.1.1: | 536 | "@babel/plugin-transform-for-of@^7.10.4": |
216 | version "1.5.0" | 537 | version "7.10.4" |
217 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" | 538 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" |
218 | integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== | 539 | integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== |
219 | dependencies: | 540 | dependencies: |
220 | object-assign "^4.1.1" | 541 | "@babel/helper-plugin-utils" "^7.10.4" |
221 | util "0.10.3" | ||
222 | 542 | ||
223 | assign-symbols@^1.0.0: | 543 | "@babel/plugin-transform-function-name@^7.10.4": |
224 | version "1.0.0" | 544 | version "7.10.4" |
225 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" | 545 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" |
226 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= | 546 | integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== |
547 | dependencies: | ||
548 | "@babel/helper-function-name" "^7.10.4" | ||
549 | "@babel/helper-plugin-utils" "^7.10.4" | ||
227 | 550 | ||
228 | async-each@^1.0.1: | 551 | "@babel/plugin-transform-literals@^7.10.4": |
229 | version "1.0.3" | 552 | version "7.10.4" |
230 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" | 553 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" |
231 | integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== | 554 | integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== |
555 | dependencies: | ||
556 | "@babel/helper-plugin-utils" "^7.10.4" | ||
232 | 557 | ||
233 | async-foreach@^0.1.3: | 558 | "@babel/plugin-transform-member-expression-literals@^7.10.4": |
234 | version "0.1.3" | 559 | version "7.10.4" |
235 | resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" | 560 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" |
236 | integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= | 561 | integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== |
562 | dependencies: | ||
563 | "@babel/helper-plugin-utils" "^7.10.4" | ||
237 | 564 | ||
238 | async@^2.1.2, async@^2.4.1: | 565 | "@babel/plugin-transform-modules-amd@^7.10.4": |
239 | version "2.6.2" | 566 | version "7.10.5" |
240 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" | 567 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" |
241 | integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== | 568 | integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== |
242 | dependencies: | 569 | dependencies: |
243 | lodash "^4.17.11" | 570 | "@babel/helper-module-transforms" "^7.10.5" |
571 | "@babel/helper-plugin-utils" "^7.10.4" | ||
572 | babel-plugin-dynamic-import-node "^2.3.3" | ||
244 | 573 | ||
245 | asynckit@^0.4.0: | 574 | "@babel/plugin-transform-modules-commonjs@^7.10.4": |
246 | version "0.4.0" | 575 | version "7.10.4" |
247 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" | 576 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" |
248 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= | 577 | integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== |
578 | dependencies: | ||
579 | "@babel/helper-module-transforms" "^7.10.4" | ||
580 | "@babel/helper-plugin-utils" "^7.10.4" | ||
581 | "@babel/helper-simple-access" "^7.10.4" | ||
582 | babel-plugin-dynamic-import-node "^2.3.3" | ||
249 | 583 | ||
250 | atob@^2.1.1: | 584 | "@babel/plugin-transform-modules-systemjs@^7.10.4": |
251 | version "2.1.2" | 585 | version "7.10.5" |
252 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" | 586 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" |
253 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== | 587 | integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== |
588 | dependencies: | ||
589 | "@babel/helper-hoist-variables" "^7.10.4" | ||
590 | "@babel/helper-module-transforms" "^7.10.5" | ||
591 | "@babel/helper-plugin-utils" "^7.10.4" | ||
592 | babel-plugin-dynamic-import-node "^2.3.3" | ||
254 | 593 | ||
255 | autoprefixer@^6.3.1: | 594 | "@babel/plugin-transform-modules-umd@^7.10.4": |
256 | version "6.7.7" | 595 | version "7.10.4" |
257 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" | 596 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" |
258 | integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= | 597 | integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== |
259 | dependencies: | 598 | dependencies: |
260 | browserslist "^1.7.6" | 599 | "@babel/helper-module-transforms" "^7.10.4" |
261 | caniuse-db "^1.0.30000634" | 600 | "@babel/helper-plugin-utils" "^7.10.4" |
262 | normalize-range "^0.1.2" | ||
263 | num2fraction "^1.2.2" | ||
264 | postcss "^5.2.16" | ||
265 | postcss-value-parser "^3.2.3" | ||
266 | 601 | ||
267 | awesomplete@^1.1.2: | 602 | "@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": |
268 | version "1.1.4" | 603 | version "7.10.4" |
269 | resolved "https://registry.yarnpkg.com/awesomplete/-/awesomplete-1.1.4.tgz#cdfcbbb2391857ff3a3340b5b1ebde7701b355e6" | 604 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" |
270 | integrity sha512-AgYrODNlVD3ZJ6Em54YesLnOSusuVCjoRAt0l5bi3L1Oiv5r5dkPdxVPJaG3/wnPlxRUmGcpGnK02VK7N02kCg== | 605 | integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== |
606 | dependencies: | ||
607 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" | ||
271 | 608 | ||
272 | aws-sign2@~0.7.0: | 609 | "@babel/plugin-transform-new-target@^7.10.4": |
273 | version "0.7.0" | 610 | version "7.10.4" |
274 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" | 611 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" |
275 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= | 612 | integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== |
613 | dependencies: | ||
614 | "@babel/helper-plugin-utils" "^7.10.4" | ||
276 | 615 | ||
277 | aws4@^1.8.0: | 616 | "@babel/plugin-transform-object-super@^7.10.4": |
278 | version "1.8.0" | 617 | version "7.10.4" |
279 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" | 618 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" |
280 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== | 619 | integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== |
620 | dependencies: | ||
621 | "@babel/helper-plugin-utils" "^7.10.4" | ||
622 | "@babel/helper-replace-supers" "^7.10.4" | ||
623 | |||
624 | "@babel/plugin-transform-parameters@^7.10.4": | ||
625 | version "7.10.5" | ||
626 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" | ||
627 | integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== | ||
628 | dependencies: | ||
629 | "@babel/helper-get-function-arity" "^7.10.4" | ||
630 | "@babel/helper-plugin-utils" "^7.10.4" | ||
631 | |||
632 | "@babel/plugin-transform-property-literals@^7.10.4": | ||
633 | version "7.10.4" | ||
634 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" | ||
635 | integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== | ||
636 | dependencies: | ||
637 | "@babel/helper-plugin-utils" "^7.10.4" | ||
638 | |||
639 | "@babel/plugin-transform-regenerator@^7.10.4": | ||
640 | version "7.10.4" | ||
641 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" | ||
642 | integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== | ||
643 | dependencies: | ||
644 | regenerator-transform "^0.14.2" | ||
645 | |||
646 | "@babel/plugin-transform-reserved-words@^7.10.4": | ||
647 | version "7.10.4" | ||
648 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" | ||
649 | integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== | ||
650 | dependencies: | ||
651 | "@babel/helper-plugin-utils" "^7.10.4" | ||
652 | |||
653 | "@babel/plugin-transform-shorthand-properties@^7.10.4": | ||
654 | version "7.10.4" | ||
655 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" | ||
656 | integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== | ||
657 | dependencies: | ||
658 | "@babel/helper-plugin-utils" "^7.10.4" | ||
659 | |||
660 | "@babel/plugin-transform-spread@^7.11.0": | ||
661 | version "7.11.0" | ||
662 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" | ||
663 | integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== | ||
664 | dependencies: | ||
665 | "@babel/helper-plugin-utils" "^7.10.4" | ||
666 | "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" | ||
667 | |||
668 | "@babel/plugin-transform-sticky-regex@^7.10.4": | ||
669 | version "7.10.4" | ||
670 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" | ||
671 | integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== | ||
672 | dependencies: | ||
673 | "@babel/helper-plugin-utils" "^7.10.4" | ||
674 | "@babel/helper-regex" "^7.10.4" | ||
675 | |||
676 | "@babel/plugin-transform-template-literals@^7.10.4": | ||
677 | version "7.10.5" | ||
678 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" | ||
679 | integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== | ||
680 | dependencies: | ||
681 | "@babel/helper-annotate-as-pure" "^7.10.4" | ||
682 | "@babel/helper-plugin-utils" "^7.10.4" | ||
683 | |||
684 | "@babel/plugin-transform-typeof-symbol@^7.10.4": | ||
685 | version "7.10.4" | ||
686 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" | ||
687 | integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== | ||
688 | dependencies: | ||
689 | "@babel/helper-plugin-utils" "^7.10.4" | ||
690 | |||
691 | "@babel/plugin-transform-unicode-escapes@^7.10.4": | ||
692 | version "7.10.4" | ||
693 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" | ||
694 | integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== | ||
695 | dependencies: | ||
696 | "@babel/helper-plugin-utils" "^7.10.4" | ||
697 | |||
698 | "@babel/plugin-transform-unicode-regex@^7.10.4": | ||
699 | version "7.10.4" | ||
700 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" | ||
701 | integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== | ||
702 | dependencies: | ||
703 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" | ||
704 | "@babel/helper-plugin-utils" "^7.10.4" | ||
705 | |||
706 | "@babel/preset-env@^7.11.5": | ||
707 | version "7.11.5" | ||
708 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" | ||
709 | integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== | ||
710 | dependencies: | ||
711 | "@babel/compat-data" "^7.11.0" | ||
712 | "@babel/helper-compilation-targets" "^7.10.4" | ||
713 | "@babel/helper-module-imports" "^7.10.4" | ||
714 | "@babel/helper-plugin-utils" "^7.10.4" | ||
715 | "@babel/plugin-proposal-async-generator-functions" "^7.10.4" | ||
716 | "@babel/plugin-proposal-class-properties" "^7.10.4" | ||
717 | "@babel/plugin-proposal-dynamic-import" "^7.10.4" | ||
718 | "@babel/plugin-proposal-export-namespace-from" "^7.10.4" | ||
719 | "@babel/plugin-proposal-json-strings" "^7.10.4" | ||
720 | "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" | ||
721 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" | ||
722 | "@babel/plugin-proposal-numeric-separator" "^7.10.4" | ||
723 | "@babel/plugin-proposal-object-rest-spread" "^7.11.0" | ||
724 | "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" | ||
725 | "@babel/plugin-proposal-optional-chaining" "^7.11.0" | ||
726 | "@babel/plugin-proposal-private-methods" "^7.10.4" | ||
727 | "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" | ||
728 | "@babel/plugin-syntax-async-generators" "^7.8.0" | ||
729 | "@babel/plugin-syntax-class-properties" "^7.10.4" | ||
730 | "@babel/plugin-syntax-dynamic-import" "^7.8.0" | ||
731 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" | ||
732 | "@babel/plugin-syntax-json-strings" "^7.8.0" | ||
733 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" | ||
734 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" | ||
735 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" | ||
736 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0" | ||
737 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" | ||
738 | "@babel/plugin-syntax-optional-chaining" "^7.8.0" | ||
739 | "@babel/plugin-syntax-top-level-await" "^7.10.4" | ||
740 | "@babel/plugin-transform-arrow-functions" "^7.10.4" | ||
741 | "@babel/plugin-transform-async-to-generator" "^7.10.4" | ||
742 | "@babel/plugin-transform-block-scoped-functions" "^7.10.4" | ||
743 | "@babel/plugin-transform-block-scoping" "^7.10.4" | ||
744 | "@babel/plugin-transform-classes" "^7.10.4" | ||
745 | "@babel/plugin-transform-computed-properties" "^7.10.4" | ||
746 | "@babel/plugin-transform-destructuring" "^7.10.4" | ||
747 | "@babel/plugin-transform-dotall-regex" "^7.10.4" | ||
748 | "@babel/plugin-transform-duplicate-keys" "^7.10.4" | ||
749 | "@babel/plugin-transform-exponentiation-operator" "^7.10.4" | ||
750 | "@babel/plugin-transform-for-of" "^7.10.4" | ||
751 | "@babel/plugin-transform-function-name" "^7.10.4" | ||
752 | "@babel/plugin-transform-literals" "^7.10.4" | ||
753 | "@babel/plugin-transform-member-expression-literals" "^7.10.4" | ||
754 | "@babel/plugin-transform-modules-amd" "^7.10.4" | ||
755 | "@babel/plugin-transform-modules-commonjs" "^7.10.4" | ||
756 | "@babel/plugin-transform-modules-systemjs" "^7.10.4" | ||
757 | "@babel/plugin-transform-modules-umd" "^7.10.4" | ||
758 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" | ||
759 | "@babel/plugin-transform-new-target" "^7.10.4" | ||
760 | "@babel/plugin-transform-object-super" "^7.10.4" | ||
761 | "@babel/plugin-transform-parameters" "^7.10.4" | ||
762 | "@babel/plugin-transform-property-literals" "^7.10.4" | ||
763 | "@babel/plugin-transform-regenerator" "^7.10.4" | ||
764 | "@babel/plugin-transform-reserved-words" "^7.10.4" | ||
765 | "@babel/plugin-transform-shorthand-properties" "^7.10.4" | ||
766 | "@babel/plugin-transform-spread" "^7.11.0" | ||
767 | "@babel/plugin-transform-sticky-regex" "^7.10.4" | ||
768 | "@babel/plugin-transform-template-literals" "^7.10.4" | ||
769 | "@babel/plugin-transform-typeof-symbol" "^7.10.4" | ||
770 | "@babel/plugin-transform-unicode-escapes" "^7.10.4" | ||
771 | "@babel/plugin-transform-unicode-regex" "^7.10.4" | ||
772 | "@babel/preset-modules" "^0.1.3" | ||
773 | "@babel/types" "^7.11.5" | ||
774 | browserslist "^4.12.0" | ||
775 | core-js-compat "^3.6.2" | ||
776 | invariant "^2.2.2" | ||
777 | levenary "^1.1.1" | ||
778 | semver "^5.5.0" | ||
281 | 779 | ||
282 | babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: | 780 | "@babel/preset-modules@^0.1.3": |
283 | version "6.26.0" | 781 | version "0.1.4" |
284 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" | 782 | resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" |
285 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= | 783 | integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== |
286 | dependencies: | 784 | dependencies: |
287 | chalk "^1.1.3" | 785 | "@babel/helper-plugin-utils" "^7.0.0" |
786 | "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" | ||
787 | "@babel/plugin-transform-dotall-regex" "^7.4.4" | ||
788 | "@babel/types" "^7.4.4" | ||
288 | esutils "^2.0.2" | 789 | esutils "^2.0.2" |
289 | js-tokens "^3.0.2" | 790 | |
290 | 791 | "@babel/runtime@^7.8.4": | |
291 | babel-core@^6.24.1, babel-core@^6.26.0: | 792 | version "7.11.2" |
292 | version "6.26.3" | 793 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" |
293 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" | 794 | integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== |
294 | integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== | 795 | dependencies: |
295 | dependencies: | 796 | regenerator-runtime "^0.13.4" |
296 | babel-code-frame "^6.26.0" | 797 | |
297 | babel-generator "^6.26.0" | 798 | "@babel/template@^7.10.4": |
298 | babel-helpers "^6.24.1" | 799 | version "7.10.4" |
299 | babel-messages "^6.23.0" | 800 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" |
300 | babel-register "^6.26.0" | 801 | integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== |
301 | babel-runtime "^6.26.0" | 802 | dependencies: |
302 | babel-template "^6.26.0" | 803 | "@babel/code-frame" "^7.10.4" |
303 | babel-traverse "^6.26.0" | 804 | "@babel/parser" "^7.10.4" |
304 | babel-types "^6.26.0" | 805 | "@babel/types" "^7.10.4" |
305 | babylon "^6.18.0" | 806 | |
306 | convert-source-map "^1.5.1" | 807 | "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": |
307 | debug "^2.6.9" | 808 | version "7.11.5" |
308 | json5 "^0.5.1" | 809 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" |
309 | lodash "^4.17.4" | 810 | integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== |
811 | dependencies: | ||
812 | "@babel/code-frame" "^7.10.4" | ||
813 | "@babel/generator" "^7.11.5" | ||
814 | "@babel/helper-function-name" "^7.10.4" | ||
815 | "@babel/helper-split-export-declaration" "^7.11.0" | ||
816 | "@babel/parser" "^7.11.5" | ||
817 | "@babel/types" "^7.11.5" | ||
818 | debug "^4.1.0" | ||
819 | globals "^11.1.0" | ||
820 | lodash "^4.17.19" | ||
821 | |||
822 | "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4.4": | ||
823 | version "7.11.5" | ||
824 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" | ||
825 | integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== | ||
826 | dependencies: | ||
827 | "@babel/helper-validator-identifier" "^7.10.4" | ||
828 | lodash "^4.17.19" | ||
829 | to-fast-properties "^2.0.0" | ||
830 | |||
831 | "@eslint/eslintrc@^0.1.3": | ||
832 | version "0.1.3" | ||
833 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" | ||
834 | integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA== | ||
835 | dependencies: | ||
836 | ajv "^6.12.4" | ||
837 | debug "^4.1.1" | ||
838 | espree "^7.3.0" | ||
839 | globals "^12.1.0" | ||
840 | ignore "^4.0.6" | ||
841 | import-fresh "^3.2.1" | ||
842 | js-yaml "^3.13.1" | ||
843 | lodash "^4.17.19" | ||
310 | minimatch "^3.0.4" | 844 | minimatch "^3.0.4" |
311 | path-is-absolute "^1.0.1" | 845 | strip-json-comments "^3.1.1" |
312 | private "^0.1.8" | ||
313 | slash "^1.0.0" | ||
314 | source-map "^0.5.7" | ||
315 | |||
316 | babel-generator@^6.26.0: | ||
317 | version "6.26.1" | ||
318 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" | ||
319 | integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== | ||
320 | dependencies: | ||
321 | babel-messages "^6.23.0" | ||
322 | babel-runtime "^6.26.0" | ||
323 | babel-types "^6.26.0" | ||
324 | detect-indent "^4.0.0" | ||
325 | jsesc "^1.3.0" | ||
326 | lodash "^4.17.4" | ||
327 | source-map "^0.5.7" | ||
328 | trim-right "^1.0.1" | ||
329 | |||
330 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: | ||
331 | version "6.24.1" | ||
332 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" | ||
333 | integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= | ||
334 | dependencies: | ||
335 | babel-helper-explode-assignable-expression "^6.24.1" | ||
336 | babel-runtime "^6.22.0" | ||
337 | babel-types "^6.24.1" | ||
338 | |||
339 | babel-helper-call-delegate@^6.24.1: | ||
340 | version "6.24.1" | ||
341 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" | ||
342 | integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= | ||
343 | dependencies: | ||
344 | babel-helper-hoist-variables "^6.24.1" | ||
345 | babel-runtime "^6.22.0" | ||
346 | babel-traverse "^6.24.1" | ||
347 | babel-types "^6.24.1" | ||
348 | |||
349 | babel-helper-define-map@^6.24.1: | ||
350 | version "6.26.0" | ||
351 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" | ||
352 | integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= | ||
353 | dependencies: | ||
354 | babel-helper-function-name "^6.24.1" | ||
355 | babel-runtime "^6.26.0" | ||
356 | babel-types "^6.26.0" | ||
357 | lodash "^4.17.4" | ||
358 | |||
359 | babel-helper-evaluate-path@^0.2.0: | ||
360 | version "0.2.0" | ||
361 | resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.2.0.tgz#0bb2eb01996c0cef53c5e8405e999fe4a0244c08" | ||
362 | integrity sha512-0EK9TUKMxHL549hWDPkQoS7R0Ozg1CDLheVBHYds2B2qoAvmr9ejY3zOXFsrICK73TN7bPhU14PBeKc8jcBTwg== | ||
363 | 846 | ||
364 | babel-helper-explode-assignable-expression@^6.24.1: | 847 | "@nodelib/fs.scandir@2.1.3": |
365 | version "6.24.1" | 848 | version "2.1.3" |
366 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" | 849 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" |
367 | integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= | 850 | integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== |
368 | dependencies: | 851 | dependencies: |
369 | babel-runtime "^6.22.0" | 852 | "@nodelib/fs.stat" "2.0.3" |
370 | babel-traverse "^6.24.1" | 853 | run-parallel "^1.1.9" |
371 | babel-types "^6.24.1" | ||
372 | 854 | ||
373 | babel-helper-flip-expressions@^0.2.0: | 855 | "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": |
374 | version "0.2.0" | 856 | version "2.0.3" |
375 | resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.2.0.tgz#160d2090a3d9f9c64a750905321a0bc218f884ec" | 857 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" |
376 | integrity sha512-rAsPA1pWBc7e2E6HepkP2e1sXugT+Oq/VCqhyuHJ8aJ2d/ifwnJfd4Qxjm21qlW43AN8tqaeByagKK6wECFMSw== | 858 | integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== |
377 | 859 | ||
378 | babel-helper-function-name@^6.24.1: | 860 | "@nodelib/fs.walk@^1.2.3": |
379 | version "6.24.1" | 861 | version "1.2.4" |
380 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" | 862 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" |
381 | integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= | 863 | integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== |
382 | dependencies: | 864 | dependencies: |
383 | babel-helper-get-function-arity "^6.24.1" | 865 | "@nodelib/fs.scandir" "2.1.3" |
384 | babel-runtime "^6.22.0" | 866 | fastq "^1.6.0" |
385 | babel-template "^6.24.1" | ||
386 | babel-traverse "^6.24.1" | ||
387 | babel-types "^6.24.1" | ||
388 | 867 | ||
389 | babel-helper-get-function-arity@^6.24.1: | 868 | "@npmcli/move-file@^1.0.1": |
390 | version "6.24.1" | 869 | version "1.0.1" |
391 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" | 870 | resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" |
392 | integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= | 871 | integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== |
393 | dependencies: | 872 | dependencies: |
394 | babel-runtime "^6.22.0" | 873 | mkdirp "^1.0.4" |
395 | babel-types "^6.24.1" | ||
396 | 874 | ||
397 | babel-helper-hoist-variables@^6.24.1: | 875 | "@stylelint/postcss-css-in-js@^0.37.2": |
398 | version "6.24.1" | 876 | version "0.37.2" |
399 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" | 877 | resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2" |
400 | integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= | 878 | integrity sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA== |
401 | dependencies: | 879 | dependencies: |
402 | babel-runtime "^6.22.0" | 880 | "@babel/core" ">=7.9.0" |
403 | babel-types "^6.24.1" | ||
404 | 881 | ||
405 | babel-helper-is-nodes-equiv@^0.0.1: | 882 | "@stylelint/postcss-markdown@^0.36.1": |
406 | version "0.0.1" | 883 | version "0.36.1" |
407 | resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" | 884 | resolved "https://registry.yarnpkg.com/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz#829b87e6c0f108014533d9d7b987dc9efb6632e8" |
408 | integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= | 885 | integrity sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw== |
886 | dependencies: | ||
887 | remark "^12.0.0" | ||
888 | unist-util-find-all-after "^3.0.1" | ||
409 | 889 | ||
410 | babel-helper-is-void-0@^0.2.0: | 890 | "@types/color-name@^1.1.1": |
411 | version "0.2.0" | 891 | version "1.1.1" |
412 | resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.2.0.tgz#6ed0ada8a9b1c5b6e88af6b47c1b3b5c080860eb" | 892 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" |
413 | integrity sha512-Axj1AYuD0E3Dl7nT3KxROP7VekEofz3XtEljzURf3fABalLpr8PamtgLFt+zuxtaCxRf9iuZmbAMMYWri5Bazw== | 893 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== |
414 | 894 | ||
415 | babel-helper-mark-eval-scopes@^0.2.0: | 895 | "@types/json-schema@^7.0.5": |
416 | version "0.2.0" | 896 | version "7.0.6" |
417 | resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.2.0.tgz#7648aaf2ec92aae9b09a20ad91e8df5e1fcc94b2" | 897 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" |
418 | integrity sha512-KJuwrOUcHbvbh6he4xRXZFLaivK9DF9o3CrvpWnK1Wp0B+1ANYABXBMgwrnNFIDK/AvicxQ9CNr8wsgivlp4Aw== | 898 | integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== |
419 | |||
420 | babel-helper-optimise-call-expression@^6.24.1: | ||
421 | version "6.24.1" | ||
422 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" | ||
423 | integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= | ||
424 | dependencies: | ||
425 | babel-runtime "^6.22.0" | ||
426 | babel-types "^6.24.1" | ||
427 | |||
428 | babel-helper-regex@^6.24.1: | ||
429 | version "6.26.0" | ||
430 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" | ||
431 | integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= | ||
432 | dependencies: | ||
433 | babel-runtime "^6.26.0" | ||
434 | babel-types "^6.26.0" | ||
435 | lodash "^4.17.4" | ||
436 | |||
437 | babel-helper-remap-async-to-generator@^6.24.1: | ||
438 | version "6.24.1" | ||
439 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" | ||
440 | integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= | ||
441 | dependencies: | ||
442 | babel-helper-function-name "^6.24.1" | ||
443 | babel-runtime "^6.22.0" | ||
444 | babel-template "^6.24.1" | ||
445 | babel-traverse "^6.24.1" | ||
446 | babel-types "^6.24.1" | ||
447 | |||
448 | babel-helper-remove-or-void@^0.2.0: | ||
449 | version "0.2.0" | ||
450 | resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.2.0.tgz#8e46ad5b30560d57d7510b3fd93f332ee7c67386" | ||
451 | integrity sha512-1Z41upf/XR+PwY7Nd+F15Jo5BiQi5205ZXUuKed3yoyQgDkMyoM7vAdjEJS/T+M6jy32sXjskMUgms4zeiVtRA== | ||
452 | |||
453 | babel-helper-replace-supers@^6.24.1: | ||
454 | version "6.24.1" | ||
455 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" | ||
456 | integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= | ||
457 | dependencies: | ||
458 | babel-helper-optimise-call-expression "^6.24.1" | ||
459 | babel-messages "^6.23.0" | ||
460 | babel-runtime "^6.22.0" | ||
461 | babel-template "^6.24.1" | ||
462 | babel-traverse "^6.24.1" | ||
463 | babel-types "^6.24.1" | ||
464 | |||
465 | babel-helper-to-multiple-sequence-expressions@^0.2.0: | ||
466 | version "0.2.0" | ||
467 | resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.2.0.tgz#d1a419634c6cb301f27858c659167cfee0a9d318" | ||
468 | integrity sha512-ij9lpfdP3+Zc/7kNwa+NXbTrUlsYEWPwt/ugmQO0qflzLrveTIkbfOqQztvitk81aG5NblYDQXDlRohzu3oa8Q== | ||
469 | 899 | ||
470 | babel-helpers@^6.24.1: | 900 | "@types/json5@^0.0.29": |
471 | version "6.24.1" | 901 | version "0.0.29" |
472 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" | 902 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" |
473 | integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= | 903 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= |
474 | dependencies: | ||
475 | babel-runtime "^6.22.0" | ||
476 | babel-template "^6.24.1" | ||
477 | 904 | ||
478 | babel-loader@^7.1.2: | 905 | "@types/minimist@^1.2.0": |
479 | version "7.1.5" | 906 | version "1.2.0" |
480 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" | 907 | resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" |
481 | integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== | 908 | integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= |
482 | dependencies: | ||
483 | find-cache-dir "^1.0.0" | ||
484 | loader-utils "^1.0.2" | ||
485 | mkdirp "^0.5.1" | ||
486 | 909 | ||
487 | babel-messages@^6.23.0: | 910 | "@types/node@*": |
488 | version "6.23.0" | 911 | version "14.11.2" |
489 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" | 912 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" |
490 | integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= | 913 | integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== |
491 | dependencies: | ||
492 | babel-runtime "^6.22.0" | ||
493 | 914 | ||
494 | babel-minify-webpack-plugin@^0.2.0: | 915 | "@types/normalize-package-data@^2.4.0": |
495 | version "0.2.0" | 916 | version "2.4.0" |
496 | resolved "https://registry.yarnpkg.com/babel-minify-webpack-plugin/-/babel-minify-webpack-plugin-0.2.0.tgz#ef9694d11a1b8ab8f3204d89f5c9278dd28fc2a9" | 917 | resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" |
497 | integrity sha512-+5G5Qqm+DIVl7gY4rkHqlFRkaf1FZtz0imzu/Dy9+88AfOIuy7D5MQjkNgQr5gU6/YSZ+rImgxDqFcWkvvrjkQ== | 918 | integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== |
498 | dependencies: | ||
499 | babel-core "^6.24.1" | ||
500 | babel-preset-minify "^0.2.0" | ||
501 | webpack-sources "^1.0.1" | ||
502 | 919 | ||
503 | babel-plugin-check-es2015-constants@^6.22.0: | 920 | "@types/parse-json@^4.0.0": |
504 | version "6.22.0" | 921 | version "4.0.0" |
505 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" | 922 | resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" |
506 | integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= | 923 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== |
924 | |||
925 | "@types/unist@^2.0.0", "@types/unist@^2.0.2": | ||
926 | version "2.0.3" | ||
927 | resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" | ||
928 | integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== | ||
929 | |||
930 | "@webassemblyjs/ast@1.9.0": | ||
931 | version "1.9.0" | ||
932 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" | ||
933 | integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== | ||
934 | dependencies: | ||
935 | "@webassemblyjs/helper-module-context" "1.9.0" | ||
936 | "@webassemblyjs/helper-wasm-bytecode" "1.9.0" | ||
937 | "@webassemblyjs/wast-parser" "1.9.0" | ||
938 | |||
939 | "@webassemblyjs/floating-point-hex-parser@1.9.0": | ||
940 | version "1.9.0" | ||
941 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" | ||
942 | integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== | ||
943 | |||
944 | "@webassemblyjs/helper-api-error@1.9.0": | ||
945 | version "1.9.0" | ||
946 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" | ||
947 | integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== | ||
948 | |||
949 | "@webassemblyjs/helper-buffer@1.9.0": | ||
950 | version "1.9.0" | ||
951 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" | ||
952 | integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== | ||
953 | |||
954 | "@webassemblyjs/helper-code-frame@1.9.0": | ||
955 | version "1.9.0" | ||
956 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" | ||
957 | integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== | ||
958 | dependencies: | ||
959 | "@webassemblyjs/wast-printer" "1.9.0" | ||
960 | |||
961 | "@webassemblyjs/helper-fsm@1.9.0": | ||
962 | version "1.9.0" | ||
963 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" | ||
964 | integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== | ||
965 | |||
966 | "@webassemblyjs/helper-module-context@1.9.0": | ||
967 | version "1.9.0" | ||
968 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" | ||
969 | integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== | ||
970 | dependencies: | ||
971 | "@webassemblyjs/ast" "1.9.0" | ||
972 | |||
973 | "@webassemblyjs/helper-wasm-bytecode@1.9.0": | ||
974 | version "1.9.0" | ||
975 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" | ||
976 | integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== | ||
977 | |||
978 | "@webassemblyjs/helper-wasm-section@1.9.0": | ||
979 | version "1.9.0" | ||
980 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" | ||
981 | integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== | ||
982 | dependencies: | ||
983 | "@webassemblyjs/ast" "1.9.0" | ||
984 | "@webassemblyjs/helper-buffer" "1.9.0" | ||
985 | "@webassemblyjs/helper-wasm-bytecode" "1.9.0" | ||
986 | "@webassemblyjs/wasm-gen" "1.9.0" | ||
987 | |||
988 | "@webassemblyjs/ieee754@1.9.0": | ||
989 | version "1.9.0" | ||
990 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" | ||
991 | integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== | ||
992 | dependencies: | ||
993 | "@xtuc/ieee754" "^1.2.0" | ||
994 | |||
995 | "@webassemblyjs/leb128@1.9.0": | ||
996 | version "1.9.0" | ||
997 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" | ||
998 | integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== | ||
999 | dependencies: | ||
1000 | "@xtuc/long" "4.2.2" | ||
1001 | |||
1002 | "@webassemblyjs/utf8@1.9.0": | ||
1003 | version "1.9.0" | ||
1004 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" | ||
1005 | integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== | ||
1006 | |||
1007 | "@webassemblyjs/wasm-edit@1.9.0": | ||
1008 | version "1.9.0" | ||
1009 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" | ||
1010 | integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== | ||
1011 | dependencies: | ||
1012 | "@webassemblyjs/ast" "1.9.0" | ||
1013 | "@webassemblyjs/helper-buffer" "1.9.0" | ||
1014 | "@webassemblyjs/helper-wasm-bytecode" "1.9.0" | ||
1015 | "@webassemblyjs/helper-wasm-section" "1.9.0" | ||
1016 | "@webassemblyjs/wasm-gen" "1.9.0" | ||
1017 | "@webassemblyjs/wasm-opt" "1.9.0" | ||
1018 | "@webassemblyjs/wasm-parser" "1.9.0" | ||
1019 | "@webassemblyjs/wast-printer" "1.9.0" | ||
1020 | |||
1021 | "@webassemblyjs/wasm-gen@1.9.0": | ||
1022 | version "1.9.0" | ||
1023 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" | ||
1024 | integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== | ||
1025 | dependencies: | ||
1026 | "@webassemblyjs/ast" "1.9.0" | ||
1027 | "@webassemblyjs/helper-wasm-bytecode" "1.9.0" | ||
1028 | "@webassemblyjs/ieee754" "1.9.0" | ||
1029 | "@webassemblyjs/leb128" "1.9.0" | ||
1030 | "@webassemblyjs/utf8" "1.9.0" | ||
1031 | |||
1032 | "@webassemblyjs/wasm-opt@1.9.0": | ||
1033 | version "1.9.0" | ||
1034 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" | ||
1035 | integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== | ||
1036 | dependencies: | ||
1037 | "@webassemblyjs/ast" "1.9.0" | ||
1038 | "@webassemblyjs/helper-buffer" "1.9.0" | ||
1039 | "@webassemblyjs/wasm-gen" "1.9.0" | ||
1040 | "@webassemblyjs/wasm-parser" "1.9.0" | ||
1041 | |||
1042 | "@webassemblyjs/wasm-parser@1.9.0": | ||
1043 | version "1.9.0" | ||
1044 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" | ||
1045 | integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== | ||
1046 | dependencies: | ||
1047 | "@webassemblyjs/ast" "1.9.0" | ||
1048 | "@webassemblyjs/helper-api-error" "1.9.0" | ||
1049 | "@webassemblyjs/helper-wasm-bytecode" "1.9.0" | ||
1050 | "@webassemblyjs/ieee754" "1.9.0" | ||
1051 | "@webassemblyjs/leb128" "1.9.0" | ||
1052 | "@webassemblyjs/utf8" "1.9.0" | ||
1053 | |||
1054 | "@webassemblyjs/wast-parser@1.9.0": | ||
1055 | version "1.9.0" | ||
1056 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" | ||
1057 | integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== | ||
1058 | dependencies: | ||
1059 | "@webassemblyjs/ast" "1.9.0" | ||
1060 | "@webassemblyjs/floating-point-hex-parser" "1.9.0" | ||
1061 | "@webassemblyjs/helper-api-error" "1.9.0" | ||
1062 | "@webassemblyjs/helper-code-frame" "1.9.0" | ||
1063 | "@webassemblyjs/helper-fsm" "1.9.0" | ||
1064 | "@xtuc/long" "4.2.2" | ||
1065 | |||
1066 | "@webassemblyjs/wast-printer@1.9.0": | ||
1067 | version "1.9.0" | ||
1068 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" | ||
1069 | integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== | ||
1070 | dependencies: | ||
1071 | "@webassemblyjs/ast" "1.9.0" | ||
1072 | "@webassemblyjs/wast-parser" "1.9.0" | ||
1073 | "@xtuc/long" "4.2.2" | ||
1074 | |||
1075 | "@xtuc/ieee754@^1.2.0": | ||
1076 | version "1.2.0" | ||
1077 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" | ||
1078 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== | ||
1079 | |||
1080 | "@xtuc/long@4.2.2": | ||
1081 | version "4.2.2" | ||
1082 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" | ||
1083 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== | ||
1084 | |||
1085 | acorn-jsx@^5.2.0: | ||
1086 | version "5.3.1" | ||
1087 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" | ||
1088 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== | ||
1089 | |||
1090 | acorn@^6.4.1: | ||
1091 | version "6.4.1" | ||
1092 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" | ||
1093 | integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== | ||
1094 | |||
1095 | acorn@^7.4.0: | ||
1096 | version "7.4.0" | ||
1097 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" | ||
1098 | integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== | ||
1099 | |||
1100 | aggregate-error@^3.0.0: | ||
1101 | version "3.1.0" | ||
1102 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" | ||
1103 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== | ||
507 | dependencies: | 1104 | dependencies: |
508 | babel-runtime "^6.22.0" | 1105 | clean-stack "^2.0.0" |
1106 | indent-string "^4.0.0" | ||
509 | 1107 | ||
510 | babel-plugin-minify-builtins@^0.2.0: | 1108 | ajv-errors@^1.0.0: |
511 | version "0.2.0" | 1109 | version "1.0.1" |
512 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz#317f824b0907210b6348671bb040ca072e2e0c82" | 1110 | resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" |
513 | integrity sha512-4i+8ntaS8gwVUcOz5y+zE+55OVOl2nTbmHV51D4wAIiKcRI8U5K//ip1GHfhsgk/NJrrHK7h97Oy5jpqt0Iixg== | 1111 | integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== |
1112 | |||
1113 | ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: | ||
1114 | version "3.5.2" | ||
1115 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" | ||
1116 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== | ||
1117 | |||
1118 | ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: | ||
1119 | version "6.12.5" | ||
1120 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" | ||
1121 | integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== | ||
514 | dependencies: | 1122 | dependencies: |
515 | babel-helper-evaluate-path "^0.2.0" | 1123 | fast-deep-equal "^3.1.1" |
1124 | fast-json-stable-stringify "^2.0.0" | ||
1125 | json-schema-traverse "^0.4.1" | ||
1126 | uri-js "^4.2.2" | ||
516 | 1127 | ||
517 | babel-plugin-minify-constant-folding@^0.2.0: | 1128 | ansi-colors@^4.1.1: |
518 | version "0.2.0" | 1129 | version "4.1.1" |
519 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.2.0.tgz#8c70b528b2eb7c13e94d95c8789077d4cdbc3970" | 1130 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" |
520 | integrity sha512-B3ffQBEUQ8ydlIkYv2MkZtTCbV7FAkWAV7NkyhcXlGpD10PaCxNGQ/B9oguXGowR1m16Q5nGhvNn8Pkn1MO6Hw== | 1131 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== |
1132 | |||
1133 | ansi-regex@^4.1.0: | ||
1134 | version "4.1.0" | ||
1135 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" | ||
1136 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== | ||
1137 | |||
1138 | ansi-regex@^5.0.0: | ||
1139 | version "5.0.0" | ||
1140 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" | ||
1141 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== | ||
1142 | |||
1143 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: | ||
1144 | version "3.2.1" | ||
1145 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" | ||
1146 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== | ||
521 | dependencies: | 1147 | dependencies: |
522 | babel-helper-evaluate-path "^0.2.0" | 1148 | color-convert "^1.9.0" |
523 | 1149 | ||
524 | babel-plugin-minify-dead-code-elimination@^0.2.0: | 1150 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: |
525 | version "0.2.0" | 1151 | version "4.2.1" |
526 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.2.0.tgz#e8025ee10a1e5e4f202633a6928ce892c33747e3" | 1152 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" |
527 | integrity sha512-zE7y3pRyzA4zK5nBou0kTcwUTSQ/AiFrynt1cIEYN7vcO2gS9ZFZoI0aO9JYLUdct5fsC1vfB35408yrzTyVfg== | 1153 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== |
528 | dependencies: | 1154 | dependencies: |
529 | babel-helper-evaluate-path "^0.2.0" | 1155 | "@types/color-name" "^1.1.1" |
530 | babel-helper-mark-eval-scopes "^0.2.0" | 1156 | color-convert "^2.0.1" |
531 | babel-helper-remove-or-void "^0.2.0" | ||
532 | lodash.some "^4.6.0" | ||
533 | 1157 | ||
534 | babel-plugin-minify-flip-comparisons@^0.2.0: | 1158 | anymatch@^2.0.0: |
535 | version "0.2.0" | 1159 | version "2.0.0" |
536 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.2.0.tgz#0c9c8e93155c8f09dedad8118b634c259f709ef5" | 1160 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" |
537 | integrity sha512-QOqXSEmD/LhT3LpM1WCyzAGcQZYYKJF7oOHvS6QbpomHenydrV53DMdPX2mK01icBExKZcJAHF209wvDBa+CSg== | 1161 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== |
538 | dependencies: | 1162 | dependencies: |
539 | babel-helper-is-void-0 "^0.2.0" | 1163 | micromatch "^3.1.4" |
1164 | normalize-path "^2.1.1" | ||
540 | 1165 | ||
541 | babel-plugin-minify-guarded-expressions@^0.2.0: | 1166 | anymatch@~3.1.1: |
542 | version "0.2.0" | 1167 | version "3.1.1" |
543 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.2.0.tgz#8a8c950040fce3e258a12e6eb21eab94ad7235ab" | 1168 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" |
544 | integrity sha512-5+NSPdRQ9mnrHaA+zFj+D5OzmSiv90EX5zGH6cWQgR/OUqmCHSDqgTRPFvOctgpo8MJyO7Rt7ajs2UfLnlAwYg== | 1169 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== |
545 | dependencies: | 1170 | dependencies: |
546 | babel-helper-flip-expressions "^0.2.0" | 1171 | normalize-path "^3.0.0" |
1172 | picomatch "^2.0.4" | ||
547 | 1173 | ||
548 | babel-plugin-minify-infinity@^0.2.0: | 1174 | aproba@^1.1.1: |
549 | version "0.2.0" | 1175 | version "1.2.0" |
550 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.2.0.tgz#30960c615ddbc657c045bb00a1d8eb4af257cf03" | 1176 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" |
551 | integrity sha512-U694vrla1lN6vDHWGrR832t3a/A2eh+kyl019LxEE2+sS4VTydyOPRsAOIYAdJegWRA4cMX1lm9azAN0cLIr8g== | 1177 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== |
552 | 1178 | ||
553 | babel-plugin-minify-mangle-names@^0.2.0: | 1179 | argparse@^1.0.7: |
554 | version "0.2.0" | 1180 | version "1.0.10" |
555 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.2.0.tgz#719892297ff0106a6ec1a4b0fc062f1f8b6a8529" | 1181 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" |
556 | integrity sha512-Gixuak1/CO7VCdjn15/8Bxe/QsAtDG4zPbnsNoe1mIJGCIH/kcmSjFhMlGJtXDQZd6EKzeMfA5WmX9+jvGRefw== | 1182 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== |
557 | dependencies: | 1183 | dependencies: |
558 | babel-helper-mark-eval-scopes "^0.2.0" | 1184 | sprintf-js "~1.0.2" |
559 | 1185 | ||
560 | babel-plugin-minify-numeric-literals@^0.2.0: | 1186 | arr-diff@^4.0.0: |
561 | version "0.2.0" | 1187 | version "4.0.0" |
562 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.2.0.tgz#5746e851700167a380c05e93f289a7070459a0d1" | 1188 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" |
563 | integrity sha512-VcLpb+r1YS7+RIOXdRsFVLLqoh22177USpHf+JM/g1nZbzdqENmfd5v534MLAbRErhbz6SyK+NQViVzVtBxu8g== | 1189 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= |
564 | 1190 | ||
565 | babel-plugin-minify-replace@^0.2.0: | 1191 | arr-flatten@^1.1.0: |
566 | version "0.2.0" | 1192 | version "1.1.0" |
567 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.2.0.tgz#3c1f06bc4e6d3e301eacb763edc1be611efc39b0" | 1193 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" |
568 | integrity sha512-SEW6zoSVxh3OH6E1LCgyhhTWMnCv+JIRu5h5IlJDA11tU4ZeSF7uPQcO4vN/o52+FssRB26dmzJ/8D+z0QPg5Q== | 1194 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== |
569 | 1195 | ||
570 | babel-plugin-minify-simplify@^0.2.0: | 1196 | arr-union@^3.1.0: |
571 | version "0.2.0" | 1197 | version "3.1.0" |
572 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.2.0.tgz#21ceec4857100c5476d7cef121f351156e5c9bc0" | 1198 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" |
573 | integrity sha512-Mj3Mwy2zVosMfXDWXZrQH5/uMAyfJdmDQ1NVqit+ArbHC3LlXVzptuyC1JxTyai/wgFvjLaichm/7vSUshkWqw== | 1199 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= |
1200 | |||
1201 | array-includes@^3.1.1: | ||
1202 | version "3.1.1" | ||
1203 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" | ||
1204 | integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== | ||
574 | dependencies: | 1205 | dependencies: |
575 | babel-helper-flip-expressions "^0.2.0" | 1206 | define-properties "^1.1.3" |
576 | babel-helper-is-nodes-equiv "^0.0.1" | 1207 | es-abstract "^1.17.0" |
577 | babel-helper-to-multiple-sequence-expressions "^0.2.0" | 1208 | is-string "^1.0.5" |
578 | 1209 | ||
579 | babel-plugin-minify-type-constructors@^0.2.0: | 1210 | array-union@^2.1.0: |
580 | version "0.2.0" | 1211 | version "2.1.0" |
581 | resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.2.0.tgz#7f3b6458be0863cfd59e9985bed6d134aa7a2e17" | 1212 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" |
582 | integrity sha512-NiOvvA9Pq6bki6nP4BayXwT5GZadw7DJFDDzHmkpnOQpENWe8RtHtKZM44MG1R6EQ5XxgbLdsdhswIzTkFlO5g== | 1213 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== |
583 | dependencies: | ||
584 | babel-helper-is-void-0 "^0.2.0" | ||
585 | |||
586 | babel-plugin-syntax-async-functions@^6.8.0: | ||
587 | version "6.13.0" | ||
588 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" | ||
589 | integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= | ||
590 | |||
591 | babel-plugin-syntax-exponentiation-operator@^6.8.0: | ||
592 | version "6.13.0" | ||
593 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" | ||
594 | integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= | ||
595 | |||
596 | babel-plugin-syntax-trailing-function-commas@^6.22.0: | ||
597 | version "6.22.0" | ||
598 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" | ||
599 | integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= | ||
600 | |||
601 | babel-plugin-transform-async-to-generator@^6.22.0: | ||
602 | version "6.24.1" | ||
603 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" | ||
604 | integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= | ||
605 | dependencies: | ||
606 | babel-helper-remap-async-to-generator "^6.24.1" | ||
607 | babel-plugin-syntax-async-functions "^6.8.0" | ||
608 | babel-runtime "^6.22.0" | ||
609 | |||
610 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: | ||
611 | version "6.22.0" | ||
612 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" | ||
613 | integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= | ||
614 | dependencies: | ||
615 | babel-runtime "^6.22.0" | ||
616 | |||
617 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: | ||
618 | version "6.22.0" | ||
619 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" | ||
620 | integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= | ||
621 | dependencies: | ||
622 | babel-runtime "^6.22.0" | ||
623 | |||
624 | babel-plugin-transform-es2015-block-scoping@^6.23.0: | ||
625 | version "6.26.0" | ||
626 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" | ||
627 | integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= | ||
628 | dependencies: | ||
629 | babel-runtime "^6.26.0" | ||
630 | babel-template "^6.26.0" | ||
631 | babel-traverse "^6.26.0" | ||
632 | babel-types "^6.26.0" | ||
633 | lodash "^4.17.4" | ||
634 | |||
635 | babel-plugin-transform-es2015-classes@^6.23.0: | ||
636 | version "6.24.1" | ||
637 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" | ||
638 | integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= | ||
639 | dependencies: | ||
640 | babel-helper-define-map "^6.24.1" | ||
641 | babel-helper-function-name "^6.24.1" | ||
642 | babel-helper-optimise-call-expression "^6.24.1" | ||
643 | babel-helper-replace-supers "^6.24.1" | ||
644 | babel-messages "^6.23.0" | ||
645 | babel-runtime "^6.22.0" | ||
646 | babel-template "^6.24.1" | ||
647 | babel-traverse "^6.24.1" | ||
648 | babel-types "^6.24.1" | ||
649 | |||
650 | babel-plugin-transform-es2015-computed-properties@^6.22.0: | ||
651 | version "6.24.1" | ||
652 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" | ||
653 | integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= | ||
654 | dependencies: | ||
655 | babel-runtime "^6.22.0" | ||
656 | babel-template "^6.24.1" | ||
657 | |||
658 | babel-plugin-transform-es2015-destructuring@^6.23.0: | ||
659 | version "6.23.0" | ||
660 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" | ||
661 | integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= | ||
662 | dependencies: | ||
663 | babel-runtime "^6.22.0" | ||
664 | |||
665 | babel-plugin-transform-es2015-duplicate-keys@^6.22.0: | ||
666 | version "6.24.1" | ||
667 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" | ||
668 | integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= | ||
669 | dependencies: | ||
670 | babel-runtime "^6.22.0" | ||
671 | babel-types "^6.24.1" | ||
672 | |||
673 | babel-plugin-transform-es2015-for-of@^6.23.0: | ||
674 | version "6.23.0" | ||
675 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" | ||
676 | integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= | ||
677 | dependencies: | ||
678 | babel-runtime "^6.22.0" | ||
679 | |||
680 | babel-plugin-transform-es2015-function-name@^6.22.0: | ||
681 | version "6.24.1" | ||
682 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" | ||
683 | integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= | ||
684 | dependencies: | ||
685 | babel-helper-function-name "^6.24.1" | ||
686 | babel-runtime "^6.22.0" | ||
687 | babel-types "^6.24.1" | ||
688 | |||
689 | babel-plugin-transform-es2015-literals@^6.22.0: | ||
690 | version "6.22.0" | ||
691 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" | ||
692 | integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= | ||
693 | dependencies: | ||
694 | babel-runtime "^6.22.0" | ||
695 | |||
696 | babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: | ||
697 | version "6.24.1" | ||
698 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" | ||
699 | integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= | ||
700 | dependencies: | ||
701 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" | ||
702 | babel-runtime "^6.22.0" | ||
703 | babel-template "^6.24.1" | ||
704 | |||
705 | babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: | ||
706 | version "6.26.2" | ||
707 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" | ||
708 | integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== | ||
709 | dependencies: | ||
710 | babel-plugin-transform-strict-mode "^6.24.1" | ||
711 | babel-runtime "^6.26.0" | ||
712 | babel-template "^6.26.0" | ||
713 | babel-types "^6.26.0" | ||
714 | |||
715 | babel-plugin-transform-es2015-modules-systemjs@^6.23.0: | ||
716 | version "6.24.1" | ||
717 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" | ||
718 | integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= | ||
719 | dependencies: | ||
720 | babel-helper-hoist-variables "^6.24.1" | ||
721 | babel-runtime "^6.22.0" | ||
722 | babel-template "^6.24.1" | ||
723 | |||
724 | babel-plugin-transform-es2015-modules-umd@^6.23.0: | ||
725 | version "6.24.1" | ||
726 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" | ||
727 | integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= | ||
728 | dependencies: | ||
729 | babel-plugin-transform-es2015-modules-amd "^6.24.1" | ||
730 | babel-runtime "^6.22.0" | ||
731 | babel-template "^6.24.1" | ||
732 | |||
733 | babel-plugin-transform-es2015-object-super@^6.22.0: | ||
734 | version "6.24.1" | ||
735 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" | ||
736 | integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= | ||
737 | dependencies: | ||
738 | babel-helper-replace-supers "^6.24.1" | ||
739 | babel-runtime "^6.22.0" | ||
740 | |||
741 | babel-plugin-transform-es2015-parameters@^6.23.0: | ||
742 | version "6.24.1" | ||
743 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" | ||
744 | integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= | ||
745 | dependencies: | ||
746 | babel-helper-call-delegate "^6.24.1" | ||
747 | babel-helper-get-function-arity "^6.24.1" | ||
748 | babel-runtime "^6.22.0" | ||
749 | babel-template "^6.24.1" | ||
750 | babel-traverse "^6.24.1" | ||
751 | babel-types "^6.24.1" | ||
752 | |||
753 | babel-plugin-transform-es2015-shorthand-properties@^6.22.0: | ||
754 | version "6.24.1" | ||
755 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" | ||
756 | integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= | ||
757 | dependencies: | ||
758 | babel-runtime "^6.22.0" | ||
759 | babel-types "^6.24.1" | ||
760 | |||
761 | babel-plugin-transform-es2015-spread@^6.22.0: | ||
762 | version "6.22.0" | ||
763 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" | ||
764 | integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= | ||
765 | dependencies: | ||
766 | babel-runtime "^6.22.0" | ||
767 | |||
768 | babel-plugin-transform-es2015-sticky-regex@^6.22.0: | ||
769 | version "6.24.1" | ||
770 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" | ||
771 | integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= | ||
772 | dependencies: | ||
773 | babel-helper-regex "^6.24.1" | ||
774 | babel-runtime "^6.22.0" | ||
775 | babel-types "^6.24.1" | ||
776 | |||
777 | babel-plugin-transform-es2015-template-literals@^6.22.0: | ||
778 | version "6.22.0" | ||
779 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" | ||
780 | integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= | ||
781 | dependencies: | ||
782 | babel-runtime "^6.22.0" | ||
783 | |||
784 | babel-plugin-transform-es2015-typeof-symbol@^6.23.0: | ||
785 | version "6.23.0" | ||
786 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" | ||
787 | integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= | ||
788 | dependencies: | ||
789 | babel-runtime "^6.22.0" | ||
790 | |||
791 | babel-plugin-transform-es2015-unicode-regex@^6.22.0: | ||
792 | version "6.24.1" | ||
793 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" | ||
794 | integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= | ||
795 | dependencies: | ||
796 | babel-helper-regex "^6.24.1" | ||
797 | babel-runtime "^6.22.0" | ||
798 | regexpu-core "^2.0.0" | ||
799 | |||
800 | babel-plugin-transform-exponentiation-operator@^6.22.0: | ||
801 | version "6.24.1" | ||
802 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" | ||
803 | integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= | ||
804 | dependencies: | ||
805 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" | ||
806 | babel-plugin-syntax-exponentiation-operator "^6.8.0" | ||
807 | babel-runtime "^6.22.0" | ||
808 | |||
809 | babel-plugin-transform-inline-consecutive-adds@^0.2.0: | ||
810 | version "0.2.0" | ||
811 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.2.0.tgz#15dae78921057f4004f8eafd79e15ddc5f12f426" | ||
812 | integrity sha512-GlhOuLOQ28ua9prg0hT33HslCrEmz9xWXy9ZNZSACppCyRxxRW+haYtRgm7uYXCcd0q8ggCWD2pfWEJp5iiZfQ== | ||
813 | 1214 | ||
814 | babel-plugin-transform-member-expression-literals@^6.8.5: | 1215 | array-unique@^0.3.2: |
815 | version "6.9.4" | 1216 | version "0.3.2" |
816 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" | 1217 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" |
817 | integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= | 1218 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= |
818 | 1219 | ||
819 | babel-plugin-transform-merge-sibling-variables@^6.8.6: | 1220 | array.prototype.flat@^1.2.3: |
820 | version "6.9.4" | 1221 | version "1.2.3" |
821 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" | 1222 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" |
822 | integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= | 1223 | integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== |
1224 | dependencies: | ||
1225 | define-properties "^1.1.3" | ||
1226 | es-abstract "^1.17.0-next.1" | ||
823 | 1227 | ||
824 | babel-plugin-transform-minify-booleans@^6.8.3: | 1228 | arrify@^1.0.1: |
825 | version "6.9.4" | 1229 | version "1.0.1" |
826 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" | 1230 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" |
827 | integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= | 1231 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= |
828 | 1232 | ||
829 | babel-plugin-transform-property-literals@^6.8.5: | 1233 | asn1.js@^5.2.0: |
830 | version "6.9.4" | 1234 | version "5.4.1" |
831 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" | 1235 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" |
832 | integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= | 1236 | integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== |
833 | dependencies: | 1237 | dependencies: |
834 | esutils "^2.0.2" | 1238 | bn.js "^4.0.0" |
1239 | inherits "^2.0.1" | ||
1240 | minimalistic-assert "^1.0.0" | ||
1241 | safer-buffer "^2.1.0" | ||
835 | 1242 | ||
836 | babel-plugin-transform-regenerator@^6.22.0: | 1243 | assert@^1.1.1: |
837 | version "6.26.0" | 1244 | version "1.5.0" |
838 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" | 1245 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" |
839 | integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= | 1246 | integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== |
840 | dependencies: | 1247 | dependencies: |
841 | regenerator-transform "^0.10.0" | 1248 | object-assign "^4.1.1" |
1249 | util "0.10.3" | ||
842 | 1250 | ||
843 | babel-plugin-transform-regexp-constructors@^0.2.0: | 1251 | assign-symbols@^1.0.0: |
844 | version "0.2.0" | 1252 | version "1.0.0" |
845 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.2.0.tgz#6aa5dd0acc515db4be929bbcec4ed4c946c534a3" | 1253 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" |
846 | integrity sha512-7IsQ6aQx6LAaOqy97/PthTf+5Nx9grZww3r6E62IdWe76Yr8KsuwVjxzqSPQvESJqTE3EMADQ9S0RtwWDGNG9Q== | 1254 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= |
847 | 1255 | ||
848 | babel-plugin-transform-remove-console@^6.8.5: | 1256 | astral-regex@^1.0.0: |
849 | version "6.9.4" | 1257 | version "1.0.0" |
850 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" | 1258 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" |
851 | integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= | 1259 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== |
852 | 1260 | ||
853 | babel-plugin-transform-remove-debugger@^6.8.5: | 1261 | astral-regex@^2.0.0: |
854 | version "6.9.4" | 1262 | version "2.0.0" |
855 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" | 1263 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" |
856 | integrity sha1-QrcnYxyXl44estGZp67IShgznvI= | 1264 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== |
857 | 1265 | ||
858 | babel-plugin-transform-remove-undefined@^0.2.0: | 1266 | async-each@^1.0.1: |
859 | version "0.2.0" | 1267 | version "1.0.3" |
860 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.2.0.tgz#94f052062054c707e8d094acefe79416b63452b1" | 1268 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" |
861 | integrity sha512-O8v57tPMHkp89kA4ZfQEYds/pzgvz/QYerBJjIuL5/Jc7RnvMVRA5gJY9zFKP7WayW8WOSBV4vh8Y8FJRio+ow== | 1269 | integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== |
862 | dependencies: | ||
863 | babel-helper-evaluate-path "^0.2.0" | ||
864 | 1270 | ||
865 | babel-plugin-transform-simplify-comparison-operators@^6.8.5: | 1271 | atob@^2.1.2: |
866 | version "6.9.4" | 1272 | version "2.1.2" |
867 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" | 1273 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" |
868 | integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= | 1274 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== |
869 | 1275 | ||
870 | babel-plugin-transform-strict-mode@^6.24.1: | 1276 | autoprefixer@^9.8.6: |
871 | version "6.24.1" | 1277 | version "9.8.6" |
872 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" | 1278 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" |
873 | integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= | 1279 | integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== |
874 | dependencies: | 1280 | dependencies: |
875 | babel-runtime "^6.22.0" | 1281 | browserslist "^4.12.0" |
876 | babel-types "^6.24.1" | 1282 | caniuse-lite "^1.0.30001109" |
877 | 1283 | colorette "^1.2.1" | |
878 | babel-plugin-transform-undefined-to-void@^6.8.3: | 1284 | normalize-range "^0.1.2" |
879 | version "6.9.4" | 1285 | num2fraction "^1.2.2" |
880 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" | 1286 | postcss "^7.0.32" |
881 | integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= | 1287 | postcss-value-parser "^4.1.0" |
882 | |||
883 | babel-preset-env@^1.6.1: | ||
884 | version "1.7.0" | ||
885 | resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" | ||
886 | integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== | ||
887 | dependencies: | ||
888 | babel-plugin-check-es2015-constants "^6.22.0" | ||
889 | babel-plugin-syntax-trailing-function-commas "^6.22.0" | ||
890 | babel-plugin-transform-async-to-generator "^6.22.0" | ||
891 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" | ||
892 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" | ||
893 | babel-plugin-transform-es2015-block-scoping "^6.23.0" | ||
894 | babel-plugin-transform-es2015-classes "^6.23.0" | ||
895 | babel-plugin-transform-es2015-computed-properties "^6.22.0" | ||
896 | babel-plugin-transform-es2015-destructuring "^6.23.0" | ||
897 | babel-plugin-transform-es2015-duplicate-keys "^6.22.0" | ||
898 | babel-plugin-transform-es2015-for-of "^6.23.0" | ||
899 | babel-plugin-transform-es2015-function-name "^6.22.0" | ||
900 | babel-plugin-transform-es2015-literals "^6.22.0" | ||
901 | babel-plugin-transform-es2015-modules-amd "^6.22.0" | ||
902 | babel-plugin-transform-es2015-modules-commonjs "^6.23.0" | ||
903 | babel-plugin-transform-es2015-modules-systemjs "^6.23.0" | ||
904 | babel-plugin-transform-es2015-modules-umd "^6.23.0" | ||
905 | babel-plugin-transform-es2015-object-super "^6.22.0" | ||
906 | babel-plugin-transform-es2015-parameters "^6.23.0" | ||
907 | babel-plugin-transform-es2015-shorthand-properties "^6.22.0" | ||
908 | babel-plugin-transform-es2015-spread "^6.22.0" | ||
909 | babel-plugin-transform-es2015-sticky-regex "^6.22.0" | ||
910 | babel-plugin-transform-es2015-template-literals "^6.22.0" | ||
911 | babel-plugin-transform-es2015-typeof-symbol "^6.23.0" | ||
912 | babel-plugin-transform-es2015-unicode-regex "^6.22.0" | ||
913 | babel-plugin-transform-exponentiation-operator "^6.22.0" | ||
914 | babel-plugin-transform-regenerator "^6.22.0" | ||
915 | browserslist "^3.2.6" | ||
916 | invariant "^2.2.2" | ||
917 | semver "^5.3.0" | ||
918 | 1288 | ||
919 | babel-preset-minify@^0.2.0: | 1289 | awesomplete@^1.1.2: |
920 | version "0.2.0" | 1290 | version "1.1.5" |
921 | resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz#006566552d9b83834472273f306c0131062a0acc" | 1291 | resolved "https://registry.yarnpkg.com/awesomplete/-/awesomplete-1.1.5.tgz#1b2b5dd106d3955595619c03da472a1dc0faf0af" |
922 | integrity sha512-mR8Q44RmMzm18bM2Lqd9uiPopzk5GDCtVuquNbLFmX6lOKnqWoenaNBxnWW0UhBFC75lEHTIgNGCbnsRI0pJVw== | 1292 | integrity sha512-UFw1mPW8NaSECDSTC36HbAOTpF9JK2wBUJcNn4MSvlNtK7SZ9N72gB+ajHtA6D1abYXRcszZnBA4nHBwvFwzHw== |
923 | dependencies: | ||
924 | babel-plugin-minify-builtins "^0.2.0" | ||
925 | babel-plugin-minify-constant-folding "^0.2.0" | ||
926 | babel-plugin-minify-dead-code-elimination "^0.2.0" | ||
927 | babel-plugin-minify-flip-comparisons "^0.2.0" | ||
928 | babel-plugin-minify-guarded-expressions "^0.2.0" | ||
929 | babel-plugin-minify-infinity "^0.2.0" | ||
930 | babel-plugin-minify-mangle-names "^0.2.0" | ||
931 | babel-plugin-minify-numeric-literals "^0.2.0" | ||
932 | babel-plugin-minify-replace "^0.2.0" | ||
933 | babel-plugin-minify-simplify "^0.2.0" | ||
934 | babel-plugin-minify-type-constructors "^0.2.0" | ||
935 | babel-plugin-transform-inline-consecutive-adds "^0.2.0" | ||
936 | babel-plugin-transform-member-expression-literals "^6.8.5" | ||
937 | babel-plugin-transform-merge-sibling-variables "^6.8.6" | ||
938 | babel-plugin-transform-minify-booleans "^6.8.3" | ||
939 | babel-plugin-transform-property-literals "^6.8.5" | ||
940 | babel-plugin-transform-regexp-constructors "^0.2.0" | ||
941 | babel-plugin-transform-remove-console "^6.8.5" | ||
942 | babel-plugin-transform-remove-debugger "^6.8.5" | ||
943 | babel-plugin-transform-remove-undefined "^0.2.0" | ||
944 | babel-plugin-transform-simplify-comparison-operators "^6.8.5" | ||
945 | babel-plugin-transform-undefined-to-void "^6.8.3" | ||
946 | lodash.isplainobject "^4.0.6" | ||
947 | |||
948 | babel-register@^6.26.0: | ||
949 | version "6.26.0" | ||
950 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" | ||
951 | integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= | ||
952 | dependencies: | ||
953 | babel-core "^6.26.0" | ||
954 | babel-runtime "^6.26.0" | ||
955 | core-js "^2.5.0" | ||
956 | home-or-tmp "^2.0.0" | ||
957 | lodash "^4.17.4" | ||
958 | mkdirp "^0.5.1" | ||
959 | source-map-support "^0.4.15" | ||
960 | |||
961 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: | ||
962 | version "6.26.0" | ||
963 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" | ||
964 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= | ||
965 | dependencies: | ||
966 | core-js "^2.4.0" | ||
967 | regenerator-runtime "^0.11.0" | ||
968 | |||
969 | babel-template@^6.24.1, babel-template@^6.26.0: | ||
970 | version "6.26.0" | ||
971 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" | ||
972 | integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= | ||
973 | dependencies: | ||
974 | babel-runtime "^6.26.0" | ||
975 | babel-traverse "^6.26.0" | ||
976 | babel-types "^6.26.0" | ||
977 | babylon "^6.18.0" | ||
978 | lodash "^4.17.4" | ||
979 | |||
980 | babel-traverse@^6.24.1, babel-traverse@^6.26.0: | ||
981 | version "6.26.0" | ||
982 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" | ||
983 | integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= | ||
984 | dependencies: | ||
985 | babel-code-frame "^6.26.0" | ||
986 | babel-messages "^6.23.0" | ||
987 | babel-runtime "^6.26.0" | ||
988 | babel-types "^6.26.0" | ||
989 | babylon "^6.18.0" | ||
990 | debug "^2.6.8" | ||
991 | globals "^9.18.0" | ||
992 | invariant "^2.2.2" | ||
993 | lodash "^4.17.4" | ||
994 | 1293 | ||
995 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: | 1294 | babel-loader@^8.1.0: |
996 | version "6.26.0" | 1295 | version "8.1.0" |
997 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" | 1296 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" |
998 | integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= | 1297 | integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== |
999 | dependencies: | 1298 | dependencies: |
1000 | babel-runtime "^6.26.0" | 1299 | find-cache-dir "^2.1.0" |
1001 | esutils "^2.0.2" | 1300 | loader-utils "^1.4.0" |
1002 | lodash "^4.17.4" | 1301 | mkdirp "^0.5.3" |
1003 | to-fast-properties "^1.0.3" | 1302 | pify "^4.0.1" |
1303 | schema-utils "^2.6.5" | ||
1004 | 1304 | ||
1005 | babylon@^6.18.0: | 1305 | babel-plugin-dynamic-import-node@^2.3.3: |
1006 | version "6.18.0" | 1306 | version "2.3.3" |
1007 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" | 1307 | resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" |
1008 | integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== | 1308 | integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== |
1309 | dependencies: | ||
1310 | object.assign "^4.1.0" | ||
1009 | 1311 | ||
1010 | balanced-match@^0.4.2: | 1312 | bail@^1.0.0: |
1011 | version "0.4.2" | 1313 | version "1.0.5" |
1012 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" | 1314 | resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" |
1013 | integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= | 1315 | integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== |
1014 | 1316 | ||
1015 | balanced-match@^1.0.0: | 1317 | balanced-match@^1.0.0: |
1016 | version "1.0.0" | 1318 | version "1.0.0" |
@@ -1018,9 +1320,9 @@ balanced-match@^1.0.0: | |||
1018 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= | 1320 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= |
1019 | 1321 | ||
1020 | base64-js@^1.0.2: | 1322 | base64-js@^1.0.2: |
1021 | version "1.3.0" | 1323 | version "1.3.1" |
1022 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" | 1324 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" |
1023 | integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== | 1325 | integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== |
1024 | 1326 | ||
1025 | base@^0.11.1: | 1327 | base@^0.11.1: |
1026 | version "0.11.2" | 1328 | version "0.11.2" |
@@ -1035,13 +1337,6 @@ base@^0.11.1: | |||
1035 | mixin-deep "^1.2.0" | 1337 | mixin-deep "^1.2.0" |
1036 | pascalcase "^0.1.1" | 1338 | pascalcase "^0.1.1" |
1037 | 1339 | ||
1038 | bcrypt-pbkdf@^1.0.0: | ||
1039 | version "1.0.2" | ||
1040 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" | ||
1041 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= | ||
1042 | dependencies: | ||
1043 | tweetnacl "^0.14.3" | ||
1044 | |||
1045 | big.js@^5.2.2: | 1340 | big.js@^5.2.2: |
1046 | version "5.2.2" | 1341 | version "5.2.2" |
1047 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" | 1342 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" |
@@ -1052,22 +1347,37 @@ binary-extensions@^1.0.0: | |||
1052 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" | 1347 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" |
1053 | integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== | 1348 | integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== |
1054 | 1349 | ||
1350 | binary-extensions@^2.0.0: | ||
1351 | version "2.1.0" | ||
1352 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" | ||
1353 | integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== | ||
1354 | |||
1355 | bindings@^1.5.0: | ||
1356 | version "1.5.0" | ||
1357 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" | ||
1358 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== | ||
1359 | dependencies: | ||
1360 | file-uri-to-path "1.0.0" | ||
1361 | |||
1055 | blazy@^1.8.2: | 1362 | blazy@^1.8.2: |
1056 | version "1.8.2" | 1363 | version "1.8.2" |
1057 | resolved "https://registry.yarnpkg.com/blazy/-/blazy-1.8.2.tgz#50dfd638baaf9003efd6eb3a836aca54184ab6da" | 1364 | resolved "https://registry.yarnpkg.com/blazy/-/blazy-1.8.2.tgz#50dfd638baaf9003efd6eb3a836aca54184ab6da" |
1058 | integrity sha1-UN/WOLqvkAPv1us6g2rKVBhKtto= | 1365 | integrity sha1-UN/WOLqvkAPv1us6g2rKVBhKtto= |
1059 | 1366 | ||
1060 | block-stream@*: | 1367 | bluebird@^3.5.5: |
1061 | version "0.0.9" | 1368 | version "3.7.2" |
1062 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" | 1369 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" |
1063 | integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= | 1370 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== |
1064 | dependencies: | ||
1065 | inherits "~2.0.0" | ||
1066 | 1371 | ||
1067 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: | 1372 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: |
1068 | version "4.11.8" | 1373 | version "4.11.9" |
1069 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" | 1374 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" |
1070 | integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== | 1375 | integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== |
1376 | |||
1377 | bn.js@^5.1.1: | ||
1378 | version "5.1.3" | ||
1379 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" | ||
1380 | integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== | ||
1071 | 1381 | ||
1072 | brace-expansion@^1.1.7: | 1382 | brace-expansion@^1.1.7: |
1073 | version "1.1.11" | 1383 | version "1.1.11" |
@@ -1093,6 +1403,13 @@ braces@^2.3.1, braces@^2.3.2: | |||
1093 | split-string "^3.0.2" | 1403 | split-string "^3.0.2" |
1094 | to-regex "^3.0.1" | 1404 | to-regex "^3.0.1" |
1095 | 1405 | ||
1406 | braces@^3.0.1, braces@~3.0.2: | ||
1407 | version "3.0.2" | ||
1408 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" | ||
1409 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== | ||
1410 | dependencies: | ||
1411 | fill-range "^7.0.1" | ||
1412 | |||
1096 | brorand@^1.0.1: | 1413 | brorand@^1.0.1: |
1097 | version "1.1.0" | 1414 | version "1.1.0" |
1098 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" | 1415 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" |
@@ -1129,7 +1446,7 @@ browserify-des@^1.0.0: | |||
1129 | inherits "^2.0.1" | 1446 | inherits "^2.0.1" |
1130 | safe-buffer "^5.1.2" | 1447 | safe-buffer "^5.1.2" |
1131 | 1448 | ||
1132 | browserify-rsa@^4.0.0: | 1449 | browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: |
1133 | version "4.0.1" | 1450 | version "4.0.1" |
1134 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" | 1451 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" |
1135 | integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= | 1452 | integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= |
@@ -1138,17 +1455,19 @@ browserify-rsa@^4.0.0: | |||
1138 | randombytes "^2.0.1" | 1455 | randombytes "^2.0.1" |
1139 | 1456 | ||
1140 | browserify-sign@^4.0.0: | 1457 | browserify-sign@^4.0.0: |
1141 | version "4.0.4" | 1458 | version "4.2.1" |
1142 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" | 1459 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" |
1143 | integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= | 1460 | integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== |
1144 | dependencies: | 1461 | dependencies: |
1145 | bn.js "^4.1.1" | 1462 | bn.js "^5.1.1" |
1146 | browserify-rsa "^4.0.0" | 1463 | browserify-rsa "^4.0.1" |
1147 | create-hash "^1.1.0" | 1464 | create-hash "^1.2.0" |
1148 | create-hmac "^1.1.2" | 1465 | create-hmac "^1.1.7" |
1149 | elliptic "^6.0.0" | 1466 | elliptic "^6.5.3" |
1150 | inherits "^2.0.1" | 1467 | inherits "^2.0.4" |
1151 | parse-asn1 "^5.0.0" | 1468 | parse-asn1 "^5.1.5" |
1469 | readable-stream "^3.6.0" | ||
1470 | safe-buffer "^5.2.0" | ||
1152 | 1471 | ||
1153 | browserify-zlib@^0.2.0: | 1472 | browserify-zlib@^0.2.0: |
1154 | version "0.2.0" | 1473 | version "0.2.0" |
@@ -1157,21 +1476,15 @@ browserify-zlib@^0.2.0: | |||
1157 | dependencies: | 1476 | dependencies: |
1158 | pako "~1.0.5" | 1477 | pako "~1.0.5" |
1159 | 1478 | ||
1160 | browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: | 1479 | browserslist@^4.12.0, browserslist@^4.8.5: |
1161 | version "1.7.7" | 1480 | version "4.14.3" |
1162 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" | 1481 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" |
1163 | integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= | 1482 | integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== |
1164 | dependencies: | ||
1165 | caniuse-db "^1.0.30000639" | ||
1166 | electron-to-chromium "^1.2.7" | ||
1167 | |||
1168 | browserslist@^3.2.6: | ||
1169 | version "3.2.8" | ||
1170 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" | ||
1171 | integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== | ||
1172 | dependencies: | 1483 | dependencies: |
1173 | caniuse-lite "^1.0.30000844" | 1484 | caniuse-lite "^1.0.30001131" |
1174 | electron-to-chromium "^1.3.47" | 1485 | electron-to-chromium "^1.3.570" |
1486 | escalade "^3.1.0" | ||
1487 | node-releases "^1.1.61" | ||
1175 | 1488 | ||
1176 | buffer-from@^1.0.0: | 1489 | buffer-from@^1.0.0: |
1177 | version "1.1.1" | 1490 | version "1.1.1" |
@@ -1184,9 +1497,9 @@ buffer-xor@^1.0.3: | |||
1184 | integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= | 1497 | integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= |
1185 | 1498 | ||
1186 | buffer@^4.3.0: | 1499 | buffer@^4.3.0: |
1187 | version "4.9.1" | 1500 | version "4.9.2" |
1188 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" | 1501 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" |
1189 | integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= | 1502 | integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== |
1190 | dependencies: | 1503 | dependencies: |
1191 | base64-js "^1.0.2" | 1504 | base64-js "^1.0.2" |
1192 | ieee754 "^1.1.4" | 1505 | ieee754 "^1.1.4" |
@@ -1197,6 +1510,50 @@ builtin-status-codes@^3.0.0: | |||
1197 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" | 1510 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" |
1198 | integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= | 1511 | integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= |
1199 | 1512 | ||
1513 | cacache@^12.0.2: | ||
1514 | version "12.0.4" | ||
1515 | resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" | ||
1516 | integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== | ||
1517 | dependencies: | ||
1518 | bluebird "^3.5.5" | ||
1519 | chownr "^1.1.1" | ||
1520 | figgy-pudding "^3.5.1" | ||
1521 | glob "^7.1.4" | ||
1522 | graceful-fs "^4.1.15" | ||
1523 | infer-owner "^1.0.3" | ||
1524 | lru-cache "^5.1.1" | ||
1525 | mississippi "^3.0.0" | ||
1526 | mkdirp "^0.5.1" | ||
1527 | move-concurrently "^1.0.1" | ||
1528 | promise-inflight "^1.0.1" | ||
1529 | rimraf "^2.6.3" | ||
1530 | ssri "^6.0.1" | ||
1531 | unique-filename "^1.1.1" | ||
1532 | y18n "^4.0.0" | ||
1533 | |||
1534 | cacache@^15.0.5: | ||
1535 | version "15.0.5" | ||
1536 | resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" | ||
1537 | integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== | ||
1538 | dependencies: | ||
1539 | "@npmcli/move-file" "^1.0.1" | ||
1540 | chownr "^2.0.0" | ||
1541 | fs-minipass "^2.0.0" | ||
1542 | glob "^7.1.4" | ||
1543 | infer-owner "^1.0.4" | ||
1544 | lru-cache "^6.0.0" | ||
1545 | minipass "^3.1.1" | ||
1546 | minipass-collect "^1.0.2" | ||
1547 | minipass-flush "^1.0.5" | ||
1548 | minipass-pipeline "^1.2.2" | ||
1549 | mkdirp "^1.0.3" | ||
1550 | p-map "^4.0.0" | ||
1551 | promise-inflight "^1.0.1" | ||
1552 | rimraf "^3.0.2" | ||
1553 | ssri "^8.0.0" | ||
1554 | tar "^6.0.2" | ||
1555 | unique-filename "^1.1.1" | ||
1556 | |||
1200 | cache-base@^1.0.1: | 1557 | cache-base@^1.0.1: |
1201 | version "1.0.1" | 1558 | version "1.0.1" |
1202 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" | 1559 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" |
@@ -1212,91 +1569,41 @@ cache-base@^1.0.1: | |||
1212 | union-value "^1.0.0" | 1569 | union-value "^1.0.0" |
1213 | unset-value "^1.0.0" | 1570 | unset-value "^1.0.0" |
1214 | 1571 | ||
1215 | caller-path@^0.1.0: | 1572 | callsites@^3.0.0: |
1216 | version "0.1.0" | 1573 | version "3.1.0" |
1217 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" | 1574 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" |
1218 | integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= | 1575 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== |
1219 | dependencies: | ||
1220 | callsites "^0.2.0" | ||
1221 | |||
1222 | callsites@^0.2.0: | ||
1223 | version "0.2.0" | ||
1224 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" | ||
1225 | integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= | ||
1226 | 1576 | ||
1227 | camelcase-keys@^2.0.0: | 1577 | camelcase-keys@^6.2.2: |
1228 | version "2.1.0" | 1578 | version "6.2.2" |
1229 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" | 1579 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" |
1230 | integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= | 1580 | integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== |
1231 | dependencies: | 1581 | dependencies: |
1232 | camelcase "^2.0.0" | 1582 | camelcase "^5.3.1" |
1233 | map-obj "^1.0.0" | 1583 | map-obj "^4.0.0" |
1234 | 1584 | quick-lru "^4.0.1" | |
1235 | camelcase@^1.0.2: | ||
1236 | version "1.2.1" | ||
1237 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" | ||
1238 | integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= | ||
1239 | 1585 | ||
1240 | camelcase@^2.0.0: | 1586 | camelcase@^5.0.0, camelcase@^5.3.1: |
1241 | version "2.1.1" | 1587 | version "5.3.1" |
1242 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" | 1588 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" |
1243 | integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= | 1589 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== |
1244 | 1590 | ||
1245 | camelcase@^3.0.0: | 1591 | camelcase@^6.0.0: |
1246 | version "3.0.0" | 1592 | version "6.0.0" |
1247 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" | 1593 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" |
1248 | integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= | 1594 | integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== |
1249 | 1595 | ||
1250 | camelcase@^4.1.0: | 1596 | caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: |
1251 | version "4.1.0" | 1597 | version "1.0.30001135" |
1252 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" | 1598 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001135.tgz#995b1eb94404a3c9a0d7600c113c9bb27f2cd8aa" |
1253 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= | 1599 | integrity sha512-ziNcheTGTHlu9g34EVoHQdIu5g4foc8EsxMGC7Xkokmvw0dqNtX8BS8RgCgFBaAiSp2IdjvBxNdh0ssib28eVQ== |
1254 | 1600 | ||
1255 | caniuse-api@^1.5.2: | 1601 | ccount@^1.0.0: |
1256 | version "1.6.1" | 1602 | version "1.0.5" |
1257 | resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" | 1603 | resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" |
1258 | integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= | 1604 | integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== |
1259 | dependencies: | ||
1260 | browserslist "^1.3.6" | ||
1261 | caniuse-db "^1.0.30000529" | ||
1262 | lodash.memoize "^4.1.2" | ||
1263 | lodash.uniq "^4.5.0" | ||
1264 | |||
1265 | caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: | ||
1266 | version "1.0.30000969" | ||
1267 | resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000969.tgz#e6aeca9b1bac88865990913a0b041f587180cd59" | ||
1268 | integrity sha512-ttrmwpIXvEL/kg0JSg6Q+xEbMxAEcjZOOgZMGPcMe5JMYgi20Nvs9bqMRGfyIOQtd1jYa6yRWODIR6apj3xPQw== | ||
1269 | |||
1270 | caniuse-lite@^1.0.30000844: | ||
1271 | version "1.0.30000969" | ||
1272 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz#7664f571f2072657bde70b00a1fc1ba41f1942a9" | ||
1273 | integrity sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ== | ||
1274 | |||
1275 | caseless@~0.12.0: | ||
1276 | version "0.12.0" | ||
1277 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" | ||
1278 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= | ||
1279 | |||
1280 | center-align@^0.1.1: | ||
1281 | version "0.1.3" | ||
1282 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" | ||
1283 | integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= | ||
1284 | dependencies: | ||
1285 | align-text "^0.1.3" | ||
1286 | lazy-cache "^1.0.3" | ||
1287 | |||
1288 | chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: | ||
1289 | version "1.1.3" | ||
1290 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" | ||
1291 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= | ||
1292 | dependencies: | ||
1293 | ansi-styles "^2.2.1" | ||
1294 | escape-string-regexp "^1.0.2" | ||
1295 | has-ansi "^2.0.0" | ||
1296 | strip-ansi "^3.0.0" | ||
1297 | supports-color "^2.0.0" | ||
1298 | 1605 | ||
1299 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1: | 1606 | chalk@^2.0.0, chalk@^2.4.2: |
1300 | version "2.4.2" | 1607 | version "2.4.2" |
1301 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" | 1608 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" |
1302 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== | 1609 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== |
@@ -1305,15 +1612,53 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1: | |||
1305 | escape-string-regexp "^1.0.5" | 1612 | escape-string-regexp "^1.0.5" |
1306 | supports-color "^5.3.0" | 1613 | supports-color "^5.3.0" |
1307 | 1614 | ||
1308 | chardet@^0.4.0: | 1615 | chalk@^4.0.0, chalk@^4.1.0: |
1309 | version "0.4.2" | 1616 | version "4.1.0" |
1310 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" | 1617 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" |
1311 | integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= | 1618 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== |
1619 | dependencies: | ||
1620 | ansi-styles "^4.1.0" | ||
1621 | supports-color "^7.1.0" | ||
1622 | |||
1623 | character-entities-html4@^1.0.0: | ||
1624 | version "1.1.4" | ||
1625 | resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" | ||
1626 | integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== | ||
1627 | |||
1628 | character-entities-legacy@^1.0.0: | ||
1629 | version "1.1.4" | ||
1630 | resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" | ||
1631 | integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== | ||
1312 | 1632 | ||
1313 | chokidar@^2.0.2: | 1633 | character-entities@^1.0.0: |
1314 | version "2.1.6" | 1634 | version "1.2.4" |
1315 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" | 1635 | resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" |
1316 | integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== | 1636 | integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== |
1637 | |||
1638 | character-reference-invalid@^1.0.0: | ||
1639 | version "1.1.4" | ||
1640 | resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" | ||
1641 | integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== | ||
1642 | |||
1643 | "chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: | ||
1644 | version "3.4.2" | ||
1645 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" | ||
1646 | integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== | ||
1647 | dependencies: | ||
1648 | anymatch "~3.1.1" | ||
1649 | braces "~3.0.2" | ||
1650 | glob-parent "~5.1.0" | ||
1651 | is-binary-path "~2.1.0" | ||
1652 | is-glob "~4.0.1" | ||
1653 | normalize-path "~3.0.0" | ||
1654 | readdirp "~3.4.0" | ||
1655 | optionalDependencies: | ||
1656 | fsevents "~2.1.2" | ||
1657 | |||
1658 | chokidar@^2.1.8: | ||
1659 | version "2.1.8" | ||
1660 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" | ||
1661 | integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== | ||
1317 | dependencies: | 1662 | dependencies: |
1318 | anymatch "^2.0.0" | 1663 | anymatch "^2.0.0" |
1319 | async-each "^1.0.1" | 1664 | async-each "^1.0.1" |
@@ -1330,9 +1675,21 @@ chokidar@^2.0.2: | |||
1330 | fsevents "^1.2.7" | 1675 | fsevents "^1.2.7" |
1331 | 1676 | ||
1332 | chownr@^1.1.1: | 1677 | chownr@^1.1.1: |
1333 | version "1.1.1" | 1678 | version "1.1.4" |
1334 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" | 1679 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" |
1335 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== | 1680 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== |
1681 | |||
1682 | chownr@^2.0.0: | ||
1683 | version "2.0.0" | ||
1684 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" | ||
1685 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== | ||
1686 | |||
1687 | chrome-trace-event@^1.0.2: | ||
1688 | version "1.0.2" | ||
1689 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" | ||
1690 | integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== | ||
1691 | dependencies: | ||
1692 | tslib "^1.9.0" | ||
1336 | 1693 | ||
1337 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: | 1694 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: |
1338 | version "1.0.4" | 1695 | version "1.0.4" |
@@ -1342,18 +1699,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: | |||
1342 | inherits "^2.0.1" | 1699 | inherits "^2.0.1" |
1343 | safe-buffer "^5.0.1" | 1700 | safe-buffer "^5.0.1" |
1344 | 1701 | ||
1345 | circular-json@^0.3.1: | ||
1346 | version "0.3.3" | ||
1347 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" | ||
1348 | integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== | ||
1349 | |||
1350 | clap@^1.0.9: | ||
1351 | version "1.2.3" | ||
1352 | resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" | ||
1353 | integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== | ||
1354 | dependencies: | ||
1355 | chalk "^1.1.3" | ||
1356 | |||
1357 | class-utils@^0.3.5: | 1702 | class-utils@^0.3.5: |
1358 | version "0.3.6" | 1703 | version "0.3.6" |
1359 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" | 1704 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" |
@@ -1364,74 +1709,31 @@ class-utils@^0.3.5: | |||
1364 | isobject "^3.0.0" | 1709 | isobject "^3.0.0" |
1365 | static-extend "^0.1.1" | 1710 | static-extend "^0.1.1" |
1366 | 1711 | ||
1367 | cli-cursor@^1.0.1: | 1712 | clean-stack@^2.0.0: |
1368 | version "1.0.2" | ||
1369 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" | ||
1370 | integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= | ||
1371 | dependencies: | ||
1372 | restore-cursor "^1.0.1" | ||
1373 | |||
1374 | cli-cursor@^2.1.0: | ||
1375 | version "2.1.0" | ||
1376 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" | ||
1377 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= | ||
1378 | dependencies: | ||
1379 | restore-cursor "^2.0.0" | ||
1380 | |||
1381 | cli-width@^2.0.0: | ||
1382 | version "2.2.0" | 1713 | version "2.2.0" |
1383 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" | 1714 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" |
1384 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= | 1715 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== |
1385 | |||
1386 | cliui@^2.1.0: | ||
1387 | version "2.1.0" | ||
1388 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" | ||
1389 | integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= | ||
1390 | dependencies: | ||
1391 | center-align "^0.1.1" | ||
1392 | right-align "^0.1.1" | ||
1393 | wordwrap "0.0.2" | ||
1394 | |||
1395 | cliui@^3.2.0: | ||
1396 | version "3.2.0" | ||
1397 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" | ||
1398 | integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= | ||
1399 | dependencies: | ||
1400 | string-width "^1.0.1" | ||
1401 | strip-ansi "^3.0.1" | ||
1402 | wrap-ansi "^2.0.0" | ||
1403 | 1716 | ||
1404 | clone-deep@^2.0.1: | 1717 | cliui@^5.0.0: |
1405 | version "2.0.2" | 1718 | version "5.0.0" |
1406 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" | 1719 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" |
1407 | integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ== | 1720 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== |
1408 | dependencies: | 1721 | dependencies: |
1409 | for-own "^1.0.0" | 1722 | string-width "^3.1.0" |
1410 | is-plain-object "^2.0.4" | 1723 | strip-ansi "^5.2.0" |
1411 | kind-of "^6.0.0" | 1724 | wrap-ansi "^5.1.0" |
1412 | shallow-clone "^1.0.0" | ||
1413 | |||
1414 | clone@^1.0.2: | ||
1415 | version "1.0.4" | ||
1416 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" | ||
1417 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= | ||
1418 | |||
1419 | co@^4.6.0: | ||
1420 | version "4.6.0" | ||
1421 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" | ||
1422 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= | ||
1423 | 1725 | ||
1424 | coa@~1.0.1: | 1726 | clone-regexp@^2.1.0: |
1425 | version "1.0.4" | 1727 | version "2.2.0" |
1426 | resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" | 1728 | resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" |
1427 | integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= | 1729 | integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== |
1428 | dependencies: | 1730 | dependencies: |
1429 | q "^1.1.2" | 1731 | is-regexp "^2.0.0" |
1430 | 1732 | ||
1431 | code-point-at@^1.0.0: | 1733 | collapse-white-space@^1.0.2: |
1432 | version "1.1.0" | 1734 | version "1.0.6" |
1433 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" | 1735 | resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" |
1434 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= | 1736 | integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== |
1435 | 1737 | ||
1436 | collection-visit@^1.0.0: | 1738 | collection-visit@^1.0.0: |
1437 | version "1.0.0" | 1739 | version "1.0.0" |
@@ -1441,64 +1743,39 @@ collection-visit@^1.0.0: | |||
1441 | map-visit "^1.0.0" | 1743 | map-visit "^1.0.0" |
1442 | object-visit "^1.0.0" | 1744 | object-visit "^1.0.0" |
1443 | 1745 | ||
1444 | color-convert@^1.3.0, color-convert@^1.9.0: | 1746 | color-convert@^1.9.0: |
1445 | version "1.9.3" | 1747 | version "1.9.3" |
1446 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" | 1748 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" |
1447 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== | 1749 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== |
1448 | dependencies: | 1750 | dependencies: |
1449 | color-name "1.1.3" | 1751 | color-name "1.1.3" |
1450 | 1752 | ||
1753 | color-convert@^2.0.1: | ||
1754 | version "2.0.1" | ||
1755 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" | ||
1756 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== | ||
1757 | dependencies: | ||
1758 | color-name "~1.1.4" | ||
1759 | |||
1451 | color-name@1.1.3: | 1760 | color-name@1.1.3: |
1452 | version "1.1.3" | 1761 | version "1.1.3" |
1453 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" | 1762 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" |
1454 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= | 1763 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= |
1455 | 1764 | ||
1456 | color-name@^1.0.0: | 1765 | color-name@~1.1.4: |
1457 | version "1.1.4" | 1766 | version "1.1.4" |
1458 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" | 1767 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" |
1459 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== | 1768 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== |
1460 | 1769 | ||
1461 | color-string@^0.3.0: | 1770 | colorette@^1.2.1: |
1462 | version "0.3.0" | 1771 | version "1.2.1" |
1463 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" | 1772 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" |
1464 | integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= | 1773 | integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== |
1465 | dependencies: | ||
1466 | color-name "^1.0.0" | ||
1467 | |||
1468 | color@^0.11.0: | ||
1469 | version "0.11.4" | ||
1470 | resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" | ||
1471 | integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= | ||
1472 | dependencies: | ||
1473 | clone "^1.0.2" | ||
1474 | color-convert "^1.3.0" | ||
1475 | color-string "^0.3.0" | ||
1476 | |||
1477 | colormin@^1.0.5: | ||
1478 | version "1.1.2" | ||
1479 | resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" | ||
1480 | integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= | ||
1481 | dependencies: | ||
1482 | color "^0.11.0" | ||
1483 | css-color-names "0.0.4" | ||
1484 | has "^1.0.1" | ||
1485 | |||
1486 | colors@~1.1.2: | ||
1487 | version "1.1.2" | ||
1488 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" | ||
1489 | integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= | ||
1490 | |||
1491 | combined-stream@^1.0.6, combined-stream@~1.0.6: | ||
1492 | version "1.0.8" | ||
1493 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" | ||
1494 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== | ||
1495 | dependencies: | ||
1496 | delayed-stream "~1.0.0" | ||
1497 | 1774 | ||
1498 | commander@^2.8.1: | 1775 | commander@^2.20.0: |
1499 | version "2.20.0" | 1776 | version "2.20.3" |
1500 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" | 1777 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" |
1501 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== | 1778 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== |
1502 | 1779 | ||
1503 | commondir@^1.0.1: | 1780 | commondir@^1.0.1: |
1504 | version "1.0.1" | 1781 | version "1.0.1" |
@@ -1515,7 +1792,7 @@ concat-map@0.0.1: | |||
1515 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" | 1792 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" |
1516 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= | 1793 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= |
1517 | 1794 | ||
1518 | concat-stream@^1.4.6, concat-stream@^1.6.0: | 1795 | concat-stream@^1.5.0: |
1519 | version "1.6.2" | 1796 | version "1.6.2" |
1520 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" | 1797 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" |
1521 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== | 1798 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== |
@@ -1525,17 +1802,15 @@ concat-stream@^1.4.6, concat-stream@^1.6.0: | |||
1525 | readable-stream "^2.2.2" | 1802 | readable-stream "^2.2.2" |
1526 | typedarray "^0.0.6" | 1803 | typedarray "^0.0.6" |
1527 | 1804 | ||
1528 | console-browserify@^1.1.0: | 1805 | confusing-browser-globals@^1.0.9: |
1529 | version "1.1.0" | 1806 | version "1.0.9" |
1530 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" | 1807 | resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" |
1531 | integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= | 1808 | integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== |
1532 | dependencies: | ||
1533 | date-now "^0.1.4" | ||
1534 | 1809 | ||
1535 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: | 1810 | console-browserify@^1.1.0: |
1536 | version "1.1.0" | 1811 | version "1.2.0" |
1537 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" | 1812 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" |
1538 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= | 1813 | integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== |
1539 | 1814 | ||
1540 | constants-browserify@^1.0.0: | 1815 | constants-browserify@^1.0.0: |
1541 | version "1.0.0" | 1816 | version "1.0.0" |
@@ -1547,37 +1822,63 @@ contains-path@^0.1.0: | |||
1547 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" | 1822 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" |
1548 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= | 1823 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= |
1549 | 1824 | ||
1550 | convert-source-map@^1.5.1: | 1825 | convert-source-map@^1.7.0: |
1551 | version "1.6.0" | 1826 | version "1.7.0" |
1552 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" | 1827 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" |
1553 | integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== | 1828 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== |
1554 | dependencies: | 1829 | dependencies: |
1555 | safe-buffer "~5.1.1" | 1830 | safe-buffer "~5.1.1" |
1556 | 1831 | ||
1832 | copy-concurrently@^1.0.0: | ||
1833 | version "1.0.5" | ||
1834 | resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" | ||
1835 | integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== | ||
1836 | dependencies: | ||
1837 | aproba "^1.1.1" | ||
1838 | fs-write-stream-atomic "^1.0.8" | ||
1839 | iferr "^0.1.5" | ||
1840 | mkdirp "^0.5.1" | ||
1841 | rimraf "^2.5.4" | ||
1842 | run-queue "^1.0.0" | ||
1843 | |||
1557 | copy-descriptor@^0.1.0: | 1844 | copy-descriptor@^0.1.0: |
1558 | version "0.1.1" | 1845 | version "0.1.1" |
1559 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" | 1846 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" |
1560 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= | 1847 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= |
1561 | 1848 | ||
1562 | core-js@^2.4.0, core-js@^2.5.0: | 1849 | core-js-compat@^3.6.2: |
1563 | version "2.6.5" | 1850 | version "3.6.5" |
1564 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" | 1851 | resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" |
1565 | integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== | 1852 | integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== |
1853 | dependencies: | ||
1854 | browserslist "^4.8.5" | ||
1855 | semver "7.0.0" | ||
1566 | 1856 | ||
1567 | core-util-is@1.0.2, core-util-is@~1.0.0: | 1857 | core-util-is@~1.0.0: |
1568 | version "1.0.2" | 1858 | version "1.0.2" |
1569 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" | 1859 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" |
1570 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= | 1860 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= |
1571 | 1861 | ||
1862 | cosmiconfig@^7.0.0: | ||
1863 | version "7.0.0" | ||
1864 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" | ||
1865 | integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== | ||
1866 | dependencies: | ||
1867 | "@types/parse-json" "^4.0.0" | ||
1868 | import-fresh "^3.2.1" | ||
1869 | parse-json "^5.0.0" | ||
1870 | path-type "^4.0.0" | ||
1871 | yaml "^1.10.0" | ||
1872 | |||
1572 | create-ecdh@^4.0.0: | 1873 | create-ecdh@^4.0.0: |
1573 | version "4.0.3" | 1874 | version "4.0.4" |
1574 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" | 1875 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" |
1575 | integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== | 1876 | integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== |
1576 | dependencies: | 1877 | dependencies: |
1577 | bn.js "^4.1.0" | 1878 | bn.js "^4.1.0" |
1578 | elliptic "^6.0.0" | 1879 | elliptic "^6.5.3" |
1579 | 1880 | ||
1580 | create-hash@^1.1.0, create-hash@^1.1.2: | 1881 | create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: |
1581 | version "1.2.0" | 1882 | version "1.2.0" |
1582 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" | 1883 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" |
1583 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== | 1884 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== |
@@ -1588,7 +1889,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: | |||
1588 | ripemd160 "^2.0.1" | 1889 | ripemd160 "^2.0.1" |
1589 | sha.js "^2.4.0" | 1890 | sha.js "^2.4.0" |
1590 | 1891 | ||
1591 | create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: | 1892 | create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: |
1592 | version "1.1.7" | 1893 | version "1.1.7" |
1593 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" | 1894 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" |
1594 | integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== | 1895 | integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== |
@@ -1600,22 +1901,25 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: | |||
1600 | safe-buffer "^5.0.1" | 1901 | safe-buffer "^5.0.1" |
1601 | sha.js "^2.4.8" | 1902 | sha.js "^2.4.8" |
1602 | 1903 | ||
1603 | cross-spawn@^3.0.0: | 1904 | cross-spawn@^6.0.5: |
1604 | version "3.0.1" | 1905 | version "6.0.5" |
1605 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" | 1906 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" |
1606 | integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= | 1907 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== |
1607 | dependencies: | 1908 | dependencies: |
1608 | lru-cache "^4.0.1" | 1909 | nice-try "^1.0.4" |
1910 | path-key "^2.0.1" | ||
1911 | semver "^5.5.0" | ||
1912 | shebang-command "^1.2.0" | ||
1609 | which "^1.2.9" | 1913 | which "^1.2.9" |
1610 | 1914 | ||
1611 | cross-spawn@^5.0.1, cross-spawn@^5.1.0: | 1915 | cross-spawn@^7.0.2: |
1612 | version "5.1.0" | 1916 | version "7.0.3" |
1613 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" | 1917 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" |
1614 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= | 1918 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== |
1615 | dependencies: | 1919 | dependencies: |
1616 | lru-cache "^4.0.1" | 1920 | path-key "^3.1.0" |
1617 | shebang-command "^1.2.0" | 1921 | shebang-command "^2.0.0" |
1618 | which "^1.2.9" | 1922 | which "^2.0.1" |
1619 | 1923 | ||
1620 | crypto-browserify@^3.11.0: | 1924 | crypto-browserify@^3.11.0: |
1621 | version "3.12.0" | 1925 | version "3.12.0" |
@@ -1634,132 +1938,57 @@ crypto-browserify@^3.11.0: | |||
1634 | randombytes "^2.0.0" | 1938 | randombytes "^2.0.0" |
1635 | randomfill "^1.0.3" | 1939 | randomfill "^1.0.3" |
1636 | 1940 | ||
1637 | css-color-names@0.0.4: | 1941 | css-loader@^4.3.0: |
1638 | version "0.0.4" | 1942 | version "4.3.0" |
1639 | resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" | 1943 | resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" |
1640 | integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= | 1944 | integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== |
1641 | 1945 | dependencies: | |
1642 | css-loader@^0.28.9: | 1946 | camelcase "^6.0.0" |
1643 | version "0.28.11" | 1947 | cssesc "^3.0.0" |
1644 | resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" | 1948 | icss-utils "^4.1.1" |
1645 | integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg== | 1949 | loader-utils "^2.0.0" |
1646 | dependencies: | 1950 | postcss "^7.0.32" |
1647 | babel-code-frame "^6.26.0" | 1951 | postcss-modules-extract-imports "^2.0.0" |
1648 | css-selector-tokenizer "^0.7.0" | 1952 | postcss-modules-local-by-default "^3.0.3" |
1649 | cssnano "^3.10.0" | 1953 | postcss-modules-scope "^2.2.0" |
1650 | icss-utils "^2.1.0" | 1954 | postcss-modules-values "^3.0.0" |
1651 | loader-utils "^1.0.2" | 1955 | postcss-value-parser "^4.1.0" |
1652 | lodash.camelcase "^4.3.0" | 1956 | schema-utils "^2.7.1" |
1653 | object-assign "^4.1.1" | 1957 | semver "^7.3.2" |
1654 | postcss "^5.0.6" | 1958 | |
1655 | postcss-modules-extract-imports "^1.2.0" | 1959 | cssesc@^3.0.0: |
1656 | postcss-modules-local-by-default "^1.2.0" | 1960 | version "3.0.0" |
1657 | postcss-modules-scope "^1.1.0" | 1961 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" |
1658 | postcss-modules-values "^1.3.0" | 1962 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== |
1659 | postcss-value-parser "^3.3.0" | ||
1660 | source-list-map "^2.0.0" | ||
1661 | |||
1662 | css-selector-tokenizer@^0.7.0: | ||
1663 | version "0.7.1" | ||
1664 | resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" | ||
1665 | integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== | ||
1666 | dependencies: | ||
1667 | cssesc "^0.1.0" | ||
1668 | fastparse "^1.1.1" | ||
1669 | regexpu-core "^1.0.0" | ||
1670 | |||
1671 | cssesc@^0.1.0: | ||
1672 | version "0.1.0" | ||
1673 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" | ||
1674 | integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= | ||
1675 | |||
1676 | cssnano@^3.10.0: | ||
1677 | version "3.10.0" | ||
1678 | resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" | ||
1679 | integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= | ||
1680 | dependencies: | ||
1681 | autoprefixer "^6.3.1" | ||
1682 | decamelize "^1.1.2" | ||
1683 | defined "^1.0.0" | ||
1684 | has "^1.0.1" | ||
1685 | object-assign "^4.0.1" | ||
1686 | postcss "^5.0.14" | ||
1687 | postcss-calc "^5.2.0" | ||
1688 | postcss-colormin "^2.1.8" | ||
1689 | postcss-convert-values "^2.3.4" | ||
1690 | postcss-discard-comments "^2.0.4" | ||
1691 | postcss-discard-duplicates "^2.0.1" | ||
1692 | postcss-discard-empty "^2.0.1" | ||
1693 | postcss-discard-overridden "^0.1.1" | ||
1694 | postcss-discard-unused "^2.2.1" | ||
1695 | postcss-filter-plugins "^2.0.0" | ||
1696 | postcss-merge-idents "^2.1.5" | ||
1697 | postcss-merge-longhand "^2.0.1" | ||
1698 | postcss-merge-rules "^2.0.3" | ||
1699 | postcss-minify-font-values "^1.0.2" | ||
1700 | postcss-minify-gradients "^1.0.1" | ||
1701 | postcss-minify-params "^1.0.4" | ||
1702 | postcss-minify-selectors "^2.0.4" | ||
1703 | postcss-normalize-charset "^1.1.0" | ||
1704 | postcss-normalize-url "^3.0.7" | ||
1705 | postcss-ordered-values "^2.1.0" | ||
1706 | postcss-reduce-idents "^2.2.2" | ||
1707 | postcss-reduce-initial "^1.0.0" | ||
1708 | postcss-reduce-transforms "^1.0.3" | ||
1709 | postcss-svgo "^2.1.1" | ||
1710 | postcss-unique-selectors "^2.0.2" | ||
1711 | postcss-value-parser "^3.2.3" | ||
1712 | postcss-zindex "^2.0.1" | ||
1713 | |||
1714 | csso@~2.3.1: | ||
1715 | version "2.3.2" | ||
1716 | resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" | ||
1717 | integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= | ||
1718 | dependencies: | ||
1719 | clap "^1.0.9" | ||
1720 | source-map "^0.5.3" | ||
1721 | |||
1722 | currently-unhandled@^0.4.1: | ||
1723 | version "0.4.1" | ||
1724 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" | ||
1725 | integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= | ||
1726 | dependencies: | ||
1727 | array-find-index "^1.0.1" | ||
1728 | |||
1729 | d@1: | ||
1730 | version "1.0.0" | ||
1731 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" | ||
1732 | integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= | ||
1733 | dependencies: | ||
1734 | es5-ext "^0.10.9" | ||
1735 | |||
1736 | dashdash@^1.12.0: | ||
1737 | version "1.14.1" | ||
1738 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" | ||
1739 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= | ||
1740 | dependencies: | ||
1741 | assert-plus "^1.0.0" | ||
1742 | 1963 | ||
1743 | date-now@^0.1.4: | 1964 | cyclist@^1.0.1: |
1744 | version "0.1.4" | 1965 | version "1.0.1" |
1745 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" | 1966 | resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" |
1746 | integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= | 1967 | integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= |
1747 | 1968 | ||
1748 | debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: | 1969 | debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: |
1749 | version "2.6.9" | 1970 | version "2.6.9" |
1750 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" | 1971 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" |
1751 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== | 1972 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== |
1752 | dependencies: | 1973 | dependencies: |
1753 | ms "2.0.0" | 1974 | ms "2.0.0" |
1754 | 1975 | ||
1755 | debug@^3.1.0, debug@^3.2.6: | 1976 | debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: |
1756 | version "3.2.6" | 1977 | version "4.2.0" |
1757 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" | 1978 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" |
1758 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== | 1979 | integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== |
1980 | dependencies: | ||
1981 | ms "2.1.2" | ||
1982 | |||
1983 | decamelize-keys@^1.1.0: | ||
1984 | version "1.1.0" | ||
1985 | resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" | ||
1986 | integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= | ||
1759 | dependencies: | 1987 | dependencies: |
1760 | ms "^2.1.1" | 1988 | decamelize "^1.1.0" |
1989 | map-obj "^1.0.0" | ||
1761 | 1990 | ||
1762 | decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: | 1991 | decamelize@^1.1.0, decamelize@^1.2.0: |
1763 | version "1.2.0" | 1992 | version "1.2.0" |
1764 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" | 1993 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" |
1765 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= | 1994 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= |
@@ -1769,17 +1998,12 @@ decode-uri-component@^0.2.0: | |||
1769 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" | 1998 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" |
1770 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= | 1999 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= |
1771 | 2000 | ||
1772 | deep-extend@^0.6.0: | 2001 | deep-is@^0.1.3: |
1773 | version "0.6.0" | ||
1774 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" | ||
1775 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== | ||
1776 | |||
1777 | deep-is@~0.1.3: | ||
1778 | version "0.1.3" | 2002 | version "0.1.3" |
1779 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" | 2003 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" |
1780 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= | 2004 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= |
1781 | 2005 | ||
1782 | define-properties@^1.1.2: | 2006 | define-properties@^1.1.3: |
1783 | version "1.1.3" | 2007 | version "1.1.3" |
1784 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" | 2008 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" |
1785 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== | 2009 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== |
@@ -1808,40 +2032,18 @@ define-property@^2.0.2: | |||
1808 | is-descriptor "^1.0.2" | 2032 | is-descriptor "^1.0.2" |
1809 | isobject "^3.0.1" | 2033 | isobject "^3.0.1" |
1810 | 2034 | ||
1811 | defined@^1.0.0: | ||
1812 | version "1.0.0" | ||
1813 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" | ||
1814 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= | ||
1815 | |||
1816 | delayed-stream@~1.0.0: | ||
1817 | version "1.0.0" | ||
1818 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" | ||
1819 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= | ||
1820 | |||
1821 | delegates@^1.0.0: | ||
1822 | version "1.0.0" | ||
1823 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" | ||
1824 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= | ||
1825 | |||
1826 | des.js@^1.0.0: | 2035 | des.js@^1.0.0: |
1827 | version "1.0.0" | 2036 | version "1.0.1" |
1828 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" | 2037 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" |
1829 | integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= | 2038 | integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== |
1830 | dependencies: | 2039 | dependencies: |
1831 | inherits "^2.0.1" | 2040 | inherits "^2.0.1" |
1832 | minimalistic-assert "^1.0.0" | 2041 | minimalistic-assert "^1.0.0" |
1833 | 2042 | ||
1834 | detect-indent@^4.0.0: | 2043 | detect-file@^1.0.0: |
1835 | version "4.0.0" | 2044 | version "1.0.0" |
1836 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" | 2045 | resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" |
1837 | integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= | 2046 | integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= |
1838 | dependencies: | ||
1839 | repeating "^2.0.0" | ||
1840 | |||
1841 | detect-libc@^1.0.2: | ||
1842 | version "1.0.3" | ||
1843 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" | ||
1844 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= | ||
1845 | 2047 | ||
1846 | diffie-hellman@^5.0.0: | 2048 | diffie-hellman@^5.0.0: |
1847 | version "5.0.3" | 2049 | version "5.0.3" |
@@ -1852,7 +2054,14 @@ diffie-hellman@^5.0.0: | |||
1852 | miller-rabin "^4.0.0" | 2054 | miller-rabin "^4.0.0" |
1853 | randombytes "^2.0.0" | 2055 | randombytes "^2.0.0" |
1854 | 2056 | ||
1855 | doctrine@1.5.0, doctrine@^1.2.2: | 2057 | dir-glob@^3.0.1: |
2058 | version "3.0.1" | ||
2059 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" | ||
2060 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== | ||
2061 | dependencies: | ||
2062 | path-type "^4.0.0" | ||
2063 | |||
2064 | doctrine@1.5.0: | ||
1856 | version "1.5.0" | 2065 | version "1.5.0" |
1857 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" | 2066 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" |
1858 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= | 2067 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= |
@@ -1860,35 +2069,70 @@ doctrine@1.5.0, doctrine@^1.2.2: | |||
1860 | esutils "^2.0.2" | 2069 | esutils "^2.0.2" |
1861 | isarray "^1.0.0" | 2070 | isarray "^1.0.0" |
1862 | 2071 | ||
1863 | doctrine@^2.1.0: | 2072 | doctrine@^3.0.0: |
1864 | version "2.1.0" | 2073 | version "3.0.0" |
1865 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" | 2074 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" |
1866 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== | 2075 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== |
1867 | dependencies: | 2076 | dependencies: |
1868 | esutils "^2.0.2" | 2077 | esutils "^2.0.2" |
1869 | 2078 | ||
2079 | dom-serializer@0: | ||
2080 | version "0.2.2" | ||
2081 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" | ||
2082 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== | ||
2083 | dependencies: | ||
2084 | domelementtype "^2.0.1" | ||
2085 | entities "^2.0.0" | ||
2086 | |||
1870 | domain-browser@^1.1.1: | 2087 | domain-browser@^1.1.1: |
1871 | version "1.2.0" | 2088 | version "1.2.0" |
1872 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" | 2089 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" |
1873 | integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== | 2090 | integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== |
1874 | 2091 | ||
1875 | ecc-jsbn@~0.1.1: | 2092 | domelementtype@1, domelementtype@^1.3.1: |
1876 | version "0.1.2" | 2093 | version "1.3.1" |
1877 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" | 2094 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" |
1878 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= | 2095 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== |
2096 | |||
2097 | domelementtype@^2.0.1: | ||
2098 | version "2.0.2" | ||
2099 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" | ||
2100 | integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== | ||
2101 | |||
2102 | domhandler@^2.3.0: | ||
2103 | version "2.4.2" | ||
2104 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" | ||
2105 | integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== | ||
1879 | dependencies: | 2106 | dependencies: |
1880 | jsbn "~0.1.0" | 2107 | domelementtype "1" |
1881 | safer-buffer "^2.1.0" | 2108 | |
2109 | domutils@^1.5.1: | ||
2110 | version "1.7.0" | ||
2111 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" | ||
2112 | integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== | ||
2113 | dependencies: | ||
2114 | dom-serializer "0" | ||
2115 | domelementtype "1" | ||
2116 | |||
2117 | duplexify@^3.4.2, duplexify@^3.6.0: | ||
2118 | version "3.7.1" | ||
2119 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" | ||
2120 | integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== | ||
2121 | dependencies: | ||
2122 | end-of-stream "^1.0.0" | ||
2123 | inherits "^2.0.1" | ||
2124 | readable-stream "^2.0.0" | ||
2125 | stream-shift "^1.0.0" | ||
1882 | 2126 | ||
1883 | electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: | 2127 | electron-to-chromium@^1.3.570: |
1884 | version "1.3.135" | 2128 | version "1.3.570" |
1885 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.135.tgz#f5799b95f2bcd8de17cde47d63392d83a4477041" | 2129 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" |
1886 | integrity sha512-xXLNstRdVsisPF3pL3H9TVZo2XkMILfqtD6RiWIUmDK2sFX1Bjwqmd8LBp0Kuo2FgKO63JXPoEVGm8WyYdwP0Q== | 2130 | integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== |
1887 | 2131 | ||
1888 | elliptic@^6.0.0: | 2132 | elliptic@^6.5.3: |
1889 | version "6.4.1" | 2133 | version "6.5.3" |
1890 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" | 2134 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" |
1891 | integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== | 2135 | integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== |
1892 | dependencies: | 2136 | dependencies: |
1893 | bn.js "^4.4.0" | 2137 | bn.js "^4.4.0" |
1894 | brorand "^1.0.1" | 2138 | brorand "^1.0.1" |
@@ -1898,325 +2142,284 @@ elliptic@^6.0.0: | |||
1898 | minimalistic-assert "^1.0.0" | 2142 | minimalistic-assert "^1.0.0" |
1899 | minimalistic-crypto-utils "^1.0.0" | 2143 | minimalistic-crypto-utils "^1.0.0" |
1900 | 2144 | ||
1901 | emojis-list@^2.0.0: | 2145 | emoji-regex@^7.0.1: |
1902 | version "2.1.0" | 2146 | version "7.0.3" |
1903 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" | 2147 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" |
1904 | integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= | 2148 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== |
2149 | |||
2150 | emoji-regex@^8.0.0: | ||
2151 | version "8.0.0" | ||
2152 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" | ||
2153 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== | ||
2154 | |||
2155 | emojis-list@^3.0.0: | ||
2156 | version "3.0.0" | ||
2157 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" | ||
2158 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== | ||
1905 | 2159 | ||
1906 | enhanced-resolve@^3.4.0: | 2160 | end-of-stream@^1.0.0, end-of-stream@^1.1.0: |
1907 | version "3.4.1" | 2161 | version "1.4.4" |
1908 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" | 2162 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" |
1909 | integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= | 2163 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== |
2164 | dependencies: | ||
2165 | once "^1.4.0" | ||
2166 | |||
2167 | enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: | ||
2168 | version "4.3.0" | ||
2169 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" | ||
2170 | integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== | ||
1910 | dependencies: | 2171 | dependencies: |
1911 | graceful-fs "^4.1.2" | 2172 | graceful-fs "^4.1.2" |
1912 | memory-fs "^0.4.0" | 2173 | memory-fs "^0.5.0" |
1913 | object-assign "^4.0.1" | 2174 | tapable "^1.0.0" |
1914 | tapable "^0.2.7" | 2175 | |
2176 | enquirer@^2.3.5: | ||
2177 | version "2.3.6" | ||
2178 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" | ||
2179 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== | ||
2180 | dependencies: | ||
2181 | ansi-colors "^4.1.1" | ||
1915 | 2182 | ||
1916 | errno@^0.1.3: | 2183 | entities@^1.1.1: |
2184 | version "1.1.2" | ||
2185 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" | ||
2186 | integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== | ||
2187 | |||
2188 | entities@^2.0.0: | ||
2189 | version "2.0.3" | ||
2190 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" | ||
2191 | integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== | ||
2192 | |||
2193 | errno@^0.1.3, errno@~0.1.7: | ||
1917 | version "0.1.7" | 2194 | version "0.1.7" |
1918 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" | 2195 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" |
1919 | integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== | 2196 | integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== |
1920 | dependencies: | 2197 | dependencies: |
1921 | prr "~1.0.1" | 2198 | prr "~1.0.1" |
1922 | 2199 | ||
1923 | error-ex@^1.2.0: | 2200 | error-ex@^1.2.0, error-ex@^1.3.1: |
1924 | version "1.3.2" | 2201 | version "1.3.2" |
1925 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" | 2202 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" |
1926 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== | 2203 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== |
1927 | dependencies: | 2204 | dependencies: |
1928 | is-arrayish "^0.2.1" | 2205 | is-arrayish "^0.2.1" |
1929 | 2206 | ||
1930 | es-abstract@^1.7.0: | 2207 | es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: |
1931 | version "1.13.0" | 2208 | version "1.17.6" |
1932 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" | 2209 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" |
1933 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== | 2210 | integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== |
1934 | dependencies: | 2211 | dependencies: |
1935 | es-to-primitive "^1.2.0" | 2212 | es-to-primitive "^1.2.1" |
1936 | function-bind "^1.1.1" | 2213 | function-bind "^1.1.1" |
1937 | has "^1.0.3" | 2214 | has "^1.0.3" |
1938 | is-callable "^1.1.4" | 2215 | has-symbols "^1.0.1" |
1939 | is-regex "^1.0.4" | 2216 | is-callable "^1.2.0" |
1940 | object-keys "^1.0.12" | 2217 | is-regex "^1.1.0" |
1941 | 2218 | object-inspect "^1.7.0" | |
1942 | es-to-primitive@^1.2.0: | 2219 | object-keys "^1.1.1" |
1943 | version "1.2.0" | 2220 | object.assign "^4.1.0" |
1944 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" | 2221 | string.prototype.trimend "^1.0.1" |
1945 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== | 2222 | string.prototype.trimstart "^1.0.1" |
2223 | |||
2224 | es-abstract@^1.18.0-next.0: | ||
2225 | version "1.18.0-next.0" | ||
2226 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" | ||
2227 | integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== | ||
2228 | dependencies: | ||
2229 | es-to-primitive "^1.2.1" | ||
2230 | function-bind "^1.1.1" | ||
2231 | has "^1.0.3" | ||
2232 | has-symbols "^1.0.1" | ||
2233 | is-callable "^1.2.0" | ||
2234 | is-negative-zero "^2.0.0" | ||
2235 | is-regex "^1.1.1" | ||
2236 | object-inspect "^1.8.0" | ||
2237 | object-keys "^1.1.1" | ||
2238 | object.assign "^4.1.0" | ||
2239 | string.prototype.trimend "^1.0.1" | ||
2240 | string.prototype.trimstart "^1.0.1" | ||
2241 | |||
2242 | es-to-primitive@^1.2.1: | ||
2243 | version "1.2.1" | ||
2244 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" | ||
2245 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== | ||
1946 | dependencies: | 2246 | dependencies: |
1947 | is-callable "^1.1.4" | 2247 | is-callable "^1.1.4" |
1948 | is-date-object "^1.0.1" | 2248 | is-date-object "^1.0.1" |
1949 | is-symbol "^1.0.2" | 2249 | is-symbol "^1.0.2" |
1950 | 2250 | ||
1951 | es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: | 2251 | escalade@^3.1.0: |
1952 | version "0.10.50" | 2252 | version "3.1.0" |
1953 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778" | 2253 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" |
1954 | integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw== | 2254 | integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== |
1955 | dependencies: | ||
1956 | es6-iterator "~2.0.3" | ||
1957 | es6-symbol "~3.1.1" | ||
1958 | next-tick "^1.0.0" | ||
1959 | |||
1960 | es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: | ||
1961 | version "2.0.3" | ||
1962 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" | ||
1963 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= | ||
1964 | dependencies: | ||
1965 | d "1" | ||
1966 | es5-ext "^0.10.35" | ||
1967 | es6-symbol "^3.1.1" | ||
1968 | |||
1969 | es6-map@^0.1.3: | ||
1970 | version "0.1.5" | ||
1971 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" | ||
1972 | integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= | ||
1973 | dependencies: | ||
1974 | d "1" | ||
1975 | es5-ext "~0.10.14" | ||
1976 | es6-iterator "~2.0.1" | ||
1977 | es6-set "~0.1.5" | ||
1978 | es6-symbol "~3.1.1" | ||
1979 | event-emitter "~0.3.5" | ||
1980 | |||
1981 | es6-set@~0.1.5: | ||
1982 | version "0.1.5" | ||
1983 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" | ||
1984 | integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= | ||
1985 | dependencies: | ||
1986 | d "1" | ||
1987 | es5-ext "~0.10.14" | ||
1988 | es6-iterator "~2.0.1" | ||
1989 | es6-symbol "3.1.1" | ||
1990 | event-emitter "~0.3.5" | ||
1991 | |||
1992 | es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: | ||
1993 | version "3.1.1" | ||
1994 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" | ||
1995 | integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= | ||
1996 | dependencies: | ||
1997 | d "1" | ||
1998 | es5-ext "~0.10.14" | ||
1999 | |||
2000 | es6-weak-map@^2.0.1: | ||
2001 | version "2.0.2" | ||
2002 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" | ||
2003 | integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8= | ||
2004 | dependencies: | ||
2005 | d "1" | ||
2006 | es5-ext "^0.10.14" | ||
2007 | es6-iterator "^2.0.1" | ||
2008 | es6-symbol "^3.1.1" | ||
2009 | 2255 | ||
2010 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: | 2256 | escape-string-regexp@^1.0.5: |
2011 | version "1.0.5" | 2257 | version "1.0.5" |
2012 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" | 2258 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" |
2013 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= | 2259 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= |
2014 | 2260 | ||
2015 | escope@^3.6.0: | 2261 | eslint-config-airbnb-base@^14.2.0: |
2016 | version "3.6.0" | 2262 | version "14.2.0" |
2017 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" | 2263 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" |
2018 | integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= | 2264 | integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== |
2019 | dependencies: | ||
2020 | es6-map "^0.1.3" | ||
2021 | es6-weak-map "^2.0.1" | ||
2022 | esrecurse "^4.1.0" | ||
2023 | estraverse "^4.1.1" | ||
2024 | |||
2025 | eslint-config-airbnb-base@^12.1.0: | ||
2026 | version "12.1.0" | ||
2027 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" | ||
2028 | integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA== | ||
2029 | dependencies: | 2265 | dependencies: |
2030 | eslint-restricted-globals "^0.1.1" | 2266 | confusing-browser-globals "^1.0.9" |
2267 | object.assign "^4.1.0" | ||
2268 | object.entries "^1.1.2" | ||
2031 | 2269 | ||
2032 | eslint-import-resolver-node@^0.3.2: | 2270 | eslint-import-resolver-node@^0.3.3: |
2033 | version "0.3.2" | 2271 | version "0.3.4" |
2034 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" | 2272 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" |
2035 | integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== | 2273 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== |
2036 | dependencies: | 2274 | dependencies: |
2037 | debug "^2.6.9" | 2275 | debug "^2.6.9" |
2038 | resolve "^1.5.0" | 2276 | resolve "^1.13.1" |
2039 | 2277 | ||
2040 | eslint-module-utils@^2.4.0: | 2278 | eslint-module-utils@^2.6.0: |
2041 | version "2.4.0" | 2279 | version "2.6.0" |
2042 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" | 2280 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" |
2043 | integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw== | 2281 | integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== |
2044 | dependencies: | 2282 | dependencies: |
2045 | debug "^2.6.8" | 2283 | debug "^2.6.9" |
2046 | pkg-dir "^2.0.0" | 2284 | pkg-dir "^2.0.0" |
2047 | 2285 | ||
2048 | eslint-plugin-import@^2.8.0: | 2286 | eslint-plugin-import@^2.22.0: |
2049 | version "2.17.2" | 2287 | version "2.22.0" |
2050 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz#d227d5c6dc67eca71eb590d2bb62fb38d86e9fcb" | 2288 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" |
2051 | integrity sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g== | 2289 | integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== |
2052 | dependencies: | 2290 | dependencies: |
2053 | array-includes "^3.0.3" | 2291 | array-includes "^3.1.1" |
2292 | array.prototype.flat "^1.2.3" | ||
2054 | contains-path "^0.1.0" | 2293 | contains-path "^0.1.0" |
2055 | debug "^2.6.9" | 2294 | debug "^2.6.9" |
2056 | doctrine "1.5.0" | 2295 | doctrine "1.5.0" |
2057 | eslint-import-resolver-node "^0.3.2" | 2296 | eslint-import-resolver-node "^0.3.3" |
2058 | eslint-module-utils "^2.4.0" | 2297 | eslint-module-utils "^2.6.0" |
2059 | has "^1.0.3" | 2298 | has "^1.0.3" |
2060 | lodash "^4.17.11" | ||
2061 | minimatch "^3.0.4" | 2299 | minimatch "^3.0.4" |
2300 | object.values "^1.1.1" | ||
2062 | read-pkg-up "^2.0.0" | 2301 | read-pkg-up "^2.0.0" |
2063 | resolve "^1.10.0" | 2302 | resolve "^1.17.0" |
2064 | 2303 | tsconfig-paths "^3.9.0" | |
2065 | eslint-restricted-globals@^0.1.1: | ||
2066 | version "0.1.1" | ||
2067 | resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" | ||
2068 | integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= | ||
2069 | 2304 | ||
2070 | eslint-scope@^3.7.1: | 2305 | eslint-scope@^4.0.3: |
2071 | version "3.7.3" | 2306 | version "4.0.3" |
2072 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" | 2307 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" |
2073 | integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== | 2308 | integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== |
2074 | dependencies: | 2309 | dependencies: |
2075 | esrecurse "^4.1.0" | 2310 | esrecurse "^4.1.0" |
2076 | estraverse "^4.1.1" | 2311 | estraverse "^4.1.1" |
2077 | 2312 | ||
2078 | eslint-visitor-keys@^1.0.0: | 2313 | eslint-scope@^5.1.0: |
2079 | version "1.0.0" | 2314 | version "5.1.1" |
2080 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" | 2315 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" |
2081 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== | 2316 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== |
2082 | 2317 | dependencies: | |
2083 | eslint@^2.7.0: | 2318 | esrecurse "^4.3.0" |
2084 | version "2.13.1" | 2319 | estraverse "^4.1.1" |
2085 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11" | 2320 | |
2086 | integrity sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE= | 2321 | eslint-utils@^2.1.0: |
2087 | dependencies: | 2322 | version "2.1.0" |
2088 | chalk "^1.1.3" | 2323 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" |
2089 | concat-stream "^1.4.6" | 2324 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== |
2090 | debug "^2.1.1" | 2325 | dependencies: |
2091 | doctrine "^1.2.2" | 2326 | eslint-visitor-keys "^1.1.0" |
2092 | es6-map "^0.1.3" | 2327 | |
2093 | escope "^3.6.0" | 2328 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: |
2094 | espree "^3.1.6" | 2329 | version "1.3.0" |
2095 | estraverse "^4.2.0" | 2330 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" |
2096 | esutils "^2.0.2" | 2331 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== |
2097 | file-entry-cache "^1.1.1" | 2332 | |
2098 | glob "^7.0.3" | 2333 | eslint@^7.9.0: |
2099 | globals "^9.2.0" | 2334 | version "7.9.0" |
2100 | ignore "^3.1.2" | 2335 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.9.0.tgz#522aeccc5c3a19017cf0cb46ebfd660a79acf337" |
2101 | imurmurhash "^0.1.4" | 2336 | integrity sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA== |
2102 | inquirer "^0.12.0" | 2337 | dependencies: |
2103 | is-my-json-valid "^2.10.0" | 2338 | "@babel/code-frame" "^7.0.0" |
2104 | is-resolvable "^1.0.0" | 2339 | "@eslint/eslintrc" "^0.1.3" |
2105 | js-yaml "^3.5.1" | 2340 | ajv "^6.10.0" |
2106 | json-stable-stringify "^1.0.0" | 2341 | chalk "^4.0.0" |
2107 | levn "^0.3.0" | 2342 | cross-spawn "^7.0.2" |
2108 | lodash "^4.0.0" | 2343 | debug "^4.0.1" |
2109 | mkdirp "^0.5.0" | 2344 | doctrine "^3.0.0" |
2110 | optionator "^0.8.1" | 2345 | enquirer "^2.3.5" |
2111 | path-is-absolute "^1.0.0" | 2346 | eslint-scope "^5.1.0" |
2112 | path-is-inside "^1.0.1" | 2347 | eslint-utils "^2.1.0" |
2113 | pluralize "^1.2.1" | 2348 | eslint-visitor-keys "^1.3.0" |
2114 | progress "^1.1.8" | 2349 | espree "^7.3.0" |
2115 | require-uncached "^1.0.2" | 2350 | esquery "^1.2.0" |
2116 | shelljs "^0.6.0" | ||
2117 | strip-json-comments "~1.0.1" | ||
2118 | table "^3.7.8" | ||
2119 | text-table "~0.2.0" | ||
2120 | user-home "^2.0.0" | ||
2121 | |||
2122 | eslint@^4.16.0: | ||
2123 | version "4.19.1" | ||
2124 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" | ||
2125 | integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== | ||
2126 | dependencies: | ||
2127 | ajv "^5.3.0" | ||
2128 | babel-code-frame "^6.22.0" | ||
2129 | chalk "^2.1.0" | ||
2130 | concat-stream "^1.6.0" | ||
2131 | cross-spawn "^5.1.0" | ||
2132 | debug "^3.1.0" | ||
2133 | doctrine "^2.1.0" | ||
2134 | eslint-scope "^3.7.1" | ||
2135 | eslint-visitor-keys "^1.0.0" | ||
2136 | espree "^3.5.4" | ||
2137 | esquery "^1.0.0" | ||
2138 | esutils "^2.0.2" | 2351 | esutils "^2.0.2" |
2139 | file-entry-cache "^2.0.0" | 2352 | file-entry-cache "^5.0.1" |
2140 | functional-red-black-tree "^1.0.1" | 2353 | functional-red-black-tree "^1.0.1" |
2141 | glob "^7.1.2" | 2354 | glob-parent "^5.0.0" |
2142 | globals "^11.0.1" | 2355 | globals "^12.1.0" |
2143 | ignore "^3.3.3" | 2356 | ignore "^4.0.6" |
2357 | import-fresh "^3.0.0" | ||
2144 | imurmurhash "^0.1.4" | 2358 | imurmurhash "^0.1.4" |
2145 | inquirer "^3.0.6" | 2359 | is-glob "^4.0.0" |
2146 | is-resolvable "^1.0.0" | 2360 | js-yaml "^3.13.1" |
2147 | js-yaml "^3.9.1" | ||
2148 | json-stable-stringify-without-jsonify "^1.0.1" | 2361 | json-stable-stringify-without-jsonify "^1.0.1" |
2149 | levn "^0.3.0" | 2362 | levn "^0.4.1" |
2150 | lodash "^4.17.4" | 2363 | lodash "^4.17.19" |
2151 | minimatch "^3.0.2" | 2364 | minimatch "^3.0.4" |
2152 | mkdirp "^0.5.1" | ||
2153 | natural-compare "^1.4.0" | 2365 | natural-compare "^1.4.0" |
2154 | optionator "^0.8.2" | 2366 | optionator "^0.9.1" |
2155 | path-is-inside "^1.0.2" | ||
2156 | pluralize "^7.0.0" | ||
2157 | progress "^2.0.0" | 2367 | progress "^2.0.0" |
2158 | regexpp "^1.0.1" | 2368 | regexpp "^3.1.0" |
2159 | require-uncached "^1.0.3" | 2369 | semver "^7.2.1" |
2160 | semver "^5.3.0" | 2370 | strip-ansi "^6.0.0" |
2161 | strip-ansi "^4.0.0" | 2371 | strip-json-comments "^3.1.0" |
2162 | strip-json-comments "~2.0.1" | 2372 | table "^5.2.3" |
2163 | table "4.0.2" | 2373 | text-table "^0.2.0" |
2164 | text-table "~0.2.0" | 2374 | v8-compile-cache "^2.0.3" |
2165 | 2375 | ||
2166 | espree@^3.1.6, espree@^3.5.4: | 2376 | espree@^7.3.0: |
2167 | version "3.5.4" | 2377 | version "7.3.0" |
2168 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" | 2378 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" |
2169 | integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== | 2379 | integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== |
2170 | dependencies: | 2380 | dependencies: |
2171 | acorn "^5.5.0" | 2381 | acorn "^7.4.0" |
2172 | acorn-jsx "^3.0.0" | 2382 | acorn-jsx "^5.2.0" |
2173 | 2383 | eslint-visitor-keys "^1.3.0" | |
2174 | esprima@^2.6.0: | ||
2175 | version "2.7.3" | ||
2176 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" | ||
2177 | integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= | ||
2178 | 2384 | ||
2179 | esprima@^4.0.0: | 2385 | esprima@^4.0.0: |
2180 | version "4.0.1" | 2386 | version "4.0.1" |
2181 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" | 2387 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" |
2182 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== | 2388 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== |
2183 | 2389 | ||
2184 | esquery@^1.0.0: | 2390 | esquery@^1.2.0: |
2185 | version "1.0.1" | 2391 | version "1.3.1" |
2186 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" | 2392 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" |
2187 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== | 2393 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== |
2188 | dependencies: | 2394 | dependencies: |
2189 | estraverse "^4.0.0" | 2395 | estraverse "^5.1.0" |
2190 | 2396 | ||
2191 | esrecurse@^4.1.0: | 2397 | esrecurse@^4.1.0, esrecurse@^4.3.0: |
2192 | version "4.2.1" | 2398 | version "4.3.0" |
2193 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" | 2399 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" |
2194 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== | 2400 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== |
2195 | dependencies: | 2401 | dependencies: |
2196 | estraverse "^4.1.0" | 2402 | estraverse "^5.2.0" |
2197 | 2403 | ||
2198 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: | 2404 | estraverse@^4.1.1: |
2199 | version "4.2.0" | 2405 | version "4.3.0" |
2200 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" | 2406 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" |
2201 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= | 2407 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== |
2202 | 2408 | ||
2203 | esutils@^2.0.2: | 2409 | estraverse@^5.1.0, estraverse@^5.2.0: |
2204 | version "2.0.2" | 2410 | version "5.2.0" |
2205 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" | 2411 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" |
2206 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= | 2412 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== |
2207 | 2413 | ||
2208 | event-emitter@~0.3.5: | 2414 | esutils@^2.0.2: |
2209 | version "0.3.5" | 2415 | version "2.0.3" |
2210 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" | 2416 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" |
2211 | integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= | 2417 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== |
2212 | dependencies: | ||
2213 | d "1" | ||
2214 | es5-ext "~0.10.14" | ||
2215 | 2418 | ||
2216 | events@^3.0.0: | 2419 | events@^3.0.0: |
2217 | version "3.0.0" | 2420 | version "3.2.0" |
2218 | resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" | 2421 | resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" |
2219 | integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== | 2422 | integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== |
2220 | 2423 | ||
2221 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: | 2424 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: |
2222 | version "1.0.3" | 2425 | version "1.0.3" |
@@ -2226,23 +2429,12 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: | |||
2226 | md5.js "^1.3.4" | 2429 | md5.js "^1.3.4" |
2227 | safe-buffer "^5.1.1" | 2430 | safe-buffer "^5.1.1" |
2228 | 2431 | ||
2229 | execa@^0.7.0: | 2432 | execall@^2.0.0: |
2230 | version "0.7.0" | 2433 | version "2.0.0" |
2231 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" | 2434 | resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" |
2232 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= | 2435 | integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== |
2233 | dependencies: | 2436 | dependencies: |
2234 | cross-spawn "^5.0.1" | 2437 | clone-regexp "^2.1.0" |
2235 | get-stream "^3.0.0" | ||
2236 | is-stream "^1.1.0" | ||
2237 | npm-run-path "^2.0.0" | ||
2238 | p-finally "^1.0.0" | ||
2239 | signal-exit "^3.0.0" | ||
2240 | strip-eof "^1.0.0" | ||
2241 | |||
2242 | exit-hook@^1.0.0: | ||
2243 | version "1.1.1" | ||
2244 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" | ||
2245 | integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= | ||
2246 | 2438 | ||
2247 | expand-brackets@^2.1.4: | 2439 | expand-brackets@^2.1.4: |
2248 | version "2.1.4" | 2440 | version "2.1.4" |
@@ -2257,6 +2449,13 @@ expand-brackets@^2.1.4: | |||
2257 | snapdragon "^0.8.1" | 2449 | snapdragon "^0.8.1" |
2258 | to-regex "^3.0.1" | 2450 | to-regex "^3.0.1" |
2259 | 2451 | ||
2452 | expand-tilde@^2.0.0, expand-tilde@^2.0.2: | ||
2453 | version "2.0.2" | ||
2454 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" | ||
2455 | integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= | ||
2456 | dependencies: | ||
2457 | homedir-polyfill "^1.0.1" | ||
2458 | |||
2260 | extend-shallow@^2.0.1: | 2459 | extend-shallow@^2.0.1: |
2261 | version "2.0.1" | 2460 | version "2.0.1" |
2262 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" | 2461 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" |
@@ -2272,20 +2471,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: | |||
2272 | assign-symbols "^1.0.0" | 2471 | assign-symbols "^1.0.0" |
2273 | is-extendable "^1.0.1" | 2472 | is-extendable "^1.0.1" |
2274 | 2473 | ||
2275 | extend@~3.0.2: | 2474 | extend@^3.0.0: |
2276 | version "3.0.2" | 2475 | version "3.0.2" |
2277 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" | 2476 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" |
2278 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== | 2477 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== |
2279 | 2478 | ||
2280 | external-editor@^2.0.4: | ||
2281 | version "2.2.0" | ||
2282 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" | ||
2283 | integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== | ||
2284 | dependencies: | ||
2285 | chardet "^0.4.0" | ||
2286 | iconv-lite "^0.4.17" | ||
2287 | tmp "^0.0.33" | ||
2288 | |||
2289 | extglob@^2.0.4: | 2479 | extglob@^2.0.4: |
2290 | version "2.0.4" | 2480 | version "2.0.4" |
2291 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" | 2481 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" |
@@ -2300,81 +2490,56 @@ extglob@^2.0.4: | |||
2300 | snapdragon "^0.8.1" | 2490 | snapdragon "^0.8.1" |
2301 | to-regex "^3.0.1" | 2491 | to-regex "^3.0.1" |
2302 | 2492 | ||
2303 | extract-text-webpack-plugin@^3.0.2: | 2493 | fast-deep-equal@^3.1.1: |
2304 | version "3.0.2" | 2494 | version "3.1.3" |
2305 | resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" | 2495 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" |
2306 | integrity sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ== | 2496 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== |
2307 | dependencies: | ||
2308 | async "^2.4.1" | ||
2309 | loader-utils "^1.1.0" | ||
2310 | schema-utils "^0.3.0" | ||
2311 | webpack-sources "^1.0.1" | ||
2312 | 2497 | ||
2313 | extsprintf@1.3.0: | 2498 | fast-glob@^3.1.1, fast-glob@^3.2.4: |
2314 | version "1.3.0" | 2499 | version "3.2.4" |
2315 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" | 2500 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" |
2316 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= | 2501 | integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== |
2317 | 2502 | dependencies: | |
2318 | extsprintf@^1.2.0: | 2503 | "@nodelib/fs.stat" "^2.0.2" |
2319 | version "1.4.0" | 2504 | "@nodelib/fs.walk" "^1.2.3" |
2320 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" | 2505 | glob-parent "^5.1.0" |
2321 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= | 2506 | merge2 "^1.3.0" |
2322 | 2507 | micromatch "^4.0.2" | |
2323 | fast-deep-equal@^1.0.0: | 2508 | picomatch "^2.2.1" |
2324 | version "1.1.0" | ||
2325 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" | ||
2326 | integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= | ||
2327 | |||
2328 | fast-deep-equal@^2.0.1: | ||
2329 | version "2.0.1" | ||
2330 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" | ||
2331 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= | ||
2332 | 2509 | ||
2333 | fast-json-stable-stringify@^2.0.0: | 2510 | fast-json-stable-stringify@^2.0.0: |
2334 | version "2.0.0" | 2511 | version "2.1.0" |
2335 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" | 2512 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" |
2336 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= | 2513 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== |
2337 | 2514 | ||
2338 | fast-levenshtein@~2.0.4: | 2515 | fast-levenshtein@^2.0.6: |
2339 | version "2.0.6" | 2516 | version "2.0.6" |
2340 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" | 2517 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" |
2341 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= | 2518 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= |
2342 | 2519 | ||
2343 | fastparse@^1.1.1: | 2520 | fastest-levenshtein@^1.0.12: |
2344 | version "1.1.2" | 2521 | version "1.0.12" |
2345 | resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" | 2522 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" |
2346 | integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== | 2523 | integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== |
2347 | |||
2348 | figures@^1.3.5: | ||
2349 | version "1.7.0" | ||
2350 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" | ||
2351 | integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= | ||
2352 | dependencies: | ||
2353 | escape-string-regexp "^1.0.5" | ||
2354 | object-assign "^4.1.0" | ||
2355 | 2524 | ||
2356 | figures@^2.0.0: | 2525 | fastq@^1.6.0: |
2357 | version "2.0.0" | 2526 | version "1.8.0" |
2358 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" | 2527 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" |
2359 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= | 2528 | integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== |
2360 | dependencies: | 2529 | dependencies: |
2361 | escape-string-regexp "^1.0.5" | 2530 | reusify "^1.0.4" |
2362 | 2531 | ||
2363 | file-entry-cache@^1.1.1: | 2532 | figgy-pudding@^3.5.1: |
2364 | version "1.3.1" | 2533 | version "3.5.2" |
2365 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" | 2534 | resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" |
2366 | integrity sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g= | 2535 | integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== |
2367 | dependencies: | ||
2368 | flat-cache "^1.2.1" | ||
2369 | object-assign "^4.0.1" | ||
2370 | 2536 | ||
2371 | file-entry-cache@^2.0.0: | 2537 | file-entry-cache@^5.0.1: |
2372 | version "2.0.0" | 2538 | version "5.0.1" |
2373 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" | 2539 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" |
2374 | integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= | 2540 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== |
2375 | dependencies: | 2541 | dependencies: |
2376 | flat-cache "^1.2.1" | 2542 | flat-cache "^2.0.1" |
2377 | object-assign "^4.0.1" | ||
2378 | 2543 | ||
2379 | file-loader@^1.1.6: | 2544 | file-loader@^1.1.6: |
2380 | version "1.1.11" | 2545 | version "1.1.11" |
@@ -2384,6 +2549,11 @@ file-loader@^1.1.6: | |||
2384 | loader-utils "^1.0.2" | 2549 | loader-utils "^1.0.2" |
2385 | schema-utils "^0.4.5" | 2550 | schema-utils "^0.4.5" |
2386 | 2551 | ||
2552 | file-uri-to-path@1.0.0: | ||
2553 | version "1.0.0" | ||
2554 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" | ||
2555 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== | ||
2556 | |||
2387 | fill-range@^4.0.0: | 2557 | fill-range@^4.0.0: |
2388 | version "4.0.0" | 2558 | version "4.0.0" |
2389 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" | 2559 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" |
@@ -2394,22 +2564,30 @@ fill-range@^4.0.0: | |||
2394 | repeat-string "^1.6.1" | 2564 | repeat-string "^1.6.1" |
2395 | to-regex-range "^2.1.0" | 2565 | to-regex-range "^2.1.0" |
2396 | 2566 | ||
2397 | find-cache-dir@^1.0.0: | 2567 | fill-range@^7.0.1: |
2398 | version "1.0.0" | 2568 | version "7.0.1" |
2399 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" | 2569 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" |
2400 | integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= | 2570 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== |
2571 | dependencies: | ||
2572 | to-regex-range "^5.0.1" | ||
2573 | |||
2574 | find-cache-dir@^2.1.0: | ||
2575 | version "2.1.0" | ||
2576 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" | ||
2577 | integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== | ||
2401 | dependencies: | 2578 | dependencies: |
2402 | commondir "^1.0.1" | 2579 | commondir "^1.0.1" |
2403 | make-dir "^1.0.0" | 2580 | make-dir "^2.0.0" |
2404 | pkg-dir "^2.0.0" | 2581 | pkg-dir "^3.0.0" |
2405 | 2582 | ||
2406 | find-up@^1.0.0: | 2583 | find-cache-dir@^3.3.1: |
2407 | version "1.1.2" | 2584 | version "3.3.1" |
2408 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" | 2585 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" |
2409 | integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= | 2586 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== |
2410 | dependencies: | 2587 | dependencies: |
2411 | path-exists "^2.0.0" | 2588 | commondir "^1.0.1" |
2412 | pinkie-promise "^2.0.0" | 2589 | make-dir "^3.0.2" |
2590 | pkg-dir "^4.1.0" | ||
2413 | 2591 | ||
2414 | find-up@^2.0.0, find-up@^2.1.0: | 2592 | find-up@^2.0.0, find-up@^2.1.0: |
2415 | version "2.1.0" | 2593 | version "2.1.0" |
@@ -2418,57 +2596,63 @@ find-up@^2.0.0, find-up@^2.1.0: | |||
2418 | dependencies: | 2596 | dependencies: |
2419 | locate-path "^2.0.0" | 2597 | locate-path "^2.0.0" |
2420 | 2598 | ||
2421 | flat-cache@^1.2.1: | 2599 | find-up@^3.0.0: |
2422 | version "1.3.4" | 2600 | version "3.0.0" |
2423 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" | 2601 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" |
2424 | integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== | 2602 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== |
2425 | dependencies: | 2603 | dependencies: |
2426 | circular-json "^0.3.1" | 2604 | locate-path "^3.0.0" |
2427 | graceful-fs "^4.1.2" | ||
2428 | rimraf "~2.6.2" | ||
2429 | write "^0.2.1" | ||
2430 | 2605 | ||
2431 | flatten@^1.0.2: | 2606 | find-up@^4.0.0, find-up@^4.1.0: |
2432 | version "1.0.2" | 2607 | version "4.1.0" |
2433 | resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" | 2608 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" |
2434 | integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= | 2609 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== |
2610 | dependencies: | ||
2611 | locate-path "^5.0.0" | ||
2612 | path-exists "^4.0.0" | ||
2435 | 2613 | ||
2436 | for-in@^0.1.3: | 2614 | findup-sync@^3.0.0: |
2437 | version "0.1.8" | 2615 | version "3.0.0" |
2438 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" | 2616 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" |
2439 | integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= | 2617 | integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== |
2618 | dependencies: | ||
2619 | detect-file "^1.0.0" | ||
2620 | is-glob "^4.0.0" | ||
2621 | micromatch "^3.0.4" | ||
2622 | resolve-dir "^1.0.1" | ||
2440 | 2623 | ||
2441 | for-in@^1.0.1, for-in@^1.0.2: | 2624 | flat-cache@^2.0.1: |
2442 | version "1.0.2" | 2625 | version "2.0.1" |
2443 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" | 2626 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" |
2444 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= | 2627 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== |
2628 | dependencies: | ||
2629 | flatted "^2.0.0" | ||
2630 | rimraf "2.6.3" | ||
2631 | write "1.0.3" | ||
2445 | 2632 | ||
2446 | for-own@^1.0.0: | 2633 | flatted@^2.0.0: |
2447 | version "1.0.0" | 2634 | version "2.0.2" |
2448 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" | 2635 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" |
2449 | integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= | 2636 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== |
2637 | |||
2638 | flush-write-stream@^1.0.0: | ||
2639 | version "1.1.1" | ||
2640 | resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" | ||
2641 | integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== | ||
2450 | dependencies: | 2642 | dependencies: |
2451 | for-in "^1.0.1" | 2643 | inherits "^2.0.3" |
2644 | readable-stream "^2.3.6" | ||
2452 | 2645 | ||
2453 | forever-agent@~0.6.1: | 2646 | for-in@^1.0.2: |
2454 | version "0.6.1" | 2647 | version "1.0.2" |
2455 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" | 2648 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" |
2456 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= | 2649 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= |
2457 | 2650 | ||
2458 | fork-awesome@^1.1.7: | 2651 | fork-awesome@^1.1.7: |
2459 | version "1.1.7" | 2652 | version "1.1.7" |
2460 | resolved "https://registry.yarnpkg.com/fork-awesome/-/fork-awesome-1.1.7.tgz#1427da1cac3d1713046ee88427e5fcecb9501d21" | 2653 | resolved "https://registry.yarnpkg.com/fork-awesome/-/fork-awesome-1.1.7.tgz#1427da1cac3d1713046ee88427e5fcecb9501d21" |
2461 | integrity sha512-IHI7XCSXrKfUIWslse8c/PaaVDT1oBaYge+ju40ihL2ooiQeBpTr4wvIXhgTd2NuhntlvX+M5jYHAPTzNlmv0g== | 2654 | integrity sha512-IHI7XCSXrKfUIWslse8c/PaaVDT1oBaYge+ju40ihL2ooiQeBpTr4wvIXhgTd2NuhntlvX+M5jYHAPTzNlmv0g== |
2462 | 2655 | ||
2463 | form-data@~2.3.2: | ||
2464 | version "2.3.3" | ||
2465 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" | ||
2466 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== | ||
2467 | dependencies: | ||
2468 | asynckit "^0.4.0" | ||
2469 | combined-stream "^1.0.6" | ||
2470 | mime-types "^2.1.12" | ||
2471 | |||
2472 | fragment-cache@^0.2.1: | 2656 | fragment-cache@^0.2.1: |
2473 | version "0.2.1" | 2657 | version "0.2.1" |
2474 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" | 2658 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" |
@@ -2476,28 +2660,30 @@ fragment-cache@^0.2.1: | |||
2476 | dependencies: | 2660 | dependencies: |
2477 | map-cache "^0.2.2" | 2661 | map-cache "^0.2.2" |
2478 | 2662 | ||
2479 | front-matter@2.1.2: | 2663 | from2@^2.1.0: |
2480 | version "2.1.2" | 2664 | version "2.3.0" |
2481 | resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb" | 2665 | resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" |
2482 | integrity sha1-91mDufL0E75ljJPf172M5AePXNs= | 2666 | integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= |
2483 | dependencies: | 2667 | dependencies: |
2484 | js-yaml "^3.4.6" | 2668 | inherits "^2.0.1" |
2669 | readable-stream "^2.0.0" | ||
2485 | 2670 | ||
2486 | fs-extra@^3.0.1: | 2671 | fs-minipass@^2.0.0: |
2487 | version "3.0.1" | 2672 | version "2.1.0" |
2488 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" | 2673 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" |
2489 | integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= | 2674 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== |
2490 | dependencies: | 2675 | dependencies: |
2491 | graceful-fs "^4.1.2" | 2676 | minipass "^3.0.0" |
2492 | jsonfile "^3.0.0" | ||
2493 | universalify "^0.1.0" | ||
2494 | 2677 | ||
2495 | fs-minipass@^1.2.5: | 2678 | fs-write-stream-atomic@^1.0.8: |
2496 | version "1.2.6" | 2679 | version "1.0.10" |
2497 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" | 2680 | resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" |
2498 | integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== | 2681 | integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= |
2499 | dependencies: | 2682 | dependencies: |
2500 | minipass "^2.2.1" | 2683 | graceful-fs "^4.1.2" |
2684 | iferr "^0.1.5" | ||
2685 | imurmurhash "^0.1.4" | ||
2686 | readable-stream "1 || 2" | ||
2501 | 2687 | ||
2502 | fs.realpath@^1.0.0: | 2688 | fs.realpath@^1.0.0: |
2503 | version "1.0.0" | 2689 | version "1.0.0" |
@@ -2505,22 +2691,17 @@ fs.realpath@^1.0.0: | |||
2505 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= | 2691 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= |
2506 | 2692 | ||
2507 | fsevents@^1.2.7: | 2693 | fsevents@^1.2.7: |
2508 | version "1.2.9" | 2694 | version "1.2.13" |
2509 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" | 2695 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" |
2510 | integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== | 2696 | integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== |
2511 | dependencies: | 2697 | dependencies: |
2698 | bindings "^1.5.0" | ||
2512 | nan "^2.12.1" | 2699 | nan "^2.12.1" |
2513 | node-pre-gyp "^0.12.0" | ||
2514 | 2700 | ||
2515 | fstream@^1.0.0, fstream@^1.0.12: | 2701 | fsevents@~2.1.2: |
2516 | version "1.0.12" | 2702 | version "2.1.3" |
2517 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" | 2703 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" |
2518 | integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== | 2704 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== |
2519 | dependencies: | ||
2520 | graceful-fs "^4.1.2" | ||
2521 | inherits "~2.0.0" | ||
2522 | mkdirp ">=0.5 0" | ||
2523 | rimraf "2" | ||
2524 | 2705 | ||
2525 | function-bind@^1.1.1: | 2706 | function-bind@^1.1.1: |
2526 | version "1.1.1" | 2707 | version "1.1.1" |
@@ -2532,68 +2713,26 @@ functional-red-black-tree@^1.0.1: | |||
2532 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" | 2713 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" |
2533 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= | 2714 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= |
2534 | 2715 | ||
2535 | gauge@~2.7.3: | 2716 | gensync@^1.0.0-beta.1: |
2536 | version "2.7.4" | 2717 | version "1.0.0-beta.1" |
2537 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" | 2718 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" |
2538 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= | 2719 | integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== |
2539 | dependencies: | ||
2540 | aproba "^1.0.3" | ||
2541 | console-control-strings "^1.0.0" | ||
2542 | has-unicode "^2.0.0" | ||
2543 | object-assign "^4.1.0" | ||
2544 | signal-exit "^3.0.0" | ||
2545 | string-width "^1.0.1" | ||
2546 | strip-ansi "^3.0.1" | ||
2547 | wide-align "^1.1.0" | ||
2548 | |||
2549 | gaze@^1.0.0: | ||
2550 | version "1.1.3" | ||
2551 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" | ||
2552 | integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== | ||
2553 | dependencies: | ||
2554 | globule "^1.0.0" | ||
2555 | 2720 | ||
2556 | generate-function@^2.0.0: | 2721 | get-caller-file@^2.0.1: |
2557 | version "2.3.1" | 2722 | version "2.0.5" |
2558 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" | 2723 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" |
2559 | integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== | 2724 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== |
2560 | dependencies: | ||
2561 | is-property "^1.0.2" | ||
2562 | 2725 | ||
2563 | generate-object-property@^1.1.0: | 2726 | get-stdin@^8.0.0: |
2564 | version "1.2.0" | 2727 | version "8.0.0" |
2565 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" | 2728 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" |
2566 | integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= | 2729 | integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== |
2567 | dependencies: | ||
2568 | is-property "^1.0.0" | ||
2569 | |||
2570 | get-caller-file@^1.0.1: | ||
2571 | version "1.0.3" | ||
2572 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" | ||
2573 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== | ||
2574 | |||
2575 | get-stdin@^4.0.1: | ||
2576 | version "4.0.1" | ||
2577 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" | ||
2578 | integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= | ||
2579 | |||
2580 | get-stream@^3.0.0: | ||
2581 | version "3.0.0" | ||
2582 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" | ||
2583 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= | ||
2584 | 2730 | ||
2585 | get-value@^2.0.3, get-value@^2.0.6: | 2731 | get-value@^2.0.3, get-value@^2.0.6: |
2586 | version "2.0.6" | 2732 | version "2.0.6" |
2587 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" | 2733 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" |
2588 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= | 2734 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= |
2589 | 2735 | ||
2590 | getpass@^0.1.1: | ||
2591 | version "0.1.7" | ||
2592 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" | ||
2593 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= | ||
2594 | dependencies: | ||
2595 | assert-plus "^1.0.0" | ||
2596 | |||
2597 | glob-parent@^3.1.0: | 2736 | glob-parent@^3.1.0: |
2598 | version "3.1.0" | 2737 | version "3.1.0" |
2599 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" | 2738 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" |
@@ -2602,10 +2741,17 @@ glob-parent@^3.1.0: | |||
2602 | is-glob "^3.1.0" | 2741 | is-glob "^3.1.0" |
2603 | path-dirname "^1.0.0" | 2742 | path-dirname "^1.0.0" |
2604 | 2743 | ||
2605 | glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: | 2744 | glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: |
2606 | version "7.1.4" | 2745 | version "5.1.1" |
2607 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" | 2746 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" |
2608 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== | 2747 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== |
2748 | dependencies: | ||
2749 | is-glob "^4.0.1" | ||
2750 | |||
2751 | glob@^7.1.3, glob@^7.1.4: | ||
2752 | version "7.1.6" | ||
2753 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" | ||
2754 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== | ||
2609 | dependencies: | 2755 | dependencies: |
2610 | fs.realpath "^1.0.0" | 2756 | fs.realpath "^1.0.0" |
2611 | inflight "^1.0.4" | 2757 | inflight "^1.0.4" |
@@ -2614,81 +2760,102 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: | |||
2614 | once "^1.3.0" | 2760 | once "^1.3.0" |
2615 | path-is-absolute "^1.0.0" | 2761 | path-is-absolute "^1.0.0" |
2616 | 2762 | ||
2617 | globals@^11.0.1: | 2763 | global-modules@^1.0.0: |
2618 | version "11.12.0" | 2764 | version "1.0.0" |
2619 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" | 2765 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" |
2620 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== | 2766 | integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== |
2767 | dependencies: | ||
2768 | global-prefix "^1.0.1" | ||
2769 | is-windows "^1.0.1" | ||
2770 | resolve-dir "^1.0.0" | ||
2621 | 2771 | ||
2622 | globals@^9.18.0, globals@^9.2.0: | 2772 | global-modules@^2.0.0: |
2623 | version "9.18.0" | 2773 | version "2.0.0" |
2624 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" | 2774 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" |
2625 | integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== | 2775 | integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== |
2776 | dependencies: | ||
2777 | global-prefix "^3.0.0" | ||
2626 | 2778 | ||
2627 | globule@^1.0.0: | 2779 | global-prefix@^1.0.1: |
2628 | version "1.2.1" | 2780 | version "1.0.2" |
2629 | resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" | 2781 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" |
2630 | integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== | 2782 | integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= |
2631 | dependencies: | 2783 | dependencies: |
2632 | glob "~7.1.1" | 2784 | expand-tilde "^2.0.2" |
2633 | lodash "~4.17.10" | 2785 | homedir-polyfill "^1.0.1" |
2634 | minimatch "~3.0.2" | 2786 | ini "^1.3.4" |
2787 | is-windows "^1.0.1" | ||
2788 | which "^1.2.14" | ||
2635 | 2789 | ||
2636 | gonzales-pe-sl@^4.2.3: | 2790 | global-prefix@^3.0.0: |
2637 | version "4.2.3" | 2791 | version "3.0.0" |
2638 | resolved "https://registry.yarnpkg.com/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz#6a868bc380645f141feeb042c6f97fcc71b59fe6" | 2792 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" |
2639 | integrity sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y= | 2793 | integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== |
2640 | dependencies: | 2794 | dependencies: |
2641 | minimist "1.1.x" | 2795 | ini "^1.3.5" |
2796 | kind-of "^6.0.2" | ||
2797 | which "^1.3.1" | ||
2642 | 2798 | ||
2643 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: | 2799 | globals@^11.1.0: |
2644 | version "4.1.15" | 2800 | version "11.12.0" |
2645 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" | 2801 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" |
2646 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== | 2802 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== |
2647 | 2803 | ||
2648 | har-schema@^2.0.0: | 2804 | globals@^12.1.0: |
2649 | version "2.0.0" | 2805 | version "12.4.0" |
2650 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" | 2806 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" |
2651 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= | 2807 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== |
2808 | dependencies: | ||
2809 | type-fest "^0.8.1" | ||
2652 | 2810 | ||
2653 | har-validator@~5.1.0: | 2811 | globby@^11.0.1: |
2654 | version "5.1.3" | 2812 | version "11.0.1" |
2655 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" | 2813 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" |
2656 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== | 2814 | integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== |
2657 | dependencies: | 2815 | dependencies: |
2658 | ajv "^6.5.5" | 2816 | array-union "^2.1.0" |
2659 | har-schema "^2.0.0" | 2817 | dir-glob "^3.0.1" |
2818 | fast-glob "^3.1.1" | ||
2819 | ignore "^5.1.4" | ||
2820 | merge2 "^1.3.0" | ||
2821 | slash "^3.0.0" | ||
2660 | 2822 | ||
2661 | has-ansi@^2.0.0: | 2823 | globjoin@^0.1.4: |
2662 | version "2.0.0" | 2824 | version "0.1.4" |
2663 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" | 2825 | resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" |
2664 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= | 2826 | integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= |
2827 | |||
2828 | gonzales-pe@^4.3.0: | ||
2829 | version "4.3.0" | ||
2830 | resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" | ||
2831 | integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== | ||
2665 | dependencies: | 2832 | dependencies: |
2666 | ansi-regex "^2.0.0" | 2833 | minimist "^1.2.5" |
2667 | 2834 | ||
2668 | has-flag@^1.0.0: | 2835 | graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: |
2669 | version "1.0.0" | 2836 | version "4.2.4" |
2670 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" | 2837 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" |
2671 | integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= | 2838 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== |
2672 | 2839 | ||
2673 | has-flag@^2.0.0: | 2840 | hard-rejection@^2.1.0: |
2674 | version "2.0.0" | 2841 | version "2.1.0" |
2675 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" | 2842 | resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" |
2676 | integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= | 2843 | integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== |
2677 | 2844 | ||
2678 | has-flag@^3.0.0: | 2845 | has-flag@^3.0.0: |
2679 | version "3.0.0" | 2846 | version "3.0.0" |
2680 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" | 2847 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" |
2681 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= | 2848 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= |
2682 | 2849 | ||
2683 | has-symbols@^1.0.0: | 2850 | has-flag@^4.0.0: |
2684 | version "1.0.0" | 2851 | version "4.0.0" |
2685 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" | 2852 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" |
2686 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= | 2853 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== |
2687 | 2854 | ||
2688 | has-unicode@^2.0.0: | 2855 | has-symbols@^1.0.1: |
2689 | version "2.0.1" | 2856 | version "1.0.1" |
2690 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" | 2857 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" |
2691 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= | 2858 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== |
2692 | 2859 | ||
2693 | has-value@^0.3.1: | 2860 | has-value@^0.3.1: |
2694 | version "0.3.1" | 2861 | version "0.3.1" |
@@ -2721,7 +2888,7 @@ has-values@^1.0.0: | |||
2721 | is-number "^3.0.0" | 2888 | is-number "^3.0.0" |
2722 | kind-of "^4.0.0" | 2889 | kind-of "^4.0.0" |
2723 | 2890 | ||
2724 | has@^1.0.1, has@^1.0.3: | 2891 | has@^1.0.3: |
2725 | version "1.0.3" | 2892 | version "1.0.3" |
2726 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" | 2893 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" |
2727 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== | 2894 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== |
@@ -2729,12 +2896,13 @@ has@^1.0.1, has@^1.0.3: | |||
2729 | function-bind "^1.1.1" | 2896 | function-bind "^1.1.1" |
2730 | 2897 | ||
2731 | hash-base@^3.0.0: | 2898 | hash-base@^3.0.0: |
2732 | version "3.0.4" | 2899 | version "3.1.0" |
2733 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" | 2900 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" |
2734 | integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= | 2901 | integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== |
2735 | dependencies: | 2902 | dependencies: |
2736 | inherits "^2.0.1" | 2903 | inherits "^2.0.4" |
2737 | safe-buffer "^5.0.1" | 2904 | readable-stream "^3.6.0" |
2905 | safe-buffer "^5.2.0" | ||
2738 | 2906 | ||
2739 | hash.js@^1.0.0, hash.js@^1.0.3: | 2907 | hash.js@^1.0.0, hash.js@^1.0.3: |
2740 | version "1.1.7" | 2908 | version "1.1.7" |
@@ -2753,100 +2921,107 @@ hmac-drbg@^1.0.0: | |||
2753 | minimalistic-assert "^1.0.0" | 2921 | minimalistic-assert "^1.0.0" |
2754 | minimalistic-crypto-utils "^1.0.1" | 2922 | minimalistic-crypto-utils "^1.0.1" |
2755 | 2923 | ||
2756 | home-or-tmp@^2.0.0: | 2924 | homedir-polyfill@^1.0.1: |
2757 | version "2.0.0" | 2925 | version "1.0.3" |
2758 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" | 2926 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" |
2759 | integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= | 2927 | integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== |
2760 | dependencies: | 2928 | dependencies: |
2761 | os-homedir "^1.0.0" | 2929 | parse-passwd "^1.0.0" |
2762 | os-tmpdir "^1.0.1" | ||
2763 | 2930 | ||
2764 | hosted-git-info@^2.1.4: | 2931 | hosted-git-info@^2.1.4: |
2765 | version "2.7.1" | 2932 | version "2.8.8" |
2766 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" | 2933 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" |
2767 | integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== | 2934 | integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== |
2768 | |||
2769 | html-comment-regex@^1.1.0: | ||
2770 | version "1.1.2" | ||
2771 | resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" | ||
2772 | integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== | ||
2773 | 2935 | ||
2774 | http-signature@~1.2.0: | 2936 | html-tags@^3.1.0: |
2775 | version "1.2.0" | 2937 | version "3.1.0" |
2776 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" | 2938 | resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" |
2777 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= | 2939 | integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== |
2778 | dependencies: | 2940 | |
2779 | assert-plus "^1.0.0" | 2941 | htmlparser2@^3.10.0: |
2780 | jsprim "^1.2.2" | 2942 | version "3.10.1" |
2781 | sshpk "^1.7.0" | 2943 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" |
2944 | integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== | ||
2945 | dependencies: | ||
2946 | domelementtype "^1.3.1" | ||
2947 | domhandler "^2.3.0" | ||
2948 | domutils "^1.5.1" | ||
2949 | entities "^1.1.1" | ||
2950 | inherits "^2.0.1" | ||
2951 | readable-stream "^3.1.1" | ||
2782 | 2952 | ||
2783 | https-browserify@^1.0.0: | 2953 | https-browserify@^1.0.0: |
2784 | version "1.0.0" | 2954 | version "1.0.0" |
2785 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" | 2955 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" |
2786 | integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= | 2956 | integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= |
2787 | 2957 | ||
2788 | iconv-lite@^0.4.17, iconv-lite@^0.4.4: | 2958 | icss-utils@^4.0.0, icss-utils@^4.1.1: |
2789 | version "0.4.24" | 2959 | version "4.1.1" |
2790 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" | 2960 | resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" |
2791 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== | 2961 | integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== |
2792 | dependencies: | ||
2793 | safer-buffer ">= 2.1.2 < 3" | ||
2794 | |||
2795 | icss-replace-symbols@^1.1.0: | ||
2796 | version "1.1.0" | ||
2797 | resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" | ||
2798 | integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= | ||
2799 | |||
2800 | icss-utils@^2.1.0: | ||
2801 | version "2.1.0" | ||
2802 | resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" | ||
2803 | integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= | ||
2804 | dependencies: | 2962 | dependencies: |
2805 | postcss "^6.0.1" | 2963 | postcss "^7.0.14" |
2806 | 2964 | ||
2807 | ieee754@^1.1.4: | 2965 | ieee754@^1.1.4: |
2808 | version "1.1.13" | 2966 | version "1.1.13" |
2809 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" | 2967 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" |
2810 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== | 2968 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== |
2811 | 2969 | ||
2812 | ignore-walk@^3.0.1: | 2970 | iferr@^0.1.5: |
2813 | version "3.0.1" | 2971 | version "0.1.5" |
2814 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" | 2972 | resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" |
2815 | integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== | 2973 | integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= |
2974 | |||
2975 | ignore@^4.0.6: | ||
2976 | version "4.0.6" | ||
2977 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" | ||
2978 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== | ||
2979 | |||
2980 | ignore@^5.1.4, ignore@^5.1.8: | ||
2981 | version "5.1.8" | ||
2982 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" | ||
2983 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== | ||
2984 | |||
2985 | import-fresh@^3.0.0, import-fresh@^3.2.1: | ||
2986 | version "3.2.1" | ||
2987 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" | ||
2988 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== | ||
2816 | dependencies: | 2989 | dependencies: |
2817 | minimatch "^3.0.4" | 2990 | parent-module "^1.0.0" |
2991 | resolve-from "^4.0.0" | ||
2818 | 2992 | ||
2819 | ignore@^3.1.2, ignore@^3.3.3: | 2993 | import-lazy@^4.0.0: |
2820 | version "3.3.10" | 2994 | version "4.0.0" |
2821 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" | 2995 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" |
2822 | integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== | 2996 | integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== |
2997 | |||
2998 | import-local@^2.0.0: | ||
2999 | version "2.0.0" | ||
3000 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" | ||
3001 | integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== | ||
3002 | dependencies: | ||
3003 | pkg-dir "^3.0.0" | ||
3004 | resolve-cwd "^2.0.0" | ||
2823 | 3005 | ||
2824 | imurmurhash@^0.1.4: | 3006 | imurmurhash@^0.1.4: |
2825 | version "0.1.4" | 3007 | version "0.1.4" |
2826 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" | 3008 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" |
2827 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= | 3009 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= |
2828 | 3010 | ||
2829 | in-publish@^2.0.0: | 3011 | indent-string@^4.0.0: |
2830 | version "2.0.0" | 3012 | version "4.0.0" |
2831 | resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" | 3013 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" |
2832 | integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= | 3014 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== |
2833 | |||
2834 | indent-string@^2.1.0: | ||
2835 | version "2.1.0" | ||
2836 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" | ||
2837 | integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= | ||
2838 | dependencies: | ||
2839 | repeating "^2.0.0" | ||
2840 | 3015 | ||
2841 | indexes-of@^1.0.1: | 3016 | indexes-of@^1.0.1: |
2842 | version "1.0.1" | 3017 | version "1.0.1" |
2843 | resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" | 3018 | resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" |
2844 | integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= | 3019 | integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= |
2845 | 3020 | ||
2846 | indexof@0.0.1: | 3021 | infer-owner@^1.0.3, infer-owner@^1.0.4: |
2847 | version "0.0.1" | 3022 | version "1.0.4" |
2848 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" | 3023 | resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" |
2849 | integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= | 3024 | integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== |
2850 | 3025 | ||
2851 | inflight@^1.0.4: | 3026 | inflight@^1.0.4: |
2852 | version "1.0.6" | 3027 | version "1.0.6" |
@@ -2856,82 +3031,38 @@ inflight@^1.0.4: | |||
2856 | once "^1.3.0" | 3031 | once "^1.3.0" |
2857 | wrappy "1" | 3032 | wrappy "1" |
2858 | 3033 | ||
2859 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: | 3034 | inherits@2, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: |
2860 | version "2.0.3" | 3035 | version "2.0.4" |
2861 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" | 3036 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" |
2862 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= | 3037 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== |
2863 | 3038 | ||
2864 | inherits@2.0.1: | 3039 | inherits@2.0.1: |
2865 | version "2.0.1" | 3040 | version "2.0.1" |
2866 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" | 3041 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" |
2867 | integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= | 3042 | integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= |
2868 | 3043 | ||
2869 | ini@~1.3.0: | 3044 | inherits@2.0.3: |
3045 | version "2.0.3" | ||
3046 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" | ||
3047 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= | ||
3048 | |||
3049 | ini@^1.3.4, ini@^1.3.5: | ||
2870 | version "1.3.5" | 3050 | version "1.3.5" |
2871 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" | 3051 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" |
2872 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== | 3052 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== |
2873 | 3053 | ||
2874 | inquirer@^0.12.0: | 3054 | interpret@^1.4.0: |
2875 | version "0.12.0" | 3055 | version "1.4.0" |
2876 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" | 3056 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" |
2877 | integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34= | 3057 | integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== |
2878 | dependencies: | ||
2879 | ansi-escapes "^1.1.0" | ||
2880 | ansi-regex "^2.0.0" | ||
2881 | chalk "^1.0.0" | ||
2882 | cli-cursor "^1.0.1" | ||
2883 | cli-width "^2.0.0" | ||
2884 | figures "^1.3.5" | ||
2885 | lodash "^4.3.0" | ||
2886 | readline2 "^1.0.1" | ||
2887 | run-async "^0.1.0" | ||
2888 | rx-lite "^3.1.2" | ||
2889 | string-width "^1.0.1" | ||
2890 | strip-ansi "^3.0.0" | ||
2891 | through "^2.3.6" | ||
2892 | |||
2893 | inquirer@^3.0.6: | ||
2894 | version "3.3.0" | ||
2895 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" | ||
2896 | integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== | ||
2897 | dependencies: | ||
2898 | ansi-escapes "^3.0.0" | ||
2899 | chalk "^2.0.0" | ||
2900 | cli-cursor "^2.1.0" | ||
2901 | cli-width "^2.0.0" | ||
2902 | external-editor "^2.0.4" | ||
2903 | figures "^2.0.0" | ||
2904 | lodash "^4.3.0" | ||
2905 | mute-stream "0.0.7" | ||
2906 | run-async "^2.2.0" | ||
2907 | rx-lite "^4.0.8" | ||
2908 | rx-lite-aggregates "^4.0.8" | ||
2909 | string-width "^2.1.0" | ||
2910 | strip-ansi "^4.0.0" | ||
2911 | through "^2.3.6" | ||
2912 | |||
2913 | interpret@^1.0.0: | ||
2914 | version "1.2.0" | ||
2915 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" | ||
2916 | integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== | ||
2917 | 3058 | ||
2918 | invariant@^2.2.2: | 3059 | invariant@^2.2.2, invariant@^2.2.4: |
2919 | version "2.2.4" | 3060 | version "2.2.4" |
2920 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" | 3061 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" |
2921 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== | 3062 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== |
2922 | dependencies: | 3063 | dependencies: |
2923 | loose-envify "^1.0.0" | 3064 | loose-envify "^1.0.0" |
2924 | 3065 | ||
2925 | invert-kv@^1.0.0: | ||
2926 | version "1.0.0" | ||
2927 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" | ||
2928 | integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= | ||
2929 | |||
2930 | is-absolute-url@^2.0.0: | ||
2931 | version "2.1.0" | ||
2932 | resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" | ||
2933 | integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= | ||
2934 | |||
2935 | is-accessor-descriptor@^0.1.6: | 3066 | is-accessor-descriptor@^0.1.6: |
2936 | version "0.1.6" | 3067 | version "0.1.6" |
2937 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" | 3068 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" |
@@ -2946,6 +3077,24 @@ is-accessor-descriptor@^1.0.0: | |||
2946 | dependencies: | 3077 | dependencies: |
2947 | kind-of "^6.0.0" | 3078 | kind-of "^6.0.0" |
2948 | 3079 | ||
3080 | is-alphabetical@^1.0.0: | ||
3081 | version "1.0.4" | ||
3082 | resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" | ||
3083 | integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== | ||
3084 | |||
3085 | is-alphanumeric@^1.0.0: | ||
3086 | version "1.0.0" | ||
3087 | resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" | ||
3088 | integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= | ||
3089 | |||
3090 | is-alphanumerical@^1.0.0: | ||
3091 | version "1.0.4" | ||
3092 | resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" | ||
3093 | integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== | ||
3094 | dependencies: | ||
3095 | is-alphabetical "^1.0.0" | ||
3096 | is-decimal "^1.0.0" | ||
3097 | |||
2949 | is-arrayish@^0.2.1: | 3098 | is-arrayish@^0.2.1: |
2950 | version "0.2.1" | 3099 | version "0.2.1" |
2951 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" | 3100 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" |
@@ -2958,15 +3107,27 @@ is-binary-path@^1.0.0: | |||
2958 | dependencies: | 3107 | dependencies: |
2959 | binary-extensions "^1.0.0" | 3108 | binary-extensions "^1.0.0" |
2960 | 3109 | ||
3110 | is-binary-path@~2.1.0: | ||
3111 | version "2.1.0" | ||
3112 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" | ||
3113 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== | ||
3114 | dependencies: | ||
3115 | binary-extensions "^2.0.0" | ||
3116 | |||
2961 | is-buffer@^1.1.5: | 3117 | is-buffer@^1.1.5: |
2962 | version "1.1.6" | 3118 | version "1.1.6" |
2963 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" | 3119 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" |
2964 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== | 3120 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== |
2965 | 3121 | ||
2966 | is-callable@^1.1.4: | 3122 | is-buffer@^2.0.0: |
2967 | version "1.1.4" | 3123 | version "2.0.4" |
2968 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" | 3124 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" |
2969 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== | 3125 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== |
3126 | |||
3127 | is-callable@^1.1.4, is-callable@^1.2.0: | ||
3128 | version "1.2.2" | ||
3129 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" | ||
3130 | integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== | ||
2970 | 3131 | ||
2971 | is-data-descriptor@^0.1.4: | 3132 | is-data-descriptor@^0.1.4: |
2972 | version "0.1.4" | 3133 | version "0.1.4" |
@@ -2983,9 +3144,14 @@ is-data-descriptor@^1.0.0: | |||
2983 | kind-of "^6.0.0" | 3144 | kind-of "^6.0.0" |
2984 | 3145 | ||
2985 | is-date-object@^1.0.1: | 3146 | is-date-object@^1.0.1: |
2986 | version "1.0.1" | 3147 | version "1.0.2" |
2987 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" | 3148 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" |
2988 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= | 3149 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== |
3150 | |||
3151 | is-decimal@^1.0.0, is-decimal@^1.0.2: | ||
3152 | version "1.0.4" | ||
3153 | resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" | ||
3154 | integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== | ||
2989 | 3155 | ||
2990 | is-descriptor@^0.1.0: | 3156 | is-descriptor@^0.1.0: |
2991 | version "0.1.6" | 3157 | version "0.1.6" |
@@ -3022,25 +3188,16 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: | |||
3022 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" | 3188 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" |
3023 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= | 3189 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= |
3024 | 3190 | ||
3025 | is-finite@^1.0.0: | ||
3026 | version "1.0.2" | ||
3027 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" | ||
3028 | integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= | ||
3029 | dependencies: | ||
3030 | number-is-nan "^1.0.0" | ||
3031 | |||
3032 | is-fullwidth-code-point@^1.0.0: | ||
3033 | version "1.0.0" | ||
3034 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" | ||
3035 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= | ||
3036 | dependencies: | ||
3037 | number-is-nan "^1.0.0" | ||
3038 | |||
3039 | is-fullwidth-code-point@^2.0.0: | 3191 | is-fullwidth-code-point@^2.0.0: |
3040 | version "2.0.0" | 3192 | version "2.0.0" |
3041 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" | 3193 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" |
3042 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= | 3194 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= |
3043 | 3195 | ||
3196 | is-fullwidth-code-point@^3.0.0: | ||
3197 | version "3.0.0" | ||
3198 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" | ||
3199 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== | ||
3200 | |||
3044 | is-glob@^3.1.0: | 3201 | is-glob@^3.1.0: |
3045 | version "3.1.0" | 3202 | version "3.1.0" |
3046 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" | 3203 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" |
@@ -3048,28 +3205,22 @@ is-glob@^3.1.0: | |||
3048 | dependencies: | 3205 | dependencies: |
3049 | is-extglob "^2.1.0" | 3206 | is-extglob "^2.1.0" |
3050 | 3207 | ||
3051 | is-glob@^4.0.0: | 3208 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: |
3052 | version "4.0.1" | 3209 | version "4.0.1" |
3053 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" | 3210 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" |
3054 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== | 3211 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== |
3055 | dependencies: | 3212 | dependencies: |
3056 | is-extglob "^2.1.1" | 3213 | is-extglob "^2.1.1" |
3057 | 3214 | ||
3058 | is-my-ip-valid@^1.0.0: | 3215 | is-hexadecimal@^1.0.0: |
3059 | version "1.0.0" | 3216 | version "1.0.4" |
3060 | resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" | 3217 | resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" |
3061 | integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== | 3218 | integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== |
3062 | 3219 | ||
3063 | is-my-json-valid@^2.10.0: | 3220 | is-negative-zero@^2.0.0: |
3064 | version "2.20.0" | 3221 | version "2.0.0" |
3065 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" | 3222 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" |
3066 | integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA== | 3223 | integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= |
3067 | dependencies: | ||
3068 | generate-function "^2.0.0" | ||
3069 | generate-object-property "^1.1.0" | ||
3070 | is-my-ip-valid "^1.0.0" | ||
3071 | jsonpointer "^4.0.0" | ||
3072 | xtend "^4.0.0" | ||
3073 | 3224 | ||
3074 | is-number@^3.0.0: | 3225 | is-number@^3.0.0: |
3075 | version "3.0.0" | 3226 | version "3.0.0" |
@@ -3078,74 +3229,77 @@ is-number@^3.0.0: | |||
3078 | dependencies: | 3229 | dependencies: |
3079 | kind-of "^3.0.2" | 3230 | kind-of "^3.0.2" |
3080 | 3231 | ||
3081 | is-plain-obj@^1.0.0: | 3232 | is-number@^7.0.0: |
3233 | version "7.0.0" | ||
3234 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" | ||
3235 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== | ||
3236 | |||
3237 | is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: | ||
3082 | version "1.1.0" | 3238 | version "1.1.0" |
3083 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" | 3239 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" |
3084 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= | 3240 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= |
3085 | 3241 | ||
3086 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: | 3242 | is-plain-obj@^2.0.0: |
3243 | version "2.1.0" | ||
3244 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" | ||
3245 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== | ||
3246 | |||
3247 | is-plain-object@^2.0.3, is-plain-object@^2.0.4: | ||
3087 | version "2.0.4" | 3248 | version "2.0.4" |
3088 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" | 3249 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" |
3089 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== | 3250 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== |
3090 | dependencies: | 3251 | dependencies: |
3091 | isobject "^3.0.1" | 3252 | isobject "^3.0.1" |
3092 | 3253 | ||
3093 | is-promise@^2.1.0: | 3254 | is-regex@^1.1.0, is-regex@^1.1.1: |
3094 | version "2.1.0" | 3255 | version "1.1.1" |
3095 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" | 3256 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" |
3096 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= | 3257 | integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== |
3097 | |||
3098 | is-property@^1.0.0, is-property@^1.0.2: | ||
3099 | version "1.0.2" | ||
3100 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" | ||
3101 | integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= | ||
3102 | |||
3103 | is-regex@^1.0.4: | ||
3104 | version "1.0.4" | ||
3105 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" | ||
3106 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= | ||
3107 | dependencies: | 3258 | dependencies: |
3108 | has "^1.0.1" | 3259 | has-symbols "^1.0.1" |
3109 | |||
3110 | is-resolvable@^1.0.0: | ||
3111 | version "1.1.0" | ||
3112 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" | ||
3113 | integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== | ||
3114 | |||
3115 | is-stream@^1.1.0: | ||
3116 | version "1.1.0" | ||
3117 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" | ||
3118 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= | ||
3119 | 3260 | ||
3120 | is-svg@^2.0.0: | 3261 | is-regexp@^2.0.0: |
3121 | version "2.1.0" | 3262 | version "2.1.0" |
3122 | resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" | 3263 | resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" |
3123 | integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= | 3264 | integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== |
3124 | dependencies: | 3265 | |
3125 | html-comment-regex "^1.1.0" | 3266 | is-string@^1.0.5: |
3267 | version "1.0.5" | ||
3268 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" | ||
3269 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== | ||
3126 | 3270 | ||
3127 | is-symbol@^1.0.2: | 3271 | is-symbol@^1.0.2: |
3128 | version "1.0.2" | 3272 | version "1.0.3" |
3129 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" | 3273 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" |
3130 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== | 3274 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== |
3131 | dependencies: | 3275 | dependencies: |
3132 | has-symbols "^1.0.0" | 3276 | has-symbols "^1.0.1" |
3133 | 3277 | ||
3134 | is-typedarray@~1.0.0: | 3278 | is-typedarray@^1.0.0: |
3135 | version "1.0.0" | 3279 | version "1.0.0" |
3136 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" | 3280 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" |
3137 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= | 3281 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= |
3138 | 3282 | ||
3139 | is-utf8@^0.2.0: | 3283 | is-whitespace-character@^1.0.0: |
3140 | version "0.2.1" | 3284 | version "1.0.4" |
3141 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" | 3285 | resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" |
3142 | integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= | 3286 | integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== |
3143 | 3287 | ||
3144 | is-windows@^1.0.2: | 3288 | is-windows@^1.0.1, is-windows@^1.0.2: |
3145 | version "1.0.2" | 3289 | version "1.0.2" |
3146 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" | 3290 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" |
3147 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== | 3291 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== |
3148 | 3292 | ||
3293 | is-word-character@^1.0.0: | ||
3294 | version "1.0.4" | ||
3295 | resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" | ||
3296 | integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== | ||
3297 | |||
3298 | is-wsl@^1.1.0: | ||
3299 | version "1.1.0" | ||
3300 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" | ||
3301 | integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= | ||
3302 | |||
3149 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: | 3303 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: |
3150 | version "1.0.0" | 3304 | version "1.0.0" |
3151 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" | 3305 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" |
@@ -3168,99 +3322,58 @@ isobject@^3.0.0, isobject@^3.0.1: | |||
3168 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" | 3322 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" |
3169 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= | 3323 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= |
3170 | 3324 | ||
3171 | isstream@~0.1.2: | 3325 | jest-worker@^26.3.0: |
3172 | version "0.1.2" | 3326 | version "26.3.0" |
3173 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" | 3327 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" |
3174 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= | 3328 | integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== |
3175 | 3329 | dependencies: | |
3176 | js-base64@^2.1.8, js-base64@^2.1.9: | 3330 | "@types/node" "*" |
3177 | version "2.5.1" | 3331 | merge-stream "^2.0.0" |
3178 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" | 3332 | supports-color "^7.0.0" |
3179 | integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== | ||
3180 | 3333 | ||
3181 | "js-tokens@^3.0.0 || ^4.0.0": | 3334 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: |
3182 | version "4.0.0" | 3335 | version "4.0.0" |
3183 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" | 3336 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" |
3184 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== | 3337 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== |
3185 | 3338 | ||
3186 | js-tokens@^3.0.2: | 3339 | js-yaml@^3.13.1: |
3187 | version "3.0.2" | 3340 | version "3.14.0" |
3188 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" | 3341 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" |
3189 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= | 3342 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== |
3190 | |||
3191 | js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.9.1: | ||
3192 | version "3.13.1" | ||
3193 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" | ||
3194 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== | ||
3195 | dependencies: | 3343 | dependencies: |
3196 | argparse "^1.0.7" | 3344 | argparse "^1.0.7" |
3197 | esprima "^4.0.0" | 3345 | esprima "^4.0.0" |
3198 | 3346 | ||
3199 | js-yaml@~3.7.0: | 3347 | jsesc@^2.5.1: |
3200 | version "3.7.0" | 3348 | version "2.5.2" |
3201 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" | 3349 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" |
3202 | integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= | 3350 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== |
3203 | dependencies: | ||
3204 | argparse "^1.0.7" | ||
3205 | esprima "^2.6.0" | ||
3206 | |||
3207 | jsbn@~0.1.0: | ||
3208 | version "0.1.1" | ||
3209 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" | ||
3210 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= | ||
3211 | |||
3212 | jsesc@^1.3.0: | ||
3213 | version "1.3.0" | ||
3214 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" | ||
3215 | integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= | ||
3216 | 3351 | ||
3217 | jsesc@~0.5.0: | 3352 | jsesc@~0.5.0: |
3218 | version "0.5.0" | 3353 | version "0.5.0" |
3219 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" | 3354 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" |
3220 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= | 3355 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= |
3221 | 3356 | ||
3222 | json-loader@^0.5.4: | 3357 | json-parse-better-errors@^1.0.2: |
3223 | version "0.5.7" | 3358 | version "1.0.2" |
3224 | resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" | 3359 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" |
3225 | integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== | 3360 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== |
3226 | 3361 | ||
3227 | json-schema-traverse@^0.3.0: | 3362 | json-parse-even-better-errors@^2.3.0: |
3228 | version "0.3.1" | 3363 | version "2.3.1" |
3229 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" | 3364 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" |
3230 | integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= | 3365 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== |
3231 | 3366 | ||
3232 | json-schema-traverse@^0.4.1: | 3367 | json-schema-traverse@^0.4.1: |
3233 | version "0.4.1" | 3368 | version "0.4.1" |
3234 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" | 3369 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" |
3235 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== | 3370 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== |
3236 | 3371 | ||
3237 | json-schema@0.2.3: | ||
3238 | version "0.2.3" | ||
3239 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" | ||
3240 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= | ||
3241 | |||
3242 | json-stable-stringify-without-jsonify@^1.0.1: | 3372 | json-stable-stringify-without-jsonify@^1.0.1: |
3243 | version "1.0.1" | 3373 | version "1.0.1" |
3244 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" | 3374 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" |
3245 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= | 3375 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= |
3246 | 3376 | ||
3247 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: | ||
3248 | version "1.0.1" | ||
3249 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" | ||
3250 | integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= | ||
3251 | dependencies: | ||
3252 | jsonify "~0.0.0" | ||
3253 | |||
3254 | json-stringify-safe@~5.0.1: | ||
3255 | version "5.0.1" | ||
3256 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" | ||
3257 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= | ||
3258 | |||
3259 | json5@^0.5.1: | ||
3260 | version "0.5.1" | ||
3261 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" | ||
3262 | integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= | ||
3263 | |||
3264 | json5@^1.0.1: | 3377 | json5@^1.0.1: |
3265 | version "1.0.1" | 3378 | version "1.0.1" |
3266 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" | 3379 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" |
@@ -3268,32 +3381,12 @@ json5@^1.0.1: | |||
3268 | dependencies: | 3381 | dependencies: |
3269 | minimist "^1.2.0" | 3382 | minimist "^1.2.0" |
3270 | 3383 | ||
3271 | jsonfile@^3.0.0: | 3384 | json5@^2.1.2: |
3272 | version "3.0.1" | 3385 | version "2.1.3" |
3273 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" | 3386 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" |
3274 | integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= | 3387 | integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== |
3275 | optionalDependencies: | ||
3276 | graceful-fs "^4.1.6" | ||
3277 | |||
3278 | jsonify@~0.0.0: | ||
3279 | version "0.0.0" | ||
3280 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" | ||
3281 | integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= | ||
3282 | |||
3283 | jsonpointer@^4.0.0: | ||
3284 | version "4.0.1" | ||
3285 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" | ||
3286 | integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= | ||
3287 | |||
3288 | jsprim@^1.2.2: | ||
3289 | version "1.4.1" | ||
3290 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" | ||
3291 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= | ||
3292 | dependencies: | 3388 | dependencies: |
3293 | assert-plus "1.0.0" | 3389 | minimist "^1.2.5" |
3294 | extsprintf "1.3.0" | ||
3295 | json-schema "0.2.3" | ||
3296 | verror "1.10.0" | ||
3297 | 3390 | ||
3298 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: | 3391 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: |
3299 | version "3.2.2" | 3392 | version "3.2.2" |
@@ -3314,46 +3407,45 @@ kind-of@^5.0.0: | |||
3314 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" | 3407 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" |
3315 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== | 3408 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== |
3316 | 3409 | ||
3317 | kind-of@^6.0.0, kind-of@^6.0.2: | 3410 | kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: |
3318 | version "6.0.2" | 3411 | version "6.0.3" |
3319 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" | 3412 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" |
3320 | integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== | 3413 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== |
3321 | 3414 | ||
3322 | known-css-properties@^0.3.0: | 3415 | klona@^2.0.3: |
3323 | version "0.3.0" | 3416 | version "2.0.4" |
3324 | resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.3.0.tgz#a3d135bbfc60ee8c6eacf2f7e7e6f2d4755e49a4" | 3417 | resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" |
3325 | integrity sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ== | 3418 | integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== |
3326 | 3419 | ||
3327 | lazy-cache@^1.0.3: | 3420 | known-css-properties@^0.19.0: |
3328 | version "1.0.4" | 3421 | version "0.19.0" |
3329 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" | 3422 | resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.19.0.tgz#5d92b7fa16c72d971bda9b7fe295bdf61836ee5b" |
3330 | integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= | 3423 | integrity sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA== |
3331 | 3424 | ||
3332 | lcid@^1.0.0: | 3425 | leven@^3.1.0: |
3333 | version "1.0.0" | 3426 | version "3.1.0" |
3334 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" | 3427 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" |
3335 | integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= | 3428 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== |
3336 | dependencies: | ||
3337 | invert-kv "^1.0.0" | ||
3338 | 3429 | ||
3339 | levn@^0.3.0, levn@~0.3.0: | 3430 | levenary@^1.1.1: |
3340 | version "0.3.0" | 3431 | version "1.1.1" |
3341 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" | 3432 | resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" |
3342 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= | 3433 | integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== |
3343 | dependencies: | 3434 | dependencies: |
3344 | prelude-ls "~1.1.2" | 3435 | leven "^3.1.0" |
3345 | type-check "~0.3.2" | ||
3346 | 3436 | ||
3347 | load-json-file@^1.0.0: | 3437 | levn@^0.4.1: |
3348 | version "1.1.0" | 3438 | version "0.4.1" |
3349 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" | 3439 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" |
3350 | integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= | 3440 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== |
3351 | dependencies: | 3441 | dependencies: |
3352 | graceful-fs "^4.1.2" | 3442 | prelude-ls "^1.2.1" |
3353 | parse-json "^2.2.0" | 3443 | type-check "~0.4.0" |
3354 | pify "^2.0.0" | 3444 | |
3355 | pinkie-promise "^2.0.0" | 3445 | lines-and-columns@^1.1.6: |
3356 | strip-bom "^2.0.0" | 3446 | version "1.1.6" |
3447 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" | ||
3448 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= | ||
3357 | 3449 | ||
3358 | load-json-file@^2.0.0: | 3450 | load-json-file@^2.0.0: |
3359 | version "2.0.0" | 3451 | version "2.0.0" |
@@ -3365,20 +3457,29 @@ load-json-file@^2.0.0: | |||
3365 | pify "^2.0.0" | 3457 | pify "^2.0.0" |
3366 | strip-bom "^3.0.0" | 3458 | strip-bom "^3.0.0" |
3367 | 3459 | ||
3368 | loader-runner@^2.3.0: | 3460 | loader-runner@^2.4.0: |
3369 | version "2.4.0" | 3461 | version "2.4.0" |
3370 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" | 3462 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" |
3371 | integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== | 3463 | integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== |
3372 | 3464 | ||
3373 | loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: | 3465 | loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: |
3374 | version "1.2.3" | 3466 | version "1.4.0" |
3375 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" | 3467 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" |
3376 | integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== | 3468 | integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== |
3377 | dependencies: | 3469 | dependencies: |
3378 | big.js "^5.2.2" | 3470 | big.js "^5.2.2" |
3379 | emojis-list "^2.0.0" | 3471 | emojis-list "^3.0.0" |
3380 | json5 "^1.0.1" | 3472 | json5 "^1.0.1" |
3381 | 3473 | ||
3474 | loader-utils@^2.0.0: | ||
3475 | version "2.0.0" | ||
3476 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" | ||
3477 | integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== | ||
3478 | dependencies: | ||
3479 | big.js "^5.2.2" | ||
3480 | emojis-list "^3.0.0" | ||
3481 | json5 "^2.1.2" | ||
3482 | |||
3382 | locate-path@^2.0.0: | 3483 | locate-path@^2.0.0: |
3383 | version "2.0.0" | 3484 | version "2.0.0" |
3384 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" | 3485 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" |
@@ -3387,55 +3488,37 @@ locate-path@^2.0.0: | |||
3387 | p-locate "^2.0.0" | 3488 | p-locate "^2.0.0" |
3388 | path-exists "^3.0.0" | 3489 | path-exists "^3.0.0" |
3389 | 3490 | ||
3390 | lodash.camelcase@^4.3.0: | 3491 | locate-path@^3.0.0: |
3391 | version "4.3.0" | 3492 | version "3.0.0" |
3392 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" | 3493 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" |
3393 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= | 3494 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== |
3394 | 3495 | dependencies: | |
3395 | lodash.capitalize@^4.1.0: | 3496 | p-locate "^3.0.0" |
3396 | version "4.2.1" | 3497 | path-exists "^3.0.0" |
3397 | resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" | ||
3398 | integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= | ||
3399 | |||
3400 | lodash.isplainobject@^4.0.6: | ||
3401 | version "4.0.6" | ||
3402 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" | ||
3403 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= | ||
3404 | |||
3405 | lodash.kebabcase@^4.0.0: | ||
3406 | version "4.1.1" | ||
3407 | resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" | ||
3408 | integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= | ||
3409 | |||
3410 | lodash.memoize@^4.1.2: | ||
3411 | version "4.1.2" | ||
3412 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" | ||
3413 | integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= | ||
3414 | |||
3415 | lodash.some@^4.6.0: | ||
3416 | version "4.6.0" | ||
3417 | resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" | ||
3418 | integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= | ||
3419 | 3498 | ||
3420 | lodash.tail@^4.1.1: | 3499 | locate-path@^5.0.0: |
3421 | version "4.1.1" | 3500 | version "5.0.0" |
3422 | resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" | 3501 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" |
3423 | integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= | 3502 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== |
3503 | dependencies: | ||
3504 | p-locate "^4.1.0" | ||
3424 | 3505 | ||
3425 | lodash.uniq@^4.5.0: | 3506 | lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: |
3426 | version "4.5.0" | 3507 | version "4.17.20" |
3427 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" | 3508 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" |
3428 | integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= | 3509 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== |
3429 | 3510 | ||
3430 | lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.10: | 3511 | log-symbols@^4.0.0: |
3431 | version "4.17.15" | 3512 | version "4.0.0" |
3432 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" | 3513 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" |
3433 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== | 3514 | integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== |
3515 | dependencies: | ||
3516 | chalk "^4.0.0" | ||
3434 | 3517 | ||
3435 | longest@^1.0.1: | 3518 | longest-streak@^2.0.1: |
3436 | version "1.0.1" | 3519 | version "2.0.4" |
3437 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" | 3520 | resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" |
3438 | integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= | 3521 | integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== |
3439 | 3522 | ||
3440 | loose-envify@^1.0.0: | 3523 | loose-envify@^1.0.0: |
3441 | version "1.4.0" | 3524 | version "1.4.0" |
@@ -3444,39 +3527,50 @@ loose-envify@^1.0.0: | |||
3444 | dependencies: | 3527 | dependencies: |
3445 | js-tokens "^3.0.0 || ^4.0.0" | 3528 | js-tokens "^3.0.0 || ^4.0.0" |
3446 | 3529 | ||
3447 | loud-rejection@^1.0.0: | 3530 | lru-cache@^5.1.1: |
3448 | version "1.6.0" | 3531 | version "5.1.1" |
3449 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" | 3532 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" |
3450 | integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= | 3533 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== |
3451 | dependencies: | 3534 | dependencies: |
3452 | currently-unhandled "^0.4.1" | 3535 | yallist "^3.0.2" |
3453 | signal-exit "^3.0.0" | ||
3454 | 3536 | ||
3455 | lru-cache@^4.0.1: | 3537 | lru-cache@^6.0.0: |
3456 | version "4.1.5" | 3538 | version "6.0.0" |
3457 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" | 3539 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" |
3458 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== | 3540 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== |
3459 | dependencies: | 3541 | dependencies: |
3460 | pseudomap "^1.0.2" | 3542 | yallist "^4.0.0" |
3461 | yallist "^2.1.2" | ||
3462 | 3543 | ||
3463 | make-dir@^1.0.0: | 3544 | make-dir@^2.0.0: |
3464 | version "1.3.0" | 3545 | version "2.1.0" |
3465 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" | 3546 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" |
3466 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== | 3547 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== |
3548 | dependencies: | ||
3549 | pify "^4.0.1" | ||
3550 | semver "^5.6.0" | ||
3551 | |||
3552 | make-dir@^3.0.2: | ||
3553 | version "3.1.0" | ||
3554 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" | ||
3555 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== | ||
3467 | dependencies: | 3556 | dependencies: |
3468 | pify "^3.0.0" | 3557 | semver "^6.0.0" |
3469 | 3558 | ||
3470 | map-cache@^0.2.2: | 3559 | map-cache@^0.2.2: |
3471 | version "0.2.2" | 3560 | version "0.2.2" |
3472 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" | 3561 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" |
3473 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= | 3562 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= |
3474 | 3563 | ||
3475 | map-obj@^1.0.0, map-obj@^1.0.1: | 3564 | map-obj@^1.0.0: |
3476 | version "1.0.1" | 3565 | version "1.0.1" |
3477 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" | 3566 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" |
3478 | integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= | 3567 | integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= |
3479 | 3568 | ||
3569 | map-obj@^4.0.0: | ||
3570 | version "4.1.0" | ||
3571 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" | ||
3572 | integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== | ||
3573 | |||
3480 | map-visit@^1.0.0: | 3574 | map-visit@^1.0.0: |
3481 | version "1.0.0" | 3575 | version "1.0.0" |
3482 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" | 3576 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" |
@@ -3484,10 +3578,22 @@ map-visit@^1.0.0: | |||
3484 | dependencies: | 3578 | dependencies: |
3485 | object-visit "^1.0.0" | 3579 | object-visit "^1.0.0" |
3486 | 3580 | ||
3487 | math-expression-evaluator@^1.2.14: | 3581 | markdown-escapes@^1.0.0: |
3488 | version "1.2.17" | 3582 | version "1.0.4" |
3489 | resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" | 3583 | resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" |
3490 | integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= | 3584 | integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== |
3585 | |||
3586 | markdown-table@^2.0.0: | ||
3587 | version "2.0.0" | ||
3588 | resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" | ||
3589 | integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== | ||
3590 | dependencies: | ||
3591 | repeat-string "^1.0.0" | ||
3592 | |||
3593 | mathml-tag-names@^2.1.3: | ||
3594 | version "2.1.3" | ||
3595 | resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" | ||
3596 | integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== | ||
3491 | 3597 | ||
3492 | md5.js@^1.3.4: | 3598 | md5.js@^1.3.4: |
3493 | version "1.3.5" | 3599 | version "1.3.5" |
@@ -3498,14 +3604,14 @@ md5.js@^1.3.4: | |||
3498 | inherits "^2.0.1" | 3604 | inherits "^2.0.1" |
3499 | safe-buffer "^5.1.2" | 3605 | safe-buffer "^5.1.2" |
3500 | 3606 | ||
3501 | mem@^1.1.0: | 3607 | mdast-util-compact@^2.0.0: |
3502 | version "1.1.0" | 3608 | version "2.0.1" |
3503 | resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" | 3609 | resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490" |
3504 | integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= | 3610 | integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA== |
3505 | dependencies: | 3611 | dependencies: |
3506 | mimic-fn "^1.0.0" | 3612 | unist-util-visit "^2.0.0" |
3507 | 3613 | ||
3508 | memory-fs@^0.4.0, memory-fs@~0.4.1: | 3614 | memory-fs@^0.4.1: |
3509 | version "0.4.1" | 3615 | version "0.4.1" |
3510 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" | 3616 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" |
3511 | integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= | 3617 | integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= |
@@ -3513,28 +3619,42 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: | |||
3513 | errno "^0.1.3" | 3619 | errno "^0.1.3" |
3514 | readable-stream "^2.0.1" | 3620 | readable-stream "^2.0.1" |
3515 | 3621 | ||
3516 | meow@^3.7.0: | 3622 | memory-fs@^0.5.0: |
3517 | version "3.7.0" | 3623 | version "0.5.0" |
3518 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" | 3624 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" |
3519 | integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= | 3625 | integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== |
3520 | dependencies: | 3626 | dependencies: |
3521 | camelcase-keys "^2.0.0" | 3627 | errno "^0.1.3" |
3522 | decamelize "^1.1.2" | 3628 | readable-stream "^2.0.1" |
3523 | loud-rejection "^1.0.0" | ||
3524 | map-obj "^1.0.1" | ||
3525 | minimist "^1.1.3" | ||
3526 | normalize-package-data "^2.3.4" | ||
3527 | object-assign "^4.0.1" | ||
3528 | read-pkg-up "^1.0.1" | ||
3529 | redent "^1.0.0" | ||
3530 | trim-newlines "^1.0.0" | ||
3531 | 3629 | ||
3532 | merge@^1.2.0: | 3630 | meow@^7.1.1: |
3533 | version "1.2.1" | 3631 | version "7.1.1" |
3534 | resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" | 3632 | resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" |
3535 | integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== | 3633 | integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== |
3634 | dependencies: | ||
3635 | "@types/minimist" "^1.2.0" | ||
3636 | camelcase-keys "^6.2.2" | ||
3637 | decamelize-keys "^1.1.0" | ||
3638 | hard-rejection "^2.1.0" | ||
3639 | minimist-options "4.1.0" | ||
3640 | normalize-package-data "^2.5.0" | ||
3641 | read-pkg-up "^7.0.1" | ||
3642 | redent "^3.0.0" | ||
3643 | trim-newlines "^3.0.0" | ||
3644 | type-fest "^0.13.1" | ||
3645 | yargs-parser "^18.1.3" | ||
3646 | |||
3647 | merge-stream@^2.0.0: | ||
3648 | version "2.0.0" | ||
3649 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" | ||
3650 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== | ||
3651 | |||
3652 | merge2@^1.3.0: | ||
3653 | version "1.4.1" | ||
3654 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" | ||
3655 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== | ||
3536 | 3656 | ||
3537 | micromatch@^3.1.10, micromatch@^3.1.4: | 3657 | micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: |
3538 | version "3.1.10" | 3658 | version "3.1.10" |
3539 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" | 3659 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" |
3540 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== | 3660 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== |
@@ -3553,6 +3673,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: | |||
3553 | snapdragon "^0.8.1" | 3673 | snapdragon "^0.8.1" |
3554 | to-regex "^3.0.2" | 3674 | to-regex "^3.0.2" |
3555 | 3675 | ||
3676 | micromatch@^4.0.2: | ||
3677 | version "4.0.2" | ||
3678 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" | ||
3679 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== | ||
3680 | dependencies: | ||
3681 | braces "^3.0.1" | ||
3682 | picomatch "^2.0.5" | ||
3683 | |||
3556 | miller-rabin@^4.0.0: | 3684 | miller-rabin@^4.0.0: |
3557 | version "4.0.1" | 3685 | version "4.0.1" |
3558 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" | 3686 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" |
@@ -3561,27 +3689,20 @@ miller-rabin@^4.0.0: | |||
3561 | bn.js "^4.0.0" | 3689 | bn.js "^4.0.0" |
3562 | brorand "^1.0.1" | 3690 | brorand "^1.0.1" |
3563 | 3691 | ||
3564 | mime-db@1.40.0: | 3692 | min-indent@^1.0.0: |
3565 | version "1.40.0" | 3693 | version "1.0.1" |
3566 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" | 3694 | resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" |
3567 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== | 3695 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== |
3568 | 3696 | ||
3569 | mime-types@^2.1.12, mime-types@~2.1.19: | 3697 | mini-css-extract-plugin@^0.11.2: |
3570 | version "2.1.24" | 3698 | version "0.11.2" |
3571 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" | 3699 | resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.2.tgz#e3af4d5e04fbcaaf11838ab230510073060b37bf" |
3572 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== | 3700 | integrity sha512-h2LknfX4U1kScXxH8xE9LCOqT5B+068EAj36qicMb8l4dqdJoyHcmWmpd+ueyZfgu/POvIn+teoUnTtei2ikug== |
3573 | dependencies: | 3701 | dependencies: |
3574 | mime-db "1.40.0" | 3702 | loader-utils "^1.1.0" |
3575 | 3703 | normalize-url "1.9.1" | |
3576 | mime@^1.4.1: | 3704 | schema-utils "^1.0.0" |
3577 | version "1.6.0" | 3705 | webpack-sources "^1.1.0" |
3578 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" | ||
3579 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== | ||
3580 | |||
3581 | mimic-fn@^1.0.0: | ||
3582 | version "1.2.0" | ||
3583 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" | ||
3584 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== | ||
3585 | 3706 | ||
3586 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: | 3707 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: |
3587 | version "1.0.1" | 3708 | version "1.0.1" |
@@ -3593,42 +3714,78 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: | |||
3593 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" | 3714 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" |
3594 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= | 3715 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= |
3595 | 3716 | ||
3596 | minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: | 3717 | minimatch@^3.0.4: |
3597 | version "3.0.4" | 3718 | version "3.0.4" |
3598 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" | 3719 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" |
3599 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== | 3720 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== |
3600 | dependencies: | 3721 | dependencies: |
3601 | brace-expansion "^1.1.7" | 3722 | brace-expansion "^1.1.7" |
3602 | 3723 | ||
3603 | minimist@0.0.8: | 3724 | minimist-options@4.1.0: |
3604 | version "0.0.8" | 3725 | version "4.1.0" |
3605 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" | 3726 | resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" |
3606 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= | 3727 | integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== |
3728 | dependencies: | ||
3729 | arrify "^1.0.1" | ||
3730 | is-plain-obj "^1.1.0" | ||
3731 | kind-of "^6.0.3" | ||
3607 | 3732 | ||
3608 | minimist@1.1.x: | 3733 | minimist@^1.2.0, minimist@^1.2.5: |
3609 | version "1.1.3" | 3734 | version "1.2.5" |
3610 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" | 3735 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" |
3611 | integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= | 3736 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== |
3612 | 3737 | ||
3613 | minimist@^1.1.3, minimist@^1.2.0: | 3738 | minipass-collect@^1.0.2: |
3614 | version "1.2.0" | 3739 | version "1.0.2" |
3615 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" | 3740 | resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" |
3616 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= | 3741 | integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== |
3742 | dependencies: | ||
3743 | minipass "^3.0.0" | ||
3617 | 3744 | ||
3618 | minipass@^2.2.1, minipass@^2.3.4: | 3745 | minipass-flush@^1.0.5: |
3619 | version "2.3.5" | 3746 | version "1.0.5" |
3620 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" | 3747 | resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" |
3621 | integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== | 3748 | integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== |
3622 | dependencies: | 3749 | dependencies: |
3623 | safe-buffer "^5.1.2" | 3750 | minipass "^3.0.0" |
3624 | yallist "^3.0.0" | ||
3625 | 3751 | ||
3626 | minizlib@^1.1.1: | 3752 | minipass-pipeline@^1.2.2: |
3627 | version "1.2.1" | 3753 | version "1.2.4" |
3628 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" | 3754 | resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" |
3629 | integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== | 3755 | integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== |
3756 | dependencies: | ||
3757 | minipass "^3.0.0" | ||
3758 | |||
3759 | minipass@^3.0.0, minipass@^3.1.1: | ||
3760 | version "3.1.3" | ||
3761 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" | ||
3762 | integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== | ||
3763 | dependencies: | ||
3764 | yallist "^4.0.0" | ||
3765 | |||
3766 | minizlib@^2.1.1: | ||
3767 | version "2.1.2" | ||
3768 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" | ||
3769 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== | ||
3630 | dependencies: | 3770 | dependencies: |
3631 | minipass "^2.2.1" | 3771 | minipass "^3.0.0" |
3772 | yallist "^4.0.0" | ||
3773 | |||
3774 | mississippi@^3.0.0: | ||
3775 | version "3.0.0" | ||
3776 | resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" | ||
3777 | integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== | ||
3778 | dependencies: | ||
3779 | concat-stream "^1.5.0" | ||
3780 | duplexify "^3.4.2" | ||
3781 | end-of-stream "^1.1.0" | ||
3782 | flush-write-stream "^1.0.0" | ||
3783 | from2 "^2.1.0" | ||
3784 | parallel-transform "^1.1.0" | ||
3785 | pump "^3.0.0" | ||
3786 | pumpify "^1.3.3" | ||
3787 | stream-each "^1.1.0" | ||
3788 | through2 "^2.0.0" | ||
3632 | 3789 | ||
3633 | mixin-deep@^1.2.0: | 3790 | mixin-deep@^1.2.0: |
3634 | version "1.3.2" | 3791 | version "1.3.2" |
@@ -3638,45 +3795,44 @@ mixin-deep@^1.2.0: | |||
3638 | for-in "^1.0.2" | 3795 | for-in "^1.0.2" |
3639 | is-extendable "^1.0.1" | 3796 | is-extendable "^1.0.1" |
3640 | 3797 | ||
3641 | mixin-object@^2.0.1: | 3798 | mkdirp@^0.5.1, mkdirp@^0.5.3: |
3642 | version "2.0.1" | 3799 | version "0.5.5" |
3643 | resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" | 3800 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" |
3644 | integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= | 3801 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== |
3645 | dependencies: | 3802 | dependencies: |
3646 | for-in "^0.1.3" | 3803 | minimist "^1.2.5" |
3647 | is-extendable "^0.1.1" | 3804 | |
3805 | mkdirp@^1.0.3, mkdirp@^1.0.4: | ||
3806 | version "1.0.4" | ||
3807 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" | ||
3808 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== | ||
3648 | 3809 | ||
3649 | "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: | 3810 | move-concurrently@^1.0.1: |
3650 | version "0.5.1" | 3811 | version "1.0.1" |
3651 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" | 3812 | resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" |
3652 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= | 3813 | integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= |
3653 | dependencies: | 3814 | dependencies: |
3654 | minimist "0.0.8" | 3815 | aproba "^1.1.1" |
3816 | copy-concurrently "^1.0.0" | ||
3817 | fs-write-stream-atomic "^1.0.8" | ||
3818 | mkdirp "^0.5.1" | ||
3819 | rimraf "^2.5.4" | ||
3820 | run-queue "^1.0.3" | ||
3655 | 3821 | ||
3656 | ms@2.0.0: | 3822 | ms@2.0.0: |
3657 | version "2.0.0" | 3823 | version "2.0.0" |
3658 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" | 3824 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" |
3659 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= | 3825 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= |
3660 | 3826 | ||
3661 | ms@^2.1.1: | 3827 | ms@2.1.2: |
3662 | version "2.1.1" | 3828 | version "2.1.2" |
3663 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" | 3829 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" |
3664 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== | 3830 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== |
3665 | |||
3666 | mute-stream@0.0.5: | ||
3667 | version "0.0.5" | ||
3668 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" | ||
3669 | integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA= | ||
3670 | |||
3671 | mute-stream@0.0.7: | ||
3672 | version "0.0.7" | ||
3673 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" | ||
3674 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= | ||
3675 | 3831 | ||
3676 | nan@^2.12.1, nan@^2.13.2: | 3832 | nan@^2.12.1: |
3677 | version "2.14.0" | 3833 | version "2.14.1" |
3678 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" | 3834 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" |
3679 | integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== | 3835 | integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== |
3680 | 3836 | ||
3681 | nanomatch@^1.2.9: | 3837 | nanomatch@^1.2.9: |
3682 | version "1.2.13" | 3838 | version "1.2.13" |
@@ -3700,47 +3856,20 @@ natural-compare@^1.4.0: | |||
3700 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" | 3856 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" |
3701 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= | 3857 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= |
3702 | 3858 | ||
3703 | needle@^2.2.1: | 3859 | neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: |
3704 | version "2.4.0" | 3860 | version "2.6.2" |
3705 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" | 3861 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" |
3706 | integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== | 3862 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== |
3707 | dependencies: | ||
3708 | debug "^3.2.6" | ||
3709 | iconv-lite "^0.4.4" | ||
3710 | sax "^1.2.4" | ||
3711 | |||
3712 | neo-async@^2.5.0: | ||
3713 | version "2.6.1" | ||
3714 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" | ||
3715 | integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== | ||
3716 | 3863 | ||
3717 | next-tick@^1.0.0: | 3864 | nice-try@^1.0.4: |
3718 | version "1.0.0" | 3865 | version "1.0.5" |
3719 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" | 3866 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" |
3720 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= | 3867 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== |
3721 | 3868 | ||
3722 | node-gyp@^3.8.0: | 3869 | node-libs-browser@^2.2.1: |
3723 | version "3.8.0" | 3870 | version "2.2.1" |
3724 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" | 3871 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" |
3725 | integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== | 3872 | integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== |
3726 | dependencies: | ||
3727 | fstream "^1.0.0" | ||
3728 | glob "^7.0.3" | ||
3729 | graceful-fs "^4.1.2" | ||
3730 | mkdirp "^0.5.0" | ||
3731 | nopt "2 || 3" | ||
3732 | npmlog "0 || 1 || 2 || 3 || 4" | ||
3733 | osenv "0" | ||
3734 | request "^2.87.0" | ||
3735 | rimraf "2" | ||
3736 | semver "~5.3.0" | ||
3737 | tar "^2.0.0" | ||
3738 | which "1" | ||
3739 | |||
3740 | node-libs-browser@^2.0.0: | ||
3741 | version "2.2.0" | ||
3742 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" | ||
3743 | integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== | ||
3744 | dependencies: | 3873 | dependencies: |
3745 | assert "^1.1.1" | 3874 | assert "^1.1.1" |
3746 | browserify-zlib "^0.2.0" | 3875 | browserify-zlib "^0.2.0" |
@@ -3752,7 +3881,7 @@ node-libs-browser@^2.0.0: | |||
3752 | events "^3.0.0" | 3881 | events "^3.0.0" |
3753 | https-browserify "^1.0.0" | 3882 | https-browserify "^1.0.0" |
3754 | os-browserify "^0.3.0" | 3883 | os-browserify "^0.3.0" |
3755 | path-browserify "0.0.0" | 3884 | path-browserify "0.0.1" |
3756 | process "^0.11.10" | 3885 | process "^0.11.10" |
3757 | punycode "^1.2.4" | 3886 | punycode "^1.2.4" |
3758 | querystring-es3 "^0.2.0" | 3887 | querystring-es3 "^0.2.0" |
@@ -3764,63 +3893,14 @@ node-libs-browser@^2.0.0: | |||
3764 | tty-browserify "0.0.0" | 3893 | tty-browserify "0.0.0" |
3765 | url "^0.11.0" | 3894 | url "^0.11.0" |
3766 | util "^0.11.0" | 3895 | util "^0.11.0" |
3767 | vm-browserify "0.0.4" | 3896 | vm-browserify "^1.0.1" |
3768 | 3897 | ||
3769 | node-pre-gyp@^0.12.0: | 3898 | node-releases@^1.1.61: |
3770 | version "0.12.0" | 3899 | version "1.1.61" |
3771 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" | 3900 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" |
3772 | integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== | 3901 | integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== |
3773 | dependencies: | ||
3774 | detect-libc "^1.0.2" | ||
3775 | mkdirp "^0.5.1" | ||
3776 | needle "^2.2.1" | ||
3777 | nopt "^4.0.1" | ||
3778 | npm-packlist "^1.1.6" | ||
3779 | npmlog "^4.0.2" | ||
3780 | rc "^1.2.7" | ||
3781 | rimraf "^2.6.1" | ||
3782 | semver "^5.3.0" | ||
3783 | tar "^4" | ||
3784 | |||
3785 | node-sass@^4.12.0: | ||
3786 | version "4.12.0" | ||
3787 | resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" | ||
3788 | integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== | ||
3789 | dependencies: | ||
3790 | async-foreach "^0.1.3" | ||
3791 | chalk "^1.1.1" | ||
3792 | cross-spawn "^3.0.0" | ||
3793 | gaze "^1.0.0" | ||
3794 | get-stdin "^4.0.1" | ||
3795 | glob "^7.0.3" | ||
3796 | in-publish "^2.0.0" | ||
3797 | lodash "^4.17.11" | ||
3798 | meow "^3.7.0" | ||
3799 | mkdirp "^0.5.1" | ||
3800 | nan "^2.13.2" | ||
3801 | node-gyp "^3.8.0" | ||
3802 | npmlog "^4.0.0" | ||
3803 | request "^2.88.0" | ||
3804 | sass-graph "^2.2.4" | ||
3805 | stdout-stream "^1.4.0" | ||
3806 | "true-case-path" "^1.0.2" | ||
3807 | |||
3808 | "nopt@2 || 3": | ||
3809 | version "3.0.6" | ||
3810 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" | ||
3811 | integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= | ||
3812 | dependencies: | ||
3813 | abbrev "1" | ||
3814 | 3902 | ||
3815 | nopt@^4.0.1: | 3903 | normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: |
3816 | version "4.0.1" | ||
3817 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" | ||
3818 | integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= | ||
3819 | dependencies: | ||
3820 | abbrev "1" | ||
3821 | osenv "^0.1.4" | ||
3822 | |||
3823 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: | ||
3824 | version "2.5.0" | 3904 | version "2.5.0" |
3825 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" | 3905 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" |
3826 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== | 3906 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== |
@@ -3837,7 +3917,7 @@ normalize-path@^2.1.1: | |||
3837 | dependencies: | 3917 | dependencies: |
3838 | remove-trailing-separator "^1.0.1" | 3918 | remove-trailing-separator "^1.0.1" |
3839 | 3919 | ||
3840 | normalize-path@^3.0.0: | 3920 | normalize-path@^3.0.0, normalize-path@~3.0.0: |
3841 | version "3.0.0" | 3921 | version "3.0.0" |
3842 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" | 3922 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" |
3843 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== | 3923 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== |
@@ -3847,7 +3927,12 @@ normalize-range@^0.1.2: | |||
3847 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" | 3927 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" |
3848 | integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= | 3928 | integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= |
3849 | 3929 | ||
3850 | normalize-url@^1.4.0: | 3930 | normalize-selector@^0.2.0: |
3931 | version "0.2.0" | ||
3932 | resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" | ||
3933 | integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= | ||
3934 | |||
3935 | normalize-url@1.9.1: | ||
3851 | version "1.9.1" | 3936 | version "1.9.1" |
3852 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" | 3937 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" |
3853 | integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= | 3938 | integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= |
@@ -3857,51 +3942,11 @@ normalize-url@^1.4.0: | |||
3857 | query-string "^4.1.0" | 3942 | query-string "^4.1.0" |
3858 | sort-keys "^1.0.0" | 3943 | sort-keys "^1.0.0" |
3859 | 3944 | ||
3860 | npm-bundled@^1.0.1: | ||
3861 | version "1.0.6" | ||
3862 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" | ||
3863 | integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== | ||
3864 | |||
3865 | npm-packlist@^1.1.6: | ||
3866 | version "1.4.1" | ||
3867 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" | ||
3868 | integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== | ||
3869 | dependencies: | ||
3870 | ignore-walk "^3.0.1" | ||
3871 | npm-bundled "^1.0.1" | ||
3872 | |||
3873 | npm-run-path@^2.0.0: | ||
3874 | version "2.0.2" | ||
3875 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" | ||
3876 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= | ||
3877 | dependencies: | ||
3878 | path-key "^2.0.0" | ||
3879 | |||
3880 | "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: | ||
3881 | version "4.1.2" | ||
3882 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" | ||
3883 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== | ||
3884 | dependencies: | ||
3885 | are-we-there-yet "~1.1.2" | ||
3886 | console-control-strings "~1.1.0" | ||
3887 | gauge "~2.7.3" | ||
3888 | set-blocking "~2.0.0" | ||
3889 | |||
3890 | num2fraction@^1.2.2: | 3945 | num2fraction@^1.2.2: |
3891 | version "1.2.2" | 3946 | version "1.2.2" |
3892 | resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" | 3947 | resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" |
3893 | integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= | 3948 | integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= |
3894 | 3949 | ||
3895 | number-is-nan@^1.0.0: | ||
3896 | version "1.0.1" | ||
3897 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" | ||
3898 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= | ||
3899 | |||
3900 | oauth-sign@~0.9.0: | ||
3901 | version "0.9.0" | ||
3902 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" | ||
3903 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== | ||
3904 | |||
3905 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: | 3950 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: |
3906 | version "4.1.1" | 3951 | version "4.1.1" |
3907 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" | 3952 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" |
@@ -3916,7 +3961,12 @@ object-copy@^0.1.0: | |||
3916 | define-property "^0.2.5" | 3961 | define-property "^0.2.5" |
3917 | kind-of "^3.0.3" | 3962 | kind-of "^3.0.3" |
3918 | 3963 | ||
3919 | object-keys@^1.0.12: | 3964 | object-inspect@^1.7.0, object-inspect@^1.8.0: |
3965 | version "1.8.0" | ||
3966 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" | ||
3967 | integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== | ||
3968 | |||
3969 | object-keys@^1.0.12, object-keys@^1.1.1: | ||
3920 | version "1.1.1" | 3970 | version "1.1.1" |
3921 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" | 3971 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" |
3922 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== | 3972 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== |
@@ -3928,6 +3978,25 @@ object-visit@^1.0.0: | |||
3928 | dependencies: | 3978 | dependencies: |
3929 | isobject "^3.0.0" | 3979 | isobject "^3.0.0" |
3930 | 3980 | ||
3981 | object.assign@^4.1.0: | ||
3982 | version "4.1.1" | ||
3983 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" | ||
3984 | integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== | ||
3985 | dependencies: | ||
3986 | define-properties "^1.1.3" | ||
3987 | es-abstract "^1.18.0-next.0" | ||
3988 | has-symbols "^1.0.1" | ||
3989 | object-keys "^1.1.1" | ||
3990 | |||
3991 | object.entries@^1.1.2: | ||
3992 | version "1.1.2" | ||
3993 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" | ||
3994 | integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== | ||
3995 | dependencies: | ||
3996 | define-properties "^1.1.3" | ||
3997 | es-abstract "^1.17.5" | ||
3998 | has "^1.0.3" | ||
3999 | |||
3931 | object.pick@^1.3.0: | 4000 | object.pick@^1.3.0: |
3932 | version "1.3.0" | 4001 | version "1.3.0" |
3933 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" | 4002 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" |
@@ -3935,81 +4004,40 @@ object.pick@^1.3.0: | |||
3935 | dependencies: | 4004 | dependencies: |
3936 | isobject "^3.0.1" | 4005 | isobject "^3.0.1" |
3937 | 4006 | ||
3938 | once@^1.3.0: | 4007 | object.values@^1.1.1: |
4008 | version "1.1.1" | ||
4009 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" | ||
4010 | integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== | ||
4011 | dependencies: | ||
4012 | define-properties "^1.1.3" | ||
4013 | es-abstract "^1.17.0-next.1" | ||
4014 | function-bind "^1.1.1" | ||
4015 | has "^1.0.3" | ||
4016 | |||
4017 | once@^1.3.0, once@^1.3.1, once@^1.4.0: | ||
3939 | version "1.4.0" | 4018 | version "1.4.0" |
3940 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" | 4019 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" |
3941 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= | 4020 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= |
3942 | dependencies: | 4021 | dependencies: |
3943 | wrappy "1" | 4022 | wrappy "1" |
3944 | 4023 | ||
3945 | onetime@^1.0.0: | 4024 | optionator@^0.9.1: |
3946 | version "1.1.0" | 4025 | version "0.9.1" |
3947 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" | 4026 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" |
3948 | integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= | 4027 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== |
3949 | |||
3950 | onetime@^2.0.0: | ||
3951 | version "2.0.1" | ||
3952 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" | ||
3953 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= | ||
3954 | dependencies: | 4028 | dependencies: |
3955 | mimic-fn "^1.0.0" | 4029 | deep-is "^0.1.3" |
3956 | 4030 | fast-levenshtein "^2.0.6" | |
3957 | optionator@^0.8.1, optionator@^0.8.2: | 4031 | levn "^0.4.1" |
3958 | version "0.8.2" | 4032 | prelude-ls "^1.2.1" |
3959 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" | 4033 | type-check "^0.4.0" |
3960 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= | 4034 | word-wrap "^1.2.3" |
3961 | dependencies: | ||
3962 | deep-is "~0.1.3" | ||
3963 | fast-levenshtein "~2.0.4" | ||
3964 | levn "~0.3.0" | ||
3965 | prelude-ls "~1.1.2" | ||
3966 | type-check "~0.3.2" | ||
3967 | wordwrap "~1.0.0" | ||
3968 | 4035 | ||
3969 | os-browserify@^0.3.0: | 4036 | os-browserify@^0.3.0: |
3970 | version "0.3.0" | 4037 | version "0.3.0" |
3971 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" | 4038 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" |
3972 | integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= | 4039 | integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= |
3973 | 4040 | ||
3974 | os-homedir@^1.0.0: | ||
3975 | version "1.0.2" | ||
3976 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" | ||
3977 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= | ||
3978 | |||
3979 | os-locale@^1.4.0: | ||
3980 | version "1.4.0" | ||
3981 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" | ||
3982 | integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= | ||
3983 | dependencies: | ||
3984 | lcid "^1.0.0" | ||
3985 | |||
3986 | os-locale@^2.0.0: | ||
3987 | version "2.1.0" | ||
3988 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" | ||
3989 | integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== | ||
3990 | dependencies: | ||
3991 | execa "^0.7.0" | ||
3992 | lcid "^1.0.0" | ||
3993 | mem "^1.1.0" | ||
3994 | |||
3995 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: | ||
3996 | version "1.0.2" | ||
3997 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" | ||
3998 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= | ||
3999 | |||
4000 | osenv@0, osenv@^0.1.4: | ||
4001 | version "0.1.5" | ||
4002 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" | ||
4003 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== | ||
4004 | dependencies: | ||
4005 | os-homedir "^1.0.0" | ||
4006 | os-tmpdir "^1.0.0" | ||
4007 | |||
4008 | p-finally@^1.0.0: | ||
4009 | version "1.0.0" | ||
4010 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" | ||
4011 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= | ||
4012 | |||
4013 | p-limit@^1.1.0: | 4041 | p-limit@^1.1.0: |
4014 | version "1.3.0" | 4042 | version "1.3.0" |
4015 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" | 4043 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" |
@@ -4017,6 +4045,20 @@ p-limit@^1.1.0: | |||
4017 | dependencies: | 4045 | dependencies: |
4018 | p-try "^1.0.0" | 4046 | p-try "^1.0.0" |
4019 | 4047 | ||
4048 | p-limit@^2.0.0, p-limit@^2.2.0: | ||
4049 | version "2.3.0" | ||
4050 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" | ||
4051 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== | ||
4052 | dependencies: | ||
4053 | p-try "^2.0.0" | ||
4054 | |||
4055 | p-limit@^3.0.2: | ||
4056 | version "3.0.2" | ||
4057 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" | ||
4058 | integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== | ||
4059 | dependencies: | ||
4060 | p-try "^2.0.0" | ||
4061 | |||
4020 | p-locate@^2.0.0: | 4062 | p-locate@^2.0.0: |
4021 | version "2.0.0" | 4063 | version "2.0.0" |
4022 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" | 4064 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" |
@@ -4024,28 +4066,81 @@ p-locate@^2.0.0: | |||
4024 | dependencies: | 4066 | dependencies: |
4025 | p-limit "^1.1.0" | 4067 | p-limit "^1.1.0" |
4026 | 4068 | ||
4069 | p-locate@^3.0.0: | ||
4070 | version "3.0.0" | ||
4071 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" | ||
4072 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== | ||
4073 | dependencies: | ||
4074 | p-limit "^2.0.0" | ||
4075 | |||
4076 | p-locate@^4.1.0: | ||
4077 | version "4.1.0" | ||
4078 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" | ||
4079 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== | ||
4080 | dependencies: | ||
4081 | p-limit "^2.2.0" | ||
4082 | |||
4083 | p-map@^4.0.0: | ||
4084 | version "4.0.0" | ||
4085 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" | ||
4086 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== | ||
4087 | dependencies: | ||
4088 | aggregate-error "^3.0.0" | ||
4089 | |||
4027 | p-try@^1.0.0: | 4090 | p-try@^1.0.0: |
4028 | version "1.0.0" | 4091 | version "1.0.0" |
4029 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" | 4092 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" |
4030 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= | 4093 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= |
4031 | 4094 | ||
4095 | p-try@^2.0.0: | ||
4096 | version "2.2.0" | ||
4097 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" | ||
4098 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== | ||
4099 | |||
4032 | pako@~1.0.5: | 4100 | pako@~1.0.5: |
4033 | version "1.0.10" | 4101 | version "1.0.11" |
4034 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" | 4102 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" |
4035 | integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== | 4103 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== |
4104 | |||
4105 | parallel-transform@^1.1.0: | ||
4106 | version "1.2.0" | ||
4107 | resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" | ||
4108 | integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== | ||
4109 | dependencies: | ||
4110 | cyclist "^1.0.1" | ||
4111 | inherits "^2.0.3" | ||
4112 | readable-stream "^2.1.5" | ||
4113 | |||
4114 | parent-module@^1.0.0: | ||
4115 | version "1.0.1" | ||
4116 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" | ||
4117 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== | ||
4118 | dependencies: | ||
4119 | callsites "^3.0.0" | ||
4036 | 4120 | ||
4037 | parse-asn1@^5.0.0: | 4121 | parse-asn1@^5.0.0, parse-asn1@^5.1.5: |
4038 | version "5.1.4" | 4122 | version "5.1.6" |
4039 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" | 4123 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" |
4040 | integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== | 4124 | integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== |
4041 | dependencies: | 4125 | dependencies: |
4042 | asn1.js "^4.0.0" | 4126 | asn1.js "^5.2.0" |
4043 | browserify-aes "^1.0.0" | 4127 | browserify-aes "^1.0.0" |
4044 | create-hash "^1.1.0" | ||
4045 | evp_bytestokey "^1.0.0" | 4128 | evp_bytestokey "^1.0.0" |
4046 | pbkdf2 "^3.0.3" | 4129 | pbkdf2 "^3.0.3" |
4047 | safe-buffer "^5.1.1" | 4130 | safe-buffer "^5.1.1" |
4048 | 4131 | ||
4132 | parse-entities@^2.0.0: | ||
4133 | version "2.0.0" | ||
4134 | resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" | ||
4135 | integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== | ||
4136 | dependencies: | ||
4137 | character-entities "^1.0.0" | ||
4138 | character-entities-legacy "^1.0.0" | ||
4139 | character-reference-invalid "^1.0.0" | ||
4140 | is-alphanumerical "^1.0.0" | ||
4141 | is-decimal "^1.0.0" | ||
4142 | is-hexadecimal "^1.0.0" | ||
4143 | |||
4049 | parse-json@^2.2.0: | 4144 | parse-json@^2.2.0: |
4050 | version "2.2.0" | 4145 | version "2.2.0" |
4051 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" | 4146 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" |
@@ -4053,62 +4148,66 @@ parse-json@^2.2.0: | |||
4053 | dependencies: | 4148 | dependencies: |
4054 | error-ex "^1.2.0" | 4149 | error-ex "^1.2.0" |
4055 | 4150 | ||
4151 | parse-json@^5.0.0: | ||
4152 | version "5.1.0" | ||
4153 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" | ||
4154 | integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== | ||
4155 | dependencies: | ||
4156 | "@babel/code-frame" "^7.0.0" | ||
4157 | error-ex "^1.3.1" | ||
4158 | json-parse-even-better-errors "^2.3.0" | ||
4159 | lines-and-columns "^1.1.6" | ||
4160 | |||
4161 | parse-passwd@^1.0.0: | ||
4162 | version "1.0.0" | ||
4163 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" | ||
4164 | integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= | ||
4165 | |||
4056 | pascalcase@^0.1.1: | 4166 | pascalcase@^0.1.1: |
4057 | version "0.1.1" | 4167 | version "0.1.1" |
4058 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" | 4168 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" |
4059 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= | 4169 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= |
4060 | 4170 | ||
4061 | path-browserify@0.0.0: | 4171 | path-browserify@0.0.1: |
4062 | version "0.0.0" | 4172 | version "0.0.1" |
4063 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" | 4173 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" |
4064 | integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= | 4174 | integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== |
4065 | 4175 | ||
4066 | path-dirname@^1.0.0: | 4176 | path-dirname@^1.0.0: |
4067 | version "1.0.2" | 4177 | version "1.0.2" |
4068 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" | 4178 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" |
4069 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= | 4179 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= |
4070 | 4180 | ||
4071 | path-exists@^2.0.0: | ||
4072 | version "2.1.0" | ||
4073 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" | ||
4074 | integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= | ||
4075 | dependencies: | ||
4076 | pinkie-promise "^2.0.0" | ||
4077 | |||
4078 | path-exists@^3.0.0: | 4181 | path-exists@^3.0.0: |
4079 | version "3.0.0" | 4182 | version "3.0.0" |
4080 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" | 4183 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" |
4081 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= | 4184 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= |
4082 | 4185 | ||
4083 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: | 4186 | path-exists@^4.0.0: |
4187 | version "4.0.0" | ||
4188 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" | ||
4189 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== | ||
4190 | |||
4191 | path-is-absolute@^1.0.0: | ||
4084 | version "1.0.1" | 4192 | version "1.0.1" |
4085 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" | 4193 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" |
4086 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= | 4194 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= |
4087 | 4195 | ||
4088 | path-is-inside@^1.0.1, path-is-inside@^1.0.2: | 4196 | path-key@^2.0.1: |
4089 | version "1.0.2" | ||
4090 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" | ||
4091 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= | ||
4092 | |||
4093 | path-key@^2.0.0: | ||
4094 | version "2.0.1" | 4197 | version "2.0.1" |
4095 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" | 4198 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" |
4096 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= | 4199 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= |
4097 | 4200 | ||
4201 | path-key@^3.1.0: | ||
4202 | version "3.1.1" | ||
4203 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" | ||
4204 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== | ||
4205 | |||
4098 | path-parse@^1.0.6: | 4206 | path-parse@^1.0.6: |
4099 | version "1.0.6" | 4207 | version "1.0.6" |
4100 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" | 4208 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" |
4101 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== | 4209 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== |
4102 | 4210 | ||
4103 | path-type@^1.0.0: | ||
4104 | version "1.1.0" | ||
4105 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" | ||
4106 | integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= | ||
4107 | dependencies: | ||
4108 | graceful-fs "^4.1.2" | ||
4109 | pify "^2.0.0" | ||
4110 | pinkie-promise "^2.0.0" | ||
4111 | |||
4112 | path-type@^2.0.0: | 4211 | path-type@^2.0.0: |
4113 | version "2.0.0" | 4212 | version "2.0.0" |
4114 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" | 4213 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" |
@@ -4116,10 +4215,15 @@ path-type@^2.0.0: | |||
4116 | dependencies: | 4215 | dependencies: |
4117 | pify "^2.0.0" | 4216 | pify "^2.0.0" |
4118 | 4217 | ||
4218 | path-type@^4.0.0: | ||
4219 | version "4.0.0" | ||
4220 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" | ||
4221 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== | ||
4222 | |||
4119 | pbkdf2@^3.0.3: | 4223 | pbkdf2@^3.0.3: |
4120 | version "3.0.17" | 4224 | version "3.1.1" |
4121 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" | 4225 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" |
4122 | integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== | 4226 | integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== |
4123 | dependencies: | 4227 | dependencies: |
4124 | create-hash "^1.1.2" | 4228 | create-hash "^1.1.2" |
4125 | create-hmac "^1.1.4" | 4229 | create-hmac "^1.1.4" |
@@ -4127,32 +4231,20 @@ pbkdf2@^3.0.3: | |||
4127 | safe-buffer "^5.0.1" | 4231 | safe-buffer "^5.0.1" |
4128 | sha.js "^2.4.8" | 4232 | sha.js "^2.4.8" |
4129 | 4233 | ||
4130 | performance-now@^2.1.0: | 4234 | picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: |
4131 | version "2.1.0" | 4235 | version "2.2.2" |
4132 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" | 4236 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" |
4133 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= | 4237 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== |
4134 | 4238 | ||
4135 | pify@^2.0.0: | 4239 | pify@^2.0.0: |
4136 | version "2.3.0" | 4240 | version "2.3.0" |
4137 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" | 4241 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" |
4138 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= | 4242 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= |
4139 | 4243 | ||
4140 | pify@^3.0.0: | 4244 | pify@^4.0.1: |
4141 | version "3.0.0" | 4245 | version "4.0.1" |
4142 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" | 4246 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" |
4143 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= | 4247 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== |
4144 | |||
4145 | pinkie-promise@^2.0.0: | ||
4146 | version "2.0.1" | ||
4147 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" | ||
4148 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= | ||
4149 | dependencies: | ||
4150 | pinkie "^2.0.0" | ||
4151 | |||
4152 | pinkie@^2.0.0: | ||
4153 | version "2.0.4" | ||
4154 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" | ||
4155 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= | ||
4156 | 4248 | ||
4157 | pkg-dir@^2.0.0: | 4249 | pkg-dir@^2.0.0: |
4158 | version "2.0.0" | 4250 | version "2.0.0" |
@@ -4161,350 +4253,168 @@ pkg-dir@^2.0.0: | |||
4161 | dependencies: | 4253 | dependencies: |
4162 | find-up "^2.1.0" | 4254 | find-up "^2.1.0" |
4163 | 4255 | ||
4164 | pluralize@^1.2.1: | 4256 | pkg-dir@^3.0.0: |
4165 | version "1.2.1" | 4257 | version "3.0.0" |
4166 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" | 4258 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" |
4167 | integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU= | 4259 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== |
4260 | dependencies: | ||
4261 | find-up "^3.0.0" | ||
4168 | 4262 | ||
4169 | pluralize@^7.0.0: | 4263 | pkg-dir@^4.1.0: |
4170 | version "7.0.0" | 4264 | version "4.2.0" |
4171 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" | 4265 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" |
4172 | integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== | 4266 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== |
4267 | dependencies: | ||
4268 | find-up "^4.0.0" | ||
4173 | 4269 | ||
4174 | posix-character-classes@^0.1.0: | 4270 | posix-character-classes@^0.1.0: |
4175 | version "0.1.1" | 4271 | version "0.1.1" |
4176 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" | 4272 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" |
4177 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= | 4273 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= |
4178 | 4274 | ||
4179 | postcss-calc@^5.2.0: | 4275 | postcss-html@^0.36.0: |
4180 | version "5.3.1" | 4276 | version "0.36.0" |
4181 | resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" | 4277 | resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" |
4182 | integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= | 4278 | integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== |
4183 | dependencies: | ||
4184 | postcss "^5.0.2" | ||
4185 | postcss-message-helpers "^2.0.0" | ||
4186 | reduce-css-calc "^1.2.6" | ||
4187 | |||
4188 | postcss-colormin@^2.1.8: | ||
4189 | version "2.2.2" | ||
4190 | resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" | ||
4191 | integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= | ||
4192 | dependencies: | ||
4193 | colormin "^1.0.5" | ||
4194 | postcss "^5.0.13" | ||
4195 | postcss-value-parser "^3.2.3" | ||
4196 | |||
4197 | postcss-convert-values@^2.3.4: | ||
4198 | version "2.6.1" | ||
4199 | resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" | ||
4200 | integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= | ||
4201 | dependencies: | ||
4202 | postcss "^5.0.11" | ||
4203 | postcss-value-parser "^3.1.2" | ||
4204 | |||
4205 | postcss-discard-comments@^2.0.4: | ||
4206 | version "2.0.4" | ||
4207 | resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" | ||
4208 | integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= | ||
4209 | dependencies: | 4279 | dependencies: |
4210 | postcss "^5.0.14" | 4280 | htmlparser2 "^3.10.0" |
4211 | 4281 | ||
4212 | postcss-discard-duplicates@^2.0.1: | 4282 | postcss-less@^3.1.4: |
4213 | version "2.1.0" | 4283 | version "3.1.4" |
4214 | resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" | 4284 | resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" |
4215 | integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= | 4285 | integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== |
4216 | dependencies: | 4286 | dependencies: |
4217 | postcss "^5.0.4" | 4287 | postcss "^7.0.14" |
4218 | 4288 | ||
4219 | postcss-discard-empty@^2.0.1: | 4289 | postcss-media-query-parser@^0.2.3: |
4220 | version "2.1.0" | 4290 | version "0.2.3" |
4221 | resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" | 4291 | resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" |
4222 | integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= | 4292 | integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= |
4223 | dependencies: | ||
4224 | postcss "^5.0.14" | ||
4225 | |||
4226 | postcss-discard-overridden@^0.1.1: | ||
4227 | version "0.1.1" | ||
4228 | resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" | ||
4229 | integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= | ||
4230 | dependencies: | ||
4231 | postcss "^5.0.16" | ||
4232 | |||
4233 | postcss-discard-unused@^2.2.1: | ||
4234 | version "2.2.3" | ||
4235 | resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" | ||
4236 | integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= | ||
4237 | dependencies: | ||
4238 | postcss "^5.0.14" | ||
4239 | uniqs "^2.0.0" | ||
4240 | |||
4241 | postcss-filter-plugins@^2.0.0: | ||
4242 | version "2.0.3" | ||
4243 | resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" | ||
4244 | integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== | ||
4245 | dependencies: | ||
4246 | postcss "^5.0.4" | ||
4247 | |||
4248 | postcss-merge-idents@^2.1.5: | ||
4249 | version "2.1.7" | ||
4250 | resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" | ||
4251 | integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= | ||
4252 | dependencies: | ||
4253 | has "^1.0.1" | ||
4254 | postcss "^5.0.10" | ||
4255 | postcss-value-parser "^3.1.1" | ||
4256 | |||
4257 | postcss-merge-longhand@^2.0.1: | ||
4258 | version "2.0.2" | ||
4259 | resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" | ||
4260 | integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= | ||
4261 | dependencies: | ||
4262 | postcss "^5.0.4" | ||
4263 | |||
4264 | postcss-merge-rules@^2.0.3: | ||
4265 | version "2.1.2" | ||
4266 | resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" | ||
4267 | integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= | ||
4268 | dependencies: | ||
4269 | browserslist "^1.5.2" | ||
4270 | caniuse-api "^1.5.2" | ||
4271 | postcss "^5.0.4" | ||
4272 | postcss-selector-parser "^2.2.2" | ||
4273 | vendors "^1.0.0" | ||
4274 | 4293 | ||
4275 | postcss-message-helpers@^2.0.0: | 4294 | postcss-modules-extract-imports@^2.0.0: |
4276 | version "2.0.0" | 4295 | version "2.0.0" |
4277 | resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" | 4296 | resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" |
4278 | integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= | 4297 | integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== |
4279 | |||
4280 | postcss-minify-font-values@^1.0.2: | ||
4281 | version "1.0.5" | ||
4282 | resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" | ||
4283 | integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= | ||
4284 | dependencies: | ||
4285 | object-assign "^4.0.1" | ||
4286 | postcss "^5.0.4" | ||
4287 | postcss-value-parser "^3.0.2" | ||
4288 | |||
4289 | postcss-minify-gradients@^1.0.1: | ||
4290 | version "1.0.5" | ||
4291 | resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" | ||
4292 | integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= | ||
4293 | dependencies: | ||
4294 | postcss "^5.0.12" | ||
4295 | postcss-value-parser "^3.3.0" | ||
4296 | |||
4297 | postcss-minify-params@^1.0.4: | ||
4298 | version "1.2.2" | ||
4299 | resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" | ||
4300 | integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= | ||
4301 | dependencies: | ||
4302 | alphanum-sort "^1.0.1" | ||
4303 | postcss "^5.0.2" | ||
4304 | postcss-value-parser "^3.0.2" | ||
4305 | uniqs "^2.0.0" | ||
4306 | |||
4307 | postcss-minify-selectors@^2.0.4: | ||
4308 | version "2.1.1" | ||
4309 | resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" | ||
4310 | integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= | ||
4311 | dependencies: | ||
4312 | alphanum-sort "^1.0.2" | ||
4313 | has "^1.0.1" | ||
4314 | postcss "^5.0.14" | ||
4315 | postcss-selector-parser "^2.0.0" | ||
4316 | |||
4317 | postcss-modules-extract-imports@^1.2.0: | ||
4318 | version "1.2.1" | ||
4319 | resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" | ||
4320 | integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== | ||
4321 | dependencies: | ||
4322 | postcss "^6.0.1" | ||
4323 | |||
4324 | postcss-modules-local-by-default@^1.2.0: | ||
4325 | version "1.2.0" | ||
4326 | resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" | ||
4327 | integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= | ||
4328 | dependencies: | ||
4329 | css-selector-tokenizer "^0.7.0" | ||
4330 | postcss "^6.0.1" | ||
4331 | |||
4332 | postcss-modules-scope@^1.1.0: | ||
4333 | version "1.1.0" | ||
4334 | resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" | ||
4335 | integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= | ||
4336 | dependencies: | 4298 | dependencies: |
4337 | css-selector-tokenizer "^0.7.0" | 4299 | postcss "^7.0.5" |
4338 | postcss "^6.0.1" | ||
4339 | 4300 | ||
4340 | postcss-modules-values@^1.3.0: | 4301 | postcss-modules-local-by-default@^3.0.3: |
4341 | version "1.3.0" | 4302 | version "3.0.3" |
4342 | resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" | 4303 | resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" |
4343 | integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= | 4304 | integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== |
4344 | dependencies: | 4305 | dependencies: |
4345 | icss-replace-symbols "^1.1.0" | 4306 | icss-utils "^4.1.1" |
4346 | postcss "^6.0.1" | 4307 | postcss "^7.0.32" |
4308 | postcss-selector-parser "^6.0.2" | ||
4309 | postcss-value-parser "^4.1.0" | ||
4347 | 4310 | ||
4348 | postcss-normalize-charset@^1.1.0: | 4311 | postcss-modules-scope@^2.2.0: |
4349 | version "1.1.1" | 4312 | version "2.2.0" |
4350 | resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" | 4313 | resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" |
4351 | integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= | 4314 | integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== |
4352 | dependencies: | 4315 | dependencies: |
4353 | postcss "^5.0.5" | 4316 | postcss "^7.0.6" |
4317 | postcss-selector-parser "^6.0.0" | ||
4354 | 4318 | ||
4355 | postcss-normalize-url@^3.0.7: | 4319 | postcss-modules-values@^3.0.0: |
4356 | version "3.0.8" | 4320 | version "3.0.0" |
4357 | resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" | 4321 | resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" |
4358 | integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= | 4322 | integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== |
4359 | dependencies: | 4323 | dependencies: |
4360 | is-absolute-url "^2.0.0" | 4324 | icss-utils "^4.0.0" |
4361 | normalize-url "^1.4.0" | 4325 | postcss "^7.0.6" |
4362 | postcss "^5.0.14" | ||
4363 | postcss-value-parser "^3.2.3" | ||
4364 | 4326 | ||
4365 | postcss-ordered-values@^2.1.0: | 4327 | postcss-resolve-nested-selector@^0.1.1: |
4366 | version "2.2.3" | 4328 | version "0.1.1" |
4367 | resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" | 4329 | resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" |
4368 | integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= | 4330 | integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= |
4369 | dependencies: | ||
4370 | postcss "^5.0.4" | ||
4371 | postcss-value-parser "^3.0.1" | ||
4372 | 4331 | ||
4373 | postcss-reduce-idents@^2.2.2: | 4332 | postcss-safe-parser@^4.0.2: |
4374 | version "2.4.0" | 4333 | version "4.0.2" |
4375 | resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" | 4334 | resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" |
4376 | integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= | 4335 | integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== |
4377 | dependencies: | 4336 | dependencies: |
4378 | postcss "^5.0.4" | 4337 | postcss "^7.0.26" |
4379 | postcss-value-parser "^3.0.2" | ||
4380 | 4338 | ||
4381 | postcss-reduce-initial@^1.0.0: | 4339 | postcss-sass@^0.4.4: |
4382 | version "1.0.1" | 4340 | version "0.4.4" |
4383 | resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" | 4341 | resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.4.4.tgz#91f0f3447b45ce373227a98b61f8d8f0785285a3" |
4384 | integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= | 4342 | integrity sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg== |
4385 | dependencies: | 4343 | dependencies: |
4386 | postcss "^5.0.4" | 4344 | gonzales-pe "^4.3.0" |
4345 | postcss "^7.0.21" | ||
4387 | 4346 | ||
4388 | postcss-reduce-transforms@^1.0.3: | 4347 | postcss-scss@^2.1.1: |
4389 | version "1.0.4" | 4348 | version "2.1.1" |
4390 | resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" | 4349 | resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383" |
4391 | integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= | 4350 | integrity sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA== |
4392 | dependencies: | 4351 | dependencies: |
4393 | has "^1.0.1" | 4352 | postcss "^7.0.6" |
4394 | postcss "^5.0.8" | ||
4395 | postcss-value-parser "^3.0.1" | ||
4396 | 4353 | ||
4397 | postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: | 4354 | postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: |
4398 | version "2.2.3" | 4355 | version "6.0.3" |
4399 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" | 4356 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.3.tgz#766d77728728817cc140fa1ac6da5e77f9fada98" |
4400 | integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= | 4357 | integrity sha512-0ClFaY4X1ra21LRqbW6y3rUbWcxnSVkDFG57R7Nxus9J9myPFlv+jYDMohzpkBx0RrjjiqjtycpchQ+PLGmZ9w== |
4401 | dependencies: | 4358 | dependencies: |
4402 | flatten "^1.0.2" | 4359 | cssesc "^3.0.0" |
4403 | indexes-of "^1.0.1" | 4360 | indexes-of "^1.0.1" |
4404 | uniq "^1.0.1" | 4361 | uniq "^1.0.1" |
4362 | util-deprecate "^1.0.2" | ||
4405 | 4363 | ||
4406 | postcss-svgo@^2.1.1: | 4364 | postcss-syntax@^0.36.2: |
4407 | version "2.1.6" | 4365 | version "0.36.2" |
4408 | resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" | 4366 | resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" |
4409 | integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= | 4367 | integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== |
4410 | dependencies: | ||
4411 | is-svg "^2.0.0" | ||
4412 | postcss "^5.0.14" | ||
4413 | postcss-value-parser "^3.2.3" | ||
4414 | svgo "^0.7.0" | ||
4415 | |||
4416 | postcss-unique-selectors@^2.0.2: | ||
4417 | version "2.0.2" | ||
4418 | resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" | ||
4419 | integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= | ||
4420 | dependencies: | ||
4421 | alphanum-sort "^1.0.1" | ||
4422 | postcss "^5.0.4" | ||
4423 | uniqs "^2.0.0" | ||
4424 | |||
4425 | postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: | ||
4426 | version "3.3.1" | ||
4427 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" | ||
4428 | integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== | ||
4429 | 4368 | ||
4430 | postcss-zindex@^2.0.1: | 4369 | postcss-value-parser@^4.1.0: |
4431 | version "2.2.0" | 4370 | version "4.1.0" |
4432 | resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" | 4371 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" |
4433 | integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= | 4372 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== |
4434 | dependencies: | ||
4435 | has "^1.0.1" | ||
4436 | postcss "^5.0.4" | ||
4437 | uniqs "^2.0.0" | ||
4438 | |||
4439 | postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: | ||
4440 | version "5.2.18" | ||
4441 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" | ||
4442 | integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== | ||
4443 | dependencies: | ||
4444 | chalk "^1.1.3" | ||
4445 | js-base64 "^2.1.9" | ||
4446 | source-map "^0.5.6" | ||
4447 | supports-color "^3.2.3" | ||
4448 | 4373 | ||
4449 | postcss@^6.0.1: | 4374 | postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: |
4450 | version "6.0.23" | 4375 | version "7.0.34" |
4451 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" | 4376 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" |
4452 | integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== | 4377 | integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== |
4453 | dependencies: | 4378 | dependencies: |
4454 | chalk "^2.4.1" | 4379 | chalk "^2.4.2" |
4455 | source-map "^0.6.1" | 4380 | source-map "^0.6.1" |
4456 | supports-color "^5.4.0" | 4381 | supports-color "^6.1.0" |
4457 | 4382 | ||
4458 | prelude-ls@~1.1.2: | 4383 | prelude-ls@^1.2.1: |
4459 | version "1.1.2" | 4384 | version "1.2.1" |
4460 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" | 4385 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" |
4461 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= | 4386 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== |
4462 | 4387 | ||
4463 | prepend-http@^1.0.0: | 4388 | prepend-http@^1.0.0: |
4464 | version "1.0.4" | 4389 | version "1.0.4" |
4465 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" | 4390 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" |
4466 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= | 4391 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= |
4467 | 4392 | ||
4468 | private@^0.1.6, private@^0.1.8: | ||
4469 | version "0.1.8" | ||
4470 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" | ||
4471 | integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== | ||
4472 | |||
4473 | process-nextick-args@~2.0.0: | 4393 | process-nextick-args@~2.0.0: |
4474 | version "2.0.0" | 4394 | version "2.0.1" |
4475 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" | 4395 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" |
4476 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== | 4396 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== |
4477 | 4397 | ||
4478 | process@^0.11.10: | 4398 | process@^0.11.10: |
4479 | version "0.11.10" | 4399 | version "0.11.10" |
4480 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" | 4400 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" |
4481 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= | 4401 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= |
4482 | 4402 | ||
4483 | progress@^1.1.8: | ||
4484 | version "1.1.8" | ||
4485 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" | ||
4486 | integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= | ||
4487 | |||
4488 | progress@^2.0.0: | 4403 | progress@^2.0.0: |
4489 | version "2.0.3" | 4404 | version "2.0.3" |
4490 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" | 4405 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" |
4491 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== | 4406 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== |
4492 | 4407 | ||
4408 | promise-inflight@^1.0.1: | ||
4409 | version "1.0.1" | ||
4410 | resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" | ||
4411 | integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= | ||
4412 | |||
4493 | prr@~1.0.1: | 4413 | prr@~1.0.1: |
4494 | version "1.0.1" | 4414 | version "1.0.1" |
4495 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" | 4415 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" |
4496 | integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= | 4416 | integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= |
4497 | 4417 | ||
4498 | pseudomap@^1.0.2: | ||
4499 | version "1.0.2" | ||
4500 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" | ||
4501 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= | ||
4502 | |||
4503 | psl@^1.1.24: | ||
4504 | version "1.1.31" | ||
4505 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" | ||
4506 | integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== | ||
4507 | |||
4508 | public-encrypt@^4.0.0: | 4418 | public-encrypt@^4.0.0: |
4509 | version "4.0.3" | 4419 | version "4.0.3" |
4510 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" | 4420 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" |
@@ -4517,12 +4427,37 @@ public-encrypt@^4.0.0: | |||
4517 | randombytes "^2.0.1" | 4427 | randombytes "^2.0.1" |
4518 | safe-buffer "^5.1.2" | 4428 | safe-buffer "^5.1.2" |
4519 | 4429 | ||
4430 | pump@^2.0.0: | ||
4431 | version "2.0.1" | ||
4432 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" | ||
4433 | integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== | ||
4434 | dependencies: | ||
4435 | end-of-stream "^1.1.0" | ||
4436 | once "^1.3.1" | ||
4437 | |||
4438 | pump@^3.0.0: | ||
4439 | version "3.0.0" | ||
4440 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" | ||
4441 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== | ||
4442 | dependencies: | ||
4443 | end-of-stream "^1.1.0" | ||
4444 | once "^1.3.1" | ||
4445 | |||
4446 | pumpify@^1.3.3: | ||
4447 | version "1.5.1" | ||
4448 | resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" | ||
4449 | integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== | ||
4450 | dependencies: | ||
4451 | duplexify "^3.6.0" | ||
4452 | inherits "^2.0.3" | ||
4453 | pump "^2.0.0" | ||
4454 | |||
4520 | punycode@1.3.2: | 4455 | punycode@1.3.2: |
4521 | version "1.3.2" | 4456 | version "1.3.2" |
4522 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" | 4457 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" |
4523 | integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= | 4458 | integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= |
4524 | 4459 | ||
4525 | punycode@^1.2.4, punycode@^1.4.1: | 4460 | punycode@^1.2.4: |
4526 | version "1.4.1" | 4461 | version "1.4.1" |
4527 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" | 4462 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" |
4528 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= | 4463 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= |
@@ -4538,19 +4473,9 @@ pure-extras@^1.0.0: | |||
4538 | integrity sha1-N+PMNZDLqFCYFFTNpdso4npjhxo= | 4473 | integrity sha1-N+PMNZDLqFCYFFTNpdso4npjhxo= |
4539 | 4474 | ||
4540 | purecss@^1.0.0: | 4475 | purecss@^1.0.0: |
4541 | version "1.0.0" | 4476 | version "1.0.1" |
4542 | resolved "https://registry.yarnpkg.com/purecss/-/purecss-1.0.0.tgz#3dbcd9e2a7592448a69acb705cce16311bf4b785" | 4477 | resolved "https://registry.yarnpkg.com/purecss/-/purecss-1.0.1.tgz#c83d84326a10beb5c3b36d20c0254e946e5568a7" |
4543 | integrity sha512-gfC78WCOWNnfkzulx9aoWwcl+0JflhwKeJ+k9s/ZyIawfYNA4bqBmt0DtfgtQK9iuYMtGfbdE8R2AQMjSWR2VQ== | 4478 | integrity sha512-mTUc5ZzpzafswEhCmTDfSRMMyRFdLYdd+KywMwnBC/MuA/Th7jug2z0Xso4WkxvtxoU/BS9aRb7WnBNyuA7YJQ== |
4544 | |||
4545 | q@^1.1.2: | ||
4546 | version "1.5.1" | ||
4547 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" | ||
4548 | integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= | ||
4549 | |||
4550 | qs@~6.5.2: | ||
4551 | version "6.5.2" | ||
4552 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" | ||
4553 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== | ||
4554 | 4479 | ||
4555 | query-string@^4.1.0: | 4480 | query-string@^4.1.0: |
4556 | version "4.3.4" | 4481 | version "4.3.4" |
@@ -4570,7 +4495,12 @@ querystring@0.2.0: | |||
4570 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" | 4495 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" |
4571 | integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= | 4496 | integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= |
4572 | 4497 | ||
4573 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: | 4498 | quick-lru@^4.0.1: |
4499 | version "4.0.1" | ||
4500 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" | ||
4501 | integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== | ||
4502 | |||
4503 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: | ||
4574 | version "2.1.0" | 4504 | version "2.1.0" |
4575 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" | 4505 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" |
4576 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== | 4506 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== |
@@ -4585,24 +4515,6 @@ randomfill@^1.0.3: | |||
4585 | randombytes "^2.0.5" | 4515 | randombytes "^2.0.5" |
4586 | safe-buffer "^5.1.0" | 4516 | safe-buffer "^5.1.0" |
4587 | 4517 | ||
4588 | rc@^1.2.7: | ||
4589 | version "1.2.8" | ||
4590 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" | ||
4591 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== | ||
4592 | dependencies: | ||
4593 | deep-extend "^0.6.0" | ||
4594 | ini "~1.3.0" | ||
4595 | minimist "^1.2.0" | ||
4596 | strip-json-comments "~2.0.1" | ||
4597 | |||
4598 | read-pkg-up@^1.0.1: | ||
4599 | version "1.0.1" | ||
4600 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" | ||
4601 | integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= | ||
4602 | dependencies: | ||
4603 | find-up "^1.0.0" | ||
4604 | read-pkg "^1.0.0" | ||
4605 | |||
4606 | read-pkg-up@^2.0.0: | 4518 | read-pkg-up@^2.0.0: |
4607 | version "2.0.0" | 4519 | version "2.0.0" |
4608 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" | 4520 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" |
@@ -4611,14 +4523,14 @@ read-pkg-up@^2.0.0: | |||
4611 | find-up "^2.0.0" | 4523 | find-up "^2.0.0" |
4612 | read-pkg "^2.0.0" | 4524 | read-pkg "^2.0.0" |
4613 | 4525 | ||
4614 | read-pkg@^1.0.0: | 4526 | read-pkg-up@^7.0.1: |
4615 | version "1.1.0" | 4527 | version "7.0.1" |
4616 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" | 4528 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" |
4617 | integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= | 4529 | integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== |
4618 | dependencies: | 4530 | dependencies: |
4619 | load-json-file "^1.0.0" | 4531 | find-up "^4.1.0" |
4620 | normalize-package-data "^2.3.2" | 4532 | read-pkg "^5.2.0" |
4621 | path-type "^1.0.0" | 4533 | type-fest "^0.8.1" |
4622 | 4534 | ||
4623 | read-pkg@^2.0.0: | 4535 | read-pkg@^2.0.0: |
4624 | version "2.0.0" | 4536 | version "2.0.0" |
@@ -4629,10 +4541,20 @@ read-pkg@^2.0.0: | |||
4629 | normalize-package-data "^2.3.2" | 4541 | normalize-package-data "^2.3.2" |
4630 | path-type "^2.0.0" | 4542 | path-type "^2.0.0" |
4631 | 4543 | ||
4632 | readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: | 4544 | read-pkg@^5.2.0: |
4633 | version "2.3.6" | 4545 | version "5.2.0" |
4634 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" | 4546 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" |
4635 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== | 4547 | integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== |
4548 | dependencies: | ||
4549 | "@types/normalize-package-data" "^2.4.0" | ||
4550 | normalize-package-data "^2.5.0" | ||
4551 | parse-json "^5.0.0" | ||
4552 | type-fest "^0.6.0" | ||
4553 | |||
4554 | "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: | ||
4555 | version "2.3.7" | ||
4556 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" | ||
4557 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== | ||
4636 | dependencies: | 4558 | dependencies: |
4637 | core-util-is "~1.0.0" | 4559 | core-util-is "~1.0.0" |
4638 | inherits "~2.0.3" | 4560 | inherits "~2.0.3" |
@@ -4642,6 +4564,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable | |||
4642 | string_decoder "~1.1.1" | 4564 | string_decoder "~1.1.1" |
4643 | util-deprecate "~1.0.1" | 4565 | util-deprecate "~1.0.1" |
4644 | 4566 | ||
4567 | readable-stream@^3.1.1, readable-stream@^3.6.0: | ||
4568 | version "3.6.0" | ||
4569 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" | ||
4570 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== | ||
4571 | dependencies: | ||
4572 | inherits "^2.0.3" | ||
4573 | string_decoder "^1.1.1" | ||
4574 | util-deprecate "^1.0.1" | ||
4575 | |||
4645 | readdirp@^2.2.1: | 4576 | readdirp@^2.2.1: |
4646 | version "2.2.1" | 4577 | version "2.2.1" |
4647 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" | 4578 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" |
@@ -4651,57 +4582,44 @@ readdirp@^2.2.1: | |||
4651 | micromatch "^3.1.10" | 4582 | micromatch "^3.1.10" |
4652 | readable-stream "^2.0.2" | 4583 | readable-stream "^2.0.2" |
4653 | 4584 | ||
4654 | readline2@^1.0.1: | 4585 | readdirp@~3.4.0: |
4655 | version "1.0.1" | 4586 | version "3.4.0" |
4656 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" | 4587 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" |
4657 | integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU= | 4588 | integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== |
4658 | dependencies: | ||
4659 | code-point-at "^1.0.0" | ||
4660 | is-fullwidth-code-point "^1.0.0" | ||
4661 | mute-stream "0.0.5" | ||
4662 | |||
4663 | redent@^1.0.0: | ||
4664 | version "1.0.0" | ||
4665 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" | ||
4666 | integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= | ||
4667 | dependencies: | 4589 | dependencies: |
4668 | indent-string "^2.1.0" | 4590 | picomatch "^2.2.1" |
4669 | strip-indent "^1.0.1" | ||
4670 | 4591 | ||
4671 | reduce-css-calc@^1.2.6: | 4592 | redent@^3.0.0: |
4672 | version "1.3.0" | 4593 | version "3.0.0" |
4673 | resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" | 4594 | resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" |
4674 | integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= | 4595 | integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== |
4675 | dependencies: | 4596 | dependencies: |
4676 | balanced-match "^0.4.2" | 4597 | indent-string "^4.0.0" |
4677 | math-expression-evaluator "^1.2.14" | 4598 | strip-indent "^3.0.0" |
4678 | reduce-function-call "^1.0.1" | ||
4679 | 4599 | ||
4680 | reduce-function-call@^1.0.1: | 4600 | regenerate-unicode-properties@^8.2.0: |
4681 | version "1.0.2" | 4601 | version "8.2.0" |
4682 | resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" | 4602 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" |
4683 | integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= | 4603 | integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== |
4684 | dependencies: | 4604 | dependencies: |
4685 | balanced-match "^0.4.2" | 4605 | regenerate "^1.4.0" |
4686 | 4606 | ||
4687 | regenerate@^1.2.1: | 4607 | regenerate@^1.4.0: |
4688 | version "1.4.0" | 4608 | version "1.4.1" |
4689 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" | 4609 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" |
4690 | integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== | 4610 | integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== |
4691 | 4611 | ||
4692 | regenerator-runtime@^0.11.0: | 4612 | regenerator-runtime@^0.13.4: |
4693 | version "0.11.1" | 4613 | version "0.13.7" |
4694 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" | 4614 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" |
4695 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== | 4615 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== |
4696 | 4616 | ||
4697 | regenerator-transform@^0.10.0: | 4617 | regenerator-transform@^0.14.2: |
4698 | version "0.10.1" | 4618 | version "0.14.5" |
4699 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" | 4619 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" |
4700 | integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== | 4620 | integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== |
4701 | dependencies: | 4621 | dependencies: |
4702 | babel-runtime "^6.18.0" | 4622 | "@babel/runtime" "^7.8.4" |
4703 | babel-types "^6.19.0" | ||
4704 | private "^0.1.6" | ||
4705 | 4623 | ||
4706 | regex-not@^1.0.0, regex-not@^1.0.2: | 4624 | regex-not@^1.0.0, regex-not@^1.0.2: |
4707 | version "1.0.2" | 4625 | version "1.0.2" |
@@ -4711,41 +4629,86 @@ regex-not@^1.0.0, regex-not@^1.0.2: | |||
4711 | extend-shallow "^3.0.2" | 4629 | extend-shallow "^3.0.2" |
4712 | safe-regex "^1.1.0" | 4630 | safe-regex "^1.1.0" |
4713 | 4631 | ||
4714 | regexpp@^1.0.1: | 4632 | regexpp@^3.1.0: |
4715 | version "1.1.0" | 4633 | version "3.1.0" |
4716 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" | 4634 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" |
4717 | integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== | 4635 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== |
4718 | 4636 | ||
4719 | regexpu-core@^1.0.0: | 4637 | regexpu-core@^4.7.0: |
4720 | version "1.0.0" | 4638 | version "4.7.1" |
4721 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" | 4639 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" |
4722 | integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= | 4640 | integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== |
4723 | dependencies: | 4641 | dependencies: |
4724 | regenerate "^1.2.1" | 4642 | regenerate "^1.4.0" |
4725 | regjsgen "^0.2.0" | 4643 | regenerate-unicode-properties "^8.2.0" |
4726 | regjsparser "^0.1.4" | 4644 | regjsgen "^0.5.1" |
4727 | 4645 | regjsparser "^0.6.4" | |
4728 | regexpu-core@^2.0.0: | 4646 | unicode-match-property-ecmascript "^1.0.4" |
4729 | version "2.0.0" | 4647 | unicode-match-property-value-ecmascript "^1.2.0" |
4730 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" | 4648 | |
4731 | integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= | 4649 | regjsgen@^0.5.1: |
4732 | dependencies: | 4650 | version "0.5.2" |
4733 | regenerate "^1.2.1" | 4651 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" |
4734 | regjsgen "^0.2.0" | 4652 | integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== |
4735 | regjsparser "^0.1.4" | ||
4736 | |||
4737 | regjsgen@^0.2.0: | ||
4738 | version "0.2.0" | ||
4739 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" | ||
4740 | integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= | ||
4741 | 4653 | ||
4742 | regjsparser@^0.1.4: | 4654 | regjsparser@^0.6.4: |
4743 | version "0.1.5" | 4655 | version "0.6.4" |
4744 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" | 4656 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" |
4745 | integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= | 4657 | integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== |
4746 | dependencies: | 4658 | dependencies: |
4747 | jsesc "~0.5.0" | 4659 | jsesc "~0.5.0" |
4748 | 4660 | ||
4661 | remark-parse@^8.0.0: | ||
4662 | version "8.0.3" | ||
4663 | resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" | ||
4664 | integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== | ||
4665 | dependencies: | ||
4666 | ccount "^1.0.0" | ||
4667 | collapse-white-space "^1.0.2" | ||
4668 | is-alphabetical "^1.0.0" | ||
4669 | is-decimal "^1.0.0" | ||
4670 | is-whitespace-character "^1.0.0" | ||
4671 | is-word-character "^1.0.0" | ||
4672 | markdown-escapes "^1.0.0" | ||
4673 | parse-entities "^2.0.0" | ||
4674 | repeat-string "^1.5.4" | ||
4675 | state-toggle "^1.0.0" | ||
4676 | trim "0.0.1" | ||
4677 | trim-trailing-lines "^1.0.0" | ||
4678 | unherit "^1.0.4" | ||
4679 | unist-util-remove-position "^2.0.0" | ||
4680 | vfile-location "^3.0.0" | ||
4681 | xtend "^4.0.1" | ||
4682 | |||
4683 | remark-stringify@^8.0.0: | ||
4684 | version "8.1.1" | ||
4685 | resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5" | ||
4686 | integrity sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A== | ||
4687 | dependencies: | ||
4688 | ccount "^1.0.0" | ||
4689 | is-alphanumeric "^1.0.0" | ||
4690 | is-decimal "^1.0.0" | ||
4691 | is-whitespace-character "^1.0.0" | ||
4692 | longest-streak "^2.0.1" | ||
4693 | markdown-escapes "^1.0.0" | ||
4694 | markdown-table "^2.0.0" | ||
4695 | mdast-util-compact "^2.0.0" | ||
4696 | parse-entities "^2.0.0" | ||
4697 | repeat-string "^1.5.4" | ||
4698 | state-toggle "^1.0.0" | ||
4699 | stringify-entities "^3.0.0" | ||
4700 | unherit "^1.0.4" | ||
4701 | xtend "^4.0.1" | ||
4702 | |||
4703 | remark@^12.0.0: | ||
4704 | version "12.0.1" | ||
4705 | resolved "https://registry.yarnpkg.com/remark/-/remark-12.0.1.tgz#f1ddf68db7be71ca2bad0a33cd3678b86b9c709f" | ||
4706 | integrity sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw== | ||
4707 | dependencies: | ||
4708 | remark-parse "^8.0.0" | ||
4709 | remark-stringify "^8.0.0" | ||
4710 | unified "^9.0.0" | ||
4711 | |||
4749 | remove-trailing-separator@^1.0.1: | 4712 | remove-trailing-separator@^1.0.1: |
4750 | version "1.1.0" | 4713 | version "1.1.0" |
4751 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" | 4714 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" |
@@ -4756,114 +4719,99 @@ repeat-element@^1.1.2: | |||
4756 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" | 4719 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" |
4757 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== | 4720 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== |
4758 | 4721 | ||
4759 | repeat-string@^1.5.2, repeat-string@^1.6.1: | 4722 | repeat-string@^1.0.0, repeat-string@^1.5.4, repeat-string@^1.6.1: |
4760 | version "1.6.1" | 4723 | version "1.6.1" |
4761 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" | 4724 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" |
4762 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= | 4725 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= |
4763 | 4726 | ||
4764 | repeating@^2.0.0: | 4727 | replace-ext@1.0.0: |
4765 | version "2.0.1" | 4728 | version "1.0.0" |
4766 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" | 4729 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" |
4767 | integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= | 4730 | integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= |
4768 | dependencies: | ||
4769 | is-finite "^1.0.0" | ||
4770 | |||
4771 | request@^2.87.0, request@^2.88.0: | ||
4772 | version "2.88.0" | ||
4773 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" | ||
4774 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== | ||
4775 | dependencies: | ||
4776 | aws-sign2 "~0.7.0" | ||
4777 | aws4 "^1.8.0" | ||
4778 | caseless "~0.12.0" | ||
4779 | combined-stream "~1.0.6" | ||
4780 | extend "~3.0.2" | ||
4781 | forever-agent "~0.6.1" | ||
4782 | form-data "~2.3.2" | ||
4783 | har-validator "~5.1.0" | ||
4784 | http-signature "~1.2.0" | ||
4785 | is-typedarray "~1.0.0" | ||
4786 | isstream "~0.1.2" | ||
4787 | json-stringify-safe "~5.0.1" | ||
4788 | mime-types "~2.1.19" | ||
4789 | oauth-sign "~0.9.0" | ||
4790 | performance-now "^2.1.0" | ||
4791 | qs "~6.5.2" | ||
4792 | safe-buffer "^5.1.2" | ||
4793 | tough-cookie "~2.4.3" | ||
4794 | tunnel-agent "^0.6.0" | ||
4795 | uuid "^3.3.2" | ||
4796 | 4731 | ||
4797 | require-directory@^2.1.1: | 4732 | require-directory@^2.1.1: |
4798 | version "2.1.1" | 4733 | version "2.1.1" |
4799 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" | 4734 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" |
4800 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= | 4735 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= |
4801 | 4736 | ||
4802 | require-main-filename@^1.0.1: | 4737 | require-main-filename@^2.0.0: |
4803 | version "1.0.1" | 4738 | version "2.0.0" |
4804 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" | 4739 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" |
4805 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= | 4740 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== |
4806 | 4741 | ||
4807 | require-uncached@^1.0.2, require-uncached@^1.0.3: | 4742 | resolve-cwd@^2.0.0: |
4808 | version "1.0.3" | 4743 | version "2.0.0" |
4809 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" | 4744 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" |
4810 | integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= | 4745 | integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= |
4811 | dependencies: | 4746 | dependencies: |
4812 | caller-path "^0.1.0" | 4747 | resolve-from "^3.0.0" |
4813 | resolve-from "^1.0.0" | ||
4814 | 4748 | ||
4815 | resolve-from@^1.0.0: | 4749 | resolve-dir@^1.0.0, resolve-dir@^1.0.1: |
4816 | version "1.0.1" | 4750 | version "1.0.1" |
4817 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" | 4751 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" |
4818 | integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= | 4752 | integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= |
4753 | dependencies: | ||
4754 | expand-tilde "^2.0.0" | ||
4755 | global-modules "^1.0.0" | ||
4756 | |||
4757 | resolve-from@^3.0.0: | ||
4758 | version "3.0.0" | ||
4759 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" | ||
4760 | integrity sha1-six699nWiBvItuZTM17rywoYh0g= | ||
4761 | |||
4762 | resolve-from@^4.0.0: | ||
4763 | version "4.0.0" | ||
4764 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" | ||
4765 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== | ||
4766 | |||
4767 | resolve-from@^5.0.0: | ||
4768 | version "5.0.0" | ||
4769 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" | ||
4770 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== | ||
4819 | 4771 | ||
4820 | resolve-url@^0.2.1: | 4772 | resolve-url@^0.2.1: |
4821 | version "0.2.1" | 4773 | version "0.2.1" |
4822 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" | 4774 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" |
4823 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= | 4775 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= |
4824 | 4776 | ||
4825 | resolve@^1.10.0, resolve@^1.5.0: | 4777 | resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2: |
4826 | version "1.11.0" | 4778 | version "1.17.0" |
4827 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" | 4779 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" |
4828 | integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== | 4780 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== |
4829 | dependencies: | 4781 | dependencies: |
4830 | path-parse "^1.0.6" | 4782 | path-parse "^1.0.6" |
4831 | 4783 | ||
4832 | restore-cursor@^1.0.1: | ||
4833 | version "1.0.1" | ||
4834 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" | ||
4835 | integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= | ||
4836 | dependencies: | ||
4837 | exit-hook "^1.0.0" | ||
4838 | onetime "^1.0.0" | ||
4839 | |||
4840 | restore-cursor@^2.0.0: | ||
4841 | version "2.0.0" | ||
4842 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" | ||
4843 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= | ||
4844 | dependencies: | ||
4845 | onetime "^2.0.0" | ||
4846 | signal-exit "^3.0.2" | ||
4847 | |||
4848 | ret@~0.1.10: | 4784 | ret@~0.1.10: |
4849 | version "0.1.15" | 4785 | version "0.1.15" |
4850 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" | 4786 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" |
4851 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== | 4787 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== |
4852 | 4788 | ||
4853 | right-align@^0.1.1: | 4789 | reusify@^1.0.4: |
4854 | version "0.1.3" | 4790 | version "1.0.4" |
4855 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" | 4791 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" |
4856 | integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= | 4792 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== |
4857 | dependencies: | ||
4858 | align-text "^0.1.1" | ||
4859 | 4793 | ||
4860 | rimraf@2, rimraf@^2.6.1, rimraf@~2.6.2: | 4794 | rimraf@2.6.3: |
4861 | version "2.6.3" | 4795 | version "2.6.3" |
4862 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" | 4796 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" |
4863 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== | 4797 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== |
4864 | dependencies: | 4798 | dependencies: |
4865 | glob "^7.1.3" | 4799 | glob "^7.1.3" |
4866 | 4800 | ||
4801 | rimraf@^2.5.4, rimraf@^2.6.3: | ||
4802 | version "2.7.1" | ||
4803 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" | ||
4804 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== | ||
4805 | dependencies: | ||
4806 | glob "^7.1.3" | ||
4807 | |||
4808 | rimraf@^3.0.2: | ||
4809 | version "3.0.2" | ||
4810 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" | ||
4811 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== | ||
4812 | dependencies: | ||
4813 | glob "^7.1.3" | ||
4814 | |||
4867 | ripemd160@^2.0.0, ripemd160@^2.0.1: | 4815 | ripemd160@^2.0.0, ripemd160@^2.0.1: |
4868 | version "2.0.2" | 4816 | version "2.0.2" |
4869 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" | 4817 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" |
@@ -4872,38 +4820,24 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: | |||
4872 | hash-base "^3.0.0" | 4820 | hash-base "^3.0.0" |
4873 | inherits "^2.0.1" | 4821 | inherits "^2.0.1" |
4874 | 4822 | ||
4875 | run-async@^0.1.0: | 4823 | run-parallel@^1.1.9: |
4876 | version "0.1.0" | 4824 | version "1.1.9" |
4877 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" | 4825 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" |
4878 | integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k= | 4826 | integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== |
4879 | dependencies: | ||
4880 | once "^1.3.0" | ||
4881 | |||
4882 | run-async@^2.2.0: | ||
4883 | version "2.3.0" | ||
4884 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" | ||
4885 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= | ||
4886 | dependencies: | ||
4887 | is-promise "^2.1.0" | ||
4888 | 4827 | ||
4889 | rx-lite-aggregates@^4.0.8: | 4828 | run-queue@^1.0.0, run-queue@^1.0.3: |
4890 | version "4.0.8" | 4829 | version "1.0.3" |
4891 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" | 4830 | resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" |
4892 | integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= | 4831 | integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= |
4893 | dependencies: | 4832 | dependencies: |
4894 | rx-lite "*" | 4833 | aproba "^1.1.1" |
4895 | |||
4896 | rx-lite@*, rx-lite@^4.0.8: | ||
4897 | version "4.0.8" | ||
4898 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" | ||
4899 | integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= | ||
4900 | 4834 | ||
4901 | rx-lite@^3.1.2: | 4835 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: |
4902 | version "3.1.2" | 4836 | version "5.2.1" |
4903 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" | 4837 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" |
4904 | integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI= | 4838 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== |
4905 | 4839 | ||
4906 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: | 4840 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: |
4907 | version "5.1.2" | 4841 | version "5.1.2" |
4908 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" | 4842 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" |
4909 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== | 4843 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== |
@@ -4915,63 +4849,28 @@ safe-regex@^1.1.0: | |||
4915 | dependencies: | 4849 | dependencies: |
4916 | ret "~0.1.10" | 4850 | ret "~0.1.10" |
4917 | 4851 | ||
4918 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: | 4852 | safer-buffer@^2.1.0: |
4919 | version "2.1.2" | 4853 | version "2.1.2" |
4920 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" | 4854 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" |
4921 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== | 4855 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== |
4922 | 4856 | ||
4923 | sass-graph@^2.2.4: | 4857 | sass-loader@^10.0.2: |
4924 | version "2.2.4" | 4858 | version "10.0.2" |
4925 | resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" | 4859 | resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.2.tgz#c7b73010848b264792dd45372eea0b87cba4401e" |
4926 | integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= | 4860 | integrity sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg== |
4927 | dependencies: | ||
4928 | glob "^7.0.0" | ||
4929 | lodash "^4.0.0" | ||
4930 | scss-tokenizer "^0.2.3" | ||
4931 | yargs "^7.0.0" | ||
4932 | |||
4933 | sass-lint@^1.12.1: | ||
4934 | version "1.13.1" | ||
4935 | resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.13.1.tgz#5fd2b2792e9215272335eb0f0dc607f61e8acc8f" | ||
4936 | integrity sha512-DSyah8/MyjzW2BWYmQWekYEKir44BpLqrCFsgs9iaWiVTcwZfwXHF586hh3D1n+/9ihUNMfd8iHAyb9KkGgs7Q== | ||
4937 | dependencies: | ||
4938 | commander "^2.8.1" | ||
4939 | eslint "^2.7.0" | ||
4940 | front-matter "2.1.2" | ||
4941 | fs-extra "^3.0.1" | ||
4942 | glob "^7.0.0" | ||
4943 | globule "^1.0.0" | ||
4944 | gonzales-pe-sl "^4.2.3" | ||
4945 | js-yaml "^3.5.4" | ||
4946 | known-css-properties "^0.3.0" | ||
4947 | lodash.capitalize "^4.1.0" | ||
4948 | lodash.kebabcase "^4.0.0" | ||
4949 | merge "^1.2.0" | ||
4950 | path-is-absolute "^1.0.0" | ||
4951 | util "^0.10.3" | ||
4952 | |||
4953 | sass-loader@^6.0.6: | ||
4954 | version "6.0.7" | ||
4955 | resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" | ||
4956 | integrity sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA== | ||
4957 | dependencies: | 4861 | dependencies: |
4958 | clone-deep "^2.0.1" | 4862 | klona "^2.0.3" |
4959 | loader-utils "^1.0.1" | 4863 | loader-utils "^2.0.0" |
4960 | lodash.tail "^4.1.1" | 4864 | neo-async "^2.6.2" |
4961 | neo-async "^2.5.0" | 4865 | schema-utils "^2.7.1" |
4962 | pify "^3.0.0" | 4866 | semver "^7.3.2" |
4963 | |||
4964 | sax@^1.2.4, sax@~1.2.1: | ||
4965 | version "1.2.4" | ||
4966 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" | ||
4967 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== | ||
4968 | 4867 | ||
4969 | schema-utils@^0.3.0: | 4868 | sass@^1.26.11: |
4970 | version "0.3.0" | 4869 | version "1.26.11" |
4971 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" | 4870 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.11.tgz#0f22cc4ab2ba27dad1d4ca30837beb350b709847" |
4972 | integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8= | 4871 | integrity sha512-W1l/+vjGjIamsJ6OnTe0K37U2DBO/dgsv2Z4c89XQ8ZOO6l/VwkqwLSqoYzJeJs6CLuGSTRWc91GbQFL3lvrvw== |
4973 | dependencies: | 4872 | dependencies: |
4974 | ajv "^5.0.0" | 4873 | chokidar ">=2.0.0 <4.0.0" |
4975 | 4874 | ||
4976 | schema-utils@^0.4.5: | 4875 | schema-utils@^0.4.5: |
4977 | version "0.4.7" | 4876 | version "0.4.7" |
@@ -4981,43 +4880,67 @@ schema-utils@^0.4.5: | |||
4981 | ajv "^6.1.0" | 4880 | ajv "^6.1.0" |
4982 | ajv-keywords "^3.1.0" | 4881 | ajv-keywords "^3.1.0" |
4983 | 4882 | ||
4984 | scss-tokenizer@^0.2.3: | 4883 | schema-utils@^1.0.0: |
4985 | version "0.2.3" | 4884 | version "1.0.0" |
4986 | resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" | 4885 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" |
4987 | integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= | 4886 | integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== |
4988 | dependencies: | 4887 | dependencies: |
4989 | js-base64 "^2.1.8" | 4888 | ajv "^6.1.0" |
4990 | source-map "^0.4.2" | 4889 | ajv-errors "^1.0.0" |
4890 | ajv-keywords "^3.1.0" | ||
4991 | 4891 | ||
4992 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: | 4892 | schema-utils@^2.6.5, schema-utils@^2.7.1: |
4993 | version "5.7.0" | 4893 | version "2.7.1" |
4994 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" | 4894 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" |
4995 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== | 4895 | integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== |
4896 | dependencies: | ||
4897 | "@types/json-schema" "^7.0.5" | ||
4898 | ajv "^6.12.4" | ||
4899 | ajv-keywords "^3.5.2" | ||
4996 | 4900 | ||
4997 | semver@~5.3.0: | 4901 | "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: |
4998 | version "5.3.0" | 4902 | version "5.7.1" |
4999 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" | 4903 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" |
5000 | integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= | 4904 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== |
5001 | 4905 | ||
5002 | set-blocking@^2.0.0, set-blocking@~2.0.0: | 4906 | semver@7.0.0: |
5003 | version "2.0.0" | 4907 | version "7.0.0" |
5004 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" | 4908 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" |
5005 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= | 4909 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== |
4910 | |||
4911 | semver@^6.0.0: | ||
4912 | version "6.3.0" | ||
4913 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" | ||
4914 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== | ||
5006 | 4915 | ||
5007 | set-value@^0.4.3: | 4916 | semver@^7.2.1, semver@^7.3.2: |
5008 | version "0.4.3" | 4917 | version "7.3.2" |
5009 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" | 4918 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" |
5010 | integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= | 4919 | integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== |
4920 | |||
4921 | serialize-javascript@^4.0.0: | ||
4922 | version "4.0.0" | ||
4923 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" | ||
4924 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== | ||
5011 | dependencies: | 4925 | dependencies: |
5012 | extend-shallow "^2.0.1" | 4926 | randombytes "^2.1.0" |
5013 | is-extendable "^0.1.1" | ||
5014 | is-plain-object "^2.0.1" | ||
5015 | to-object-path "^0.3.0" | ||
5016 | 4927 | ||
5017 | set-value@^2.0.0: | 4928 | serialize-javascript@^5.0.1: |
4929 | version "5.0.1" | ||
4930 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" | ||
4931 | integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== | ||
4932 | dependencies: | ||
4933 | randombytes "^2.1.0" | ||
4934 | |||
4935 | set-blocking@^2.0.0: | ||
5018 | version "2.0.0" | 4936 | version "2.0.0" |
5019 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" | 4937 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" |
5020 | integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== | 4938 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= |
4939 | |||
4940 | set-value@^2.0.0, set-value@^2.0.1: | ||
4941 | version "2.0.1" | ||
4942 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" | ||
4943 | integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== | ||
5021 | dependencies: | 4944 | dependencies: |
5022 | extend-shallow "^2.0.1" | 4945 | extend-shallow "^2.0.1" |
5023 | is-extendable "^0.1.1" | 4946 | is-extendable "^0.1.1" |
@@ -5037,15 +4960,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: | |||
5037 | inherits "^2.0.1" | 4960 | inherits "^2.0.1" |
5038 | safe-buffer "^5.0.1" | 4961 | safe-buffer "^5.0.1" |
5039 | 4962 | ||
5040 | shallow-clone@^1.0.0: | ||
5041 | version "1.0.0" | ||
5042 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" | ||
5043 | integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== | ||
5044 | dependencies: | ||
5045 | is-extendable "^0.1.1" | ||
5046 | kind-of "^5.0.0" | ||
5047 | mixin-object "^2.0.1" | ||
5048 | |||
5049 | shebang-command@^1.2.0: | 4963 | shebang-command@^1.2.0: |
5050 | version "1.2.0" | 4964 | version "1.2.0" |
5051 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" | 4965 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" |
@@ -5053,38 +4967,51 @@ shebang-command@^1.2.0: | |||
5053 | dependencies: | 4967 | dependencies: |
5054 | shebang-regex "^1.0.0" | 4968 | shebang-regex "^1.0.0" |
5055 | 4969 | ||
4970 | shebang-command@^2.0.0: | ||
4971 | version "2.0.0" | ||
4972 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" | ||
4973 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== | ||
4974 | dependencies: | ||
4975 | shebang-regex "^3.0.0" | ||
4976 | |||
5056 | shebang-regex@^1.0.0: | 4977 | shebang-regex@^1.0.0: |
5057 | version "1.0.0" | 4978 | version "1.0.0" |
5058 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" | 4979 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" |
5059 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= | 4980 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= |
5060 | 4981 | ||
5061 | shelljs@^0.6.0: | 4982 | shebang-regex@^3.0.0: |
5062 | version "0.6.1" | 4983 | version "3.0.0" |
5063 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" | 4984 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" |
5064 | integrity sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg= | 4985 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== |
5065 | |||
5066 | signal-exit@^3.0.0, signal-exit@^3.0.2: | ||
5067 | version "3.0.2" | ||
5068 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" | ||
5069 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= | ||
5070 | 4986 | ||
5071 | slash@^1.0.0: | 4987 | signal-exit@^3.0.2: |
5072 | version "1.0.0" | 4988 | version "3.0.3" |
5073 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" | 4989 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" |
5074 | integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= | 4990 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== |
5075 | 4991 | ||
5076 | slice-ansi@0.0.4: | 4992 | slash@^3.0.0: |
5077 | version "0.0.4" | 4993 | version "3.0.0" |
5078 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" | 4994 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" |
5079 | integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= | 4995 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== |
5080 | 4996 | ||
5081 | slice-ansi@1.0.0: | 4997 | slice-ansi@^2.1.0: |
5082 | version "1.0.0" | 4998 | version "2.1.0" |
5083 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" | 4999 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" |
5084 | integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== | 5000 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== |
5085 | dependencies: | 5001 | dependencies: |
5002 | ansi-styles "^3.2.0" | ||
5003 | astral-regex "^1.0.0" | ||
5086 | is-fullwidth-code-point "^2.0.0" | 5004 | is-fullwidth-code-point "^2.0.0" |
5087 | 5005 | ||
5006 | slice-ansi@^4.0.0: | ||
5007 | version "4.0.0" | ||
5008 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" | ||
5009 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== | ||
5010 | dependencies: | ||
5011 | ansi-styles "^4.0.0" | ||
5012 | astral-regex "^2.0.0" | ||
5013 | is-fullwidth-code-point "^3.0.0" | ||
5014 | |||
5088 | snapdragon-node@^2.0.1: | 5015 | snapdragon-node@^2.0.1: |
5089 | version "2.1.1" | 5016 | version "2.1.1" |
5090 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" | 5017 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" |
@@ -5128,70 +5055,69 @@ source-list-map@^2.0.0: | |||
5128 | integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== | 5055 | integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== |
5129 | 5056 | ||
5130 | source-map-resolve@^0.5.0: | 5057 | source-map-resolve@^0.5.0: |
5131 | version "0.5.2" | 5058 | version "0.5.3" |
5132 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" | 5059 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" |
5133 | integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== | 5060 | integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== |
5134 | dependencies: | 5061 | dependencies: |
5135 | atob "^2.1.1" | 5062 | atob "^2.1.2" |
5136 | decode-uri-component "^0.2.0" | 5063 | decode-uri-component "^0.2.0" |
5137 | resolve-url "^0.2.1" | 5064 | resolve-url "^0.2.1" |
5138 | source-map-url "^0.4.0" | 5065 | source-map-url "^0.4.0" |
5139 | urix "^0.1.0" | 5066 | urix "^0.1.0" |
5140 | 5067 | ||
5141 | source-map-support@^0.4.15: | 5068 | source-map-support@~0.5.12: |
5142 | version "0.4.18" | 5069 | version "0.5.19" |
5143 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" | 5070 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" |
5144 | integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== | 5071 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== |
5145 | dependencies: | 5072 | dependencies: |
5146 | source-map "^0.5.6" | 5073 | buffer-from "^1.0.0" |
5074 | source-map "^0.6.0" | ||
5147 | 5075 | ||
5148 | source-map-url@^0.4.0: | 5076 | source-map-url@^0.4.0: |
5149 | version "0.4.0" | 5077 | version "0.4.0" |
5150 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" | 5078 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" |
5151 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= | 5079 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= |
5152 | 5080 | ||
5153 | source-map@^0.4.2: | 5081 | source-map@^0.5.0, source-map@^0.5.6: |
5154 | version "0.4.4" | ||
5155 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" | ||
5156 | integrity sha1-66T12pwNyZneaAMti092FzZSA2s= | ||
5157 | dependencies: | ||
5158 | amdefine ">=0.0.4" | ||
5159 | |||
5160 | source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: | ||
5161 | version "0.5.7" | 5082 | version "0.5.7" |
5162 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" | 5083 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" |
5163 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= | 5084 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= |
5164 | 5085 | ||
5165 | source-map@^0.6.1, source-map@~0.6.1: | 5086 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: |
5166 | version "0.6.1" | 5087 | version "0.6.1" |
5167 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" | 5088 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" |
5168 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== | 5089 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== |
5169 | 5090 | ||
5170 | spdx-correct@^3.0.0: | 5091 | spdx-correct@^3.0.0: |
5171 | version "3.1.0" | 5092 | version "3.1.1" |
5172 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" | 5093 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" |
5173 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== | 5094 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== |
5174 | dependencies: | 5095 | dependencies: |
5175 | spdx-expression-parse "^3.0.0" | 5096 | spdx-expression-parse "^3.0.0" |
5176 | spdx-license-ids "^3.0.0" | 5097 | spdx-license-ids "^3.0.0" |
5177 | 5098 | ||
5178 | spdx-exceptions@^2.1.0: | 5099 | spdx-exceptions@^2.1.0: |
5179 | version "2.2.0" | 5100 | version "2.3.0" |
5180 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" | 5101 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" |
5181 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== | 5102 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== |
5182 | 5103 | ||
5183 | spdx-expression-parse@^3.0.0: | 5104 | spdx-expression-parse@^3.0.0: |
5184 | version "3.0.0" | 5105 | version "3.0.1" |
5185 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" | 5106 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" |
5186 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== | 5107 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== |
5187 | dependencies: | 5108 | dependencies: |
5188 | spdx-exceptions "^2.1.0" | 5109 | spdx-exceptions "^2.1.0" |
5189 | spdx-license-ids "^3.0.0" | 5110 | spdx-license-ids "^3.0.0" |
5190 | 5111 | ||
5191 | spdx-license-ids@^3.0.0: | 5112 | spdx-license-ids@^3.0.0: |
5192 | version "3.0.4" | 5113 | version "3.0.6" |
5193 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" | 5114 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" |
5194 | integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== | 5115 | integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== |
5116 | |||
5117 | specificity@^0.4.1: | ||
5118 | version "0.4.1" | ||
5119 | resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" | ||
5120 | integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== | ||
5195 | 5121 | ||
5196 | split-string@^3.0.1, split-string@^3.0.2: | 5122 | split-string@^3.0.1, split-string@^3.0.2: |
5197 | version "3.1.0" | 5123 | version "3.1.0" |
@@ -5205,20 +5131,24 @@ sprintf-js@~1.0.2: | |||
5205 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" | 5131 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" |
5206 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= | 5132 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= |
5207 | 5133 | ||
5208 | sshpk@^1.7.0: | 5134 | ssri@^6.0.1: |
5209 | version "1.16.1" | 5135 | version "6.0.1" |
5210 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" | 5136 | resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" |
5211 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== | 5137 | integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== |
5212 | dependencies: | 5138 | dependencies: |
5213 | asn1 "~0.2.3" | 5139 | figgy-pudding "^3.5.1" |
5214 | assert-plus "^1.0.0" | 5140 | |
5215 | bcrypt-pbkdf "^1.0.0" | 5141 | ssri@^8.0.0: |
5216 | dashdash "^1.12.0" | 5142 | version "8.0.0" |
5217 | ecc-jsbn "~0.1.1" | 5143 | resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" |
5218 | getpass "^0.1.1" | 5144 | integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== |
5219 | jsbn "~0.1.0" | 5145 | dependencies: |
5220 | safer-buffer "^2.0.2" | 5146 | minipass "^3.1.1" |
5221 | tweetnacl "~0.14.0" | 5147 | |
5148 | state-toggle@^1.0.0: | ||
5149 | version "1.0.3" | ||
5150 | resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" | ||
5151 | integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== | ||
5222 | 5152 | ||
5223 | static-extend@^0.1.1: | 5153 | static-extend@^0.1.1: |
5224 | version "0.1.2" | 5154 | version "0.1.2" |
@@ -5228,13 +5158,6 @@ static-extend@^0.1.1: | |||
5228 | define-property "^0.2.5" | 5158 | define-property "^0.2.5" |
5229 | object-copy "^0.1.0" | 5159 | object-copy "^0.1.0" |
5230 | 5160 | ||
5231 | stdout-stream@^1.4.0: | ||
5232 | version "1.4.1" | ||
5233 | resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" | ||
5234 | integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== | ||
5235 | dependencies: | ||
5236 | readable-stream "^2.0.1" | ||
5237 | |||
5238 | stream-browserify@^2.0.1: | 5161 | stream-browserify@^2.0.1: |
5239 | version "2.0.2" | 5162 | version "2.0.2" |
5240 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" | 5163 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" |
@@ -5243,6 +5166,14 @@ stream-browserify@^2.0.1: | |||
5243 | inherits "~2.0.1" | 5166 | inherits "~2.0.1" |
5244 | readable-stream "^2.0.2" | 5167 | readable-stream "^2.0.2" |
5245 | 5168 | ||
5169 | stream-each@^1.1.0: | ||
5170 | version "1.2.3" | ||
5171 | resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" | ||
5172 | integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== | ||
5173 | dependencies: | ||
5174 | end-of-stream "^1.1.0" | ||
5175 | stream-shift "^1.0.0" | ||
5176 | |||
5246 | stream-http@^2.7.2: | 5177 | stream-http@^2.7.2: |
5247 | version "2.8.3" | 5178 | version "2.8.3" |
5248 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" | 5179 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" |
@@ -5254,34 +5185,56 @@ stream-http@^2.7.2: | |||
5254 | to-arraybuffer "^1.0.0" | 5185 | to-arraybuffer "^1.0.0" |
5255 | xtend "^4.0.0" | 5186 | xtend "^4.0.0" |
5256 | 5187 | ||
5188 | stream-shift@^1.0.0: | ||
5189 | version "1.0.1" | ||
5190 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" | ||
5191 | integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== | ||
5192 | |||
5257 | strict-uri-encode@^1.0.0: | 5193 | strict-uri-encode@^1.0.0: |
5258 | version "1.1.0" | 5194 | version "1.1.0" |
5259 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" | 5195 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" |
5260 | integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= | 5196 | integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= |
5261 | 5197 | ||
5262 | string-width@^1.0.1, string-width@^1.0.2: | 5198 | string-width@^3.0.0, string-width@^3.1.0: |
5263 | version "1.0.2" | 5199 | version "3.1.0" |
5264 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" | 5200 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" |
5265 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= | 5201 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== |
5266 | dependencies: | 5202 | dependencies: |
5267 | code-point-at "^1.0.0" | 5203 | emoji-regex "^7.0.1" |
5268 | is-fullwidth-code-point "^1.0.0" | 5204 | is-fullwidth-code-point "^2.0.0" |
5269 | strip-ansi "^3.0.0" | 5205 | strip-ansi "^5.1.0" |
5270 | 5206 | ||
5271 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: | 5207 | string-width@^4.2.0: |
5272 | version "2.1.1" | 5208 | version "4.2.0" |
5273 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" | 5209 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" |
5274 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== | 5210 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== |
5275 | dependencies: | 5211 | dependencies: |
5276 | is-fullwidth-code-point "^2.0.0" | 5212 | emoji-regex "^8.0.0" |
5277 | strip-ansi "^4.0.0" | 5213 | is-fullwidth-code-point "^3.0.0" |
5214 | strip-ansi "^6.0.0" | ||
5278 | 5215 | ||
5279 | string_decoder@^1.0.0: | 5216 | string.prototype.trimend@^1.0.1: |
5280 | version "1.2.0" | 5217 | version "1.0.1" |
5281 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" | 5218 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" |
5282 | integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== | 5219 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== |
5283 | dependencies: | 5220 | dependencies: |
5284 | safe-buffer "~5.1.0" | 5221 | define-properties "^1.1.3" |
5222 | es-abstract "^1.17.5" | ||
5223 | |||
5224 | string.prototype.trimstart@^1.0.1: | ||
5225 | version "1.0.1" | ||
5226 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" | ||
5227 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== | ||
5228 | dependencies: | ||
5229 | define-properties "^1.1.3" | ||
5230 | es-abstract "^1.17.5" | ||
5231 | |||
5232 | string_decoder@^1.0.0, string_decoder@^1.1.1: | ||
5233 | version "1.3.0" | ||
5234 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" | ||
5235 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== | ||
5236 | dependencies: | ||
5237 | safe-buffer "~5.2.0" | ||
5285 | 5238 | ||
5286 | string_decoder@~1.1.1: | 5239 | string_decoder@~1.1.1: |
5287 | version "1.1.1" | 5240 | version "1.1.1" |
@@ -5290,185 +5243,277 @@ string_decoder@~1.1.1: | |||
5290 | dependencies: | 5243 | dependencies: |
5291 | safe-buffer "~5.1.0" | 5244 | safe-buffer "~5.1.0" |
5292 | 5245 | ||
5293 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: | 5246 | stringify-entities@^3.0.0: |
5294 | version "3.0.1" | 5247 | version "3.0.1" |
5295 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" | 5248 | resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.0.1.tgz#32154b91286ab0869ab2c07696223bd23b6dbfc0" |
5296 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= | 5249 | integrity sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ== |
5297 | dependencies: | 5250 | dependencies: |
5298 | ansi-regex "^2.0.0" | 5251 | character-entities-html4 "^1.0.0" |
5252 | character-entities-legacy "^1.0.0" | ||
5253 | is-alphanumerical "^1.0.0" | ||
5254 | is-decimal "^1.0.2" | ||
5255 | is-hexadecimal "^1.0.0" | ||
5299 | 5256 | ||
5300 | strip-ansi@^4.0.0: | 5257 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: |
5301 | version "4.0.0" | 5258 | version "5.2.0" |
5302 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" | 5259 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" |
5303 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= | 5260 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== |
5304 | dependencies: | 5261 | dependencies: |
5305 | ansi-regex "^3.0.0" | 5262 | ansi-regex "^4.1.0" |
5306 | 5263 | ||
5307 | strip-bom@^2.0.0: | 5264 | strip-ansi@^6.0.0: |
5308 | version "2.0.0" | 5265 | version "6.0.0" |
5309 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" | 5266 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" |
5310 | integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= | 5267 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== |
5311 | dependencies: | 5268 | dependencies: |
5312 | is-utf8 "^0.2.0" | 5269 | ansi-regex "^5.0.0" |
5313 | 5270 | ||
5314 | strip-bom@^3.0.0: | 5271 | strip-bom@^3.0.0: |
5315 | version "3.0.0" | 5272 | version "3.0.0" |
5316 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" | 5273 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" |
5317 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= | 5274 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= |
5318 | 5275 | ||
5319 | strip-eof@^1.0.0: | 5276 | strip-indent@^3.0.0: |
5320 | version "1.0.0" | 5277 | version "3.0.0" |
5321 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" | 5278 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" |
5322 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= | 5279 | integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== |
5323 | |||
5324 | strip-indent@^1.0.1: | ||
5325 | version "1.0.1" | ||
5326 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" | ||
5327 | integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= | ||
5328 | dependencies: | 5280 | dependencies: |
5329 | get-stdin "^4.0.1" | 5281 | min-indent "^1.0.0" |
5330 | |||
5331 | strip-json-comments@~1.0.1: | ||
5332 | version "1.0.4" | ||
5333 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" | ||
5334 | integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= | ||
5335 | 5282 | ||
5336 | strip-json-comments@~2.0.1: | 5283 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: |
5337 | version "2.0.1" | 5284 | version "3.1.1" |
5338 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" | 5285 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" |
5339 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= | 5286 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== |
5340 | 5287 | ||
5341 | style-loader@^0.19.1: | 5288 | style-search@^0.1.0: |
5342 | version "0.19.1" | 5289 | version "0.1.0" |
5343 | resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" | 5290 | resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" |
5344 | integrity sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og== | 5291 | integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= |
5345 | dependencies: | ||
5346 | loader-utils "^1.0.2" | ||
5347 | schema-utils "^0.3.0" | ||
5348 | 5292 | ||
5349 | supports-color@^2.0.0: | 5293 | stylelint-config-recommended@^3.0.0: |
5294 | version "3.0.0" | ||
5295 | resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz#e0e547434016c5539fe2650afd58049a2fd1d657" | ||
5296 | integrity sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ== | ||
5297 | |||
5298 | stylelint-config-standard@^20.0.0: | ||
5299 | version "20.0.0" | ||
5300 | resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-20.0.0.tgz#06135090c9e064befee3d594289f50e295b5e20d" | ||
5301 | integrity sha512-IB2iFdzOTA/zS4jSVav6z+wGtin08qfj+YyExHB3LF9lnouQht//YyB0KZq9gGz5HNPkddHOzcY8HsUey6ZUlA== | ||
5302 | dependencies: | ||
5303 | stylelint-config-recommended "^3.0.0" | ||
5304 | |||
5305 | stylelint-scss@^3.18.0: | ||
5306 | version "3.18.0" | ||
5307 | resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-3.18.0.tgz#8f06371c223909bf3f62e839548af1badeed31e9" | ||
5308 | integrity sha512-LD7+hv/6/ApNGt7+nR/50ft7cezKP2HM5rI8avIdGaUWre3xlHfV4jKO/DRZhscfuN+Ewy9FMhcTq0CcS0C/SA== | ||
5309 | dependencies: | ||
5310 | lodash "^4.17.15" | ||
5311 | postcss-media-query-parser "^0.2.3" | ||
5312 | postcss-resolve-nested-selector "^0.1.1" | ||
5313 | postcss-selector-parser "^6.0.2" | ||
5314 | postcss-value-parser "^4.1.0" | ||
5315 | |||
5316 | stylelint@^13.7.1: | ||
5317 | version "13.7.1" | ||
5318 | resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.7.1.tgz#bee97ee78d778a3f1dbe3f7397b76414973e263e" | ||
5319 | integrity sha512-qzqazcyRxrSRdmFuO0/SZOJ+LyCxYy0pwcvaOBBnl8/2VfHSMrtNIE+AnyJoyq6uKb+mt+hlgmVrvVi6G6XHfQ== | ||
5320 | dependencies: | ||
5321 | "@stylelint/postcss-css-in-js" "^0.37.2" | ||
5322 | "@stylelint/postcss-markdown" "^0.36.1" | ||
5323 | autoprefixer "^9.8.6" | ||
5324 | balanced-match "^1.0.0" | ||
5325 | chalk "^4.1.0" | ||
5326 | cosmiconfig "^7.0.0" | ||
5327 | debug "^4.1.1" | ||
5328 | execall "^2.0.0" | ||
5329 | fast-glob "^3.2.4" | ||
5330 | fastest-levenshtein "^1.0.12" | ||
5331 | file-entry-cache "^5.0.1" | ||
5332 | get-stdin "^8.0.0" | ||
5333 | global-modules "^2.0.0" | ||
5334 | globby "^11.0.1" | ||
5335 | globjoin "^0.1.4" | ||
5336 | html-tags "^3.1.0" | ||
5337 | ignore "^5.1.8" | ||
5338 | import-lazy "^4.0.0" | ||
5339 | imurmurhash "^0.1.4" | ||
5340 | known-css-properties "^0.19.0" | ||
5341 | lodash "^4.17.20" | ||
5342 | log-symbols "^4.0.0" | ||
5343 | mathml-tag-names "^2.1.3" | ||
5344 | meow "^7.1.1" | ||
5345 | micromatch "^4.0.2" | ||
5346 | normalize-selector "^0.2.0" | ||
5347 | postcss "^7.0.32" | ||
5348 | postcss-html "^0.36.0" | ||
5349 | postcss-less "^3.1.4" | ||
5350 | postcss-media-query-parser "^0.2.3" | ||
5351 | postcss-resolve-nested-selector "^0.1.1" | ||
5352 | postcss-safe-parser "^4.0.2" | ||
5353 | postcss-sass "^0.4.4" | ||
5354 | postcss-scss "^2.1.1" | ||
5355 | postcss-selector-parser "^6.0.2" | ||
5356 | postcss-syntax "^0.36.2" | ||
5357 | postcss-value-parser "^4.1.0" | ||
5358 | resolve-from "^5.0.0" | ||
5359 | slash "^3.0.0" | ||
5360 | specificity "^0.4.1" | ||
5361 | string-width "^4.2.0" | ||
5362 | strip-ansi "^6.0.0" | ||
5363 | style-search "^0.1.0" | ||
5364 | sugarss "^2.0.0" | ||
5365 | svg-tags "^1.0.0" | ||
5366 | table "^6.0.1" | ||
5367 | v8-compile-cache "^2.1.1" | ||
5368 | write-file-atomic "^3.0.3" | ||
5369 | |||
5370 | sugarss@^2.0.0: | ||
5350 | version "2.0.0" | 5371 | version "2.0.0" |
5351 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" | 5372 | resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" |
5352 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= | 5373 | integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== |
5353 | |||
5354 | supports-color@^3.2.3: | ||
5355 | version "3.2.3" | ||
5356 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" | ||
5357 | integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= | ||
5358 | dependencies: | 5374 | dependencies: |
5359 | has-flag "^1.0.0" | 5375 | postcss "^7.0.2" |
5360 | 5376 | ||
5361 | supports-color@^4.2.1: | 5377 | supports-color@^5.3.0: |
5362 | version "4.5.0" | ||
5363 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" | ||
5364 | integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= | ||
5365 | dependencies: | ||
5366 | has-flag "^2.0.0" | ||
5367 | |||
5368 | supports-color@^5.3.0, supports-color@^5.4.0: | ||
5369 | version "5.5.0" | 5378 | version "5.5.0" |
5370 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" | 5379 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" |
5371 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== | 5380 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== |
5372 | dependencies: | 5381 | dependencies: |
5373 | has-flag "^3.0.0" | 5382 | has-flag "^3.0.0" |
5374 | 5383 | ||
5375 | svgo@^0.7.0: | 5384 | supports-color@^6.1.0: |
5376 | version "0.7.2" | 5385 | version "6.1.0" |
5377 | resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" | 5386 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" |
5378 | integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= | 5387 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== |
5379 | dependencies: | 5388 | dependencies: |
5380 | coa "~1.0.1" | 5389 | has-flag "^3.0.0" |
5381 | colors "~1.1.2" | ||
5382 | csso "~2.3.1" | ||
5383 | js-yaml "~3.7.0" | ||
5384 | mkdirp "~0.5.1" | ||
5385 | sax "~1.2.1" | ||
5386 | whet.extend "~0.9.9" | ||
5387 | 5390 | ||
5388 | table@4.0.2: | 5391 | supports-color@^7.0.0, supports-color@^7.1.0: |
5389 | version "4.0.2" | 5392 | version "7.2.0" |
5390 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" | 5393 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" |
5391 | integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== | 5394 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== |
5392 | dependencies: | ||
5393 | ajv "^5.2.3" | ||
5394 | ajv-keywords "^2.1.0" | ||
5395 | chalk "^2.1.0" | ||
5396 | lodash "^4.17.4" | ||
5397 | slice-ansi "1.0.0" | ||
5398 | string-width "^2.1.1" | ||
5399 | |||
5400 | table@^3.7.8: | ||
5401 | version "3.8.3" | ||
5402 | resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" | ||
5403 | integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8= | ||
5404 | dependencies: | ||
5405 | ajv "^4.7.0" | ||
5406 | ajv-keywords "^1.0.0" | ||
5407 | chalk "^1.1.1" | ||
5408 | lodash "^4.0.0" | ||
5409 | slice-ansi "0.0.4" | ||
5410 | string-width "^2.0.0" | ||
5411 | |||
5412 | tapable@^0.2.7: | ||
5413 | version "0.2.9" | ||
5414 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" | ||
5415 | integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== | ||
5416 | |||
5417 | tar@^2.0.0: | ||
5418 | version "2.2.2" | ||
5419 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" | ||
5420 | integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== | ||
5421 | dependencies: | 5395 | dependencies: |
5422 | block-stream "*" | 5396 | has-flag "^4.0.0" |
5423 | fstream "^1.0.12" | ||
5424 | inherits "2" | ||
5425 | 5397 | ||
5426 | tar@^4: | 5398 | svg-tags@^1.0.0: |
5427 | version "4.4.8" | 5399 | version "1.0.0" |
5428 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" | 5400 | resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" |
5429 | integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== | 5401 | integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= |
5402 | |||
5403 | table@^5.2.3: | ||
5404 | version "5.4.6" | ||
5405 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" | ||
5406 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== | ||
5407 | dependencies: | ||
5408 | ajv "^6.10.2" | ||
5409 | lodash "^4.17.14" | ||
5410 | slice-ansi "^2.1.0" | ||
5411 | string-width "^3.0.0" | ||
5412 | |||
5413 | table@^6.0.1: | ||
5414 | version "6.0.3" | ||
5415 | resolved "https://registry.yarnpkg.com/table/-/table-6.0.3.tgz#e5b8a834e37e27ad06de2e0fda42b55cfd8a0123" | ||
5416 | integrity sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw== | ||
5417 | dependencies: | ||
5418 | ajv "^6.12.4" | ||
5419 | lodash "^4.17.20" | ||
5420 | slice-ansi "^4.0.0" | ||
5421 | string-width "^4.2.0" | ||
5422 | |||
5423 | tapable@^1.0.0, tapable@^1.1.3: | ||
5424 | version "1.1.3" | ||
5425 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" | ||
5426 | integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== | ||
5427 | |||
5428 | tar@^6.0.2: | ||
5429 | version "6.0.5" | ||
5430 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" | ||
5431 | integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== | ||
5432 | dependencies: | ||
5433 | chownr "^2.0.0" | ||
5434 | fs-minipass "^2.0.0" | ||
5435 | minipass "^3.0.0" | ||
5436 | minizlib "^2.1.1" | ||
5437 | mkdirp "^1.0.3" | ||
5438 | yallist "^4.0.0" | ||
5439 | |||
5440 | terser-webpack-plugin@^1.4.3: | ||
5441 | version "1.4.5" | ||
5442 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" | ||
5443 | integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== | ||
5444 | dependencies: | ||
5445 | cacache "^12.0.2" | ||
5446 | find-cache-dir "^2.1.0" | ||
5447 | is-wsl "^1.1.0" | ||
5448 | schema-utils "^1.0.0" | ||
5449 | serialize-javascript "^4.0.0" | ||
5450 | source-map "^0.6.1" | ||
5451 | terser "^4.1.2" | ||
5452 | webpack-sources "^1.4.0" | ||
5453 | worker-farm "^1.7.0" | ||
5454 | |||
5455 | terser-webpack-plugin@^4.2.2: | ||
5456 | version "4.2.2" | ||
5457 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.2.tgz#d86200c700053bba637913fe4310ba1bdeb5568e" | ||
5458 | integrity sha512-3qAQpykRTD5DReLu5/cwpsg7EZFzP3Q0Hp2XUWJUw2mpq2jfgOKTZr8IZKKnNieRVVo1UauROTdhbQJZveGKtQ== | ||
5459 | dependencies: | ||
5460 | cacache "^15.0.5" | ||
5461 | find-cache-dir "^3.3.1" | ||
5462 | jest-worker "^26.3.0" | ||
5463 | p-limit "^3.0.2" | ||
5464 | schema-utils "^2.7.1" | ||
5465 | serialize-javascript "^5.0.1" | ||
5466 | source-map "^0.6.1" | ||
5467 | terser "^5.3.2" | ||
5468 | webpack-sources "^1.4.3" | ||
5469 | |||
5470 | terser@^4.1.2: | ||
5471 | version "4.8.0" | ||
5472 | resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" | ||
5473 | integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== | ||
5430 | dependencies: | 5474 | dependencies: |
5431 | chownr "^1.1.1" | 5475 | commander "^2.20.0" |
5432 | fs-minipass "^1.2.5" | 5476 | source-map "~0.6.1" |
5433 | minipass "^2.3.4" | 5477 | source-map-support "~0.5.12" |
5434 | minizlib "^1.1.1" | ||
5435 | mkdirp "^0.5.0" | ||
5436 | safe-buffer "^5.1.2" | ||
5437 | yallist "^3.0.2" | ||
5438 | 5478 | ||
5439 | text-table@~0.2.0: | 5479 | terser@^5.3.2: |
5480 | version "5.3.2" | ||
5481 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.2.tgz#f4bea90eb92945b2a028ceef79181b9bb586e7af" | ||
5482 | integrity sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ== | ||
5483 | dependencies: | ||
5484 | commander "^2.20.0" | ||
5485 | source-map "~0.6.1" | ||
5486 | source-map-support "~0.5.12" | ||
5487 | |||
5488 | text-table@^0.2.0: | ||
5440 | version "0.2.0" | 5489 | version "0.2.0" |
5441 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" | 5490 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" |
5442 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= | 5491 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= |
5443 | 5492 | ||
5444 | through@^2.3.6: | 5493 | through2@^2.0.0: |
5445 | version "2.3.8" | 5494 | version "2.0.5" |
5446 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" | 5495 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" |
5447 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= | 5496 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== |
5497 | dependencies: | ||
5498 | readable-stream "~2.3.6" | ||
5499 | xtend "~4.0.1" | ||
5448 | 5500 | ||
5449 | timers-browserify@^2.0.4: | 5501 | timers-browserify@^2.0.4: |
5450 | version "2.0.10" | 5502 | version "2.0.11" |
5451 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" | 5503 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" |
5452 | integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== | 5504 | integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== |
5453 | dependencies: | 5505 | dependencies: |
5454 | setimmediate "^1.0.4" | 5506 | setimmediate "^1.0.4" |
5455 | 5507 | ||
5456 | tmp@^0.0.33: | ||
5457 | version "0.0.33" | ||
5458 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" | ||
5459 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== | ||
5460 | dependencies: | ||
5461 | os-tmpdir "~1.0.2" | ||
5462 | |||
5463 | to-arraybuffer@^1.0.0: | 5508 | to-arraybuffer@^1.0.0: |
5464 | version "1.0.1" | 5509 | version "1.0.1" |
5465 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" | 5510 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" |
5466 | integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= | 5511 | integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= |
5467 | 5512 | ||
5468 | to-fast-properties@^1.0.3: | 5513 | to-fast-properties@^2.0.0: |
5469 | version "1.0.3" | 5514 | version "2.0.0" |
5470 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" | 5515 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" |
5471 | integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= | 5516 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= |
5472 | 5517 | ||
5473 | to-object-path@^0.3.0: | 5518 | to-object-path@^0.3.0: |
5474 | version "0.3.0" | 5519 | version "0.3.0" |
@@ -5485,6 +5530,13 @@ to-regex-range@^2.1.0: | |||
5485 | is-number "^3.0.0" | 5530 | is-number "^3.0.0" |
5486 | repeat-string "^1.6.1" | 5531 | repeat-string "^1.6.1" |
5487 | 5532 | ||
5533 | to-regex-range@^5.0.1: | ||
5534 | version "5.0.1" | ||
5535 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" | ||
5536 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== | ||
5537 | dependencies: | ||
5538 | is-number "^7.0.0" | ||
5539 | |||
5488 | to-regex@^3.0.1, to-regex@^3.0.2: | 5540 | to-regex@^3.0.1, to-regex@^3.0.2: |
5489 | version "3.0.2" | 5541 | version "3.0.2" |
5490 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" | 5542 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" |
@@ -5495,108 +5547,194 @@ to-regex@^3.0.1, to-regex@^3.0.2: | |||
5495 | regex-not "^1.0.2" | 5547 | regex-not "^1.0.2" |
5496 | safe-regex "^1.1.0" | 5548 | safe-regex "^1.1.0" |
5497 | 5549 | ||
5498 | tough-cookie@~2.4.3: | 5550 | trim-newlines@^3.0.0: |
5499 | version "2.4.3" | 5551 | version "3.0.0" |
5500 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" | 5552 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" |
5501 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== | 5553 | integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== |
5502 | dependencies: | ||
5503 | psl "^1.1.24" | ||
5504 | punycode "^1.4.1" | ||
5505 | 5554 | ||
5506 | trim-newlines@^1.0.0: | 5555 | trim-trailing-lines@^1.0.0: |
5507 | version "1.0.0" | 5556 | version "1.1.3" |
5508 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" | 5557 | resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" |
5509 | integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= | 5558 | integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== |
5510 | 5559 | ||
5511 | trim-right@^1.0.1: | 5560 | trim@0.0.1: |
5512 | version "1.0.1" | 5561 | version "0.0.1" |
5513 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" | 5562 | resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" |
5514 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= | 5563 | integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= |
5515 | 5564 | ||
5516 | "true-case-path@^1.0.2": | 5565 | trough@^1.0.0: |
5517 | version "1.0.3" | 5566 | version "1.0.5" |
5518 | resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" | 5567 | resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" |
5519 | integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== | 5568 | integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== |
5569 | |||
5570 | tsconfig-paths@^3.9.0: | ||
5571 | version "3.9.0" | ||
5572 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" | ||
5573 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== | ||
5520 | dependencies: | 5574 | dependencies: |
5521 | glob "^7.1.2" | 5575 | "@types/json5" "^0.0.29" |
5576 | json5 "^1.0.1" | ||
5577 | minimist "^1.2.0" | ||
5578 | strip-bom "^3.0.0" | ||
5579 | |||
5580 | tslib@^1.9.0: | ||
5581 | version "1.13.0" | ||
5582 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" | ||
5583 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== | ||
5522 | 5584 | ||
5523 | tty-browserify@0.0.0: | 5585 | tty-browserify@0.0.0: |
5524 | version "0.0.0" | 5586 | version "0.0.0" |
5525 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" | 5587 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" |
5526 | integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= | 5588 | integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= |
5527 | 5589 | ||
5528 | tunnel-agent@^0.6.0: | 5590 | type-check@^0.4.0, type-check@~0.4.0: |
5529 | version "0.6.0" | 5591 | version "0.4.0" |
5530 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" | 5592 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" |
5531 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= | 5593 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== |
5532 | dependencies: | 5594 | dependencies: |
5533 | safe-buffer "^5.0.1" | 5595 | prelude-ls "^1.2.1" |
5534 | 5596 | ||
5535 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: | 5597 | type-fest@^0.13.1: |
5536 | version "0.14.5" | 5598 | version "0.13.1" |
5537 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" | 5599 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" |
5538 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= | 5600 | integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== |
5539 | 5601 | ||
5540 | type-check@~0.3.2: | 5602 | type-fest@^0.6.0: |
5541 | version "0.3.2" | 5603 | version "0.6.0" |
5542 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" | 5604 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" |
5543 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= | 5605 | integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== |
5606 | |||
5607 | type-fest@^0.8.1: | ||
5608 | version "0.8.1" | ||
5609 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" | ||
5610 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== | ||
5611 | |||
5612 | typedarray-to-buffer@^3.1.5: | ||
5613 | version "3.1.5" | ||
5614 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" | ||
5615 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== | ||
5544 | dependencies: | 5616 | dependencies: |
5545 | prelude-ls "~1.1.2" | 5617 | is-typedarray "^1.0.0" |
5546 | 5618 | ||
5547 | typedarray@^0.0.6: | 5619 | typedarray@^0.0.6: |
5548 | version "0.0.6" | 5620 | version "0.0.6" |
5549 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" | 5621 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" |
5550 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= | 5622 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= |
5551 | 5623 | ||
5552 | uglify-js@^2.8.29: | 5624 | unherit@^1.0.4: |
5553 | version "2.8.29" | 5625 | version "1.1.3" |
5554 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" | 5626 | resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" |
5555 | integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= | 5627 | integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== |
5556 | dependencies: | 5628 | dependencies: |
5557 | source-map "~0.5.1" | 5629 | inherits "^2.0.0" |
5558 | yargs "~3.10.0" | 5630 | xtend "^4.0.0" |
5559 | optionalDependencies: | ||
5560 | uglify-to-browserify "~1.0.0" | ||
5561 | 5631 | ||
5562 | uglify-to-browserify@~1.0.0: | 5632 | unicode-canonical-property-names-ecmascript@^1.0.4: |
5563 | version "1.0.2" | 5633 | version "1.0.4" |
5564 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" | 5634 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" |
5565 | integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= | 5635 | integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== |
5566 | 5636 | ||
5567 | uglifyjs-webpack-plugin@^0.4.6: | 5637 | unicode-match-property-ecmascript@^1.0.4: |
5568 | version "0.4.6" | 5638 | version "1.0.4" |
5569 | resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" | 5639 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" |
5570 | integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= | 5640 | integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== |
5571 | dependencies: | 5641 | dependencies: |
5572 | source-map "^0.5.6" | 5642 | unicode-canonical-property-names-ecmascript "^1.0.4" |
5573 | uglify-js "^2.8.29" | 5643 | unicode-property-aliases-ecmascript "^1.0.4" |
5574 | webpack-sources "^1.0.1" | 5644 | |
5645 | unicode-match-property-value-ecmascript@^1.2.0: | ||
5646 | version "1.2.0" | ||
5647 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" | ||
5648 | integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== | ||
5649 | |||
5650 | unicode-property-aliases-ecmascript@^1.0.4: | ||
5651 | version "1.1.0" | ||
5652 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" | ||
5653 | integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== | ||
5654 | |||
5655 | unified@^9.0.0: | ||
5656 | version "9.2.0" | ||
5657 | resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" | ||
5658 | integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== | ||
5659 | dependencies: | ||
5660 | bail "^1.0.0" | ||
5661 | extend "^3.0.0" | ||
5662 | is-buffer "^2.0.0" | ||
5663 | is-plain-obj "^2.0.0" | ||
5664 | trough "^1.0.0" | ||
5665 | vfile "^4.0.0" | ||
5575 | 5666 | ||
5576 | union-value@^1.0.0: | 5667 | union-value@^1.0.0: |
5577 | version "1.0.0" | 5668 | version "1.0.1" |
5578 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" | 5669 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" |
5579 | integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= | 5670 | integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== |
5580 | dependencies: | 5671 | dependencies: |
5581 | arr-union "^3.1.0" | 5672 | arr-union "^3.1.0" |
5582 | get-value "^2.0.6" | 5673 | get-value "^2.0.6" |
5583 | is-extendable "^0.1.1" | 5674 | is-extendable "^0.1.1" |
5584 | set-value "^0.4.3" | 5675 | set-value "^2.0.1" |
5585 | 5676 | ||
5586 | uniq@^1.0.1: | 5677 | uniq@^1.0.1: |
5587 | version "1.0.1" | 5678 | version "1.0.1" |
5588 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" | 5679 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" |
5589 | integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= | 5680 | integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= |
5590 | 5681 | ||
5591 | uniqs@^2.0.0: | 5682 | unique-filename@^1.1.1: |
5592 | version "2.0.0" | 5683 | version "1.1.1" |
5593 | resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" | 5684 | resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" |
5594 | integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= | 5685 | integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== |
5686 | dependencies: | ||
5687 | unique-slug "^2.0.0" | ||
5595 | 5688 | ||
5596 | universalify@^0.1.0: | 5689 | unique-slug@^2.0.0: |
5597 | version "0.1.2" | 5690 | version "2.0.2" |
5598 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" | 5691 | resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" |
5599 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== | 5692 | integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== |
5693 | dependencies: | ||
5694 | imurmurhash "^0.1.4" | ||
5695 | |||
5696 | unist-util-find-all-after@^3.0.1: | ||
5697 | version "3.0.1" | ||
5698 | resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz#95cc62f48812d879b4685a0512bf1b838da50e9a" | ||
5699 | integrity sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw== | ||
5700 | dependencies: | ||
5701 | unist-util-is "^4.0.0" | ||
5702 | |||
5703 | unist-util-is@^4.0.0: | ||
5704 | version "4.0.2" | ||
5705 | resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.2.tgz#c7d1341188aa9ce5b3cff538958de9895f14a5de" | ||
5706 | integrity sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ== | ||
5707 | |||
5708 | unist-util-remove-position@^2.0.0: | ||
5709 | version "2.0.1" | ||
5710 | resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" | ||
5711 | integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== | ||
5712 | dependencies: | ||
5713 | unist-util-visit "^2.0.0" | ||
5714 | |||
5715 | unist-util-stringify-position@^2.0.0: | ||
5716 | version "2.0.3" | ||
5717 | resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" | ||
5718 | integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== | ||
5719 | dependencies: | ||
5720 | "@types/unist" "^2.0.2" | ||
5721 | |||
5722 | unist-util-visit-parents@^3.0.0: | ||
5723 | version "3.1.0" | ||
5724 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz#4dd262fb9dcfe44f297d53e882fc6ff3421173d5" | ||
5725 | integrity sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw== | ||
5726 | dependencies: | ||
5727 | "@types/unist" "^2.0.0" | ||
5728 | unist-util-is "^4.0.0" | ||
5729 | |||
5730 | unist-util-visit@^2.0.0: | ||
5731 | version "2.0.3" | ||
5732 | resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" | ||
5733 | integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== | ||
5734 | dependencies: | ||
5735 | "@types/unist" "^2.0.0" | ||
5736 | unist-util-is "^4.0.0" | ||
5737 | unist-util-visit-parents "^3.0.0" | ||
5600 | 5738 | ||
5601 | unset-value@^1.0.0: | 5739 | unset-value@^1.0.0: |
5602 | version "1.0.0" | 5740 | version "1.0.0" |
@@ -5607,14 +5745,14 @@ unset-value@^1.0.0: | |||
5607 | isobject "^3.0.0" | 5745 | isobject "^3.0.0" |
5608 | 5746 | ||
5609 | upath@^1.1.1: | 5747 | upath@^1.1.1: |
5610 | version "1.1.2" | 5748 | version "1.2.0" |
5611 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" | 5749 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" |
5612 | integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== | 5750 | integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== |
5613 | 5751 | ||
5614 | uri-js@^4.2.2: | 5752 | uri-js@^4.2.2: |
5615 | version "4.2.2" | 5753 | version "4.4.0" |
5616 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" | 5754 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" |
5617 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== | 5755 | integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== |
5618 | dependencies: | 5756 | dependencies: |
5619 | punycode "^2.1.0" | 5757 | punycode "^2.1.0" |
5620 | 5758 | ||
@@ -5623,15 +5761,6 @@ urix@^0.1.0: | |||
5623 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" | 5761 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" |
5624 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= | 5762 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= |
5625 | 5763 | ||
5626 | url-loader@^0.6.2: | ||
5627 | version "0.6.2" | ||
5628 | resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" | ||
5629 | integrity sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q== | ||
5630 | dependencies: | ||
5631 | loader-utils "^1.0.2" | ||
5632 | mime "^1.4.1" | ||
5633 | schema-utils "^0.3.0" | ||
5634 | |||
5635 | url@^0.11.0: | 5764 | url@^0.11.0: |
5636 | version "0.11.0" | 5765 | version "0.11.0" |
5637 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" | 5766 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" |
@@ -5645,14 +5774,7 @@ use@^3.1.0: | |||
5645 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" | 5774 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" |
5646 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== | 5775 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== |
5647 | 5776 | ||
5648 | user-home@^2.0.0: | 5777 | util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: |
5649 | version "2.0.0" | ||
5650 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" | ||
5651 | integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8= | ||
5652 | dependencies: | ||
5653 | os-homedir "^1.0.0" | ||
5654 | |||
5655 | util-deprecate@~1.0.1: | ||
5656 | version "1.0.2" | 5778 | version "1.0.2" |
5657 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" | 5779 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" |
5658 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= | 5780 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= |
@@ -5664,13 +5786,6 @@ util@0.10.3: | |||
5664 | dependencies: | 5786 | dependencies: |
5665 | inherits "2.0.1" | 5787 | inherits "2.0.1" |
5666 | 5788 | ||
5667 | util@^0.10.3: | ||
5668 | version "0.10.4" | ||
5669 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" | ||
5670 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== | ||
5671 | dependencies: | ||
5672 | inherits "2.0.3" | ||
5673 | |||
5674 | util@^0.11.0: | 5789 | util@^0.11.0: |
5675 | version "0.11.1" | 5790 | version "0.11.1" |
5676 | resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" | 5791 | resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" |
@@ -5678,10 +5793,10 @@ util@^0.11.0: | |||
5678 | dependencies: | 5793 | dependencies: |
5679 | inherits "2.0.3" | 5794 | inherits "2.0.3" |
5680 | 5795 | ||
5681 | uuid@^3.3.2: | 5796 | v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: |
5682 | version "3.3.2" | 5797 | version "2.1.1" |
5683 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" | 5798 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" |
5684 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== | 5799 | integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== |
5685 | 5800 | ||
5686 | validate-npm-package-license@^3.0.1: | 5801 | validate-npm-package-license@^3.0.1: |
5687 | version "3.0.4" | 5802 | version "3.0.4" |
@@ -5691,214 +5806,222 @@ validate-npm-package-license@^3.0.1: | |||
5691 | spdx-correct "^3.0.0" | 5806 | spdx-correct "^3.0.0" |
5692 | spdx-expression-parse "^3.0.0" | 5807 | spdx-expression-parse "^3.0.0" |
5693 | 5808 | ||
5694 | vendors@^1.0.0: | 5809 | vfile-location@^3.0.0: |
5695 | version "1.0.3" | 5810 | version "3.1.0" |
5696 | resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" | 5811 | resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.1.0.tgz#81cd8a04b0ac935185f4fce16f270503fc2f692f" |
5697 | integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== | 5812 | integrity sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g== |
5698 | 5813 | ||
5699 | verror@1.10.0: | 5814 | vfile-message@^2.0.0: |
5700 | version "1.10.0" | 5815 | version "2.0.4" |
5701 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" | 5816 | resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" |
5702 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= | 5817 | integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== |
5703 | dependencies: | 5818 | dependencies: |
5704 | assert-plus "^1.0.0" | 5819 | "@types/unist" "^2.0.0" |
5705 | core-util-is "1.0.2" | 5820 | unist-util-stringify-position "^2.0.0" |
5706 | extsprintf "^1.2.0" | 5821 | |
5822 | vfile@^4.0.0: | ||
5823 | version "4.2.0" | ||
5824 | resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.0.tgz#26c78ac92eb70816b01d4565e003b7e65a2a0e01" | ||
5825 | integrity sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw== | ||
5826 | dependencies: | ||
5827 | "@types/unist" "^2.0.0" | ||
5828 | is-buffer "^2.0.0" | ||
5829 | replace-ext "1.0.0" | ||
5830 | unist-util-stringify-position "^2.0.0" | ||
5831 | vfile-message "^2.0.0" | ||
5832 | |||
5833 | vm-browserify@^1.0.1: | ||
5834 | version "1.1.2" | ||
5835 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" | ||
5836 | integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== | ||
5707 | 5837 | ||
5708 | vm-browserify@0.0.4: | 5838 | watchpack-chokidar2@^2.0.0: |
5709 | version "0.0.4" | 5839 | version "2.0.0" |
5710 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" | 5840 | resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" |
5711 | integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= | 5841 | integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== |
5712 | dependencies: | 5842 | dependencies: |
5713 | indexof "0.0.1" | 5843 | chokidar "^2.1.8" |
5714 | 5844 | ||
5715 | watchpack@^1.4.0: | 5845 | watchpack@^1.7.4: |
5716 | version "1.6.0" | 5846 | version "1.7.4" |
5717 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" | 5847 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" |
5718 | integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== | 5848 | integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== |
5719 | dependencies: | 5849 | dependencies: |
5720 | chokidar "^2.0.2" | ||
5721 | graceful-fs "^4.1.2" | 5850 | graceful-fs "^4.1.2" |
5722 | neo-async "^2.5.0" | 5851 | neo-async "^2.5.0" |
5723 | 5852 | optionalDependencies: | |
5724 | webpack-sources@^1.0.1: | 5853 | chokidar "^3.4.1" |
5725 | version "1.3.0" | 5854 | watchpack-chokidar2 "^2.0.0" |
5726 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" | 5855 | |
5727 | integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== | 5856 | webpack-cli@^3.3.12: |
5857 | version "3.3.12" | ||
5858 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" | ||
5859 | integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== | ||
5860 | dependencies: | ||
5861 | chalk "^2.4.2" | ||
5862 | cross-spawn "^6.0.5" | ||
5863 | enhanced-resolve "^4.1.1" | ||
5864 | findup-sync "^3.0.0" | ||
5865 | global-modules "^2.0.0" | ||
5866 | import-local "^2.0.0" | ||
5867 | interpret "^1.4.0" | ||
5868 | loader-utils "^1.4.0" | ||
5869 | supports-color "^6.1.0" | ||
5870 | v8-compile-cache "^2.1.1" | ||
5871 | yargs "^13.3.2" | ||
5872 | |||
5873 | webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: | ||
5874 | version "1.4.3" | ||
5875 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" | ||
5876 | integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== | ||
5728 | dependencies: | 5877 | dependencies: |
5729 | source-list-map "^2.0.0" | 5878 | source-list-map "^2.0.0" |
5730 | source-map "~0.6.1" | 5879 | source-map "~0.6.1" |
5731 | 5880 | ||
5732 | webpack@^3.10.0: | 5881 | webpack@^4.44.2: |
5733 | version "3.12.0" | 5882 | version "4.44.2" |
5734 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" | 5883 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" |
5735 | integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== | 5884 | integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== |
5736 | dependencies: | 5885 | dependencies: |
5737 | acorn "^5.0.0" | 5886 | "@webassemblyjs/ast" "1.9.0" |
5738 | acorn-dynamic-import "^2.0.0" | 5887 | "@webassemblyjs/helper-module-context" "1.9.0" |
5739 | ajv "^6.1.0" | 5888 | "@webassemblyjs/wasm-edit" "1.9.0" |
5740 | ajv-keywords "^3.1.0" | 5889 | "@webassemblyjs/wasm-parser" "1.9.0" |
5741 | async "^2.1.2" | 5890 | acorn "^6.4.1" |
5742 | enhanced-resolve "^3.4.0" | 5891 | ajv "^6.10.2" |
5743 | escope "^3.6.0" | 5892 | ajv-keywords "^3.4.1" |
5744 | interpret "^1.0.0" | 5893 | chrome-trace-event "^1.0.2" |
5745 | json-loader "^0.5.4" | 5894 | enhanced-resolve "^4.3.0" |
5746 | json5 "^0.5.1" | 5895 | eslint-scope "^4.0.3" |
5747 | loader-runner "^2.3.0" | 5896 | json-parse-better-errors "^1.0.2" |
5748 | loader-utils "^1.1.0" | 5897 | loader-runner "^2.4.0" |
5749 | memory-fs "~0.4.1" | 5898 | loader-utils "^1.2.3" |
5750 | mkdirp "~0.5.0" | 5899 | memory-fs "^0.4.1" |
5751 | node-libs-browser "^2.0.0" | 5900 | micromatch "^3.1.10" |
5752 | source-map "^0.5.3" | 5901 | mkdirp "^0.5.3" |
5753 | supports-color "^4.2.1" | 5902 | neo-async "^2.6.1" |
5754 | tapable "^0.2.7" | 5903 | node-libs-browser "^2.2.1" |
5755 | uglifyjs-webpack-plugin "^0.4.6" | 5904 | schema-utils "^1.0.0" |
5756 | watchpack "^1.4.0" | 5905 | tapable "^1.1.3" |
5757 | webpack-sources "^1.0.1" | 5906 | terser-webpack-plugin "^1.4.3" |
5758 | yargs "^8.0.2" | 5907 | watchpack "^1.7.4" |
5759 | 5908 | webpack-sources "^1.4.1" | |
5760 | whet.extend@~0.9.9: | ||
5761 | version "0.9.9" | ||
5762 | resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" | ||
5763 | integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= | ||
5764 | |||
5765 | which-module@^1.0.0: | ||
5766 | version "1.0.0" | ||
5767 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" | ||
5768 | integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= | ||
5769 | 5909 | ||
5770 | which-module@^2.0.0: | 5910 | which-module@^2.0.0: |
5771 | version "2.0.0" | 5911 | version "2.0.0" |
5772 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" | 5912 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" |
5773 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= | 5913 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= |
5774 | 5914 | ||
5775 | which@1, which@^1.2.9: | 5915 | which@^1.2.14, which@^1.2.9, which@^1.3.1: |
5776 | version "1.3.1" | 5916 | version "1.3.1" |
5777 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" | 5917 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" |
5778 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== | 5918 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== |
5779 | dependencies: | 5919 | dependencies: |
5780 | isexe "^2.0.0" | 5920 | isexe "^2.0.0" |
5781 | 5921 | ||
5782 | wide-align@^1.1.0: | 5922 | which@^2.0.1: |
5783 | version "1.1.3" | 5923 | version "2.0.2" |
5784 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" | 5924 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" |
5785 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== | 5925 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== |
5786 | dependencies: | 5926 | dependencies: |
5787 | string-width "^1.0.2 || 2" | 5927 | isexe "^2.0.0" |
5788 | |||
5789 | window-size@0.1.0: | ||
5790 | version "0.1.0" | ||
5791 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" | ||
5792 | integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= | ||
5793 | 5928 | ||
5794 | wordwrap@0.0.2: | 5929 | word-wrap@^1.2.3: |
5795 | version "0.0.2" | 5930 | version "1.2.3" |
5796 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" | 5931 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" |
5797 | integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= | 5932 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== |
5798 | 5933 | ||
5799 | wordwrap@~1.0.0: | 5934 | worker-farm@^1.7.0: |
5800 | version "1.0.0" | 5935 | version "1.7.0" |
5801 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" | 5936 | resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" |
5802 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= | 5937 | integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== |
5938 | dependencies: | ||
5939 | errno "~0.1.7" | ||
5803 | 5940 | ||
5804 | wrap-ansi@^2.0.0: | 5941 | wrap-ansi@^5.1.0: |
5805 | version "2.1.0" | 5942 | version "5.1.0" |
5806 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" | 5943 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" |
5807 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= | 5944 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== |
5808 | dependencies: | 5945 | dependencies: |
5809 | string-width "^1.0.1" | 5946 | ansi-styles "^3.2.0" |
5810 | strip-ansi "^3.0.1" | 5947 | string-width "^3.0.0" |
5948 | strip-ansi "^5.0.0" | ||
5811 | 5949 | ||
5812 | wrappy@1: | 5950 | wrappy@1: |
5813 | version "1.0.2" | 5951 | version "1.0.2" |
5814 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" | 5952 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" |
5815 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= | 5953 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= |
5816 | 5954 | ||
5817 | write@^0.2.1: | 5955 | write-file-atomic@^3.0.3: |
5818 | version "0.2.1" | 5956 | version "3.0.3" |
5819 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" | 5957 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" |
5820 | integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= | 5958 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== |
5959 | dependencies: | ||
5960 | imurmurhash "^0.1.4" | ||
5961 | is-typedarray "^1.0.0" | ||
5962 | signal-exit "^3.0.2" | ||
5963 | typedarray-to-buffer "^3.1.5" | ||
5964 | |||
5965 | write@1.0.3: | ||
5966 | version "1.0.3" | ||
5967 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" | ||
5968 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== | ||
5821 | dependencies: | 5969 | dependencies: |
5822 | mkdirp "^0.5.1" | 5970 | mkdirp "^0.5.1" |
5823 | 5971 | ||
5824 | xtend@^4.0.0: | 5972 | xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: |
5825 | version "4.0.1" | 5973 | version "4.0.2" |
5826 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" | 5974 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" |
5827 | integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= | 5975 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== |
5828 | 5976 | ||
5829 | y18n@^3.2.1: | 5977 | y18n@^4.0.0: |
5830 | version "3.2.1" | 5978 | version "4.0.0" |
5831 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" | 5979 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" |
5832 | integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= | 5980 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== |
5833 | 5981 | ||
5834 | yallist@^2.1.2: | 5982 | yallist@^3.0.2: |
5835 | version "2.1.2" | 5983 | version "3.1.1" |
5836 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" | 5984 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" |
5837 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= | 5985 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== |
5838 | 5986 | ||
5839 | yallist@^3.0.0, yallist@^3.0.2: | 5987 | yallist@^4.0.0: |
5840 | version "3.0.3" | 5988 | version "4.0.0" |
5841 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" | 5989 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" |
5842 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== | 5990 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== |
5843 | 5991 | ||
5844 | yargs-parser@^5.0.0: | 5992 | yaml@^1.10.0: |
5845 | version "5.0.0" | 5993 | version "1.10.0" |
5846 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" | 5994 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" |
5847 | integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= | 5995 | integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== |
5996 | |||
5997 | yargs-parser@^13.1.2: | ||
5998 | version "13.1.2" | ||
5999 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" | ||
6000 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== | ||
5848 | dependencies: | 6001 | dependencies: |
5849 | camelcase "^3.0.0" | 6002 | camelcase "^5.0.0" |
6003 | decamelize "^1.2.0" | ||
5850 | 6004 | ||
5851 | yargs-parser@^7.0.0: | 6005 | yargs-parser@^18.1.3: |
5852 | version "7.0.0" | 6006 | version "18.1.3" |
5853 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" | 6007 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" |
5854 | integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= | 6008 | integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== |
5855 | dependencies: | 6009 | dependencies: |
5856 | camelcase "^4.1.0" | 6010 | camelcase "^5.0.0" |
5857 | 6011 | decamelize "^1.2.0" | |
5858 | yargs@^7.0.0: | 6012 | |
5859 | version "7.1.0" | 6013 | yargs@^13.3.2: |
5860 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" | 6014 | version "13.3.2" |
5861 | integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= | 6015 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" |
5862 | dependencies: | 6016 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== |
5863 | camelcase "^3.0.0" | 6017 | dependencies: |
5864 | cliui "^3.2.0" | 6018 | cliui "^5.0.0" |
5865 | decamelize "^1.1.1" | 6019 | find-up "^3.0.0" |
5866 | get-caller-file "^1.0.1" | 6020 | get-caller-file "^2.0.1" |
5867 | os-locale "^1.4.0" | ||
5868 | read-pkg-up "^1.0.1" | ||
5869 | require-directory "^2.1.1" | ||
5870 | require-main-filename "^1.0.1" | ||
5871 | set-blocking "^2.0.0" | ||
5872 | string-width "^1.0.2" | ||
5873 | which-module "^1.0.0" | ||
5874 | y18n "^3.2.1" | ||
5875 | yargs-parser "^5.0.0" | ||
5876 | |||
5877 | yargs@^8.0.2: | ||
5878 | version "8.0.2" | ||
5879 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" | ||
5880 | integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= | ||
5881 | dependencies: | ||
5882 | camelcase "^4.1.0" | ||
5883 | cliui "^3.2.0" | ||
5884 | decamelize "^1.1.1" | ||
5885 | get-caller-file "^1.0.1" | ||
5886 | os-locale "^2.0.0" | ||
5887 | read-pkg-up "^2.0.0" | ||
5888 | require-directory "^2.1.1" | 6021 | require-directory "^2.1.1" |
5889 | require-main-filename "^1.0.1" | 6022 | require-main-filename "^2.0.0" |
5890 | set-blocking "^2.0.0" | 6023 | set-blocking "^2.0.0" |
5891 | string-width "^2.0.0" | 6024 | string-width "^3.0.0" |
5892 | which-module "^2.0.0" | 6025 | which-module "^2.0.0" |
5893 | y18n "^3.2.1" | 6026 | y18n "^4.0.0" |
5894 | yargs-parser "^7.0.0" | 6027 | yargs-parser "^13.1.2" |
5895 | |||
5896 | yargs@~3.10.0: | ||
5897 | version "3.10.0" | ||
5898 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" | ||
5899 | integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= | ||
5900 | dependencies: | ||
5901 | camelcase "^1.0.2" | ||
5902 | cliui "^2.1.0" | ||
5903 | decamelize "^1.0.0" | ||
5904 | window-size "0.1.0" | ||